使用したハード パソコン本体:Endeavor NP11-V(エプソン) FDD:OWL-702EFD-U2(オウルテック) CD/DVD:DVSM-PN58U2V(バッファロー) 変換アダプタ:CDISU2(センチュリー):直刺し 3in1 マウスとキーボード:USB接続のものを適当に選んだ HDD:クアンタムとかシーゲートとかの古い3.5インチパラレルATA PS/2ポートがないだけあって、USB機器は何もしなくても認識される。当然、BIOSの操作も普通にできる。 ハードウェアや配線のチェック。必要なら、他のローカルマシンのhostsファイル(Un*x系のシステムなら/etc/hosts、XPまでのNT系なら%windir%\system32\drivers\etcにあるのが普通)も修正しておく。 FDDまたはCDからのブートを有効にしてMBMをインストール。 # UFS or FFSのパーティション識別子は「A5」だが、ここでは空(「00」)にしておく。 FreeBSDのインストールCDでブート(HDDから起動してMBMの画面からDelキー)。 地域でJapan(110)、キーマップでJP106を選んでsysinstall画面へ。 customを選択。 Options(NFS関連、デフォルトエディタ、インストールルートなど)は必要な人だけ設定すればよい。 Partitionは環境に合わせて設定。純正ツールで切った方がなんとなく安心。 LabelはAuto Defaults(/が0.5GB、swap、/varが2GB、/tmpが0.5GBくらい)でもいいのだが、筆者は/tmpを4GBに、/usrを15GBちょっとにして、/usr/homeを別途用意する。念のため/はSoftUptatesをOffにしておく。 # パーティション構造は(Partition nameも含めて)メモしておくのが無難(普通の設定ならdaily run outputに記載されるが、単に> df > 適当なテキスト などとしてもよい)。 Distributionsは好きに選べばよいが、サーバ用途だとなんだかんだいってMinimalが安心。 MediaはCDインストールでよい。 Commitすると上記設定が実際に行われる。 exitするとリブートがかかる。 無事にHDDから立ち上がったらrootでログイン(設定していなければパスワードは要求されない)。 すぐさま> sysinstallからConfigureを選んでrootパスワードを設定、Networkingの枝にあるInterfacesも設定(LANを設定しておかないと> portsnap fetch などで困る)。 ついでに一般ユーザーも作成してタイムゾーン(というか、RTC(パソコン内部のハードウェア時計)がUTC(協定世界時)からどれだけずれているか(時差)の補正)を設定したら念のためリブート(rootのパスワードがちゃんと機能していることを確認する)。 portsを入手 > portsnap fetch extract # portsnapの設定は/etc/portsnap.confまたは/usr/local/etc/portsnap.confにある # お好みで/etc/make.confも適当に portupgradeを入れる > cd /usr/ports/ports-mgmt/portupgrade/ > make install clean portupgrade本体の設定はデフォルトで構わないと思う(お好みで鬼車オプションを有効にするくらい)。 PerlとかRubyなんかも勝手に入る。 # portupgrade、Perl、m4、libiconvでコンフィグが必要 > rehash sshを入れる > portinstall security/ssh 公開鍵を適当な方法で作成する。コンソールから> ssh-keygen -t "秘密鍵の形式" またはWindows上でputtygen.exeを使うのがラクだろうか。うまく動いたら/etc/rc.confにsshd_enable="YES"と書いておく。 ここまでやればあとはリモートから管理できるが、ローカルディスプレイを併用するとエラーメッセージの確認がしやすいメリットがある(好みの問題)。 ファイルの移動にFDDを使うなら(> mkdir /mnt/fdd などとしてから)> mount -t msdosfs /dev/da0 /mnt/fdd などとする。UFSでフォーマットしてスライスを切ってあるHDDなら> mount /dev/da0 /mnt/hdd1 などとすればOKでMAKEDEVは必要ない、はずだが筆者の手元ではアダプタでムリヤリUSB変換したディスクがうまく読めなかった。 # パスやデバイス名は各自の環境に合わせて適宜変更のこと。 # /dev/da0はdirect access 0番の意で、SCSIやUSBで接続したブロックデバイスが使う。 # 筆者の手元では、内蔵HDDがad4と認識されている。 portsからのインストールではconfigureスクリプトの出番がほとんどなくなったようだ。カスタマイズには設定ファイルを使うが、いくつか方法がある。 # 「Makefileにコンパイルオプションを操作させるための引数」をknobといい、たとえば> make knob1 knob2 install とか、> portinstall -m 'knob1 knob2' のような形で渡す。 # これは「コンパイルオプション」とは別物なので、どちらを指定しているのか把握しておく必要がある(以下では「knob」と「オプション」で呼び分ける)。 /etc/make.confに .if ${.CURDIR:M/usr/ports/*} != "" . if ${CURDIR:M/usr/ports/目的のports/*} != "" 指定するknob1 指定するknob2 . endif . if ${CURDIR:M/usr/ports/目的のports2/*} != "" 指定するknob3 指定するknob4 . endif .endif などと指定できる。この方法だと複数のportsへの一括指定などがやりやすい。 # 「目的のports」は、たとえば「ftp/pure-ftpd」など「portinstallで指定するときの形式」にする(以下同様)。 portupgradeとその周辺ツールを使う場合は/usr/local/etc/pkgtools.confのMAKE_ARGSの部分に MAKE_ARGS = { '目的のports1' => [ '指定するknob1', '指定するknob2', ], '目的のports2' => [ '指定するknob3', '指定するknob4', ], } などとしてもよい。適用範囲が狭いことをとくに活用するのでなければ、わざわざこの方法でなくてもよいのではないかと思える。 Makefileではオプションの直接指定ができるが、Makefile.localというファイルを作成してそちらに記述した方がスマート(ユーザー定義部分だけを別に分けておける、という意味でありがたい)。 CONFIGURE_ARGS+= 指定するオプション という記述でオプションを追加できる。とくに事情がなければこの方法が一番手軽そうだ。 # よく使われる定型処理が/usr/ports/Mk/bsd.*.mkにまとめられているが、新たに自分でMakefileを書くのでもない限り気にしなくてよさそう。 なお、> make configure などでMakefileのスクリプトに尋ねられるknobは> make showconfig で確認、> make rmconfig で削除できる。 # rmconfigは/var/db/ports/目的のportsに保存されたログを消すだけのものなので、手作業で消してもよい。 管理ソフトなどをいろいろ入れる。以下筆者が真っ先に入れるもの。 まずports-mgmtportauditをインストール。 ntp.driftファイルを作り/etc/ntp.confを編集して> ntpdate 近くのサーバ を実行、> ntpd とやってみて問題がなければ/etc/rc.confにntpd_enable="YES"と書いておく。 pure-ftpdをインストール。もっと後でもよいのだが、ftpが使えるとファイルの受け渡しが便利なので。最近のportsだとpure-pwは標準でインストールされるようだ。 > cp /usr/local/etc/pure-ftpd.conf.sample /usr/local/etc/pure-ftpd.conf として/usr/local/etc/pure-ftpd.confを適当に編集。グループftpgroupとユーザーftpuserを作ってpure-pwを使った設定を行う(mkdbを忘れずに)。起動してみて問題がなければ/etc/rc.confにpureftpd_enable="YES"と書いておく。 追記:2014年5月現在のpkgではpure-pwを別途インストールする 入っていなかったのでsysutils/lsofも入れる。必要になってからでもいいけど。 dns/ddclientをインストール。SSLも勝手に入る。 > cp /usr/local/etc/ddclient.conf.sample /usr/local/etc/ddclient.conf /usr/local/etc/ddclient.confを編集。 # Dyndnsを使う場合、unable to determine IP addressという警告はuse=webという記述で消える(ウェブ経由で自分のグローバルIPを取得するオプション)。 # Invalid Value for keyword 'ip' = ''というのはキャッシュにIPアドレスが記録されていないという意味なので、初回実行時には出るのが普通。 > ddclient -daemon=0 -verbose -noquiet 問題がなければ/etc/rc.confにddclient_enable="YES"と書いておく。 # DNS設定を手動で変更した場合、/var/tmp/ddclient.cacheの情報との齟齬に注意。 けっこう手間がかかるメール関連。mail/postfixをインストール。オプションはSASL2(SMTP-AUTHで使う)とTLS(と好みで正規表現)だけ、Cyrus-SASL2のオプションはとくにイジらなくても平気だったはず。ユーザー作成とmailer.confの設定はyesで。/usr/local/etc/postfix/main.cfを編集する。 myhostname = ホスト名 mydomain = ドメイン名 mydestination = $myhostname, localhost.$mydomain, localhost mynetworks = 192.168.0.0/32, 127.0.0.1 header_checks = regexp:/usr/local/etc/postfix/header_checks alias_maps = hash:/etc/mail/aliases local_recipient_maps = unix:passwd.byname $alias_mapshome_mailbox = Maildir/ mailbox_size_limit = 10240000 message_size_limit = 1024000 smtpd_sasl_auth_enable = yes smtpd_sasl_path = smtpd smtpd_sasl_security_options = noplaintext, noanonymous broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination #body_checks = pcre:ブラックリストのパス #smtpd_client_restrictions = check_client_access hash:ブラックリストのパス #smtpd_sender_restrictions = reject_non_fqdn_sender hash:ブラックリストのパス #mailbox_command = /usr/local/bin/procmail relayhost = [プロバイダのリレーホスト] 追記:パスの設定が、バージョン2.3から以下のように変わった。 旧:smtpd_sasl_application_name = smtpd 新:smtpd_sasl_path = smtpd こんな感じだろうか。終わったらrehashして> postfix check。/etc/mail/aliasesを適当に編集して> postalias /etc/mail/aliases(> touch /usr/local/etc/postfix/header_checks も忘れずに)。念のため/usr/local/lib/sasl2/smtpd.confに pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: cram-md5 digest-md5 plain login を設定。 > saslpasswd2 -c -u `postconf -h myhostname` ユーザー名 でsaslで認証を行うユーザー名とパスワードを設定、作成された/usr/local/etc/sasldb2.dbに対して > chgrp mail /usr/local/etc/sasldb2.db > chmod 640 /usr/local/etc/sasldb2.db などとしてpostfixを実行するユーザー権限でsasldb2.dbが読めるようにしておく。 起動してなにかメールを送ってやるとMaildirが自動作成されるはず(maildirmakeコマンドで作ってもよい:所有者がメールの受取人でパーミッション700であることを確認)。一応、/etc/mail/mailer.confの設定(「/usr/local/sbin/sendmailというパスのpostfix」を動作させる)がちゃんと行われているか確認。 すべて問題がなければ/etc/rc.confに postfix_enable="YES" sendmail_enable="NO" sendmail_submit_enable="NO" sendmail_outbound_enable="NO" sendmail_msp_queue_enable="NO" と書いておく。 mail/courier-imapをインストール。オプションはAUTH_USERDBだけ有効にしておく。 > pw2userdb > ~/dbtmp などとして雛型を作り、必要な部分だけ残してcatなどで/usr/local/etc/userdb(所有者root、パーミッション0600)に転送する。 > userdbpw | userdb ユーザー名 set pop3pw(もしくはimappw) としてPOP3のパスワードを登録しmakeuserdbコマンドでデータベースを更新する。動かしてみて問題がなければ/etc/rc.confに courier_authdaemond_enable="YES" courier_imap_pop3d_enable="YES" と書いておく。 thttpdを入れる。ports(www/thttpd)を使う場合、コンパイルオプションは(Makefileではなく)extra-patch-config.hというファイルで設定する。thttpdは簡単でいいなぁ。 www/analogを入れる。png(Library for manipulating PNG images)がインストールされるときにコンフィグを求められる。gd(A graphics library for fast creation of images)もコンフィグを求めるが、X必須のオプションがあるので注意。IMAGEDIR(OUTFILEのディレクトリをドキュメントルートとするパスで指定)を明示しないと/imagesを読みに行く。デフォルトインストールだと画像データは/usr/local/www/data/images/にある。 thttpdの動作確認をしてanalogの設定ファイルを適当に作ったら > analog -G +g/usr/local/etc/設定ファイル などとしてanalogの動作も確認。 analogの設定ファイルに LANGUAGE JAPANESE-UTF などと記述しておくと出力ページが日本語になり、 # analog表示用のthttpdの設定ファイルにcharset=utf-8を指定しておかないと # 文字化けが起きる(文字コードを指定してやれば表示できるが面倒)。 SEARCHCHARCONVERT ON と記述すると検索クエリを表示言語にコンバートしてくれる。 # UTF-8を使うのはGoogleなどの仕様に合わせるため。 # JAPANESE-EUCやJAPANESE-SJISも指定できるが単にJAPANESEを指定するとJISになる。 Apache Log Converter for analogなどログ自体をコンバートするツールも公開されているようだが、筆者は使用していない。 もし必要ならapacheを入れる。2011年1月現在、とくに理由がなければwww/apache22でいいと思う。pythonのmallocを使うオプション(デフォルトで有効)をつけると、当然ながらpythonも入る。またapr-ipv6-devrandom-gdbm-db42もなんとなく入る(コンフィグを求められる)。apache22本体のコンフィグはよくわからないのでテキトーにやった(モジュールなんて後から欲しくなったら足せばいいだけだし)。http.confの設定はいつもながらメンドクサイ。 簡易トラブルシューティング ・起動しようとすると「Cannot load モジュールファイル.so」などと怒られる:モジュールがインストールされていないか、間違ったパスを設定している。古いapacheから設定を引き継ぐ場合、ライブラリや設定ファイルを保存するディレクトリが「apache」から「apache22」に変わることに注意。 ・起動しようとすると「no listening sockets available, shutting down」と怒られ起動できない:他のソフト(またはゾンビ化したapache自身)がポートを占領がしている(> lsof -i などで調べよう)orポートを2回以上連続で開きに行っているor設定ファイルでListenをちゃんと設定していない(書き方が変わったらしく、Portで指定すると書式違反で蹴られる) ・起動すると「[warn] (2)No such file or directory: Failed to enable the 'httpready' Accept Filter」という警告が出る:Accept Filter(フル稼働時のI/Oパフォーマンスがちょっと上がるだけなので普通は気にしなくてよい)を有効にするのに失敗している。無視するか、設定ファイルでAcceptFilter http noneを指定する(必要ならhttpsも)か、Accept Filterがちゃんと動くようにaccf_http.koを導入すればよい。 # 参考:http://www.skymerica.com/blog/yotsumoto/arch/2007/06/11/000799.html cronなどの設定 portsnap用にこんな感じのスクリプトを作って、 #! /bin/sh /usr/sbin/portsnap cron /usr/sbin/portsnap update /usr/local/sbin/portversion root権限で回すようにしておく。出力の振り分けは適当に。 # cronオプションは「適当なタイムラグを設けてfetchを実行する」モード。 # ローカルの時間がUTCでない場合、午前3時に回すことが推奨されている。 バックアップもcronで回すのが手軽だろうか。たとえば #! /bin/sh cd /usr/local/home/hoge tar cf /usr/local/backup/hoge-`date +%Y%m%d`.tar . cd /var/log tar cf /usr/local/backup/log-`date +%Y%m%d`.tar ./*.log のような感じでスクリプトを書いておく。 ログローテーション(/etc/newsyslog.conf)も適当に。