2004/11/29

ApacheのWebdavでXPから共有(apache1.3編)(FreeBSD, Internet, Web)

はじめに

自宅と会社で楽にファイルの受け渡しができるように、Webdavを入れました。

Apache 1.3+Webdavは比較的多くのサイトで構築方法が紹介されていますが、私も便乗して公開します。

構築した際のサーバ・クライアントの情報は以下の通りです。

■サーバ

  • FreeBSD 5.3-RELEASE-p1
  • Apache 1.3.33-1
  • mod_dav-1.0.3_2
  • mod_encoding-20021209_1

■クライアント

  • Windows XP Professional SP2

Windows XPからBasic認証で失敗する人必読です。

mod_dav,mod_encodingのインストール

apacheは既にインストールされている事を前提で記述します。portsコレクションを最新にして、mod_dav,mod_encodingをインストールして下さい。mod_davはWebdavの本体モジュール、mod_encodingはWebdavで日本語ファイル名を使用する為に追加します。

# portinstall mod_dav
# portinstall mod_encoding

自動的にmod_davのLOCKディレクトリ及びファイルも適切なパーミッションで/var/db配下に作成されます。後は/usr/local/etc/apache/httpd.confを設定するだけです。

/usr/local/etc/apache/apache.conf.mod_davというサンプルファイルも作成されますが、これはmod_encodingについての記述は無いので、参考にはしないことにします。

環境設定

Webdavの動作環境として以下の条件で設定する場合の設定を説明することにします。

  • アクセスURL
    http://www.hijiki.net/dav/
  • 実体のディレクトリ
    /share/dav/
  • 認証方法
    専用のユーザ名とパスワードによるBasic認証

実体ディレクトリの作成

/share/davディレクトリを作成します。ディレクトリのパーミッションはApacheが動作しているデフォルトのユーザ・グループで作成します。httpd.confのUser,Groupで指定しているユーザ・グループです。通常はwww:wwwになっていると思いますので、そのパーミッションで作成します。

# cd /share
# mkdir ./dav
# chown www:www ./dav
# chmod 750 ./dav

ユーザの作成

この後指定するhttpd.confの設定と合わせれば別にどこに作成してもいいのですが、アカウント情報を/etc/webdav.passwdという名前で作成します。

ユーザ名とパスワードの作成は「htpasswd」というapacheに標準で含まれるコマンドを使用します。一人目のユーザを登録するときには-cオプションを付けて、ファイルの新規作成後にアカウント登録する形になります。以下の例では二人ユーザを登録しています。

# htpasswd -c /etc/webdav.passwd user1
New password:(パスワード入力)
Re-type new password:(パスワード入力)
Adding password for user user1
# htpasswd /etc/webdav.passwd user2
New password:(パスワード入力)
Re-type new password:(パスワード入力)
Adding password for user user2

このパスワードファイルもオーナーはwww(apacheデフォルトの場合)しか読み取れなくていいのでwww:wwwで他のユーザのパーミッションを外してしまいましょう。

# chown www:www /etc/webdav.passwd
# chmod 700 /etc/webdav.passwd

httpd.confの設定

httpd.confは以下の様に設定してください。

/usr/local/etc/apache/httpd.conf
LoadModule dav_module      libexec/apache/libdav.so
LoadModule encoding_module libexec/apache/mod_encoding.so

AddModule mod_dav.c
AddModule mod_encoding.c

# webdav
<IfModule mod_headers.c>
   Header add MS-Author-Via "DAV"
</IfModule>

<IfModule mod_encoding.c>
   EncodingEngine on
   NormalizeUsername on
   SetServerEncoding UTF-8
   DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
   AddClientEncoding "cadaver/" EUC-JP
</IfModule>

DAVLockDB /var/db/DAVLock
DAVMinTimeout 600

Alias /dav "/share/dav"

<Location /dav>
   DAV On
   AuthType Basic
   AuthName "Please Input ID and Password."
   AuthUserfile /etc/webdav.passwd
   <LimitExcept GET HEAD OPTIONS>
     Require valid-user
   </LimitExcept>
</Location>
      

NormalizeUsernameの指定はWindows XP独特の仕様変更で、Webdav認証時に「ホスト名\ユーザ名」として認証を試みる所をユーザ名だけで認証するために必要なパラメータです。

あとは、apachectl stopして、apachectl startすればWebdavが組み込まれたApacheが起動する筈です。

Windows XPからの共有

以下の手順で行います。

(1)マイネットワークから「ネットワークプレースの追加」を選択。

(2)ウイザード開始画面の「次へ」を選択

(3)「別のネットワークの場所を選択」を選び、「次へ」を選択

(4)URLの入力

URLに「http://www.hijiki.net/dav?」を入力

※URLの最後の「?」が重要です。これを入れないと先のユーザ認証で失敗します。

(5)ユーザ名、パスワードを入力

(6)ネットワークプレースの名前設定(すきな共有名)

(7)「完了」ボタンを押して終了

おわりに

Webdav共有は通常のファイル共有と違って、共有フォルダ上でファイルを開いたり実行したりはできませんが、遠隔地からファイルを共有する際にわざわざFTP等を使わないでも簡単に転送ができるのが良いと思います。

プロトコルにはHTTPを使用し、今回は認証もPlainなBasic認証なのでセキュリティ的にはどうかなと思いますが、便利に使えるので導入してみてはいかがでしょうか。

2004/11/27

FreeBSD qmail+vpopmailでVirtual Domain(Mail)

はじめに

別のエントリでqmailをrelay-ctrlを使ってPOP Before SMTPを実現し、Virtual Domainはqmaiの機能を使ったやり方で紹介しましたが、今回はqmail+vpopmailを使用した方法について説明します。既にqmailが動いている人向けの移行注意点も一緒に記載します。

前回と同じくセットアップの前提条件として

  • Virtual Domain(複数ドメイン)対応
  • POP Before SMTPを実装

を含んでいます。APOPには今回も対応しませんが、vpopmailのビルドオプションで簡単に実現はできそうです。

vpopmailの特徴

普通にqmailだけでメールアドレスを管理すると最終的に配信されるユーザ毎にUNIXアカウントが必要になりますが、vpopmailはUNIXアカウントとは別にメールアドレスとパスワードを保持し、メールスプールも一括管理されます。

また、Virtual Domainの追加や、ユーザ、aliasの追加は全てコマンドラインからvpopmailのコマンドを入力することによって行われます。Web上からユーザやaliasの管理ができるqmailadminやvqadminなどのツールもオープンソースで出ています。

