Feb 28, 2006

Geocoded Livedoor Weather RSS

livedoorのWeather Hacks、良いのですが、なぜgeo vocabularyが付いていないのでしょうか? だって天気情報とか地震情報って地理情報でしょう?

Weather Hacks - livedoor 天気情報

なんだかな~と思ったので、geo vocabularyを付加するサービスをでっち上げてみることにしました。とりあえずのプロトタイプとして、「http://as-is.net/maps/geolwws.fcgi?url=RequestURL」てな感じでlivedoor WeatherのRSS URLを渡すと、geo vocabulary付きのRSSを返すものを作ってみました。

http://weather.livedoor.com/forecast/rss/index.xml

http://as-is.net/maps/geolwws.fcgi?url=http://weather.livedoor.com/forecast/rss/index.xml

今のところlivedoor Weatherが提供しているRSSのうち、ldWeather:lwws要素を含むものにしか対応していません。geolwws.fcgiに渡すRequestURLはURL encodingされているべきですが、単にRSSのURLを渡す分にはencodeしなくても構いません。

geo vocabularyが付いているとどんなご利益があるかと言えば、何はさておきマッピングサービスとの統合が簡便に実現できるということです。例えば、Ogawa::Buzz: georss2kml.cgi: GeoRSSをGoogle Earthにマップするスクリプトを使って、天気情報をGoogle Earthにオーバーレイすることができます。

http://as-is.net/maps/georss2kml.cgi?url=...

georss2kmlをもう少しいじらないと見栄え的にアレですが...。

上でも書きましたが、ldWeather:lwss要素を含まないRSSは変換できません。今のところ、livedoor Weatherが提供するRSSのうち、(1)特定の地点の時系列データを表すRSS、(2)防災情報やアメダスのデータを表すRSSには、ldWeather:lwws要素が付加されていません。

(1)については、特定の地点ですからgeo vocabularyを与えることはできます。ただし、それが意味があるかどうかは微妙なところです。(2)については、天気情報と地域区分の方法やレベルが異なるために難しいです。例えば、アメダスは、天気情報の区分(全国の地点定義表)よりずっと細かい行政区に対する情報が与えられています。これらのすべての地点の座標情報を与えるのは、個人ではほとんど不可能だなあという印象です(だからこそ、本当はlivedoor Weatherで対応して欲しい)。

また、このプロトタイプの自然な拡張としては、RESTを利用したlivedoor Weather APIの出力結果にもgeo vocabularyを付加するというものがあるでしょう。もちろん、リクエストをまともにこなすことやAPIの持つ定義域・値域の膨大さを考えたら、このようなゲートウェイサービスを作るよりは、上流(livedoor Weather)か下流(クライアント)で付加する方が現実的、というのが妥当な判断だと思いますが...。

Feb 26, 2006

最近のぬか喜び

最近絵に描いたような「ぬか喜び」体験をしてしまったのでここに書いておくことにしよう。

United Mileage Plusからこんなメールが来た。

From: United Mileage Plus <United_Mileage_Plus@email.united.com>
Reply-To: UnitedMileagePlus.XXXXXXXXX.XX@email.united.com
To: Hirotaka Ogawa <mymail@gmail.com>
Date: Feb 24, 2006 8:23 AM
Subject: お客さまの2006年のエリート資格についての大切なお知らせ
 
Ogawa Hirotaka 様
 
ユナイテッド航空ではお客さまの格別のご愛顧に感謝し、最も大切なお客さまの一人としてお迎え
できますことを大変嬉しく思っております。お客さまが現在お持ちのスターアライアンスTM・ゴー
ルドのロゴマークがついたプレミア・エグゼクティブ®会員カードは2007年2月28日まで有効です。
引き続きご利用いただき、ユナイテッド航空、ユナイテッド・エクスプレス®、TedSMおよび スター
アライアンス航空会社をご利用の際に、さまざまな特典をお楽しみください。

よく分からないが、プレミア・エグゼクティブにしてくれるらしい。

…なアホな話があるかよ! 去年はNRT-SEA往復9538マイルしか搭乗してねえよ!!
General Member舐めんなっ!!!

と何かの間違いと強く確信しつつも何となく嬉しく、にやにやするのであった。

そして、翌日。

From: United Mileage Plus <United@email.united.com>
Mailed-By: email.united.com
Reply-To: UnitedMileagePlus.XXXXXXXXX.XX@email.united.com
To: Hirotaka Ogawa <mymail@gmail.com>
Date: Feb 25, 2006 9:33 AM
Subject: An apology from United
 
Dear Mileage Plus member, 
 
You received an e-mail intended for some of our elite members in 
Japan. Please disregard this e-mail. 
 
We apologize for any confusion this may have caused you. Rest 
assured that the privacy of your account has not been compromised 
in any way. If you have any questions regarding your account, 
please do not hesitate to contact Mileage Plus. 
 
Thank you for your understanding in this matter. 

ううぇうぇ~ん。 何かの間違いだと確信していても、ガックリ来るもんだね。

最近は金でマイルを買えるのでプレミアエグゼクティブになるのも難しくないらしいけどね。

Feb 25, 2006

TypeKeyのプロファイルページ

