Debian sarge を再インストールする機会があったのでログをとっておきました。 せっかく apt-get という便利なインターフェースがあるので、基本的にパッケージ のみを使ってなんとかする方法を試しています(ソースからのリビルド含む)。 こうやったら自分の環境では動いた、という記録ですので自己責任でお試しのこと。
なんてことはなく CD-ROM からインストール。最近は便利になったのでここでつまづくこともないでしょう。ちなみに使ったのは 3.1r1a netinst 版。
各設定ファイルの内容を以下に書いておく
# vi /etc/network/interfaces
primary network について以下のように設定
auto eth0 iface eth0 inet static address 192.168.0.10 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1
リゾルバを設定
# vi /etc/resolv.conf search avoidnotes.org nameserver 192.168.0.1
hostsの設定
# vi /etc/hosts 127.0.0.1 localhost 192.168.100.110 hostname.avoidnotes.org hostname 192.168.100.110 avoidnotes.org
てな感じ。
# vi /etc/apt/sources.lst
sarge の行に contrib, non-free 加える security の行に non-free 加える etch, sid の行加える
# vi /etc/apt/preferences
以下の内容を記述
Package: * Pin: release a=testing Pin-Priority: 105 Package: * Pin: release a=unstable Pin-Priority: 90
testing から借りてきたものは update の対象になる unstable からのものはならない。
ユーザーやグループの移行は各アプリケーションのセットアップ前にやっておいたほうが無難かな? rsync を使う場合、移行元 で以下のコマンドを実行
# rsync -arv -e ssh /home 移行先ホスト名:/home
移行するファイルには root 権限でないと読めないファイルが含まれているはずなので、移行先ホストで
# vi /etc/ssh/sshd_config
として、PermitRootLogon を yes にしておくか、shared key 方式を使うなりして、とにかく root 権限で通信できるようにしておかないとダメ。PermitRootLogon yes はセキュリティの関係でいやな感じだが一時的なので気にしないか、AllowUsers に "@192.168.100.10 みたいに書いてホスト制限するとかするとよい。ちなみにうちはインターネット側の接続を切って作業するという対応をしました。
/etc/passwd, /etc/group, /etc/shadow 等は不足分をエディタでコピー&ペーストというアナログな方法でよいが、apt-get でインストールする時に作成されるユーザーの場合 uid, gid が以前と違うものになる確率が非常に高いので、passwd, group, shadow 等から移行するのは一般ユーザーだけにしておいたほうが無難。たとえば vpopmamil なんかは既存の vpopmail ユーザーがいるとパッケージからインストールする時にuid/gid が違うと言ってエラーを吐く。
vpopmail は domains 以下だけをコピーしておけば十分だと思う (これは vpopmail導入後にやればよい)
apt-get でインストール
# apt-get build-dep apache2 # apt-get install apache2
とりあえずモジュールが有効になってなかったので
# a2enmod suexec
する。これは
# ln -s /etc/apache2/mods-available/suexec.load /etc/apache2/mods-enabled/suexec.load
するのと同じこと、だと思う。 で、/etc/apache2/sites-enabled/hogehoge.com に
SuexecUserGroup username groupname
とかしておく
# vi /etc/apache2/apache2.conf
AddHandler で cgi が有効にされてないのでコメントアウトを外しておく
/home/*/public_html 関連のディレクティブのコメントをはずしてあげる。ExecCGI 付け加える。
sites-enabled/* ファイルをそれぞれ開いて
Userdir public_html Userdir disabled root hoge foo (必要なだけ)
加える(バーチャルドメイン運用時のバッドノウハウ)。
Debian の suexec は suexec-docroot=/var/www としてコンパイルされているため、/home 以下にドキュメントルートを置きたい場合などに不都合が生じる。Apache2 の場合 suexec-userdir=public_html でコンパイルされているのでさほど不都合は生じないかもしれないけど。suEXEC-docroot を変えたい場合 suEXEC モジュールのみを作り変えるとよい。
# mkdir ~/apache2-common # cd ~/apache2-common # apt-get source apache2-common # cd apache2-2.0.54/upstream/tarballs # tar zxf httpd-2.0.54.tar.gz # cd httpd-2.0.54
suexec のドキュメントを参考にしながらconfigureする.
# ./configure ¥ --enable-suexec ¥ --with-suexec-bin=/usr/lib/apache2/suexec2 ¥ --with-suexec-caller=www-data ¥ --with-suexec-userdir=public_html ¥ --with-suexec-docroot=/home ¥ --with-suexec-uidmin=1000 ¥ --with-suexec-gidmin=1000 ¥ --with-suexec-logfile=/var/log/apache2/suexec.log
make してできた suexec をコピーすれば OK。不安なようなら元の suexec はバックアップしておくように。
# make suexec # cp support/suexec /usr/lib/apache2/suexec2
あとは上記の設定をして apache を再起動
$ sudo a2enmod rewrite
# vi /etc/apache2/apache2.conf
以下を追加
ServerTokens ProductOnly ServerSignature Off
$ sudo apt-get install ucspi-tcp-src
fakeroot も入れろと言われるので入れる
$ build-ucspi-tcp $ /tmp/ucspi-tcp にできたパッケージをインストール
smtp を daemontools 経由で起動する場合いれておく
# apt-get install daemontools-installer # build-daemontools
$ sudo apt-get install qmail-src $ build-qmail
/tmp/qmail に展開していいか?みたいなことを聞かれるので yes と答えておく Enter するとインストールの画面になったところでパッチをあてるために別ターミナルを起動。
以下別ターミナルで操作
から ver0.31 をダウンロード
$ cd ~/ $ tar xzvf qmail-smtpd-auth-0.31.tar.gz
smtp-auth パッチと base64 関連のソースを qmail のビルド用ディレクトリにコピーして パッチを適用する。
$ cd /tmp/qmail/qmail-1.03 $ cp ~/qmail-smtpd-auth-0.31/* ./ $ patch -p0 < auth.path
Makefile と qmail-smtpd.c にうまくパッチがあたらない。 ちなみにこのまま無視して make すると base64encode.o が見つからないとかいうエラーが 出て途中で失敗する。
仕方がないのであとは手パッチ。 Makefile.rej と qmail-smtpd.c.rej を見て手動で直す。
$ vi Makefile
具体的には qmail-smtpd: ターゲットを以下のように変更
qmail-smtpd: \
load qmail-smtpd.o rcpthosts.o qregex.o commands.o timeoutread.o \
timeoutwrite.o ip.o ipme.o ipalloc.o control.o constmap.o received.o \
date822fmt.o now.o qmail.o cdb.a fd.a wait.a datetime.a getln.a \
open.a sig.a case.a env.a stralloc.a alloc.a strerr.a substdio.a error.a str.a \
fs.a auto_qmail.o socket.lib
./load qmail-smtpd qregex.o rcpthosts.o commands.o timeoutread.o \
timeoutwrite.o ip.o ipme.o ipalloc.o control.o constmap.o \
received.o date822fmt.o now.o qmail.o cdb.a fd.a wait.a \
datetime.a getln.a open.a sig.a case.a env.a stralloc.a \
alloc.a strerr.a substdio.a error.a str.a fs.a auto_qmail.o `cat \
socket.lib`
qmail-smtpd: \
load qmail-smtpd.o rcpthosts.o qregex.o commands.o timeoutread.o \
timeoutwrite.o ip.o ipme.o ipalloc.o control.o constmap.o received.o \
date822fmt.o now.o qmail.o cdb.a fd.a wait.a datetime.a getln.a \
open.a sig.a case.a env.a stralloc.a alloc.a strerr.a substdio.a error.a str.a \
fs.a auto_qmail.o base64.o socket.lib
./load qmail-smtpd qregex.o rcpthosts.o commands.o timeoutread.o \
timeoutwrite.o ip.o ipme.o ipalloc.o control.o constmap.o \
received.o date822fmt.o now.o qmail.o cdb.a fd.a wait.a \
datetime.a getln.a open.a sig.a case.a env.a stralloc.a \
alloc.a strerr.a substdio.a error.a str.a fs.a auto_qmail.o base64.o `cat \
socket.lib`
変更箇所は各行に base64.o を加えてるだけ。
qmail-smtpd.cは
#include "wait.h" #include "fd.h"
を #include "command.h" の後に、
#define AUTHCRAM
を #define MAXHOPS 100 の前に加えればよい(試す人は一応 qmail-smtpd.c.rej を見て内容を確認してね)。
パッチの適用が終わったら、元のターミナルに戻って Enter を押せばビルドが始まる。 ビルドが終わると qmail パッケージインストールするか?と聞かれるがこの時点ではインストールしない。
exim が qmail とバッティングするので qmail パッケージをインストールする前に削除しておく。
# apt-get remove at exim4 exim4-base ¥ exim4-config exim4-daemon-light mailx mutt ※ echo "exim deinstall" |dpkg --set-selections でもよい
入らなければ依存関係チェックして削除
# echo avoidnotes.org > /var/qmail/control/me
少なくともこれだけは設定しないと起動しない。
# echo avoidnotes.org > defaultdomain # echo hostname.avoidnotes.org > locals # echo hostname.avoidnotes.org > plusdomain # echo hostname.avoidnotes.org > rcpthosts
alias_empty の行、procmail 関連を外し、Maildir を有効にする。 popを有効にする場合下のほうにあるqmail-pop3dの起動部分を有効にしておく。 また、Debian のスタートアップスクリプトの場合 qmail-smtpd が smtp-auth で認証 するようになっていないので書き換える。
smtp サービスの起動部分 を以下のように変更
--- 前略
# prevent denial-of-service attacks, with ulimit
ulimit -v 16384
sh -c "start-stop-daemon --start --quiet --user qmaild \
--pidfile /var/run/tcpserver_smtpd.pid --make-pidfile \
--exec /usr/bin/tcpserver -- -R -H \
-u `id -u qmaild` -g `id -g nobody` -x /etc/tcp.smtp.cdb 0 smtp \
$rblsmtpd /usr/sbin/qmail-smtpd /usr/sbin/vchkpw /bin/true 2>&1 \
| $logger &"
/usr/sbin/vchkpw /bin/true の部分が追加したところ。 今回は vpopmail を使うので vchkpw を使っているが、バーチャルドメインを使わない場合、 上記 vchkpw 部分を cmd5checkpw (CRAM-MD5) とかに書き換えるとよい。vpopmail のインストールは後ろのほうを参照。
チェック項目: /usr/sbin/vchkpw の実行権限は root になっているか。 なってないと動きません。(Debian/sid から入れた場合はなってるはず)
vchkpw の権限を確認したら
$ sudo /etc/init.d/qmail restart
$ telnet localhost 25 EHLO localhost
とか打つと
250-avoidnotes.org 250-AUTH LOGIN CRAM-MD5 PLAIN 250-PIPELINING 250 8BITMIME
といったレスポンスが返ってくる。 250-AUTH が返ってきていれば SMTP-AUTH が有効になっていることが確認できる。
$ perl -MMIME::Base64 -e 'print encode_base64("Username\0Username\0Password");'
とかして出てきた結果をコピーしておく。
例:ユーザー名 test@avoidnotes.org / パスワード testpass
$ perl -MMIME::Base64 -e 'print encode_base64("test@avoidnotes.org\0test@avoidnotes.org\0testpass");'
dGVzdC5vcmcAdGVzdC5vcmcAdGVzdHBhc3M=
このパスワードをコピーなりメモなりしておいて
$ telnet localhost 25
する
EHLO localhost 250-avoidnotes.org 250-AUTH LOGIN CRAM-MD5 PLAIN 250-PIPELINING 250 8BITMIME AUTH PLAIN dGVzdC5vcmcAdGVzdC5vcmcAdGVzdHBhc3M= 235 ok, go ahead (#2.0.0)
となれば認証成功。
# su - usernanme /var/qmail/bin/maildirmake /home/username/Maildir
※権限は各ユーザ権限なので su してから作成
# cd /etc/skel # /var/qmail/bin/maildirmake Maildir
※skelに作っておくとよい
qmail でバーチャルドメインを実現可能にする。 パッケージは sid から借りてくることになる。
# apt-get build-dep vpopmail-bin
libglib1.2-dev がないと言われるので
# apt-get install libglib1.2-dev # apt-get build-dep vpopmail-bin
automake とか色々アップデートされるはず
# apt-get install libvpopmail-dev # apt-get install vpopmail-bin
インストールは qmail のところ参照
# vi /var/lib/svscan/vpopmail/log/run
log 内に run がないのは既知のバグなので追加しておく http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=265993
# vi /var/lib/svscan/vpopmail/log/run
以下の内容を記入
#!/bin/sh exec multilog t ./main
各種パーミッションを変更
# chmod 755 /var/lib/svscan/vpopmail/log/run
sticky bit 立てておく
# chmod +t /var/lib/svscan/vpopmail/
/service に登録して supervise されるようにしておく
# ln -s /var/lib/svscan/vpopmail /service/vpopmail
POP before SMTP のデータベースを更新するには clearopensmtp を使う。 Debian パッケージからインストールすると /etc/cron.d/vpopmail-bin に
10,25,40,55 * * * * root /usr/sbin/clearopensmtp
という記述があるので、これでよければ特に変更しなくてもいいのだけど、
*/10 * * * * /usr/sbin/clearopensmtp > /dev/null 2>&1
といった感じに変更しておいた。
localhost からやっても意味がないので外部ホストから試してみるとよい。
$ telnet smtp.hoge.org smtp 220 smtp.hoge.org ESMTP EHLO localhost 250-smtp.hoge.org 250-AUTH LOGIN CRAM-MD5 PLAIN 250-AUTH=LOGIN CRAM-MD5 PLAIN 250-PIPELINING 250 8BITMIME MAIL FROM:test@hoge.org <-- 差し出し人メールアドレス 250 ok RCPT TO:xxx@xxx.ne.jp <--送信先メールアドレス、rcpthosts 以外のホスト名にすること 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1) <--rcpthosts に含まれないからリレー不可というメッセージ QUIT <-- QUITで終了します。 221 smtp.hoge.org Connection closed by foreign host.
$ telnet www.hoge.org pop3 +OK <701.1058746882@smtp.hoge.org> USER hoge@hoge.org <-- USER ユーザー名を入力 +OK PASS hogehoge <-- PASS ユーザーのパスワードを入力 +OK QUIT <--QUITで終了します。 +OK Connection closed by foreign host.
$ telnet www.hoge.org smtp 220 smtp.hoge.org ESMTP EHLO localhost 250-smtp.hoge.org 250-AUTH LOGIN CRAM-MD5 PLAIN 250-AUTH=LOGIN CRAM-MD5 PLAIN 250-PIPELINING 250 8BITMIME MAIL FROM:hoge@hoge.org 250 ok RCPT TO:xxx@xxx.ne.jp 250 ok <-- 今度はうまくいくはず DATA <-- 本文の開始を指示 354 go ahead test <-- 適当に本文を書く . <-- "."を入力しエンターで終了 250 ok 1058746983 qp 705 QUIT <--QUITで終了 221 smtp.hoge.org Connection closed by foreign host.
$ telnet www.hoge.org pop3 +OK <701.1058746882@smtp.hoge.org> APOP hoge@hoge.org 6b234393647eca74170f18780afc689d +OK
パスワードはワンタイムパスワードなので別コンソールで
$ echo '<701.1058746882@smtp.hoge.org>hogehoge' | tr -d '¥n' | md5sum
として算出する
移行するデータは以下
courier-imapには認証に userdb を使う方法と vchkpw を使う方法とがある。 前者は開発側おすすめの方法だが、vchkpw用パスワードファイルを変換する手間があり、頻繁なパスワード変更が予想される場合不便がある。vchkpwを使いたい場合後述のパッケージのリビルドを行なう方法を参照してください。
# apt-get build-dep courier-imap # apt-get install libldap2-dev
courier-imap の新バージョンでは authvchkpw(要するに vpopmail 使って認証する機能)が 無効になっている。このため,courier 用 userdb に変換してやる必要がある。手順は
# mkdir -p /etc/courier/userdb/ # vchkpw2userdb --todir=/etc/courier/userdb # chmod 700 /etc/courier/userdb <-- これやっとかないと makeuserdb でエラーがでる # makeuserdb
とする。あと、設定によるけど authdaemonrc を変えておく必要あり。 /etc/courier/imap 内の設定は
AUTHMODULES="authdaemon"
となっていると思うので変える必要はない。 今までは各設定ファイルにて認証モジュールを決めていたが、それを一手に引き受けるデーモンである authdaemon で行う。で、
# vi /etc/courier/authdaemonrc authmodulelist="authuserdb authpam"
とかしておいて
# /etc/init.d/courier-authdaemon restart
する。
qmailadmin などで頻繁に vpopmail 側の db が変わる場合やっぱり authvchkpw が 欲しい気がするので、ソースパッケージをダウンロードしてきて、debian/rules の
--without-authvchkpw を --with-authvchkpw
に変更してリビルド、インストール
authmodulelist="authvchkpw authpam"
というのが無難かもしれない。パッケージ管理は面倒になるけど。 以下 Courier-IMAP をソースからビルドする手順 あと、http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1614&forum=10&7 によると courier-imapのconfigure前に
$ export CFLAGS="-DHAVE_OPEN_SMTP_RELAY"
とかやんなきゃダメっぽいのでやっておく。
APT-Pinning で testing を apt-line に入れてる場合
# apt-get build-dep courier-imap
しても Dependency が解決されない。これは courier-imap のソースを sid から取ろうとするため。 インストールするのは sarge の courier でいいので一旦 apt-line から testing や unstable を外して apt-get update する。それからもう一度
# apt-get build-dep courier-imap
とすると courier をビルドするのに必要なパッケージがもろもろ入る。 ソースパッケージをビルドするのに必要なツールが入っていなければ
# apt-get install build-essential fakeroot devscripts
して一式入れてから
$ mkdir /tmp/courier $ cd /tmp/courier <-- ここらへんはなんでもいいけどソース展開用フォルダを作ってそこに移動 $ apt-get source courier
として courier のソース一式をダウンロード。 これはユーザー権限でよい。で、
$ cd courier-0.47/ $ vi debian/rules --without-authvchkpw を --with-authvchkpw に変更 $ dpkg-buildpackage -us -c -b -rfakeroot
06-04-04訂正 $ dpkg-buildpackage -us -uc -b -rfakeroot ね
これで courier-0.47 以下に沢山 courier 関連の deb パッケージができるはず。 もしかしたら /var/lib/vpopmail/include/config.h がないとか怒られるかもしれないけど その場合は
# mv /var/lib/vpopmail/include /var/lib/vpopmail/include.old # mv /var/lib/vpopmail/lib var/lib/vpopmail/lib.old
これらは削除でいいと思うが一応。
# ln -s /usr/include/vpopmail /var/lib/vpopmail/include # ln -s /usr/lib/vpopmail /var/lib/vpopmail/lib
とかしておいたらうまくいくかも。
インストールは IMAP に必要な最低限のパッケージだけ入れるなら
# dpkg -i courier-imap_3.0.8-4sarge4_i386.deb courier-authdaemon_0.47-4sarge4_i386.deb ¥ courier-base_0.47-4sarge4_i386.deb
だけ入れればよい。
あとは上に書いてあるとおり
# vi /etc/courier/authdaemonrc > authmodulelist="authvchkpw authpam"
して、
# /etc/init.d/courier-authdaemon restart
すればよい
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=299772 にもある通りソースからリビルドしないといくつか不具合が出る
postmaster ではなく Postmaster の Maildir を読みに行くので Postmaster/Maildir/......qw がないとか言われる。
# ln -s /var/lib/vpopmail/domains/hogehoge.com/postmaster ¥ /var/lib/vpopmail/domains/hogehoge.com/Postmaster
とかすればその場凌ぎにはなる。 致命的なのがユーザーでログインした時、パスワードの変更等をクリックしても真っ白な画面が出てくる だけで何も起きない点。これでもう対処法考えるの面倒になってリビルドした。
以下ソースからのリビルド手順
# apt-get build-dep qmailadmin
特に何もでてこなかった
# cd /tmp # mkdir qmailadmin # cd qmailadmin # apt-get source -b qmailadmin # dpkg -i qmailadmin_1.0.6-1_i386.deb <-- 再インストール
autorespond がないと怒られた。
# apt-get install autorespond
libc6 のバージョンが古いと言われる。これはさすがにアップデートしたくないので
$ mkdir ~/src/autorespond $ cd ~/src/autorespond $ apt-get source autorespond $ cd autorespond-2.0.5 $ dpkg-buildpackage -us -uc -b -rfakeroot $ cd ../; sudo dpkg -i autorespond_2.0.5-1_i386.deb
WEB からのアクセス等は特に問題なくなった。IMAPにもちゃんと反映されているようだ。
# apt-get install stunnel
で stunnel を入れておく
http://www.stunnel.org/examples/tcpserver-vpopmail.html より
#!/bin/sh exec env - PATH="/var/qmail/bin:$PATH" /usr/local/bin/tcpserver -R -H -D -c 100 -v -u vpopmail -g vchkpw 0 pop3s \ /usr/local/sbin/stunnel -T pop3s -p /etc/stunnel.pem -l /home/qmail/bin/qmail-popup example.com /home/vpopmail/bin/vchkpw \ /home/qmail/bin/qmail-pop3d Maildir 2>&1
これを参考に /var/lib/svscan/vpopmail-pop3s 以下を作成
# vi /var/lib/svscan/vpopmail-pop3s/run
#!/bin/sh
SERVERTYPE=pop3s
ulimit -v 4096
exec \
/usr/bin/tcpserver -H -R -D -c 100 -v -u vpopmail -g vchkpw 0 ${SERVERTYPE} \
/usr/sbin/stunnel -T ${SERVERTYPE} -p /etc/ssl/certs/stunnel.pem -l \
/usr/sbin/qmail-popup `hostname`.`dnsdomainname` \
/usr/sbin/vchkpw /usr/sbin/qmail-pop3d Maildir
ログ用のスクリプトも作成
# mkdir /var/lib/svscan/vpopmail-pop3s/log # vi /var/lib/svscan/vpopmail-pop3s/log/run
#!/bin/sh exec multilog t ./main
# chmod 755 /var/lib/svscan/vpopmail-pop3s/log/run
stunnel.pem は http://www.stunnel.org/faq/certs.html あたりを参考に作る config は指定しなくてもよい
# openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/stunnel.pem ¥ -keyout stunnel.pem # ln -s /var/lib/svscan/vpopmail-pop3s /service/vpopmail-pop3s # vi /etc/init.d/vpopmail
起動スクリプトもかえておく
# vi /etc/init.d/vpopmail
NAME=vpopmail
の後に
NAMESSL=vpopmail-pop3s
を追加して、start, stop 等のスクリプト内で
svc -u $NAME
としてdaemontools経由でvpopmailを呼んでいる箇所を 以下のように変更して vpopmail-pop3s も呼ぶようにしてやる
svc -u $NAME svc -u $NAMESSL
設定が終わったら再起動しておく
# /etc/init.d/vpopmail restart
apt-get でインストールする。 root のパスワードを設定しておくことを忘れずに。
# apt-get install mysql-server mysql-client # mysqladmin -u root password xxxxxx
移行元のサーバーで
# mysqldump --opt -uroot -p -A > backup.dmp # rsync -arv -e ssh backup.dmp hostname:/path/to/file
とかする。
■ --opt
--quick --add-drop-table --add-locks --extended-insert --lock-tables と同じ。MySQL サーバに読み込むための最速ダンプを提供する。
ということで移行時なんかは --opt をつけておけば新サーバー側に元からあるデータベースを drop してから移行元データを復元してくれる。そうでなければ大抵重複エラーがでで復元できないので注意。
移行先では
# mysql -uroot -p < backup.dmp
とするだけ
また、データの移行に伴い debian-sys-maint ユーザーのパスワードが変わってしまうので、移行元の /etc/mysql/debian.cnf 内の password を移行先の debian.cnf に反映させておく必要がある。これをやっておかないと /etc/init.d/mysql restart ができない。
あと、ユーザー情報は mysql を再起動させないと反映されないので注意。
$ sudo apt-get install libapache2-mod-php4
apt-get install php4 すると apache2 ではなく apache 関連のパッケージを 落とそうとするので libapache2-mod-php4 する。落ちてくるのは
で
が削除される。 ん?なんでpreforkが削除されるんだろう・・・
http://lists.debian.or.jp/debian-users/200506/msg00188.html
によるとモジュール版PHPはスレッドセーフでないので worker では動かないとのこと CGI版にするかなあ。要検討。とりあえずはモジュール版にする。 ついでに
$ sudo apt-get install php4-mysql
もしとく
http://itbtech.itboost.co.jp/man/php_man/ref.mbstring.html を参考に /etc/php/apache2/php.ini を変更する EUC-JP の場合の設定でやったけど UTF-8 でもよかったかも
$ sudo apt-get install sitebar
過去のデータベースがある場合 Debconf でデータベースを作成するか聞かれるので Skip する データベースへの接続情報は /etc/sitebar/config.inc.php にあるので
移行元 # rsync -arv -e ssh /etc/sitebar/config.inc.php hostname:/etc/sitebar > 移行先 # ln -s /etc/sitebar/config.inc.php /usr/share/sitebar/inc/config.inc.php
としてやる。 ちなみに Apache2 の設定ファイルは /etc/apache2/conf.d/sitebar -> /etc/sitebar/apache.conf という風にシンボリックリンクされている。
DBを復元してなければ復元しておく(Mysql の項を参照)
$ sudo apt-get install bind9 bind9-doc
データ移行の場合 /etc/bind 以下をがさっと移動させればほぼOKだが一つ注意点 rndc.key だけは移行先のものを上書きしないこと。
移行先で先に
# mv rndc.key rndc.key.bak
とかしてから移行元で
# rsync -arv -e ssh /etc/bind hostname:/etc
とかやる。もちろんホスト名なんかが変わってるので、各ゾーンファイルの ホスト名とシリアル番号の変更は忘れずにやること。
$ sudo apt-get install proftpd inetd経由か?standaloneか?と聞かれるので standaloneを選択(好みで)
$ sudo apt-get install libtext-kakasi-perl $ sudo apt-get install popfile 0.22.2が入る
Kakasi をいれとかないと日本語が処理できず動かないので注意。
移行元の /path/to/popfile/popfile.db を移行先の /var/lib/popfile/popfile.db としてやればコーパス、バケツ、マグネットの設定は引き継がれる。メッセージ等は
移行元:$ /path/to/popfile/messages 移行先:$ /var/lib/popfile/messages
となるように移行する。 stopwords も同じ場所にあるので必要ならコピーする。
POPFile は POP に関してはプロキシサーバーとして動くものの、IMAP に関してはこれに対応するものがない。 仕方がないので procmail + pipe.pl で処理させていたのだがこれだとコーパスが学習されずどんどん頭悪くなってる気が。
なんとかならんかなと思っていたところ、気がつけば IMAP.pm とかゆうやつがでていたので入れてみた。
これは、POP のようなプロキシサーバーとして動くのではなく、IMAPサーバーへ常に接続し続け、新規メールがあればスパムフィルタリングした後指定のフォルダ(IMAPの)へ移動させるというもの。うーん、なんかいけてないなぁと思うものの、これを使えば学習もちゃんと行われることだし、fetchmail とか噛ませるよりは素直かな?と思って導入してみた。
Debian sarge で入る POPFile は 0.22.2 であり、上記ページによると対応は 0.22.2 以上なので特にアップデートの必要はない。ただ、コンパイル時に IMAP を使うように設定されていないので以下のように設定する。要は Service/IMAP.pm を /usr/share/popfile 以下にコピーするだけ。
$ apt-get source popfile $ cd popfile-0.22.2 $ sudo cp -r ./Services /usr/share/popfile $ sudo /etc/init.d/popfile/restart
再起動多いなあ
うまくいっていれば IMAP を定期的に見に行ってくれる。 監視フォルダ数分だけ IMAP に常時接続を貼るという仕様なので、接続数オーバーで IMAP サーバーにつながらなくなった人は
$ vi /etc/courier/imapd
とかで最大接続数を調整するとよい
Debian は CPAN モジュールも apt で入る場合がある。別にどちらで入れてもいいのだが、 アップデートは当然 CPAN のほうが早いと思う。
Imagemagick とかは apt でインストール
$ apt-get install imagemagick perlmagick
CPAN を使うのに必要となりそうなパッケージをインストール
$ apt-get install unzip lynx ncftp
CPAN モジュールを起動
$ sudo perl -MCPAN -e shell
色々質問されるのでがんばって答える。
cpan>
というところまで行けば設定終了。 とりあえず、現サーバで使ってそうなモジュールをがさがさとインストール。
cpan> install LWP::UserAgent cpan> install Image::EXIF cpan> install MIME::Parser cpan> install MP3::Info
コンソールで以下を実行すればわんさか出てくる。
$ find `perl -e 'print "@INC"'` -name '.pm' -print
うちのサーバはラジオ録音サーバだったりもするので ALSA を入れて音をとれるようにしておく。
$ sudo apt-get install alsa-base alsa-modules-2.4.27-2-386
alsa-base alsa-utils libasound2 alsa-modules-2.4.27-2-386 が入る alsa-modules をちゃんと指定して入れてあげないとサウンドカードを認識しないので注意
$ sudo alsaconf
すれば(サウンドカードさえ認識できれば)勝手に設定を行ってくれる。設定が成功すれば
$ sudo alsamixer
で出力音量とキャプチャデバイスの設定ができる。キャプチャデバイスの設定には Tab キーを押せば入れる。 キャプチャデバイスとして使用したいデバイス(LINEなど)を選択してスペースキーを押せばそのデバイスがキャプチャデバイスとなる。音量を設定し終わったら ESC キーで alsamixer を抜けて、
$ sudo alsactl store
で設定を保存すればOK。
以下を /etc/apt/sources.lst に追加
deb ftp://ftp.nerim.net/debian-marillat/ sarge main
apt でインストールする
$ sudo apt-get update $ sudo apt-get install lame
$ sudo apt-get install squirrelmail $ /usr/sbin/squirrelmail-configure $ ln -s /etc/squirrelmail/apache.conf /etc/apache2/conf.d/squirrelmail
複数人が扱うサーバーなので、各ユーザーは users グループに所属させ、ホームディレクトリの権限を 0705 としておく。 こうすると各ユーザーは他の人のホームディレクトリに入ることができない(Web はもちろん見れる)。
# vi /etc/adduser.conf USERGROUPS=no DIR_MODE=0705
に変更
ntpdate コマンドをインストール
# apt-get install ntpdate
cron に
#!/bin/sh /usr/sbin/ntpdate -s ntp.ring.gr.jp
なシェルを入れておく。NTPサーバは各自好きな(なるべく近い)サーバを設定するとよい。
chkrootkit と rkhunter を両方入れておく。これらは apt から入手可能。
# apt-get install chkrootkit -q オプション、あと Daily で実行
# apt-get install rkhunter これも Daily で実行
# apt-get install subversion # apt-get install trac # python-japanese-codecs
Subversion 用のリポジトリがすでにあるとすれば、以下のような感じで Trac の設定をする。
$ mkdir /path/to/trac $ cd /path/to/trac $ trac-admin name initenv
name は Trac で管理するプロジェクト名。好きな名前をつければいいけど、日本語は通らないので注意。 /path/to/trac/name というフォルダができるはず。次に、Apache の設定を追加する。
httpd.conf をいじるだけで全て完結する。追加する内容は trac-admin を実行したときに「これを追加しなはれ」 と親切に出力されるので、それを(パスだけ変更して)コピペすればよい。
$ sudo vi /etc/apache/httpd.conf
以下のような内容を追加
Alias /trac "/usr/share/trac/htdocs/" ScriptAlias /repos /usr/share/trac/cgi-bin/trac.cgi <Location /repos> SetEnv TRAC_ENV /path/to/trac/name </Location>
TRAC_ENV 関係でエラーが出る場合は mod_env の設定を追加すること(Apache1.3)
suExec を使っている場合 httpd.conf で SetEnv しても環境変数が適用されないため、tracがうまく動作しない。 また、tracのスクリプト自体は suexec-docroot の外にあるためそもそもエラーが出る。こういう場合の解決策は
に書いてあるように、以下のようなシェルスクリプトをsuexec-docroot以下に適切な権限を設定して置いておけばよい。 これは Apache から渡される環境変数を強制的に変更したい場合などにも役に立つ(参考ページより)。
$ vi /path/to/suexec/trac_wrapper.cgi -------------------------------------- #!/bin/bash export TRAC_ENV=/path/to/trac/name exec /usr/share/trac/cgi-bin/trac.cgi
また、この場合 TRAC_ENV 環境変数はシェルスクリプト内で設定されるので httpd.conf に書く必要はなく、 以下のような内容を追加すればよい。
$ sudo vi /etc/apache/httpd.conf -------------------------------------- Alias /trac "/usr/share/trac/htdocs/" ScriptAlias /repos /path/to/suexec/trac_wrapper.cgi
どちらにせよ設定完了したら Apache を再起動
# /etc/init.d/apache restart
辞書サーバーを立ち上げてネットワーク越しに英辞郎とか手持ちの辞書とか串刺し検索しちゃおうぜーな感じ。NDTP は apt でインストールできる。eblookとかは別に入れなくてもいいんだけどローカルから検索したければ入れておく。
$ sudo apt-get install ndtpd freepwing eblook eb-utils
辞書が FREEPWING(EPWING) 形式に変換する必要があるわけだが、英辞郎なんかは TEXT 形式での配布だったりするので手動で変換してやる必要がある。変換用のシェルスクリプトなどもあるのだが今回はWindows上で変換可能なEBStudioを使用することにした。 EBStudioの使い方なんかは以下のページが詳しい。
ただ、フリーの試用版だと前方一致検索しかできないのだが、まぁこれで十分かなと思う。EBStudio本体は以下からダウンロード。
FREEPWING 形式に変換すると
eijiro/DATA
/HONMON
/GAIJI
みたいな構成のフォルダができる。waeijiroやotojiroを使っている場合はそのフォルダもできてるはず。 それらをがさっとNDTPサーバーへ FTP なりで転送して
$ mkdir -p /usr/share/dict/eijiro
で辞書保存ディレクトリを作ったら、データをがっさりコピー。
$ cp -r ~/eijiro /usr/share/dict/eijiro/
最終的には /usr/share/dict/eijiro 以下に eijiro, waeijiro, otojiro ryaku みたいにフォルダがくればOK。 あとは /etc/ndtpd/ndtpd.conf を設定するのだが、debian では /etc/ndtpd/book.d/ 以下に eijiro (名前は任意)ファイルを作成して辞書個別の設定を書き、/usr/sbin/update-ndtpd.conf するのが流儀のようである。ということで
$ sudo vi /etc/ndtpd/book.d/eijiro
とし、以下の内容を記述。
### ### eijiro ### begin book name eijiro title 英辞郎 path /usr/share/dict/eijiro hosts 127.0.0.1 end
ndtpd.conf を update しておく。
$ sudo update-ndtpd.conf
隣国からのアクセスは排除することにする。
からフィルタをダウンロードして設定。 具体的にはこんな感じ。
# iptables -N KRFILTER # iptables -N KRFILTERED # sh ./ALL.sh.txt #ダウンロードしてきたファイルを指定する # iptables -A KRFILTER -j ACCEPT # iptables -A KRFILTERED -j DROP # iptables -A INPUT -p tcp -m state --state NEW -j KRFILTER
で、この設定をデフォルトとして保存。起動時に適用されるようにしておく。
# iptables-save > /etc/iptables.filter.rules # vi /etc/network/interfaces -------------------------- iface eth0 inet static pre-up iptables-restore < /etc/iptables.filter.rules # この行追加 address 192.168.0.10 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1
これで eth0 を開始する時に指定のフィルタルールを読み込んでくれる。
# iptables -A INPUT -m state --state NEW -j KRFILTER
を以下のように変更
# iptables -j LOG --log-prefix "Rej-TCP:" --log-level debug # iptables -A INPUT -m state --state NEW -j KRFILTER
--log-level debug としておくと priority が debug で出力される(facility は kernel)。 kernel/debug なイベントなど通常ほとんどないのでこれでよくね?ということ(らしい)。 あとは syslog.conf に以下を追加しておく。
# vi /etc/syslog.conf
以下を追加
> kern.=debug -/var/log/iptables.log
klogd とか立ち上がってなければ立ち上げておく dmesg にはログが出力されてるのに syslog に吐かれねーよ!って人はこれが原因ではないかと。
# /etc/init.d/klogd start
$ sudo apt-get install ddskk skkdic
とすればインストールできる。Emacs で使いたい場合
;; SKK (set-input-method "japanese-skk") (toggle-input-method nil)
とか書いておく。
「、」や「。」を「,」や「.」に変更したい場合、.emacsに以下を追加すればよい
(setq-default skk-kutouten-type 'en) ;; デフォルトは「,」「.」 (define-key ctl-x-map [?\C-.] 'skk-toggle-kutouten)
先に SNMP の設定をやってあることが前提なので、やってない場合はそちらをまず参照。
# apt-get install cacti libgd2-noxpm libphp-adodb librrd0 libsensors3 libsnmp-base libsnmp5 php4-cli php4-snmp rrdtool snmp あたりも一緒に入る。
include path がどうのとか libsensor3 がどうのとか言われるがどのみち OK しか押せないので OK を押す。 libsensor3 なんかは apt-get で勝手に入るので問題ない。php.ini に関しては mysql 関連を更新する必要があるのでやっておく。 あと、cacti データベース用のパスワードを聞かれるので設定しておく
# dpkg-reconfigure php4-mysql
/etc/php4/apache/php.ini, /etc/php4/cli/php.ini に mysql 設定を追加しておく。 別に手で extention = mysql.so を付け足してもよい。
次に、cacti 用データベースを作って、ユーザー cacti にアクセス権限を与えておく。この際設定するパスワードはインストール時に用いたものと同じにすること(当たり前ですが)。また、初期データが /usr/share/doc/cacti/cacti.sql.gz にあるのでインポートしておく。
# mysql -uroot -p -e "create database cacti" # mysql -uroot -p -e "grant all privileges on cacti.* to cacti@localhost\ identified by 'password' # mysql -uroot -p -e "flush privileges" # zcat /usr/share/doc/cacti/cacti.sql.gz | mysql -ucacti -p cacti
あとは Web からログインして設定していくだけ。 初期の admin のパスワードは admin。初回のログイン時に変更を要求されるので変えておこう。
最近は Outbound Port25 Blocking を採用したプロバイダが増えてきたのでそろそろ サブミッションポートであるPort587でもqmailを動かすことにした。
Submission Port で動かす上でやっておくべきことは
てな感じ。当然qmailはリビルドすることになる、と。
SMTP AUTH 対応のための手順は上に書いた通りなのだが、2つめの条件を満たすためにSMTP AUTH パッチ適用後に少々ソースコードをいじった後にビルドを開始する必要がある。具体的には qmail-smtpd.c の addrallowed() という関数に変更を加え、SUBMISSION環境変数が設定されていたらrcpthostsを 読みにいかないようにすればよい。修正内容はQmailMSPパッチという名前で
に掲載されている。 まあ qmail-smtpd.c 内の addrallowed 関数の頭に env_get("SUBMISSION")に失敗したら関数抜けるって処理を加えるだけ。 ソース変更したらビルド、できたパッケージをdpkgでインストール。
--- 前略
# prevent denial-of-service attacks, with ulimit
ulimit -v 16384
sh -c "start-stop-daemon --start --quiet --user qmaild \
--pidfile /var/run/tcpserver_smtpd.pid --make-pidfile \
--exec /usr/bin/tcpserver -- -R -H \
-u `id -u qmaild` -g `id -g nobody` -x /etc/tcp.smtp.cdb 0 smtp \
$rblsmtpd /usr/sbin/qmail-smtpd /usr/sbin/vchkpw /bin/true 2>&1 \
| $logger &"
てのが今までの smtpd 起動スクリプト。これの下に次の内容を追加(変更じゃないよ)
sh -c "SUBMISSION=\"\" exec start-stop-daemon --start --quiet --user qmaild \
--pidfile /var/run/tcpserver_smtpd_submit.pid --make-pidfile \
--exec /usr/bin/tcpserver -- -R -H \
-u `id -u qmaild` -g `id -g nobody` 0 587 \
$rblsmtpd /usr/sbin/qmail-smtpd /usr/sbin/vchkpw /bin/true 2>&1 \
| $logger &"
SUBMISSION="" を加えてrcpthostsを読まないようにしておく、あとPOP before SMTPもいらないので、-x オプションを消しておく。あと、Stop時に /var/run/tcpserver_smtpd_submit.pidに対応するプロセスもkillするように変更
stop)
echo -n "Stopping mail-transfer agent: qmail" $rblmsg
if [ "`pidof /usr/sbin/qmail-send`" ] ; then
start-stop-daemon --user qmails --stop --quiet --oknodo --exec /usr/sbin/qmail-send
start-stop-daemon --user qmaild --stop --quiet --oknodo --pidfile \
/var/run/tcpserver_smtpd.pid --exec /usr/bin/tcpserver
start-stop-daemon --user qmaild --stop --quiet --oknodo --pidfile \ #この2行
/var/run/tcpserver_smtpd_submit.pid --exec /usr/bin/tcpserver #
できたら再起動
/etc/init.d/qmail restart
外部ホストから試すこと
$ telnet smtp.avoidnotes.org 25 220 smtp.hoge.org ESMTP EHLO localhost 250-smtp.hoge.org 250-AUTH LOGIN CRAM-MD5 PLAIN 250-AUTH=LOGIN CRAM-MD5 PLAIN 250-PIPELINING 250 8BITMIME MAIL FROM:test@hoge.org <-- 差し出し人メールアドレス 250 ok RCPT TO:xxx@somewhere.org <-- rcpthosts に含まれないアドレスにすると 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1) <--rcpthosts に含まれないからリレー不可というメッセージ RCPT TO:xxx@avoidnotes.org <-- たとえば rcpthosts に含まれるアドレスにすると 250 ok <-- ちゃんといく QUIT <-- QUITで終了します。 221 smtp.hoge.org Connection closed by foreign host.
Submission ポートを使ったメール配送では、25番ポートはサーバー間のメール配送に、587番ポートはクライアントのメール投稿用に使われる。Submission を使った配送の正しいありかたとしては SMTP は rcpthosts 宛は全て許可、RELAYCLIENTは設定しない(つまり、クライアント投稿の場合ローカル以外へのメール送信を許可しない)のだろうけど実際のところリモートアクセスに25番ポート使ってる人はまだいるので、周知期間はポート25でも送信可能にしておいた。
次に、Port587を使った送信テスト
$ telnet smtp.avoidnotes.org 587 220 smtp.hoge.org ESMTP EHLO localhost 250-smtp.hoge.org 250-AUTH LOGIN CRAM-MD5 PLAIN 250-AUTH=LOGIN CRAM-MD5 PLAIN 250-PIPELINING 250 8BITMIME MAIL FROM:test@hoge.org <-- 差し出し人メールアドレス 250 ok RCPT TO:xxx@somewhere.org <-- rcpthosts に含まれないアドレスにすると 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1) <--rcpthosts に含まれないからリレー不可というメッセージ RCPT TO:xxx@avoidnotes.org <-- rcpthosts に含まれるアドレスにすると 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1) <-- これもいかない。 QUIT <-- QUITで終了します。 221 smtp.hoge.org Connection closed by foreign host.
てな感じになればOK。 Submission ポートはクライアント間のメール投稿にのみ用いられる。 したがって、この場合、認証なしでは一切のメールが配送できない(ローカル宛もダメ)というのが正しい動き。
EHLO の後に AUTH で認証を行えば RCPT TO が通るようになることも確認しておくとよい(やり方は上のほうのqmailの項参照)。
$ sudo apt-cache policy パッケージ名
するとどのバージョンのパッケージが落ちてくるか(正確にはどの apt-line からダウンロードするか)がわかる