更に標準でPOP Before SMTPにも対応しています。

必要なパッケージ

qmail+vpopmailを運用させるのに必要なパッケージは以下の通りです。

  • qmail
  • ucspi-tcp
  • checkpassword
  • vpopmail

portsを最新にして、portinstall等からインストールして下さい。

もし、qmailの付与するヘッダの日付がGMTじゃなく、localtime(JST)で表示させたい場合は先に以下の設定をしてパッチの準備をしておきます。

# cd /usr/ports/mail/qmail/files
# fetch http://mirror.averse.net/pub/FreeBSD/ports/local-distfiles/sada/qmail-date-localtime.patch.gz
# gzcat qmail-date-localtime.patch.gz > patch-date-localtime
# rm qmail-date-localtime.patch.gz

※一応標準設定で不正中継対策は大丈夫なように出来ていますが、「telnet relay-test.mail-abuse.org」 で全てのチェックをパスしたいときには先に以下の設定をしてパッチの準備をしておきます。

# cd /usr/ports/mail/qmail/files
# fetch http://www.qmail.org/qmail-smtpd-relay-reject
# mv qmail-smtpd-relay-reject patch-qmail-smtpd-relay-reject

簡単にそれぞれのパッケージの説明をします(間違っているかもしれません)。

qmail MTA本体
ucspi-tcp qmailをセキュアな状態で運用するためのwrapper
tcpserverというプログラムからqmailの各種プログラムを呼び出す
checkpassword popでメール受信する際に行うパスワードチェックプログラム
qmailのパッケージに入っているpop3デーモンが呼び出す
vpomail qmailでVirtual DomainとPOP Before SMTPを実現するためのプログラム群

vpopmailのインストール先について

portsからvpopmailをインストールすると、/usr/local/vpopmail配下に設定されます。また、vpopmailはこのインストールされたディレクトリ配下に各ドメイン、ユーザ、alias、受信メールをストアするので、なんかイヤです。できるだけ/usrパーティションが増えすぎないように考慮して、私はvpopmailの各設定ファイルについては/var/vpopmailに設定するように変更しました。

# mkdir /var/vpopmail
# mkdir /var/vpopmail/domains
# rmdir /usr/local/vpopmail/domains
# ln -s /var/vpopmail/domains /usr/local/vpopmail/.

qmail+vpopmailの設定

※既にqmail単体でVirtual Domainを実現している人は、全てのユーザのメール受信を確認後、qmailサービスを停止し、以下のファイルを削除して、qmailを停止してから作業を行って下さい。

  • /var/qmail/alias/.qmail-*
  • /var/qmail/controls/virtualdomains

/var/qmail/controlの設定

qmailの各種初期設定情報は/var/qmail/controlディレクトリ配下に準備します。設定するマシンのIPアドレスがグローバルアドレスでネームサーバで逆引き設定がされている場合は以下のコマンドで自動で設定されます。

# /var/qmail/configure/config

私の環境では上記コマンドを実行するとプロバイダの名前が各種設定ファイルに登録されてしまうので、自分で/var/qmail/controlディレクトリ配下のファイルを編集する事になりました。以下に個々のファイルの設定内容を示します。

/var/qmail/control/defaultdomain
hijiki.net

↑これは@以下が省略されたメールを送信した際に自動的に付与するドメイン名です。

/var/qmail/control/locals
localhost

↑受信するホスト名ドメイン名を記述します。これはqmail-sendというプロセスが参照します。

/var/qmail/control/rcpthosts
localhost

↑受信するホスト名ドメイン名を記述します。これはqmail-smtpdというプロセスが参照します。後述するVirtual Domainを設定する時にもこのファイルをいじります。

/var/qmail/control/me
hijiki.net

↑自サーバのFQDNを指定します。

/var/qmail/control/plusdomain
net

↑ドメイン部が+で終わっている場合にその後ろに付与する文字列を指定します。何の為にあるのかよく分かりません。適当でいいと思います。

qmailのaliasの削除

qmailインストール直後には/var/qmail/alias配下に.qmail-*というaliasファイルがあります。既にqmailを利用している人もaliasファイルはこのディレクトリ上に作成していると思いますが、vpopmailを使用する場合、aliasの管理もvpopmailが/usr/local/vpopmail/domainsディレクトリ配下で管理しますので、全て一旦削除します。

# cd /var/qmail/alias
# rm -f .qmail-*

Virtual Domainの作成

それでは必要なVirtual Domainを作成しましょう。今回はhijiki.netのドメインを作成します。別にvpopmailを使ってVirtual Domainを利用するからといって、複数のドメインである必要はありません。ドメインが一つだけでも、コマンドラインでユーザ管理等が行えるので便利ですよ。

さて、作り方ですが、/usr/local/vpopmail/binにあるvadddomainコマンドを使います。vadddomainは指定ドメインの設定を行うほかに、「postmaster@指定ドメイン名」を作成しますので、postmasterのメール受信パスワードの設定も同時に行います。

具体的には「vadddomain ドメイン名パスワード」の形式で実行します。パスワードはコマンドライン引数で省略した場合、コマンド実行後に聞いてきますのでそこで入力してもOKです。

「vdominfo ドメイン名」で作成されたドメイン情報が表示されます。ドメイン名を間違えて入力してしまったら、「vdeldomain ドメイン名」で削除もできます。

# cd /usr/local/vpopmail/bin
# ./vadddomain hijiki.net password01
# ./vdominfo hijiki.net
domain: hijiki.net
uid: 89
gid: 89
dir: /usr/local/vpopmail/domains/hijiki.net
users: 1

ユーザの追加

ユーザの新規追加は「vadduser ユーザ名@ドメイン名」の形式で行います。実行するとパスワード入力を二回聞かれますので、同じパスワードを入力してください。

追加確認は「vuserinfo ユーザ名@ドメイン名」でOKです。また、ユーザ名を間違えてしまったら「vdeluser ユーザ名@ドメイン名」で削除します。

# ./vadduser hoe@hijiki.net
Please enter password for hoe@hijiki.net:[パスワードを入力]
enter password again:[パスワードを入力]
# ./vuserinfo hoe@hijiki.net
name: hoe
passwd: $1$o1AXafVj$mMC9X8tz.cEdxE3Nw7B1D0
clear passwd:
uid: 1
gid: 0
flags: 0
gecos: hoe
limits: No user limits set.
dir: /usr/local/vpopmail/domains/hijiki.net/hoe
quota: NOQUOTA
usage: NOQUOTA
account created: Sat Nov 27 20:10:28 2004
last auth: Never logged in