最近になって気が付いたのですが、TypeKeyのプロファイルページ(http://profile.typekey.com/username/)にアクセスすると「404 Not Found」になってしまうユーザが結構いらっしゃるご様子。

どういうことなのでしょう? TypeKeyのアカウント設定画面ではプロファイルを非表示するオプションなどは特段用意されていませんから、TypeKey運営側の何らかのミスのような気がします。SixApart関係者でこのエントリをお読みの方は対策をご検討いただければと思います。

それとは関係ありませんが、時間が許せばSix Apart ユーザーギャザリングvol.2に参加する予定です。

Feb 24, 2006

Google Page Creator

digg.comに載ってすぐに反応したおかげか私も試すことができた。

Google Page Creator

けど…私の出力インタフェースとGoogle Page CreatorのWYSIWYGインタフェースの相性が最悪なため、よく分からない、というか使いこなせない。Microsoft Word並みに難しい。

Ajaxを抜きにすると、こうしたWeb Editorサービスというのは割とざらにある(例えば、ウェブエディタ woopa!)のだが、あまり広く受け入れられているようには見えない。Google Page Creatorにしてもこれらのpredecessorに比べて格別革新的とも思えないし、それゆえにそんなに魅力あるプロダクトには思えない。私の感覚では、むしろブログや日記以外のWebページをパーソナルな目的で制作したいという需要自体がニッチである、というのが現状だと思う。私自身はそういうニッチユーザではないので、プロダクトとして公正に評価するには、日常的にホームページ・ビルダーを使っているようなユーザが使ってみるのが一番良いだろう。

さて、以下はついでの与太話。

よくGoogleのアクティビティに関してWeb 1.0的か2.0的かという観点で述べている論を見かける。類似の例としては、Googleがコンテンツを抱え込もうとしている/いない論もある。しかし、それらの議論はナンセンスに思える。

単にGoogleはユーザが消費するだけの価値のあるものを提供している…大抵の場合。提供の形態がWeb上のサービスであってユーザのインタラクションを必要とするものならより集約的に、そうでなければ当然より分散的になるというだけである。2.0的かそうでないかというのは後付けの観測に過ぎない。また集約的であれば、コンテンツを抱え込まざるを得ないのは明らかだろう、メールにしろ、データベースにしろ、Webページにしろ。…「2.0言うなキャンペーン」とかまじで誰かやってないの?

Page Creatorみたいな直線的なプロダクトは、Googleが単純にアプリケーションサービスを提供している会社であるという事実を再認識させてくれるという意味で有意義だと思った、という次第(ironical過ぎる?)。

Feb 22, 2006

さくらの専用サーバ環境のApache設定

phpMyAdminとかPostfix Adminを素で使うのはなんだかなと思ったので、www/apache13からwww/apache13-modsslに入れ替え。

www/apache22にしても良かったのだが、そうするとmod_fastcgiが使えない。正確にはパッチがあって使えるのだが、portsだけで済まない。www/lighttpdにするという手もあるけど。

# cd /usr/ports/www/apache13-modssl
# make
# make certificate (証明書を作る)
# pkg_delete apache-1.3.XX (コンフリクトするwww/apache13をアンインストール)
# make install
# pkgdb -F (php5とmod_fastcgiのようにwww/apache13に依存していたpackage db情報を修正)
# portupgrade -f php5 mod_fastcgi (この2つはインストールし直す)

http://sec.domain.tld/にアクセスしたらhttps://sec.domain.tld/にリダイレクトするには、他のVirtualHostの設定に並べて以下のように記述する。

<VirtualHost *:80>
    ServerName sec.domain.tld
    ServerAdmin root@domain.tld
    Redirect / https://sec.domain.tld/
</VirtualHost>

上の方法でインストールされるServer Certificateは、なんちゃってCAやおれおれCAで署名したものになるわけだけど、どうせならCAcert.orgに署名してもらったものをインストールした方がよいだろう。

すでになんちゃってCAで署名したCertificateがあるのなら、その元となるCSRも/usr/local/etc/apache/ssl.csr/server.csrに見つかるはず。作り直したいという場合にも、opensslコマンドを使って安直に以下のようにすればよい。

# cd /usr/local/etc/apache
# openssl genrsa -rand /dev/random -out ssl.key/server.key 1024
# openssl req -new -key ssl.key/server.key -out ssl.csr/server.csr
# chmod 400 ssl.key/server.key ssl.csr/server.csr

このCSRを使ってCAcert.orgに署名してもらい、もらったCertificateでssl.crt/server.crtを置き換え、chmod 400しておけばよい。

2006-08-15追記:

Apache 2.2.3にアップデートしたときのメモ。
/usr/local/etc/pkgtools.confのMAKE_ARGSのところに以下のように追加。

  MAKE_ARGS = {
    'www/apache22' => [
      'WITH_PROXY_MODULES=yes',
      'WITH_BERKELEYDB=db42',
    ],
    'devel/subversion' => [
      '-DWITH_PERL',
      '-DWITH_PYTHON',
      '-DWITH_MOD_DAV_SVN',
    ],
  }

しかる後に、portupgrade apache subversion。

ニュー秋葉原

ちょっと聞いてもらいたい。オフィスが秋葉原に移って一年近く経ったのだが、いまいちアキバライフをエンジョイできていないのだ。大学の一二年の頃、若松とか秋月電子とか千石電商とか日米商事とかに通っていたウキウキウェイクミーアップでな感覚がちっとも戻ってこないのだ。かつてのようにジャンク品に興味はないし、ヨドバシに行っても人ばっかり多くて楽しくもない。中古CD屋は昔からそうだったけど品揃えが悪いか著しい偏りがあるのでいつも役に立つわけではないし。飯屋もかつてのことを考えれば随分増えたけど、それでも増えたのはパッケージ化されたチェーンレストランばっかり。わざわざ食事に出かけようという気も起きない。行ってもいいがそれなりのエクスペリエンスしか得られないし、見つけにくいお店をわざわざ発見したという喜びもない。なんだかんだで駅前で手早く済ますか、昔からあるジャイヒンドや仙波や志な乃やじゃんがらや肉の万世に行くのが費用対効果の点ではよい。ちょっと離れているけど山本屋総本家が近年できていたりして密かに再開発の恩恵を享受しているのも確かなのだが、毎日は食べられないよなやっぱり。東武なんとか線やつくばエキスプレスや総武線沿線住民にとっては、地元にはない都市機能を秋葉原に発見して毎日それなりの高揚感があるのかもと思わないではない。けれども毎日渋谷・表参道・新橋・銀座・日本橋などを通過してこの地を訪れている私は秋葉原ならではと言える都市の機能をいまだに発見していない、とそう言っている私は生粋の地方出身者であるわけだけど。話がずれたけど、JR駅の電気街口には平日の昼間から「散歩の達人」あたりを携えてこれから秋葉原散策にでもしけこもうかというおばちゃんの集団を目撃しない日はない。夕刻にはダイビルの前で決して日の目を見ることはない大深度地下系アイドルがカラオケを歌い、それを囃す個人・集団もいる。つい先日は日曜日に出勤したら中央通りの歩行者天国が惨憺たる様相を呈していて、ここはかつての代々木公園なのかよそれはどうよと吐き出さずにはいられなかった。はとバスで歌舞伎町のホストクラブと秋葉原のメード喫茶を周るツアーも既にあるかいずれはできるはずでこの地の歓楽を安易に享受する者はますます増えることはもう疑う余地がない。そうしたアクティビティとそれに興ずる者を見るにつけ、ああ私は決してあの中には入れないのだという疎外感を覚えずにはいられない。秋葉原をエンジョイできていないというのはつまりそういうことだ。手順を大幅に省略すれば、早い話、一人でメード喫茶にでも行けばよいのかもしれない。そうして金払ってあっち向いてホイでも何でもして店員の愛想笑いを観てくればよいのかもしれない。当節そんなものはハンバーガー屋やコンビニでも観られるんだよという事実をひとまず忘れることにして。そうすれば何かが得られるのかもしれない。けれども私には無理、一人でボウリングに行くくらいそれはもう絶対無理だっていう気がする。今日も嘆息しつつオフィスを後にする。

「人生守りに入っているのではないか」という意味のコメントが…。そうかもしれん、実現男を見習わねば…。

Feb 21, 2006

さくらの専用サーバ環境のメール設定

そろそろメールの設定もしておこうかと思った。完成形としてはPostfix + PostfixAdmin + Courier-IMAPという感じ。最小の手数での動作を目指す。

メールの設定(Postfix Admin編)

まずはpostfixadminをインストールし、MySQL上にデータベースを作成する。

$ cd /usr/ports/mail/postfixadmin; make install clean
$ cd /usr/local/www/postfixadmin
$ mysql -uroot -p < DATABASE_MYSQL.TXT

データベースはpostfixという名前で、ユーザ名postfix、パスワードpostfixでアクセスできるように設定されている。変更したい場合にはDATABASE_MYSQL.TXTに適宜変更を加えてから読み込むという方法と、phpMyAdminなどを使って変更する方法がある。

/usr/local/www/postfixadmin/config.inc.phpを適宜編集する。いろいろ変更することも可能だが、変更を最小限に留めたければ、change-this-to-your.domain.tldとなっている部分を自分のドメイン名に変更するだけでよい。

/usr/local/www/postfixadmin/admin/.htaccessを若干修正。オリジナルには脆弱性がある。

 --- .htaccess.bak       Sun Feb 19 03:18:10 2006
 +++ .htaccess   Tue Feb 21 11:58:26 2006
 @@ -3,6 +3,4 @@
  AuthName "Postfix Admin"
  AuthType Basic
 
 -<limit GET POST>
  require valid-user
 -</limit>

/usr/local/www/postfixadmin/admin/.htpasswdにパスワードを登録しなおす。デフォルトはadmin:adminになっていて誰でもクラックできるので要注意。

# cd /usr/local/www/postfixadmin/admin
# mv .htpasswd .htpasswd.bak
# htpasswd -c -m .htpasswd name

httpd.confの適切な箇所に以下を追加する。

Alias /postfixadmin/ "/usr/local/www/postfixadmin/"
<Directory "/usr/local/www/postfixadmin">
        Options Indexes
        AllowOverride AuthConfig
</Directory>

apachectl restartしてapacheを再起動し、/postfixadmin/setup.phpをブラウザでアクセスしてセットアップの確認を行う。問題がなければ、setup.phpを削除またはリネームした上で、admin sectionにアクセスして初期設定を行う。

使い方に関してはグーグルに聞くこと。

メールの設定(Postfix編)

インストール

まず、/usr/port/mail/postfixでmake installする。私がインストールしたバージョンは2.2.8_2,1である。コンパイルオプションをいろいろ聞かれるが、ここでの設定を行うには、少なくともMySQLがenableになっていなければならない。

設定

無事にインストールできたら、/usr/local/etc/postfix/main.cfの末尾に以下をざっくり追加する。

mydomain = your.domain.name
myorigin = $mydomain
mydestination =
local_transport = virtual
mynetworks_style = host
mynetworks = 59.106.XXX.XXX 127.0.0.1
home_mailbox = Maildir/
alias_maps =
alias_databases =
 
virtual_alias_maps = mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_base = /var/mail
virtual_mailbox_domains = mysql:/usr/local/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_limit = 51200000
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 125
virtual_uid_maps = static:125
virtual_gid_maps = static:6
virtual_transport = virtual
 
# Additional for quota support
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes

この設定では、Maildir形式のメールスプールが/var/mail/username@my.domain/というディレクトリに作られる。/var/mailのもともとのパーミッションに合わせて、ユーザpostfix(UID=125)、グループmail(GID=6)の権限で書き込むように設定している。/etc/passwd, /etc/groupを見て異なる値になっていたらその値に合わせる必要がある。

次にmain.cfで使っている4つのmysql_virtual_XX.cfファイルを用意する。各々の内容は以下の通り。

mysql_virtual_alias_maps.cf
user = postfix (データベースのユーザ名)
password = postfix (データベースのパスワード)
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active='1'
mysql_virtual_domains_maps.cf
user = postfix (データベースのユーザ名)
password = postfix (データベースのパスワード)
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s'
#optional query to use when relaying for backup MX
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx='0' AND active='1'
mysql_virtual_mailbox_maps.cf
user = postfix (データベースのユーザ名)
password = postfix (データベースのパスワード)
hosts = localhost
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' and active='1'
mysql_virtual_mailbox_limit_maps.cf
user = postfix (データベースのユーザ名)
password = postfix (データベースのパスワード)
hosts = localhost
dbname = postfix
query = SELECT quota FROM mailbox WHERE username='%s'

4つのファイルを作ったらmysql_virtual_XX.cfを人様に見られないようにchmod & chgrpしておく。

# chmod 640 mysql_*
# chgrp postfix mysql_*

SASLの設定などは後からでもできるので省略。

起動の設定

/etc/rc.confに以下の行を追加する。

postfix_enable="YES"
sendmail_enable="NONE" ("NO"ではなくて"NONE")

/etc/periodic.confに以下の行を追加する(なければ新規に作る)。

daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"

sendmailがまだ動いていたら停止+postfixをおもむろに起動。

# /etc/rc.d/sendmail stop
# /usr/local/etc/rc.d/postfix.sh start

メールの設定(Courier-IMAP編)

インストール

portinstallを使ってcourier-imapをインストールする。

$ portinstall -P courier-authlib-base courier-authlib-mysql courier-imap

Authdaemonの設定

/usr/local/etc/authlib/authdaemonrcを修正する。デフォルトでも問題ないかもしれないが、Postfix Adminで設定したアカウントだけでメールを授受するには以下のように設定する。

 --- authdaemonrc.dist   Tue Feb 21 09:06:33 2006
 +++ authdaemonrc        Tue Feb 21 09:20:18 2006
 @@ -27 +27 @@
 -authmodulelist="authuserdb authvchkpw authpam authldap authmysql authpgsql"
 +authmodulelist="authmysql"

/usr/local/etc/authlib/authmysqlrcも修正する。postfixの設定では、メールスプールが/var/mail/username@my.domain/というディレクトリに作られるようにしていた。下記は、/var/mail/username@my.domain/以下にあるメールスプールをユーザpostfix(UID=125)、グループmail(GID=6)の権限で読み書きするように設定している。

 --- authmysqlrc.dist    Tue Feb 21 09:08:13 2006
 +++ authmysqlrc Tue Feb 21 17:59:57 2006
 @@ -26,3 +26,3 @@
 -MYSQL_SERVER           mysql.example.com
 -MYSQL_USERNAME         admin
 -MYSQL_PASSWORD         admin
 +MYSQL_SERVER           localhost
 +MYSQL_USERNAME         postfix (データベースのユーザ名)
 +MYSQL_PASSWORD         postfix (データベースのパスワード)
 @@ -54 +54 @@
 -MYSQL_DATABASE         mysql
 +MYSQL_DATABASE         postfix
 @@ -61 +61 @@
 -MYSQL_USER_TABLE       passwd
 +MYSQL_USER_TABLE       mailbox
 @@ -70 +70 @@
 -MYSQL_CRYPT_PWFIELD    crypt
 +MYSQL_CRYPT_PWFIELD    password
 @@ -91 +91 @@
 -MYSQL_UID_FIELD                uid
 +MYSQL_UID_FIELD                '125'
 @@ -97 +97 @@
 -MYSQL_GID_FIELD                gid
 +MYSQL_GID_FIELD                '6'
 @@ -106 +106 @@
 -MYSQL_LOGIN_FIELD      id
 +MYSQL_LOGIN_FIELD      username
 @@ -111 +111 @@
 -MYSQL_HOME_FIELD       home
 +MYSQL_HOME_FIELD       '/var/mail/'
 @@ -128 +128 @@
 -# MYSQL_MAILDIR_FIELD  maildir
 +MYSQL_MAILDIR_FIELD    maildir

Courier-IMAPの設定

Courier-IMAPでは、pop3d, pop3d-ssl, imapd, imapd-sslの4つのアクセスメソッドが用意されている。-sslが付いているのは通信経路が暗号化されるが、暗号化のために必要な証明書に(お金を払いたくなければ)自己署名しなくてはならない。また、自己署名した証明書を使ったpop3d-ssl, imapd-sslに対して接続のたびにWarningを表示するようなメーラーもままある。

つまり、私が言いたいのは「面倒だからpop3dとimapdの設定だけここではする。-sslが使いたければ後で考える。」ということだ。

Courier-IMAPの設定ファイルは/usr/local/etc/courier-imap以下にあるが、ここでは何も変更しないでおく。何もしなくてもpop3とimapdは使えるからだ。

起動の設定

次に/etc/rc.confに以下の行を追加する。

courier_authdaemond_enable="YES"
courier_imap_imapd_enable="YES"
courier_imap_imapd_ssl_enable="NO"
courier_imap_pop3d_enable="YES"
courier_imap_pop3d_ssl_enable="NO"

最後に必要なデーモンを起動する。

# /usr/local/etc/rc.d/courier-authdaemond.sh start
# /usr/local/etc/rc.d/courier-imap-pop3d.sh start
# /usr/local/etc/rc.d/courier-imap-imapd.sh start

メールの設定(Postfix編SMTP-Auth対応)

ここまで説明した設定では、mynetworksに指定したホストからしかメールの送信を行えない。mynetworksに自分の使用するすべてのIPアドレスを指定しておくのも一つの解だが、ここではSMTP-Auth対応にする方法を述べる。

まず、postfixをインストールする際にSASL2とMySQLがenableにしてあるものとする。また、上の設定はすでに行ってあるものとする。

/usr/local/etc/postfix/main.cfの末尾に以下の設定を追加する。

# SMTP-Auth and TLS
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
smtpd_recipient_restrictions = permit_mynetworks,
    permit_sasl_authenticated, reject_unauth_destination
broken_sasl_auth_clients = yes

次に/usr/local/lib/sasl2/smtpd.confというファイルを作る。内容は以下の通り。

pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path: /var/run/authdaemond/socket

さらにsmtpd(postfixユーザ権限で動作する)が/var/run/authdaemond/socketにアクセスできるようにする必要がある。安直にこれを実現するには、/var/run/authdaemondディレクトリのパーミッションを緩めに設定する方法とpostfixユーザをcourierグループに追加する方法がある。前者の方がセキュリティ上のインパクトが大きい。後者を実現するには/etc/groupのcourierグループにpostfixを追加すればよい。

 --- group.bak   Thu Feb 23 21:13:19 2006
 +++ group       Thu Feb 23 21:14:04 2006
 @@ -32 +32 @@
 -courier:*:465:
 +courier:*:465:postfix

以上の設定が済んだら、/usr/local/etc/rc.d/postfix.sh restartしてpostfixを再起動する。

ちなみに以上で説明したようにpwcheck_methodでauthdaemondを指定するには、cyrus-sasl2がWITH_AUTHDAEMONオプション付きでコンパイルされている必要がある。ただし、courier-authlibが先にインストールされていれば、オプションを明示的に設定されていなくても有効になる。うまく動かない場合にはcyrus-sasl2をインストールし直すことをお勧めする。

メーラーの設定はグーグルで調べること。残るは、pop3d, imapd, smtpdのTLS対応。

Feb 18, 2006

さくらの専用サーバ環境のDNS設定

つづいて、ホスト名の変更とDNSの登録。

ホスト名の変更

さくらの専用サーバのデフォルトのホスト名はwww.my.domainという名前になっているので、これを変更しておく。

まず、/etc/rc.confのhostnameを変更する。

hostname="sakura.as-is.net"

次に/etc/hostsを変更して再起動すればよい。

59.106.XX.XX            sakura.as-is.net sakura
59.106.XX.XX            sakura.as-is.net.

sysinstallコマンドを使って変更することもできる。

DNSへの登録

DNSへの登録は、自分で専用サーバ上にBIND9を設定してもよいが、1個のサーバしか借りていない場合には、Primary ServerとSecondary Serverの両方は提供できないし、設定ミスによってセキュリティホールを作りがちでもある。できれば信頼性の高いサービスにアウトソースしたいところ。

さくらの専用サーバのオプションサービスを利用したり、レジストラのDNSサービスを利用したりすることもできるが、一般的には有料だったり、ムームードメインのようにDNSサービスを提供していない場合もある。

私の場合にはZoneEditを使って設定してみた。5ゾーンまでで常識的な使い方をしていれば無料で済む(はずの)サービスで、信頼性もあるようだ。

http://www.zoneedit.com/

WebForwards、MailForwards、WebParkの機能はよく分からないので使わない。

設定を無事に済ませ、レジストラでNSレコードをZoneEditの2つのサーバに設定し、十分時間が経つと、DNSの設定は完了である。心配ならばDNS Reportのページで設定を確認しておくとよい。

http://www.dnsreport.com/

それにしてもiTSCOMのDNSサーバはいつもながら反映が遅いね。

/etc/resolv.confの変更

domain as-is.net
nameserver 210.188.XXX.XXX
nameserver 210.188.XXX.XXX

ZoneEditのTTL

ZoneEditの管理画面の「Configure SOA」から「Time To Live」を変更できる。デフォルト値が7200秒になっているのだが、これってDefault TTLとしては短すぎないか、とふと思った。

nslookup -q=soaしてみた。

$ nslookup -q=soa as-is.net
Server:         210.188.XXX.XXX
Address:        210.188.XXX.XXX#53
 
Non-authoritative answer:
as-is.net
        origin = ns2.zoneedit.com
        mail addr = soacontact.zoneedit.com
        serial = 1140208302
        refresh = 14400
        retry = 7200
        expire = 950400
        minimum = 7200

ZoneEditの「Time To Live」ってMinimum TTLのことなのか。Default TTLはどうなっているのだろう。

MySQLの移行

DNSが思いのほか早く切り替わってしまったので慌ててMySQLの移行をした。

転送元でまずDBをダンプして転送先にscpでコピーしておく。転送元ではMySQL 4.1.18を使っていたので「--default-character-set=binary」付きでダンプしなければならない。このオプションを付けておかないとダンプデータに「SET NAMES utf8」というpragmaが付いてしまい、リストア時に嵌る。

 $ mysqldump --default-character-set=binary
     -uUserName -pPassword DBname > DBname.dump
 $ scp DBname.dump 59.106.XX.XX: (scpでさくらの専用サーバに転送)

転送先では、新規データベースとユーザの設定をしておく。phpMyAdminを使って設定するのが簡単。設定が済んだら以下のようにしてダンプデータをDBに読み込んでおく。

 $ mysql -uUserName -pPassword DBName < DBname.dump

DBが複数ある場合にはこれらの作業を順次行えばよい。

Feb 16, 2006

さくらの専用サーバ環境の初期設定

昨日さくらの専用サーバのアカウントが来たのでちょっと頑張ってみた。

前準備

  • sshでadminユーザでログイン
  • suしてrootになり、passwdコマンドでrootパスワードを変更。
  • adduserで自分ユーザアカウントを作り、wheelグループに自分を追加。
  • /etc/inetd.confを編集してtelnet, ftp, pop3をコメント。(telnet, ftpは危険なので使わないため。pop3はさくらではqpopperを使うように設定されているが、どちらかと言えばcourier-imapのpop3dを使いたい。したがってinetd.confで起動する必要はない。)
  • inetdの再起動。 # /etc/rc.d/inetd status (inetdのpidを確認) # kill -HUP (inetdをリロード)
  • /etc/rc.confを編集してapache_enableとdracd_enableとwebmin_enableをNOに変更。
  • apacheとdracdとwebminを停止。
     # /usr/local/etc/rc.d/apache.sh stop
     # /usr/local/etc/rc.d/dracd.sh stop
     # /usr/local/etc/rc.d/webmin.sh stop
    

6.0へのアップグレード

sysinstallで一度6.0-Releaseにアップグレードしてからfreebsd-updateでセキュリティアップデートしようかと思ったのだが、baseがインストールできずに「Write Failure on transfer ...」とか怒られる。いろいろ調べてみたが、意味が分からない。sysinstallがディスクの空き容量の見積もりを誤っているのか、chrootしようとして失敗しているのか。しかたがないのでひとつ前のエントリーで書いた方法でやることにした。

まずは/usr/src,/usr/objをバックアップ。

 # cd /usr
 # tar cfj sakura_kernel.tar.bz2 src obj

前のエントリーで書いていたように、cvsupでソースを取ってきてbuild & installする。

カーネルはGENERICで構わない。さくらの専用サーバのカーネル(/usr/src/sys/i386/conf/DEDIに定義されている)はGENERICからいくつかのドライバを除いて、カーネル変数のデフォルト値を若干変更しただけ。前者は無害だし、後者はsysctlコマンドで制御できそうなもの。

くれぐれもmergemasterは細心の注意を払って実行すること。特に/etc/passwd, /etc/master.passwd, /etc/group, /etc/sshd_configは慎重に。

きれいな体を目指して

祈る気持ちで一旦再起動する。無事再起動してきたら、同じく前のエントリーの要領でcompat5xをインストール。ldconfigを忘れずに行うこと。

続いて5.4のファイルをパージする。だいたい以下のファイルは消してもよいはずだが確約はできない。

 /lib:
 total 3136
 -r--r--r--  1 root  wheel    50024 Feb  2 08:04 libalias.so.4
 -r--r--r--  1 root  wheel    10720 Feb  2 08:04 libatm.so.2
 -r--r--r--  1 root  wheel     8452 Feb  2 08:04 libbegemot.so.1
 -r--r--r--  1 root  wheel   122620 Feb  2 08:04 libbsdxml.so.1
 -r--r--r--  1 root  wheel    50072 Feb  2 08:04 libbsnmp.so.2
 -r--r--r--  1 root  wheel   884716 Feb  2 08:04 libc.so.5
 -r--r--r--  1 root  wheel    55952 Feb  2 08:04 libcam.so.2
 -r--r--r--  1 root  wheel    28644 Feb  2 08:04 libcrypt.so.2
 -r--r--r--  1 root  wheel  1017424 Feb  2 08:05 libcrypto.so.3
 -r--r--r--  1 root  wheel    18548 Feb  2 08:04 libdevstat.so.4
 -r--r--r--  1 root  wheel    79976 Feb  2 08:04 libedit.so.4
 -r--r--r--  1 root  wheel    13148 Feb  2 08:04 libgeom.so.2
 -r--r--r--  1 root  wheel     7708 Feb  2 08:04 libgpib.so.0
 -r--r--r--  1 root  wheel    23208 Feb  2 08:04 libipsec.so.1
 -r--r--r--  1 root  wheel     5764 Feb  2 08:04 libipx.so.2
 -r--r--r--  1 root  wheel     8336 Feb  2 08:04 libkiconv.so.1
 -r--r--r--  1 root  wheel    20228 Feb  2 08:04 libkvm.so.2
 -r--r--r--  1 root  wheel   120004 Feb  2 08:04 libm.so.3
 -r--r--r--  1 root  wheel    38952 Feb  2 08:04 libmd.so.2
 -r--r--r--  1 root  wheel   259916 Feb  2 08:04 libncurses.so.5
 -r--r--r--  1 root  wheel   174652 Feb  2 08:04 libreadline.so.5
 -r--r--r--  1 root  wheel     5544 Feb  2 08:04 libsbuf.so.2
 -r--r--r--  1 root  wheel     9328 Feb  2 08:04 libufs.so.2
 -r--r--r--  1 root  wheel    43100 Feb  2 08:04 libutil.so.4
 -r--r--r--  1 root  wheel    61812 Feb  2 08:04 libz.so.2
 
 /sbin:
 total 880
 -r-x------  1 root  wheel  485892 Feb  2 08:05 init.bak
 -r-xr-xr-x  1 root  wheel  301200 Feb  2 08:05 omshell
 -r-xr-xr-x  1 root  wheel   64796 Feb  2 08:05 vinum
 
 /usr:
 total 8
 drwxr-xr-x  2 root  wheel   512 Feb 16 15:16 bin
 drwxr-xr-x  3 root  wheel  2048 Feb 16 15:22 lib
 drwxr-xr-x  2 root  wheel   512 Feb 16 15:25 libexec
 drwxr-xr-x  2 root  wheel   512 Feb 16 15:17 sbin
 
 /usr/bin:
 total 128
 -r-xr-xr-x  1 root  wheel  130556 Feb  2 08:05 gtar
 
 /usr/lib:
 total 4298
 drwxr-xr-x  2 root  wheel    1536 Feb 16 15:21 compat
 -r--r--r--  1 root  wheel   97312 Feb  2 08:04 libarchive.so.1
 -r--r--r--  1 root  wheel  132788 Feb  2 08:05 libasn1.so.7
 -r--r--r--  1 root  wheel    6596 Feb  2 08:04 libbluetooth.so.1
 -r--r--r--  1 root  wheel   62308 Feb  2 08:04 libbz2.so.1
 -r--r--r--  1 root  wheel  102568 Feb  2 08:04 libc_r.so.5
 -r--r--r--  1 root  wheel    5660 Feb  2 08:04 libcalendar.so.2
 -r--r--r--  1 root  wheel    5544 Feb  2 08:04 libcom_err.so.2
 -r--r--r--  1 root  wheel    7048 Feb  2 08:04 libdevinfo.so.2
 -r--r--r--  1 root  wheel   92592 Feb  2 08:04 libdialog.so.4
 -r--r--r--  1 root  wheel   44288 Feb  2 08:04 libfetch.so.3
 -r--r--r--  1 root  wheel   43012 Feb  2 08:04 libform.so.2
 -r--r--r--  1 root  wheel   18416 Feb  2 08:04 libftpio.so.5
 -r--r--r--  1 root  wheel  113248 Feb  2 08:04 libg2c.so.1
 -r--r--r--  1 root  wheel   32676 Feb  2 08:04 libgnuregex.so.2
 -r--r--r--  1 root  wheel   57452 Feb  2 08:05 libgssapi.so.7
 -r--r--r--  1 root  wheel   45936 Feb  2 08:05 libhdb.so.7
 -r--r--r--  1 root  wheel   24540 Feb  2 08:04 libhistory.so.5
 -r--r--r--  1 root  wheel   27880 Feb  2 08:05 libkadm5clnt.so.7
 -r--r--r--  1 root  wheel   45160 Feb  2 08:05 libkadm5srv.so.7
 -r--r--r--  1 root  wheel   14544 Feb  2 08:05 libkafs5.so.7
 -r--r--r--  1 root  wheel  225860 Feb  2 08:05 libkrb5.so.7
 -r--r--r--  1 root  wheel   52848 Feb  2 08:04 libmagic.so.1
 -r--r--r--  1 root  wheel   23364 Feb  2 08:04 libmenu.so.2
 -r--r--r--  1 root  wheel   39312 Feb  2 08:04 libmilter.so.2
 -r--r--r--  1 root  wheel    9752 Feb  2 08:04 libmp.so.4
 -r--r--r--  1 root  wheel   46060 Feb  2 08:04 libncp.so.1
 -r--r--r--  1 root  wheel   12168 Feb  2 08:04 libnetgraph.so.1
 -r--r--r--  1 root  wheel  348404 Feb  2 08:04 libngatm.so.1
 -r--r--r--  1 root  wheel   33100 Feb  2 08:04 libopie.so.3
 -r--r--r--  1 root  wheel   25800 Feb  2 08:04 libpam.so.2
 -r--r--r--  1 root  wheel   11828 Feb  2 08:04 libpanel.so.2
 -r--r--r--  1 root  wheel  142956 Feb  2 08:04 libpcap.so.3
 -r--r--r--  1 root  wheel  136020 Feb  2 08:04 libpthread.so.1
 -r--r--r--  1 root  wheel   17220 Feb  2 08:04 libradius.so.1
 -r--r--r--  1 root  wheel   53972 Feb  2 08:05 libroken.so.7
 -r--r--r--  1 root  wheel   30756 Feb  2 08:04 librpcsvc.so.2
 -r--r--r--  1 root  wheel   15152 Feb  2 08:04 libsdp.so.1
 -r--r--r--  1 root  wheel   41324 Feb  2 08:04 libsmb.so.1
 -r--r--r--  1 root  wheel  194148 Feb  2 08:05 libssh.so.2
 -r--r--r--  1 root  wheel  188144 Feb  2 08:05 libssl.so.3
 -r--r--r--  1 root  wheel  834584 Feb  2 08:04 libstdc++.so.4
 -r--r--r--  1 root  wheel   15908 Feb  2 08:04 libtacplus.so.1
 -r--r--r--  1 root  wheel  282336 Feb  2 08:04 libthr.so.1
 -r--r--r--  1 root  wheel   19168 Feb  2 08:04 libthread_db.so.1
 -r--r--r--  1 root  wheel    9932 Feb  2 08:04 libugidfw.so.1
 -r--r--r--  1 root  wheel   10524 Feb  2 08:04 libusbhid.so.1
 -r--r--r--  1 root  wheel   26300 Feb  2 08:04 libvgl.so.3
 -r--r--r--  1 root  wheel   26820 Feb  2 08:04 libwrap.so.3
 -r--r--r--  1 root  wheel     738 Feb  2 08:04 libxpg4.a
 lrwxrwxrwx  1 root  wheel      12 Feb 15 08:57 libxpg4.so -> libxpg4.so.3
 -r--r--r--  1 root  wheel    2952 Feb  2 08:04 libxpg4.so.3
 -r--r--r--  1 root  wheel   14968 Feb  2 08:04 libypclnt.so.1
 -r--r--r--  1 root  wheel    4516 Feb  2 08:04 pam_chroot.so.2
 -r--r--r--  1 root  wheel    3548 Feb  2 08:04 pam_deny.so.2
 -r--r--r--  1 root  wheel    4268 Feb  2 08:04 pam_echo.so.2
 -r--r--r--  1 root  wheel    4588 Feb  2 08:04 pam_exec.so.2
 -r--r--r--  1 root  wheel    4632 Feb  2 08:04 pam_ftpusers.so.2
 -r--r--r--  1 root  wheel    4020 Feb  2 08:04 pam_group.so.2
 -r--r--r--  1 root  wheel    4212 Feb  2 08:04 pam_guest.so.2
 -r--r--r--  1 root  wheel   17012 Feb  2 08:04 pam_krb5.so.2
 -r--r--r--  1 root  wheel    7324 Feb  2 08:04 pam_ksu.so.2
 -r--r--r--  1 root  wheel    5616 Feb  2 08:04 pam_lastlog.so.2
 -r--r--r--  1 root  wheel    6756 Feb  2 08:04 pam_login_access.so.2
 -r--r--r--  1 root  wheel    4608 Feb  2 08:04 pam_nologin.so.2
 -r--r--r--  1 root  wheel    4584 Feb  2 08:04 pam_opie.so.2
 -r--r--r--  1 root  wheel    4180 Feb  2 08:04 pam_opieaccess.so.2
 -r--r--r--  1 root  wheel   39764 Feb  2 08:04 pam_passwdqc.so.2
 -r--r--r--  1 root  wheel    3540 Feb  2 08:04 pam_permit.so.2
 -r--r--r--  1 root  wheel    7912 Feb  2 08:04 pam_radius.so.2
 -r--r--r--  1 root  wheel    3784 Feb  2 08:04 pam_rhosts.so.2
 -r--r--r--  1 root  wheel    3588 Feb  2 08:04 pam_rootok.so.2
 -r--r--r--  1 root  wheel    4076 Feb  2 08:04 pam_securetty.so.2
 -r--r--r--  1 root  wheel    3852 Feb  2 08:04 pam_self.so.2
 -r--r--r--  1 root  wheel    9896 Feb  2 08:04 pam_ssh.so.2
 -r--r--r--  1 root  wheel    6984 Feb  2 08:04 pam_tacplus.so.2
 -r--r--r--  1 root  wheel   10464 Feb  2 08:04 pam_unix.so.2
 -r--r--r--  1 root  wheel   23376 Feb  2 08:04 snmp_atm.so.2
 -r--r--r--  1 root  wheel  125212 Feb  2 08:04 snmp_mibII.so.2
 -r--r--r--  1 root  wheel   32044 Feb  2 08:04 snmp_netgraph.so.2
 
 /usr/lib/compat:
 total 7704
 -r--r--r--  1 root  wheel   33756 Feb  2 08:04 libalias.so.3
 -r--r--r--  1 root  wheel  522106 Feb  2 08:04 libc.so.3
 -r--r--r--  1 root  wheel  580636 Feb  2 08:04 libc.so.4
 -r--r--r--  1 root  wheel  600881 Feb  2 08:04 libc_r.so.3
 -r--r--r--  1 root  wheel  679088 Feb  2 08:04 libc_r.so.4
 -r--r--r--  1 root  wheel  880633 Feb  2 08:04 libcrypto.so.1
 -r--r--r--  1 root  wheel  761916 Feb  2 08:04 libcrypto.so.2
 -r--r--r--  1 root  wheel   45940 Feb  2 08:04 libcurses.so.2
 -r--r--r--  1 root  wheel   12104 Feb  2 08:04 libdevstat.so.2
 -r--r--r--  1 root  wheel   87240 Feb  2 08:04 libdialog.so.3
 -r--r--r--  1 root  wheel   68248 Feb  2 08:04 libedit.so.2
 -r--r--r--  1 root  wheel   72040 Feb  2 08:04 libedit.so.3
 -r--r--r--  1 root  wheel   85933 Feb  2 08:04 libf2c.so.2
 -r--r--r--  1 root  wheel   24735 Feb  2 08:04 libfetch.so.1
 -r--r--r--  1 root  wheel   38891 Feb  2 08:04 libfetch.so.2
 -r--r--r--  1 root  wheel   15042 Feb  2 08:04 libftpio.so.4
 -r--r--r--  1 root  wheel  301714 Feb  2 08:04 libg++.so.4
 -r--r--r--  1 root  wheel   95252 Feb  2 08:04 libgmp.so.3
 -r--r--r--  1 root  wheel   20351 Feb  2 08:04 libhistory.so.3
 -r--r--r--  1 root  wheel   19452 Feb  2 08:04 libhistory.so.4
 -r--r--r--  1 root  wheel  117024 Feb  2 08:04 libm.so.2
 -r--r--r--  1 root  wheel   39396 Feb  2 08:04 libmp.so.3
 -r--r--r--  1 root  wheel   84061 Feb  2 08:04 libmytinfo.so.2
 -r--r--r--  1 root  wheel   70035 Feb  2 08:04 libncurses.so.3
 -r--r--r--  1 root  wheel   33180 Feb  2 08:04 libopie.so.2
 -r--r--r--  1 root  wheel   38432 Feb  2 08:04 libpam.so.1
 -r--r--r--  1 root  wheel  108732 Feb  2 08:04 libpcap.so.2
 -r--r--r--  1 root  wheel  614824 Feb  2 08:04 libperl.so.3
 -r--r--r--  1 root  wheel   10812 Feb  2 08:04 libposix1e.so.2
 -r--r--r--  1 root  wheel  154556 Feb  2 08:04 libreadline.so.3
 -r--r--r--  1 root  wheel  146856 Feb  2 08:04 libreadline.so.4
 -r--r--r--  1 root  wheel   24252 Feb  2 08:04 libskey.so.2
 -r--r--r--  1 root  wheel   16552 Feb  2 08:04 libss.so.2
 -r--r--r--  1 root  wheel  204173 Feb  2 08:04 libssl.so.1
 -r--r--r--  1 root  wheel  180744 Feb  2 08:04 libssl.so.2
 -r--r--r--  1 root  wheel  275322 Feb  2 08:04 libstdc++.so.2
 -r--r--r--  1 root  wheel  282448 Feb  2 08:04 libstdc++.so.3
 -r--r--r--  1 root  wheel   15084 Feb  2 08:04 libtermcap.so.2
 -r--r--r--  1 root  wheel    8880 Feb  2 08:04 libusb.so.0
 -r--r--r--  1 root  wheel    9780 Feb  2 08:04 libusbhid.so.0
 -r--r--r--  1 root  wheel   32071 Feb  2 08:04 libutil.so.2
 -r--r--r--  1 root  wheel   32728 Feb  2 08:04 libutil.so.3
 -r--r--r--  1 root  wheel   21445 Feb  2 08:04 libvgl.so.1
 -r--r--r--  1 root  wheel   23836 Feb  2 08:04 libvgl.so.2
 -r--r--r--  1 root  wheel   24660 Feb  2 08:04 libwrap.so.2
 -r--r--r--  1 root  wheel   11398 Feb  2 08:04 libxpg4.so.2
 -r--r--r--  1 root  wheel    3120 Feb  2 08:04 pam_cleartext_pass_ok.so
 -r--r--r--  1 root  wheel    2996 Feb  2 08:04 pam_deny.so
 -r--r--r--  1 root  wheel    4976 Feb  2 08:04 pam_opie.so
 -r--r--r--  1 root  wheel    4068 Feb  2 08:04 pam_opieaccess.so
 -r--r--r--  1 root  wheel    3348 Feb  2 08:04 pam_permit.so
 -r--r--r--  1 root  wheel    7620 Feb  2 08:04 pam_radius.so
 -r--r--r--  1 root  wheel    4240 Feb  2 08:04 pam_skey.so
 -r--r--r--  1 root  wheel   10176 Feb  2 08:04 pam_ssh.so
 -r--r--r--  1 root  wheel    8544 Feb  2 08:04 pam_tacplus.so
 -r--r--r--  1 root  wheel    4952 Feb  2 08:04 pam_unix.so
 
 /usr/libexec:
 total 18
 -r-xr-xr-x  1 root  wheel  7200 Feb  2 08:04 getNAME
 -r-xr-xr-x  1 root  wheel  9048 Feb  2 08:04 rexecd
 
 /usr/sbin:
 total 510
 -r-xr-xr-x  1 root  wheel  119768 Feb  2 08:06 ipftest
 -r-xr-xr-x  1 root  wheel   23904 Feb  2 08:06 ipresend
 -r-xr-xr-x  1 root  wheel   55952 Feb  2 08:06 ipsend
 -r-xr-xr-x  1 root  wheel   32024 Feb  2 08:06 iptest
 -r-xr-xr-x  1 root  wheel  218104 Feb  2 08:06 pccardd
 -r-xr-xr-x  1 root  wheel   39660 Feb  2 08:06 vttest

もともと入っていたportsをcompat5x-i386-5.4.0.8_5とlocaledata-5.4を除いて全削除する。

 # pkg_info > /root/pkg_info.lst (一応何が入っていたかくらいは記録)
 # pkg_info -a > /root/pkg_info_a.lst (同上)
 # pkg_deinstall ...

あーさっぱりしたー。

Portsをがっつりインストール

上記の作業に時間をかけている間にもportsが更新されている可能性があるので、「portsnap fetch; portsnap update」した方がよいかもしれない。

まずportupgradeをインストールし、そのportupgradeを使ってportupgradeを再インストール。続いてportinstallでportsをがっつりインストールしていく。

 # pkg_add -r portupgrade
 # portupgrade -a (portupgradeとportupgradeで使うrubyなどを最新にする)
 # portinstall -P ImageMagick subversion-perl ...

ImageMagickとかsubversion-perlとかp5-SVN-Webとかp5-XML-Atomとかphp5-extensionsのように依存しているportsが多いやつからインストールすると楽できる。mysql-server (4.1.18)だけはportinstall -Pで失敗したので/usr/ports/databases/mysql41-serverでmake installした。

インストールだけでどっと疲れたのでmysqlの起動だけ設定して気分を盛り上げておく。まず、/etc/rc.confに以下の設定を加える。

mysql_enable="YES"
mysql_args="--skip-character-set-client-handshake"
    (このオプションを付けると自動的な文字コードの変換が行われない)

次にmysqldを起動して、rootユーザのパスワードを設定しておく。

 # /usr/local/etc/mysql-server.sh start
 # mysqladmin -u root password new_password
 # mysqladmin -u root -h 59.106.XX.XX password new_password
 # mysqladmin reload -p

とりあえずインストールを終えたports。今日はこのへんにしといたるわ。

ImageMagick-6.2.5.5_1
apache-1.3.34_4
apr-db4-1.2.2_2
autoconf-2.59_2
automake-1.9.6
compat5x-i386-5.4.0.8_5
db42-4.2.52_4
expat-2.0.0
fcgi-devkit-2.4.0
fontconfig-2.3.2_2,1
freetype2-2.1.10_2
gettext-0.14.5_1
ghostscript-gnu-7.07_14
gmake-3.80_2
gsfonts-8.11_2
help2man-1.36.3
imake-6.9.0
jasper-1.701.0
jbigkit-1.6
jpeg-6b_3
lcms-1.14,1
ldconfig_compat-1.0_5
lha-1.14i_6
libdrm-2.0
libfpx-1.2.0.12
libiconv-1.9.2_1
libltdl-1.5.22
libtool-1.5.22_1
libxml2-2.6.23
lighttpd-1.4.10
localedata-5.4
m4-1.4.4
mod_fastcgi-2.4.2_1
mpeg2codec-1.2_1
mysql-client-4.1.18_1
mysql-server-4.1.18
neon-0.25.4_1
p5-Algorithm-Diff-1.1901
p5-AppConfig-1.56
p5-Archive-Tar-1.28
p5-Authen-SASL-2.09
p5-CGI-Cache-1.40_1
p5-Cache-Cache-1.04_1
p5-Class-Data-Inheritable-0.04
p5-Class-Factory-Util-1.6
p5-Class-Singleton-1.03
p5-Compress-Zlib-1.41
p5-DBD-SQLite-1.11_1
p5-DBI-1.50
p5-DateTime-0.30
p5-DateTime-Locale-0.22
p5-DateTime-TimeZone-0.40
p5-Devel-StackTrace-1.12
p5-Digest-1.14
p5-Digest-HMAC-1.01
p5-Digest-MD5-2.36
p5-Digest-SHA1-2.11
p5-Email-Find-0.09_1
p5-Email-Valid-0.15
p5-Error-0.15
p5-Exception-Class-1.23
p5-ExtUtils-CBuilder-0.15
p5-ExtUtils-ParseXS-2.15
p5-FastCGI-0.67
p5-File-Cache-0.16
p5-File-Temp-0.16_3
p5-HTML-Parser-3.49_2
p5-HTML-Tagset-3.10
p5-HTTP-Server-Simple-0.18
p5-I18N-LangTags-0.35
p5-IO-String-1.08
p5-IO-Zlib-1.04_1
p5-IPC-ShareLite-0.09
p5-LWP-Authen-Wsse-0.05
p5-Locale-Maketext-1.09
p5-Locale-Maketext-Lexicon-0.49_1
p5-Locale-Maketext-Simple-0.12
p5-MIME-Base64-3.07
p5-Mail-Tools-1.73
p5-Module-Build-0.26.11_1
p5-Net-1.19,1
p5-Net-DNS-0.55
p5-Net-IP-1.24
p5-Number-Format-1.45
p5-Params-Validate-0.78
p5-PathTools-3.16
p5-Pod-Parser-1.34
p5-Regexp-Common-2.120
p5-SVN-Web-0.43
p5-Scalar-List-Utils-1.18,1
p5-Spiffy-0.30
p5-Storable-2.15
p5-Template-Plugin-Clickable-0.05
p5-Template-Plugin-Clickable-Email-0.01
p5-Template-Plugin-Number-Format-1.01
p5-Template-Plugin-Subst-0.02
p5-Template-Toolkit-2.14_2
p5-Test-Base-0.50
p5-Test-Harness-2.56
p5-Test-Simple-0.62
p5-Text-Diff-0.35
p5-Text-Diff-HTML-0.04
p5-Time-Local-1.11
p5-UNIVERSAL-require-0.10
p5-URI-1.35
p5-URI-Find-0.16
p5-XML-Atom-0.16
p5-XML-LibXML-1.58_1
p5-XML-LibXML-Common-0.13
p5-XML-NamespaceSupport-1.09_1
p5-XML-Parser-2.34_2
p5-XML-RSS-1.05_1
p5-XML-SAX-0.13
p5-YAML-0.57
p5-gettext-1.05_1
p5-libwww-5.805
pcre-6.6
perl-5.8.7_2
php5-5.1.2_1
php5-ctype-5.1.2_1
php5-dom-5.1.2_1
php5-extensions-1.0
php5-gd-5.1.2_1
php5-iconv-5.1.2_1
php5-mbstring-5.1.2_1
php5-mysql-5.1.2_1
php5-pcre-5.1.2_1
php5-posix-5.1.2_1
php5-session-5.1.2_1
php5-simplexml-5.1.2_1
php5-sqlite-5.1.2_1
php5-tokenizer-5.1.2_1
php5-xml-5.1.2_1
pkgconfig-0.20
png-1.2.8_3
portupgrade-2.0.1_1,1
python-2.4.2
rsync-2.6.6
ruby-1.8.4_4,1
ruby18-bdb1-0.2.2
sqlite-3.3.4
subversion-perl-1.3.0_3
t1lib-5.1.0,1
tcl-8.4.11,1
tiff-3.8.0
unzip-5.52_2
wget-1.10.2
xorg-libraries-6.9.0
zip-2.31

2006-02-18追記:

不足しているportsを大慌てで追加。これくらいやっておけば大概のことは事が足りるだろう。以下は追加分。jdk-1.4.2p8が入っているあたりがミソ(笑)。

cvsup-without-gui-16.1h_2
gd-2.0.33_4,1
httplog-2.1_1
hyperestraier-1.1.2_1
ja-nkf-2.05
ja-p5-Jcode-2.03
javavmwrapper-2.0_6
jdk-1.4.2p8_3
libchk-1.9
nspr-4.6.1
open-motif-2.2.3_2
p5-Class-Accessor-0.22
p5-Class-ErrorHandler-0.01
p5-Convert-ASN1-0.19
p5-Convert-BinHex-1.119
p5-Convert-PEM-0.07_1
p5-Crypt-CBC-2.15
p5-Crypt-DES-2.05
p5-Crypt-DES_EDE3-0.01_1
p5-Crypt-DSA-0.13_2
p5-Crypt-SSLeay-0.51
p5-DBD-mysql-3.0002
p5-Data-Buffer-0.04
p5-Exporter-Lite-0.01
p5-Feed-Find-0.06
p5-Flickr-API-0.07
p5-HTML-Template-2.8
p5-IO-Socket-SSL-0.97
p5-IO-stringy-2.110
p5-Image-Size-2.992
p5-JSON-1.03
p5-MIME-Lite-3.01
p5-MIME-Tools-5.419,2
p5-Math-BigInt-1.77
p5-Module-Pluggable-2.97
p5-Module-Pluggable-Ordered-1.4
p5-Net-SSLeay-1.30_1
p5-SOAP-Lite-0.60a
p5-UNIVERSAL-exports-0.03
p5-URI-Fetch-0.04
p5-WebService-Bloglines-0.09_1
p5-XML-LibXML-XPathContext-0.07
p5-XML-Parser-Lite-Tree-0.03
p5-XML-RSS-LibXML-0.15
p5-XML-Simple-2.14
p5-XML-XPath-1.13
qdbm-1.8.45
urwfonts-1.0

Feb 13, 2006

さくらの専用サーバ環境のための準備運動

まださくらの専用サーバが使える状態になっていないので、VMware Workstation 5.5の上に環境を構築して準備運動をすることにする。

FreeBSD 5.4から6.0へのアップグレード

さくらの環境はFreeBSD 5.4 Releaseなので、いずれは6.0-STABLE系に移行したい。まず、その練習。

まず、cvsupをインストールする。portsからbuildしてもよいがちょっと使うだけなのでpackageからインストールすれば十分。

# pkg_add -r cvsup-without-gui
# rehash

次にcvsup用のsupfileを用意する。

 *default host=cvsup3.jp.FreeBSD.org
 *default base=/var/db
 *default prefix=/usr
 *default release=cvs tag=RELENG_6_0
 *default delete use-rel-suffix
 *default compress
 
 src-all

6.0-STABLE用なのでRELENG_6_0。cvsup用のサーバはネットワーク的にcvs3.jp.FreeBSD.orgが近いはず(さくらの専用サーバは新宿のデータセンターに収容されているらしい)。

用意したsupfileを使ってcvsupを実行する。

# cvsup -L 2 -g supfile

/usr/objが空でなければ念のためクリア。

# cd /usr/obj
# chflags -R noschg *
# rm -rf *

いよいよbuild & installする。非常に時間がかかる。

# make -j4 buildworld
# make buildkernel
# make installkernel
# make installworld

make installworldしても/etcの下は以前のままの状態になっているので、mergemasterを使ってアップデートしてやる必要がある。

# cd /
# tar cf /etc.tar etc (バックアップしておく)
# mergemaster -siva (現在/etcにないファイルだけコピー)
# mergemaster -sivr (変更のあるファイルを反映→かなり面倒)

それが済んだらrebootする。

# reboot

無事にrebootしてきたらok。

compat5xをインストール

5.4用にビルドされたバイナリを6.0上で正常に動作させるためにはcompat5xライブラリのインストールが必要になる。例えば、冒頭でpackageからインストールしたcvsupは5.4用のバイナリなので、compat5xライブラリを使って実行しないと正常に機能しない、ということが起き得る。

portsを更新してから、compat5xライブラリをインストールする。前のエントリーでインストールしておいたcvsupを使ってやってもよいが、6.0では標準でインストールされているportsnapを使った方が楽だし、速い。

# portsnap fetch
# portsnap extract
# cd /usr/ports/misc/compat5x
# make; make install
# make clean

compat5xライブラリが使えるようにldconfigを実行しておく。

# /sbin/ldconfig -m /usr/local/lib/compat

/etc/rc.confに以下の行を追加しておくと、起動時に毎回ldconfigしてくれるようになるので設定しておくとよい。

compat5x_enable="YES"

/lib、/usr/libの中の古いファイルは削除するかバックアップディレクトリに移動しておく。例えば以下を実行すると、/libの下の/boot/kernel/kernelより古いファイルでディレクトリではないものを/lib/backup以下に移動する。

# mkdir /lib/backup
# mv `find /lib -not \( -newer /boot/kernel/kernel -or -type d \) -print` /lib/backup

作業後、古いバイナリに対して/usr/local/lib/compat以下のダイナミックライブラリが使われていれば問題ない。

# ldd /usr/local/bin/cvsup
/usr/local/bin/cvsup:
        libz.so.2 =< /usr/local/lib/compat/libz.so.2 (0x28109000)
        libutil.so.4 =< /usr/local/lib/compat/libutil.so.4 (0x28119000)
        libmd.so.2 =< /usr/local/lib/compat/libmd.so.2 (0x28125000)
        libm.so.3 =< /usr/local/lib/compat/libm.so.3 (0x2812f000)
        libc.so.5 =< /usr/local/lib/compat/libc.so.5 (0x2814a000)

ついでなので、すでにportsからインストール済みのソフトウェアで5.4用のものがないか確認して、6.0用に入れなおしておくとよい。

# pkg_info
compat5x-i386-5.4.0.8_5 A convenience package to install the compat5x libraries
cvsup-without-gui-16.1h_2 General network file distribution system optimized for CVS
localedata-5.4      Legacy locale data for FreeBSD 6+
perl-5.6.2_2        Practical Extraction and Report Language

てな感じで表示されるパッケージのうち、compat5x-i386-5.4.0.8_5とlocaledata-5.4以外のものは5.4用のもののはずである。その証拠に例えば、ldd /usr/local/bin/perl5.6.2とかやるとcompatライブラリを使っていることが分かる。

# ldd /usr/local/bin/perl5.6.2
/usr/local/bin/perl5.6.2:
        libperl.so => /usr/local/lib/perl5/5.6.2/mach/CORE/libperl.so (0x28076000)
        libm.so.3 => /usr/local/lib/compat/libm.so.3 (0x28140000)
        libc.so.5 => /usr/local/lib/compat/libc.so.5 (0x2815b000)
        libcrypt.so.2 => /usr/local/lib/compat/libcrypt.so.2 (0x28235000)
        libutil.so.4 => /usr/local/lib/compat/libutil.so.4 (0x2824d000)

ひとまず削除してから、packagesからインストールし直す(portupgradeもあると便利なのでついでにインストールする)。

# pkg_delete perl-5.6.2_2 cvsup-without-gui-16.1h_2
# pkd_add -r perl cvsup-without-gui portupgrade

packagesじゃなくて最新のportsからbuildしてインストールしたい場合には追加で以下を実行すればよい。

# rehash
# portupgrade -a -P

Feb 11, 2006

Gmail for your domain

Gmail for your domain

適当翻訳↓

この特別なベータ・テストはあなたのドメインのすべてのユーザに、Gmail(グーグルのwebmailサービス)を提供します。あなたのドメイン用のGmailはグーグルによってホスティングされるため、あなたがハードウェアやソフトウェアをインストールしたり保守したりする必要はありません。

要するに、Googleが新たにMTA (Mail Transfer Agent)をサービスするということですね。単純にFromアドレスを「@gmail.com」から任意のメールアドレスに変更するのとは異なり(この機能は従来から提供されていました)、特定のドメイン(組織)のメールアカウントの管理をまるごとGoogleにアウトソースできるということです。

普通に考えて、ドメインの管理者はDNSの設定でMX RecordをGoogle MTAに向けなければならないでしょう。Lolipopのような安価な共用レンタルサーバのおまけで付いてくるDNS設定サービスは、一般的にそういうカスタマイズを許していませんから、Googleのこのサービスを利用するのは難しそうです。そういうわけで、どうせならGoogleにはDNSも無料でホスティングしてほしいです。1ゾーンあたり月2,000円とかふんだくっているホスティング業者をギャフンと言わせてほしいですね。

とりあえず申し込んでみました。申し込み時にドメイン名をひとつ登録するのですが、実際的な用途からすると複数登録・利用できた方がありがたいですね。申し込んだだけでまだ実物を見ていないので何とも言えませんが。

組織のコンプライアンスや情報秘匿の点ではどうなのかなと思わなくもありません。個人的には全然問題ないわけですが、現在でさえGmailアカウントでメールを授受しているというだけで嫌がる企業の方がままいらっしゃいます。かと言ってそういう企業の方が「ウィルスメールを撒き散らしたり、信書としての秘匿性をスポイルしたりしない」という保証はどこにもないわけですが。


実はMicrosoftは、Windows Liveですでに類似のサービスを提供しているのですね。

Custom Domains

どうしてもMTAをGoogleに提供してもらわなければならない理由は皆無なので、Windows Liveでもいいですね。今月中にas-is.netドメインを別サーバに移動することになっているので利用してみようかしらー。

Feb 10, 2006

さくらの専用サーバに「亡命」します

漂流中(Ogawa::Buzz: VPS7難民)でしたが、さくらの専用サーバへの「亡命」することにしました。DNSには栄くんから推薦のあったZoneEditを利用させてもらうことにしました。

SAKURA Internet : 専用サーバ 概要
Free DNS service - Easy, web-based domain manager - ZoneEdit.com

しばらく、VPS7からさくらの専用サーバへの引っ越し記録をメモしておくことにします。なるべく詳細に(しかしセキュリティ上の理由から書けないことはあります)。

そういうわけでまず、本日さくらの専用サーバを申し込みました。

OSを何にするかでちと悩みましたが、Fedora Core 4はそもそもProduction OSではないし、半年以内に殿堂入り(legecy入り)しそうな予感がびんびんしてきます。しかたがないのでFreeBSD 5.4を選択。クレジットカード払いにし、サービス利用料(2か月分)と初期費用、しめてX円なり。

現在の懸念事項は以下の通りです。

  • インストールされているのは5.4 ReleaseのGENERICカーネルなのだろうか。だとしたら6.0-STABLEにしたい。
  • Sempron 2600+というのははじめて触るのでよく分からない。いったいamd64なのかx86なのか。何となく後者の気がする。
  • VPS7ではDNSの設定は無料だったのだが、さくらは有料っぽいのでBINDを設定しなくてはならない。かれこれ4年くらい設定したことがないので自信はない。あとセカンダリをどうでっちあげようか。
  • ネットワーク性能がやや心配(さくらインターネット トラフィックリポート)。

Feb 9, 2006

Gmail Chat

私のGmailアカウントでもChat機能が使えるようになりました。

About Gmail

Google Talkではラインエディタの不具合に非常に悩まされましたが、GmailのChat機能であればラインエディタはブラウザの機能を使うことになるので、多分こちらの方が都合がよいでしょうね。

それはともかく。

GmailでFromアドレスなどにマウスカーソルをあわせるだけで、下のようにポップアップするようになってしまいました。

激しく鬱陶しいです。これ、OFFにできないのかしらー。

追加情報:
HTTP(http://mail.google.com/mail/)では使えますが、HTTPS(https://mail.google.com/mail/)では使えないようですね、現状。

さらに追加:
HTTPSでも使えるようになりました。

2006-03-13:
今更気が付くのもなんですが、Fromアドレスなどにマウスカーソルを合わせてもポップアップしなくなっていましたね。とても快適になりました。

VPS7難民

現在借りているVPS7(Ogawa::Buzz: サーバーを移転した件について。)が理由は定かではありませんが、2月末で突如サービス停止することになりました。一年ほど使ってきて、サービス品質、価格とも満足していただけに非常に残念です。

早々に代替のサーバを見つけなければならないのですが、数あるレンタルサーバ業者の膨大なサービスの中からVPS7に匹敵するような条件のサービスを見つけるのは至難の業です。いたずらに労力と時間を浪費してしまっています。たいがい疲れてきたので、もうSakura Internetの専用サーバ(SAKURA Internet : 専用サーバ 概要)あたりでいいんじゃないかと思っています。金で済ませられるのならそれでいいんじゃないか、と。

私にとってレンタルサーバの主たるメトリックはCPU性能でもネットワーク性能でもディスク容量でもなくて、メモリ容量なのです。CPUが遅くてできないことはそんなにありませんが、メモリが少なくてできないことはたくさんありますから。前述のSakura Internetの専用サーバの512MBメモリに匹敵するVPSを探そうとすると、unixshell#(unixshell# :: Virtual Servers, Virtual Private Servers)でも月59.99USD(7000JPY強)ですから、それならば最初から専用サーバを借りておけばよいわけです。もう少しコストを抑えたいところですが。

ところでVPS7の事業シーズはどこか引き継げないものでしょうか。例えば、下位のISPや中堅以下のiDCで、full-managedサービスに人員を割けないところ。ニッチマーケットなのは重々承知しているのですが。

2006-02-25追記:

X Dayが近づくVPS7だが、20日くらいからまったくアクセスできない。admin宛てにメールを送ってもエラーになる。大抵のデータはサルベージ済みだからいいようなものの、消したいデータもあったわけなのだが…。

最後の最後でムカついている次第。

Feb 6, 2006

龍が如く、始めました

眞鍋かをり(眞鍋かをりのココだけの話 powered by ココログ: 恋)の影響で、「龍が如く」を中古ゲーム屋でゲット、プレイ開始しました。

龍が如く
龍が如く

せっまーい歌舞伎町の中でお使いしたり、喧嘩したりする、というセガのゲーム。ロードが多くて鬱陶しいとか、視点が分かりにくいとか、操作性がナニだとか、ストーリーがどうとか、いろいろコメントのしようもあるのですが、なかなか良いゲームでした(眞鍋かをりに感謝!!)。

ごく不合理な暴力を正義の名の下に正当化する映画や、安直に暴力にペーソスを足し合わせただけの廉造ドラマは、(ハリウッド映画や近年のヤクザ映画や馳星周の名前を挙げるまでもなく)巷にあふれています。私自身その手のドラマはあまり好みではないのですが、このゲームは、そうした暴力ドラマをカリカチュアライズすることで「ベタドラマ」という高度な娯楽に昇華にさせています。ベタなキャラクターにベタな展開。次のセリフを予測することもゲームの一部です。清清しくすらありますね。ちょっと散歩で歌舞伎町まで出かけたくなりました。

現在のところ、6章半ば。「賽の河原」の闘技場で小銭を稼いだり、カジノに興じたりしています。

Feb 1, 2006

SVN::Web 0.43

portsにNik Clayton / SVN-Web 0.43が入っていたので0.38からアップデートしてみた。

ports/devel/p5-SVN-Web/

tracっぽいテンプレートになってカッコヨクなたーよ。

さて、0.38のときにもFastCGI環境で利用するには多少試行錯誤させられた(Ogawa::Buzz: SVN::Web on FastCGI)のだが、0.43でも多少苦労させられた。具体的には、ある操作をするとリポジトリのHEADなどが取得できなくなってしまう(特定のrevisionしか取得できない)という問題が生じる。

ad hocには以下のパッチを当てておけば問題は回避できる。もっとスマートなやり方がありそうなのだが、コードを読んでいる時間がない。

--- SVN/Web.pm.orig Tue Jan 31 10:39:58 2006
+++ SVN/Web.pm Wed Feb  1 12:51:28 2006
@@ -812,6 +812,7 @@
 
  cgi_output($cfg, $html);
  last if $cgi_class eq 'CGI';
+ $cgi->initialize_globals();
     }
 }
 

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com