aliasの設定

メールサーバを立ち上げると、root,webmaster,postmaster,infoあたりのユーザにメールが必ずと行っていいほど来るようになりますね。まあ基本的にはSPAMなんでしょうけど、その辺のメールをaliasで一人のユーザに転送する設定をしましょう。postmasterはvadddomainで自動的に個別のアカウントが作成されますが、aliasを設定すればそちらが優先されますので、転送しておいた方が便利です。

コマンドは「valias -i ユーザ名@ドメイン名 alias名@ドメイン名」となります。一覧を見るには「valias -s ドメイン名」とします。aliasの削除は「valias -d alias名@ドメイン名」です。

# ./valias -i yotan@hijiki.net asd@hijiki.net
# ./valias -s hijiki.net
root@hijiki.net -> yotan@hijiki.net
webmaster@hijiki.net -> yotan@hijiki.net
info@hijiki.net -> yotan@hijiki.net
postmaster@hijiki.net -> yotan@hijiki.net
asd@hijiki.net -> yotan@hijiki.net
rabi# ./valias -d asd@hijiki.net

tcpserverの設定

qmailのデーモンはtcpserverから起動されます。tcpserverはいわゆる接続制御を行ってくれます。

qmailのデフォルトでは/etc/tcp.smtpを使用するのが一般的ですが、vpopmailはPOP Before SMTPの制御の為に動的に/usr/local/vpopmail/etc配下に、このtcp.smtpとPOPログイン情報を追加したtcp.smtp.cdbを作成しますので、デフォルト設定を変更するファイルは/usr/local/vpopmail/etc/tcp.smtpになります。

今回はsmtpに対するアクセスをローカルエリア内からのみアクセス可能な設定をします。自宅の環境はネットワークが192.168.0.0/24となっています。

/usr/local/vpopmail/etc配下にtcp.smtpという名前でファイルを作成します。中身は以下の様に設定します。

/usr/local/vpopmail/etc/tcp.smtp
192.168.0.:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""

一旦vpopmailを組み込んだqmailが動作してしまえばtcpserverが認識できるcdb形式のファイルは自動的に作成されるのですが、始めは一応手動で作成しておいた方がよさそうです。以下のコマンドで/usr/local/vpopmail/etc/tcp.smtp.cdbが作成されます。

# /usr/local/bin/tcprules /usr/local/vpopmail/etc/tcp.smtp.cdb /usr/local/vpopmail/etc/tcp.smtp.tmp < /usr/local/vpopmail/etc/tcp.smtp

今回はsmtpに対する制限だけを説明します。pop3についても制限をかけることが出来ますが、今回は省略します。

POP Before SMTPタイムアウトの設定

POPへのアクセス後一定時間経ったらSMTPの許可リストをクリアするために、cronで5分周期程度でプログラムを実行させる必要があります。

crontab -eでcrontabに以下の一行を追加します。

*/5 * * * * /usr/local/vpopmail/bin/clearopensmtp > /dev/null 2>&1

/var/qmail/rcの作成

portsからqmailをインストールすると、/usr/local/etc/rc.d/qmail.shの実体は/var/qmail/rcにシンボリックリンクされています。しかし実際にはそのファイルは存在しませんので、一から作る必要があります。

以下にサンプルのrcファイルを示します。

/var/qmail/rc (/usr/local/etc/rc.d/qmail.sh)
#!/bin/sh
case $1 in
start)
        echo "Start qmail ..."
        exec env - PATH="/var/qmail/bin:$PATH" \
        qmail-start ./Maildir/ splogger qmail &

        /usr/local/bin/tcpserver -v -u 82 -g 81 \
        -x /usr/local/vpopmail/etc/tcp.smtp.cdb 0 smtp \
        /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &

        /usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup hijiki.net \
        /usr/local/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir &
        ;;
stop)
        echo "Stop qmail ..."
        PID=`/bin/ps -afwww | grep qmail | awk '{print $1}'`
        if [ ! -z "$PID" ] ; then
                /bin/kill ${PID} 1> /dev/null 2>&1
        fi
        ;;
status)
        /bin/ps -afw | grep qmail
        ;;

*)
        echo "usage: `basename $0` {start|stop|status}" >&2
        exit 64
        ;;
esac

非常に難解ですが、これもqmailの特徴でqmail単体では非常にシンプルなメール配送しか行わず、他のアドインソフト(tcpserver,vpopmaill等)を色々組み合わせて順番に指定して複雑な機能を実現する形を取っています。

qmailの起動

既に他のMTAが動いている場合は止めて下さい。またPOPサーバも停止します。ここからしばらくはメールの送受信が行えなくなりますので手際よく作業を行って下さい。

sendmailの停止(必要に応じて作業)

以下のコマンドで停止します。

# sh /etc/rc.d/sendmail stop

後は再起動時に自動でsendmailが立ち上がらないように/etc/rc.confを修正します

/etc/rc.conf
sendmail_enable="NONE"

Postfixの停止(必要に応じて作業)

以下のコマンドで停止します。

# postfix stop

後は再起動時に自動でPostfixが立ち上がらないように/usr/local/etc/rc.d/postfix.shをpostfix.sh.norun等にリネームします。

popの停止(必要に応じて作業)

popデーモンをinetd経由で起動していると仮定します。

/etc/inetd.confのpop3の行をコメントアウトします。

/etc/inetd.conf
#pop3 stream tcp nowait root /usr/local/libexec/qpopper qpopper

最後にinetデーモンにHUPシグナルを送ればpopサーバは停止します。

# killall -1 inetd

mailer.confの編集

FreeBSDは/usr/sbin/sendmail等は全てmailwrapperというプログラムにシンボリックリンクが張られていて、/etc/mail/mailer.confで定義することにより自由に各種コマンドを別のMTAのものに入れ替えることが出来ます。

まあ、既にPostfix等別のMTAを使ったことのある人には説明は不用ですが、今回はqmailを使うのでmailer.confを以下のように設定します。前のファイルをバックアップするかどうかはお任せします。

/etc/mail/mailer.conf
sendmail        /var/qmail/bin/sendmail
send-mail       /var/qmail/bin/sendmail
mailq           /var/qmail/bin/qmail-qread
newaliases      /var/qmail/bin/newaliases
hoststat        /var/qmail/bin/qmail-tcpto
purgestat       /var/qmail/bin/qmail-tcpok

qmailの起動

さて、いよいよqmailを起動します。別にOSをrebootしてもいいのですが、以下のコマンドで起動て、その直後にステータス確認を行いましょう。

# /usr/local/etc/rc.d/qmail.sh start
Start qmail ...
# /usr/local/etc/rc.d/qmail.sh status
61154 p0 S+ 0:00.01 /bin/sh /usr/local/etc/rc.d/qmail.sh status
61156 p0 S+ 0:00.00 grep qmail
84983 p0- I 0:00.10 qmail-send
84984 p0- I 0:00.01 /usr/local/bin/tcpserver -v -u 82 -g 81 -x /usr/local/vpopmail/etc/tcp.smtp.cdb 0 smtp /var/qmail/bin/qma
84985 p0- I 0:00.01 /var/qmail/bin/splogger smtpd 3
84986 p0- I 0:00.51 /usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup hijiki.net /usr/local/vpopmail/bin/vchkpw /var
84987 p0- I 0:00.02 splogger qmail
84988 p0- I 0:00.01 qmail-lspawn ./Maildir/
84989 p0- I 0:00.00 qmail-rspawn
84990 p0- I 0:00.01 qmail-clean

上記のようにqmail-*が沢山起動していればとりあえずOKだと思います。

動作確認

Windows等のメーラーでアカウント設定する場合、アカウント名には「ユーザ名%ドメイン名」の形式で指定します。別に%は@でも大丈夫そうですが、一応言われたとおりに設定して下さい(笑)。

あとはローカル配送、外へ向かっての配送、外からの受信を確認します。

おわりに

ドメインの追加(vadddomain)以外のユーザの追加等はqmailの再起動なしに行うことができます。

コマンドラインからの設定が面倒な人にはqmailadminというWeb用ツールがお勧めです。ただし、このCGIはApacheのsuexec環境では動作させることができませんでした。一応それでも動作確認はしたのですが別にこれといって特筆するべき事も無いので説明は省略します。

興味のある方はqmailadminも入れてみて下さい。

2004/11/14

Namazuを入れてみた(日記)

そろそろ記事が一杯になってきたので、有名なNamazuによる全文検索システムを導入してみました。
既に左のメニューに入力フィールドが表示されていると思います。ご活用下さい。頑張ってエントリ増やしますから。

特に設定については難しいこともなかったので省略します。色々なサイトを2〜3個見れば設定出来るようになります。

2004/11/13

FireFoxを使っている(Internet)

ここ数日FireFoxを使ってWebサーフィングしていますが、なかなかいい感じです。

タブブラウザ機能も便利だし、他のタブブラウザと違って、一つしか表示していないときはIEと同じように表示されるし。

また、画面内文字検索がウインドウ下部に出て入力した文字をリアルタイムに検索してくれて便利です。ちょっと残念なのが、テキスト入力フィールド内の検索が出来ないことかな。

あと、MovableTypeでエントリ編集しているとJavaScriptでリンクの作成が簡単にできるボタンがIEでは付くのですが、FireFoxでは使えなかったりもします。

Web検索も画面右上の入力フィールドに文字列を入れるだけで日本の検索エンジンをサーチしてくれるし、細かいところでIEを抜いています。あとはIEとの互換性が高まれば完璧ですね。

なんかfan clubも出来たようなのでメールマガジンに登録してみました。どんな内容が届くのかな。

2004/11/12

MTAのStatic Route(Mail)

はじめに

各MTAのメールと特定の別MTAに強制的に転送するやり方を調べてみました。真面目に全てのMTAで転送確認を行いました。

今のところ

  • qmail
  • sendmail(m4,cf,CF)
  • Postfix

について調べました。

qmail

新たなcontrolファイルを作成します。以下の例を参考にしてください。

/var/qmail/control/smtproutes
:転送先アドレス:25

頭にコロンが付いているのを気をつけて下さいね。あとはMTAを再起動すればOKです。

sendmail

sendmailはm4とcf,CFの設定方法を説明します。CFについては想像で書いています。

m4

sendmail.mcに以下の一行を追加します。

/etc/mail/sendmail.mc
define(`SMART_HOST',`smtp:[転送先アドレス]')dnl

あとはm4プリプロセッサを起動してcfファイルを作成し、sendmailを再起動すればOKです。

cf

今時cfを直に編集する人はいないでしょうが、一応以下の一行を追加すれば出来ます。

/etc/mail/sendmail.cf
DSsmtp:[転送先アドレス]

CF

CFを使っている人は以下の一行を追加します。

/*/sendmail.def
DEFAULT_RELAY='smtp:[転送先アドレス]'

あとはCFツールでsendmail.cfを作成して、sendmailを再起動します。

Postfix

main.cfに以下の行を追加します。

/usr/local/etc/postfix/main.cf
relayhost = [転送先アドレス]

あとはpostfix reloadでOKです。

おわりに

他のMTAについても随時追加していきたいと思います。

Virtual PC 2004でLinux(Linux)

たまには浮気をしてみたいと考え、Virtual PC上で主要なディストリビューションのLinuxをインストールして、 ちょっとだけ使ってみた。それぞれの感想を一言二言エントリします。

  • CentOS 3.4
    RHEL ESの互換OSとして便利に使えるCentOSですが、やはり下のRHEL ES 3 UPDATE 4と同じ現象で、 インストール時にグラフィカルを選ぶとVPCがエラーになってしまいます。
    ただし、今回はそれでもXパッケージとGnomeを入れて、インストール後にstartxしてみたら、ちゃんとXも動きました。
  • Red Hat Enterprise Linux ES 3 UPDATE 4
    http://vpc.visualwin.com/を見ると、 RHEL ES3は動作OKと書いてあるが、UPDATE 4のCDでグラフィカルインストールを行うとVPCがリセットされてしまいました。テキストモードでは問題なくインストール出来ました。 Xのパッケージはインストールしなかったので、テキストモードでインストール後にXが起動するかどうかは不明です。
  • Fedora Core 3
    GUIでとりあえずインストールしてみた。一応最後までインストーラーは動くけど、再起動後自動的にGUIモードにならない。 オマケにCUIモードでログインしようとしてもうまく入れない。
    実はこれ以上検証していません。ま、とりあえずちゃんとは動きませんでした。

    http://vpc.visualwin.com/Fedora Core 3 Final Notesを見て、その通りに設定したらちゃんと動きました。英語ですが、 懇切丁寧に書かれているので必見です。
  • Fedora Core 1
    GUIでもCUIでも簡単にインストールできた。ブートローダのGRUBは使いやすそう。
    aptが標準で入っていないので適当にググってrpmからインストールして使えるようになった。
    ミニマムインストールしたけれど、なんでCannaとWnnが入るんだろう。 Xもemacsも入れていないのだから勝手に入れるなって感じ。
  • Fedora Core 2
    GUIモードではインストールできず。CUIでインストールしても起動時にinitセッションがエラーで終了してしまう。 VirtualPCでは動作しないという報告があちこちであるけど、そのとおりだった。
    こちらに書いてある情報の通りにテキストモードでインストールするとうまくいくみたいです。 でも、既にCore 3が出ているのであまり意味が無いですね
  • Debian 2.0
    先ずインストールCDの入手方法が難解だった。それでもなんとか作成してインストール。 CUIのインストールでも特に悩むことなくインストールできた。
    apt-getでunstableでdist-upgradeしたら動かなくなった。 リスキーな事は止めて再度testingでdist-upgradeしたら大丈夫だった。
  • Vine Linux 2.6r4
    CD一枚でインストールできるのがいい。英語と日本語しかサポートしていないのね。
    最小インストールして、apt-getして、Xとgnome入れてみたけどばりばり動く。
    インストール時のパーテション設定で唯一簡単に/homeとか/varとかを別パーテションにする設定が簡単にビジュアルに行えた気がする。
  • Knoppix 3.7
    最新版が出たので、isoイメージから起動してみた。CD直接起動は試していませんが、 きっとFreesbieみたいにCDからだと遅いんだろうな。
    特に問題なくXも起動して見た目はちゃんと動いたみたいです。
    RescueCDの代わりになりますね。

感想としてはVine Linuxがいいカンジに思った。 Fedora Core 2を試せなかったのが残念だけど、 Fedora自体がtest版という雰囲気もあるので、もう一台UNIXサーバを構築するときにはVine Linuxが最有力候補かもしれない。

今はFedora Core 3だけがゲストPCとしてインストールされています。職場ではRedhat ESを使っているので、 まあ仕事の延長というかLinuxの勉強を余儀なくされているのでこういう時にVirtualPCは便利ですね。 vmwareだとkernelの修正なしにFedora Core 3も動くみたいですが…

2004/11/ 7

FreeBSDでqmail(Mail)

はじめに

必要に迫られて、MTAの一つであるqmailを学ぶことになりました。今のところ自宅サーバのMTAはPostfixで順調に動いているのですが今回qmailをセットアップしたのでその記録をエントリします。

セットアップの前提条件として

  • Virtual Domain(複数ドメイン)対応
  • POP Before SMTPを実装

を含んでいます。APOPには今回は対応しません。

必要なパッケージ

qmailを運用させるのに必要なパッケージは以下の通りです。

  • qmail
  • ucspi-tcp
  • checkpassword
  • daemontools
  • relay-ctrl

portsを最新にして、portinstall等からインストールして下さい。

※もし、qmailの付与するヘッダの日付がGMTじゃなく、localtime(JST)で表示させたい場合は先に以下の設定をしてパッチの準備をしておきます。

# cd /usr/ports/mail/qmail/files
# fetch http://mirror.averse.net/pub/FreeBSD/ports/local-distfiles/sada/qmail-date-localtime.patch.gz
# gzcat qmail-date-localtime.patch.gz > patch-date-localtime
# rm qmail-date-localtime.patch.gz

※一応標準設定で不正中継対策は大丈夫なように出来ていますが、「telnet relay-test.mail-abuse.org」 で全てのチェックをパスしたいときには先に以下の設定をしてパッチの準備をしておきます。

# cd /usr/ports/mail/qmail/files
# fetch http://www.qmail.org/qmail-smtpd-relay-reject
# mv qmail-smtpd-relay-reject patch-qmail-smtpd-relay-reject

簡単にそれぞれのパッケージの説明をします(間違っているかもしれません)。

qmail MTA本体
ucspi-tcp qmailをセキュアな状態で運用するためのwrapper
tcpserverというプログラムからqmailの各種プログラムを呼び出す
checkpassword popでメール受信する際に行うパスワードチェックプログラム
qmailのパッケージに入っているpop3デーモンが呼び出す
daemontools relay-ctrlの有効期限クリア処理をcronから呼び出すときに必要
relay-ctrl qmailでPOP Before SMTPを実現するためのwrapper

qmailの設定(標準編)

先ずは普通にメインとなるドメイン一本でメールの送受信が行えるように設定しましょう。

本エントリではメインとなるドメイン名は「hijiki.net」と記述しますので間違ってもそのまま自分の環境にコピペせずに自分の環境で利用するドメイン名を記述してください。

/var/qmail/controlの設定

qmailの各種初期設定情報は/var/qmail/controlディレクトリ配下に準備します。設定するマシンのIPアドレスがグローバルアドレスでネームサーバで逆引き設定がされている場合は以下のコマンドで自動で設定されます。

# /var/qmail/configure/config

私の環境では上記コマンドを実行するとプロバイダの名前が各種設定ファイルに登録されてしまうので、自分で/var/qmail/controlディレクトリ配下のファイルを編集する事になりました。以下に個々のファイルの設定内容を示します。

/var/qmail/control/defaultdomain
hijiki.net

↑これは@以下が省略されたメールを送信した際に自動的に付与するドメイン名です。

/var/qmail/control/locals
localhost
hijiki.net

↑受信するホスト名ドメイン名を記述します。これはqmail-sendというプロセスが参照します。

/var/qmail/control/rcpthosts
localhost
hijiki.net

↑受信するホスト名ドメイン名を記述します。これはqmail-smtpdというプロセスが参照します。後述するVirtual Domainを設定する時にもこのファイルをいじります。

/var/qmail/control/me
hijiki.net

↑自サーバのFQDNを指定します。

/var/qmail/control/plusdomain
net

↑ドメイン部が+で終わっている場合にその後ろに付与する文字列を指定します。何の為にあるのかよく分かりません。適当でいいと思います。

aliasの設定

qmailのaliasはファイル形式で1ファイル1アドレスとなっています。/var/qmail/aliasの下を見ると以下の三つのファイルがあると思います。

# cd /var/qmail/alias
# ls
.qmail-mailer-daemon .qmail-postmaster .qmail-root

それぞれの中を覗くと空っぽになっています。ファイル名は「.qmail-」以下の文字列がユーザを指しており、例えば.qmail-infoというファイルを作成すると、それはinfo@hijiki.netに対するalias定義という事になります。

とりあえず上記三つのファイルの中にmailer-daemon@hijiki.net(以下略)に来たメールをuser1に転送するように設定しましょう。この操作はpostmaster,rootについても同じ様に行って下さい。

/var/qmail/alias/.qmail-mailer-daemon
&user1

これでmaile-daemon@hijiki.netに来たメールはuser1@hijiki.netが受け取ることが出来ます。

ちょっと補足ですが、qmailはメールを受信した際に先ず/var/qmail/aliasを見て宛先を確認し、次にpasswd内のユーザ一覧を見ます。まあ、更にユーザ個別のalias設定とかも出来るのですが、それは置いておくと、どこにも配信先がない場合は送信元にエラーメールが返信されます。

しかし、/var/qmail/alias/.qmail-defaultファイルの中に&user1を記述しておくと、宛先不明のメール全てをuser1が受け取ることが出来ます。

tcpserverの設定

qmailのデーモンはtcpserverから起動されます。tcpserverはいわゆる接続制御を行ってくれます。

今回はsmtpに対するアクセスをローカルエリア内からのみアクセス可能な設定をします。自宅の環境はネットワークが192.168.0.0/24となっています。

場所はどこでもいいのですが、/etc配下にtcp.smtpという名前でファイルを作成します。中身は以下の様に設定します。

/etc/tcp.smtp
192.168.0.:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""

tcpserverはplain text状態のtcp.smtpファイルを認識する事が出来ないので、cdb形式のファイルに変換します。以下のコマンドで/etc/tcp.smtp.cdbが作成されます。

# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

今回はsmtpに対する制限だけを説明します。pop3についても制限をかけることが出来ますが、今回は省略します。

relay-ctrlの設定

relay-ctrlはqmailのsmtpとpopを監視し、POP Before SMTPを実現するプログラムですが、POPへのアクセス後一定時間経ったらSMTPの許可リストをクリアするために、cronで1分周期でプログラムを実行させる必要があります。

普通にportinstallでrelay-ctrlを入れたのなら、後はcrontab -eでcrontabに以下の一行を追加します。

* * * * * /usr/local/bin/envdir /usr/local/etc/relay-ctrl /usr/local/bin/relay-ctrl-age

ここでenvdirを使用して/usr/local/etc/relay-ctrl配下の環境変数を設定する為、daemontoolsが必要だったのです。

デフォルトでPOPタイムアウト時間は900秒(15分)になっています。/usr/local/etc/relay-ctrl/RELAY_CTRL_EXPIRYの中身を変更すればタイムアウト時間の調整が行えます。

/var/qmail/rcの作成

portsからqmailをインストールすると、/usr/local/etc/rc.d/qmail.shの実体は/var/qmail/rcにシンボリックリンクされています。しかし実際にはそのファイルは存在しませんので、一から作る必要があります。

今回のqmailの設定は

  • tcpserverを使う
  • pop3はqmail添付のものを使う
  • relay-ctrlを使ってPOP Before SMTPを実現する

となりますので、rcファイルの中身は以下のように設定します。

/var/qmail/rc (/usr/local/etc/rc.d/qmail.sh)
#!/bin/sh
case $1 in
start)
        echo "Start qmail ..."
        exec env - PATH="/var/qmail/bin:$PATH" \
        qmail-start ./Maildir/ splogger qmail &

        /usr/local/bin/envdir /usr/local/etc/relay-ctrl \
        /usr/local/bin/relay-ctrl-chdir \
        /usr/local/bin/tcpserver -v -u 82 -g 81 -x /etc/tcp.smtp.cdb 0 smtp \
        /usr/local/bin/relay-ctrl-check \
        /usr/local/bin/fixcrio \
        /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &

        /usr/local/bin/envdir /usr/local/etc/relay-ctrl \
        /usr/local/bin/relay-ctrl-chdir \
        /usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup hijiki.net \
        /usr/local/bin/checkpassword \
        /usr/local/bin/relay-ctrl-allow \
        /var/qmail/bin/qmail-pop3d Maildir &
        ;;
stop)
        echo "Stop qmail ..."
        PID=`/bin/ps -afwww | grep qmail | awk '{print $1}'`
        if [ ! -z "$PID" ] ; then
                /bin/kill ${PID} 1> /dev/null 2>&1
        fi
        ;;
status)
        /bin/ps -afw | grep qmail
        ;;

*)
        echo "usage: `basename $0` {start|stop|status}" >&2
        exit 64
        ;;
esac

非常に難解ですが、これもqmailの特徴でqmail単体では非常にシンプルなメール配送しか行わず、他のアドインソフト(tcpserver,relay-ctrl等)を色々組み合わせて順番に指定して複雑な機能を実現する形を取っています。

メールスプールディレクトリの準備

qmailは他のMTA(sendmailやPostfix)と違って、受信したメールは各人のホームディレクトリにスプールされます。

そのために事前にスプール用ディレクトリである~/Maildirを作成します。~/Maildirの下には更に三つのディレクトリがありますので、以下のコマンドを使用して自動で作成しましょう。

# su - user1
> /var/qmail/bin/maildirmake ~/Maildir
> exit
#

この操作はメールを受信する全てのユーザで行って下さい。rootの権限のまま各人のホームディレクトリに作成した場合はchownでそれぞれのユーザの権限に変更を忘れないようにしてください。

qmailの設定(起動編)

既に他のMTAが動いている場合は止めて下さい。またPOPサーバも停止します。ここからしばらくはメールの送受信が行えなくなりますので手際よく作業を行って下さい。

sendmailの停止(必要に応じて作業)

以下のコマンドで停止します。

# sh /etc/rc.d/sendmail stop

後は再起動時に自動でsendmailが立ち上がらないように/etc/rc.confを修正します

/etc/rc.conf
sendmail_enable="NONE"

Postfixの停止(必要に応じて作業)

以下のコマンドで停止します。

# postfix stop

後は再起動時に自動でPostfixが立ち上がらないように/usr/local/etc/rc.d/postfix.shをpostfix.sh.norun等にリネームします。

popの停止(必要に応じて作業)

popデーモンをinetd経由で起動していると仮定します。

/etc/inetd.confのpop3の行をコメントアウトします。

/etc/inetd.conf
#pop3 stream tcp nowait root /usr/local/libexec/qpopper qpopper

最後にinetデーモンにHUPシグナルを送ればpopサーバは停止します。

# killall -1 inetd

mailer.confの編集

FreeBSDは/usr/sbin/sendmail等は全てmailwrapperというプログラムにシンボリックリンクが張られていて、/etc/mail/mailer.confで定義することにより自由に各種コマンドを別のMTAのものに入れ替えることが出来ます。

まあ、既にPostfix等別のMTAを使ったことのある人には説明は不用ですが、今回はqmailを使うのでmailer.confを以下のように設定します。前のファイルをバックアップするかどうかはお任せします。

/etc/mail/mailer.conf
sendmail        /var/qmail/bin/sendmail
send-mail       /var/qmail/bin/sendmail
mailq           /var/qmail/bin/qmail-qread
newaliases      /var/qmail/bin/newaliases
hoststat        /var/qmail/bin/qmail-tcpto
purgestat       /var/qmail/bin/qmail-tcpok

qmailの起動

さて、いよいよqmailを起動します。別にOSをrebootしてもいいのですが、以下のコマンドで起動て、その直後にステータス確認を行いましょう。

# /usr/local/etc/rc.d/qmail.sh start
Start qmail ...
# /usr/local/etc/rc.d/qmail.sh status
62183 p0 I 0:00.03 qmail-send
62186 p0 I 0:00.04 /usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup hijiki.net /usr/local/bin/checkpassword /usr/l
62187 p0 I 0:00.01 splogger qmail
62188 p0 I 0:00.01 qmail-lspawn ./Maildir/
62189 p0 I 0:00.00 qmail-rspawn
62190 p0 I 0:00.00 qmail-clean
63440 p0 S+ 0:00.01 /bin/sh /usr/local/etc/rc.d/qmail.sh status
63442 p0 S+ 0:00.00 grep qmail

上記のようにqmail-*が沢山起動していればとりあえずOKだと思います。

動作確認

あとはローカル配送、外へ向かっての配送、外からの受信を適当なメーラーを使って確認します。

Virtual Domain対応

qmailのVirtual Domain対応はSendmailやPostfixと違って、メインで受けるドメイン(今回はhijiki.net)とその他に受け取る追加ドメインとで扱い方が大きく変わります。

具体的にはVirtual Domain対応の専用ユーザを作成し、そのユーザに配信されてくるVirtual Domainの全てのメールを、その専用ユーザ配下のalias設定ファイルで目的のユーザに配信する形式を取ります。

rcpthostsにドメイン追加

今回はVirtual Domainを二つ用意すると仮定して説明します。ドメイン名はexample.comとexample.netの二つにしましょう。

先ずは前の章で説明したrcpthostsにこの二つのドメインを追加します。

/var/qmail/control/rcpthosts
localhost
hijiki.net
example.com
example.net

転送設定と専用ユーザの作成

Virtual Domain宛に来たメールを一手に受けるユーザとして適当な名前の一般ユーザを作成してください。adduserの使い方は知っていますよね?

今回はvirtualというユーザを作成します。このユーザはこの後の設定で転送されてきたメールを更に個々のユーザに配信するだけの役目なので、~/Maildirディレクトリの作成は不要です。

転送設定ですが、/var/qmail/control/virtualdomainsというファイルを新規に作成して、以下の例の様に設定します。

/var/qmail/control/virtualdomains
example.com:virtual-com
example.net:virtual-net

設定ファイルを見ると、コロンの左がVirtual Domain名で右が転送するユーザ名っぽいですが、ユーザ名virtualの後に「-com」「-net」と付いています。

これでもちゃんとvirtualユーザに転送されますので、間違ってvirtual-comユーザとか作らないようにしてください。

このハイフン以下の名前は後でも説明しますがそれぞれのドメイン名を識別する為の名前です。example.comとexample.netの両方のドメインのメールをただ一人のvirtualユーザが受け取って、仮にyotan@example.comはfooに、yotan@example.netはbarに転送したい時に区別させるためにこの様に識別名を付与します。

もちろん、Virtual Domain名毎に転送用アカウントを作っても構いません。

転送設定

それでは前章に引き続きexample.comとexample.netに来たメールを個々のユーザに振り分ける設定をしましょう。

ここから先の説明は全てvirtualユーザでの作業となります。~virtualは/home/virtualという前提で説明します。

  • yotan@example.comのメールはfooユーザが受ける
  • yotan@example.netのメールはbarユーザが受ける

上記設定の場合、qmailのaliasを以下のように設定します。

/home/virtual/.qmail-com-yotan
&foo
/home/virtual/.qmail-net-yotan
&bar

※当たり前ですが、foo,barユーザは実在して~/Maildirを作成しておいてくださいね。

冒頭で説明した通り、qmailのaliasは.qmail-defaultで知らない宛先のメールを転送できますが、今回の場合も応用で、/home/virtual/.qmail-com-defaultといった具合にファイルを作って転送させる事もできます。

設定の有効化

rcpthostsを変更したら、qmail-sendプロセスを再起動するかHUPシグナルを送ります。簡単なのは以下の操作ですね。

# killall -HUP qmail-send

もちろん/usr/local/etc/rc.d/qmail.shをstop/startしてもいいです。

おわりに

「qmailはシンプルで設定が簡単だ」とどこかのサイトに書いてありましたが、実際Virtual Domainも含めて一つ一つ実験しながら設定すると、ずいぶんと時間が掛かってしまいました。

設定の簡単さ(情報の多さ、分かりやすさ)から見ると、Postfix > Sendmail > qmailといった感じです。

しかし、qmailは軽いのと、幾つものプログラムを組み合わせて自由にカスタマイズが可能という点は優れていると思います。今回はapopについて記述しませんでしたが、色々なサイトを見ていると多種のapop対応プログラムが提供されているみたいで、どれを適用したらいいのか分からず、今回は見送りました。

他にもメールキューの管理を簡単にするqmHandleとかも試しました。色々とまだまだ便利なツールがありそうですので、また別の機会にエントリしたいと思います。

#今回は設定もそうだけど、このエントリを書くのも疲れました(^◇^;)

2004/11/ 5

FreeBSD 5.2.1R→5.3Rアップグレード(FreeBSD, Install)

はじめに

本エントリではFreeBSD 5.2.1-RELEASEからFreeBSD 5.3-RELEASEにcvsupを使ってソースファイルからアップグレードする際の注意事項について書きました。

5.3Rになってもちろんここでは書ききれない程の修正や改良が入ってその全てを紹介することは出来ませんが、特に5.2.1から大きく変わった事と言えば以下のものだと思います。

  • 標準のXがXFree86からXorgに変更
  • gccの大幅なバージョンアップ
  • bindが9に上がって標準でchroot環境で動作するようになった

5.3Rのソースツリー取得

それではFreeBSD 5.3Rのソースツリーを取得しましょう。この記事を読んでいる日によっては5.3Rではなく、5.3R-p??になっているかもしれません。

以下のファイルを適当なディレクトリにsrc.cvsupとでも名前を付けて保存して「cvsup src.cvsup」を実行しましょう。

*default host=cvsup.jp.freebsd.org
*default base=/usr/local/etc/cvsup
*default prefix=/usr
*default release=cvs tag=RELENG_5_3
*default delete use-rel-suffix
*default compress
src-all

basesystemのbuild

先ずはbasesystemのビルドを行います。後の章で説明するkernelのビルドの前に行っておく必要があります。

/usr/objパーティションに十分な空きがあるのを確認後、以下のコマンドを打って数時間待機します。その間は別にログアウトしても構いません。

# cd /usr/src
# make buildworld >& world.log &

進行状況を確認したくなったら「tail -f /usr/src/world.log」で確認しましょう。

ちなみにbuildworldが終わるまで次の章のbuildkernelは実行してはいけません。おとなしく待ちましょう。

kernelのbuild

今まで5.2.1でGENERICカーネルを使用していた人は別に問題ないのですが、/usr/src/sys/i386/conf/GENERICの内容が増えたり減ったりしているので自前のカーネルを使用している人は元のGENERICファイルをベースに新たにオリジナルconfigファイルを作った方がいいと思います。

私は不要なLANカードやFirewire、RAID関連のオプションを削って独自の設定ファイルを使用しています。

さて、それではカーネルをビルドしましょう。以下のコマンドを打って数分待機します。例ではconfigファイル名はRABIになっていますので適宜修正してください。

# cd /usr/src
# make buildkernel KERNCONF=RABI

システムの入れ替え

カーネルのインストール

前章で作ったカーネルをインストールします。以下のコマンドでインストールします。KERNCONFのパラメータはGENERICの人は指定しなくて結構です。

# cd /usr/src
# make installkernel KERNCONF=RABI

mergemasterの実行

まだ再起動しないでください。以下のコマンドで/etc配下のファイル等を5.3R対応にします。

# mount -a
# mergemaster -svia
# mergemaster -svir

二番目のmergemasterは非常に手間がかかります。基本的には全然いじったことないファイルは「i」で上書き。自分で設定を書き換えたファイルは「m」でマージモードに入ったら、差分行一つ一つで左(旧)と右(新)のどちらを採用するか「l」「r」で決めていきます。

/etc/rc.d配下は普通は変更なんてしないのに殆ど全てのファイルでマージするか聞いてくるのでちょっとうっとうしいです。

実はそれでも、master.passwordとgroupがうまくマージ出来なかったので手動で追加設定しました。

proxy,_pflogdのユーザとproxy,authpf,_pflogdのグループが追加されていないと、basesystemのインストールが停止してしまいます。

basesystemのインストール

カーネルを差し替えたらシングルユーザモードで起動します。rootのコマンドプロンプトが出たら以下のコマンドでbasesystemをインストールします。

# cd /usr/src
# make installworld

/etc/namedbが今まで実体だったのが、/var/named/etc/namedbに移動しましたので、namedを動かす人は、/etc/namedbを別の名前にmvしておきましょう。/etc/rc.d/namedが起動するときに自動的に/etc/namedbがシンボリックリンクとして作成されます。

ここまで終了したら再起動すれば基本的にはFreeBSD 5.3Rへのアップグレードは完了です。

Xorgを入れる

つづいてFree86をXorgに入れ替えましょう。

portsコレクションは最新になっていますか?なっていなかったら以下のファイルを適当なディレクトリにports.cvsupとでも名前を付けて保存して「cvsup ports.cvsup」を実行しましょう。

*default host=cvsup.jp.freebsd.org
*default base=/usr/local/etc/cvsup
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix
*default compress
ports-all

さて、/usr/ports/UPDATINGを読んでいくと、20040723の記事にXorgへの移行の仕方が書いてあります。この通りにすれば良いのですが、簡単に説明しますと。

  • /etc/make.confに「X_WINDOW_SYSTEM=xorg」を追加
  • 「pkg_delete -f /var/db/pkg/imake-4* /var/db/pkg/XFree86-*」を実行
  • 「cd /usr/ports/x11/xorg && make install clean」を実行
  • 「pkgdb -F」を実行(何か聞かれたら全てYesと答える)

でいけると思います。もちろん全てソースからビルドしますので時間はかかりますが、その時点での最新のXorgが入ります。

Xの設定は「xorgcfg」で行えるのですが…実は自宅のマシンはコンソールレスなので実験できていません。
/.Jの記事を引用します。

xorgcfgを使ってxorg.conf(XFree86におけるXF86Config)の雛型を作って、 それにこれまで使ってたXF86Configの内容(DefaultDepthとか)をmergeしてセットアップ終了。 デスクトップ環境を含むXアプリケーションも予想通り再コンパイルなしに無事起動しました。

portsを再コンパイルする

基本的にはインストール済みの全てのportsコレクションをビルドし直した方がいいのですが(gccが新しくなったため)、gcc++の標準ライブラリであるlibstdc++を使用しているアプリケーションは再コンパイルが必要です。

2ちゃんねるのFreeBSDスレからの情報ですが、以下のスクリプトを実行すると、libstdc++を使用しているパッケージの一覧が見ることが出来ます。

for f in /usr/local/{bin,libexec,sbin}/* /usr/local/lib/lib*.so.*; do
file $f | egrep -qs 'ELF.*(dyn|share)' && ldd $f | egrep -q 'libstdc\+\+' && pkg_which $f
done | sort -u

私の環境で実行したら以下の結果が出ました。

ImageMagick-6.0.6.2
gettext-0.13.1_1
libfpx-1.2.0.9

よって、ImageMagick,gettext,libfpxを「portupgrade -f パッケージ名」で強制再ビルドしてしまいます。

おわりに

一応家の環境では上記手順でうまくアップグレードは完了しました。

それぞれの人の環境によって手順が異なったり増えたりするかもしれません。是非その際はコメント頂ければ幸いです。