FreeNAS にザセツしたので慣れた FreeBSD に net/netatalk3(これを書いてる時点では netatalk 3.1.0) を入れて TimeMachine Server にもなるファイルサーバーを作ったのでメモ。慣れた、とはいえ最近の FreeBSD は真面目に使ってないので俺としては結構新発見があって楽しいです。
- FreeBSD のインストール
OS X に入れてある VMWare Fusion を使って FreeBSD 10-RC3 を先日買った Cruzer Switch CZ52 8GB (da0) に入れて、それを HP Microserver N54L の内臓 USB に突っ込むプレイ。 USB 2.0 なのせいか読み書きが遅いので ports collection は bsdinstall ではスキップ、というのが勝利のカギかもしれない。入れてもいいけど。あと swap は zfs に置く予定なのでブートスライス以外は ufs で / にしちゃった。 kernel は GENERIC のまま、特に設定をいじる必要もなくブートも完了。 - zfs
ディスクを 3 本挿したら ada0,ada1,ada2 と認識したので raidz にしてみたzpool create tank raidz ada0 ada1 ada2
慣例に従ってメモリ容量の倍の swap を作って
zfs create -V 16G tank/swap zfs set org.freebsd:swap=on tank/swap zfs set checksum=off tank/swap
適当にデータセットを作成
zfs create tank/TimeMachine zfs create tank/Users zfs create tank/Backups zfs create tank/ports
TimeMachine 用ボリュームはクォータを設定
zfs set quota=2T tank/TimeMachine zfs get quota tank/TimeMachine NAME PROPERTY VALUE SOURCE tank/TimeMachine quota 2T local
マウントポイントを変更(FreeNAS ではこれが何故か効かないのであった…)
zfs set mountpoint=/TimeMachine tank/TimeMachine zfs set mountpoint=/Users tank/Users zfs set mountpoint=/Backups tank/Backups zfs set mountpoint=/usr/ports tank/ports zfs get mountpoint NAME PROPERTY VALUE SOURCE tank mountpoint /tank default tank/Backups mountpoint /Backups local tank/TimeMachine mountpoint /TimeMachine local tank/Users mountpoint /Users local tank/swap mountpoint - -
- pkgng
普段は ports で make install してるんだけど、せっかく FreeBSD 10 系で生きていくので pkgng を使ってみよう、と。sudo pkg install lv
うっかり pkg_install とか書きたくなるのが罠w
- FreeBSD のアップグレード
netatalk3 と戯れているうちに FreeBSD 10-RC4 がリリースされたので freebsd-update を使ってアップグレード。sudo freebsd-update upgrade -r 10.0-RC4 sudo freebsd-update install sudo shutdown -r now sudo freebsd-update install
おお、素晴らしく楽チンだ!
- ports collection
zfs の tank/ports が /usr/ports になるように設定したので、そこに ports collection を持ってくる。 pkgng と整合性取れなくなるといやなので svn で ports/head を拾ってくるのではなく RC4 公式配布物にしてみたfetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RC4/ports.txz cd / && tar xvfJ ~/ports.txz
- Open Directory 認証
FreeNAS で一回やったので今回は気楽?sudo pkg install pam_ldap nss_ldap
- /usr/local/etc/nss_ldap.conf
基本的には FreeNAS でやった時のままで OK なんだけど、応用的には若干違った。具体的には rootbinddn で指定した Directory Administrator のパスワードを FreeNAS ではナゾの技術で隠蔽してた(とは言え django の db を覗いたら平文で確認できたけど…)んだけど、 FreeBSD では /etc/ldap.secret に平文でパスワードを記載する必要があるみたい。パーミッションを 400 にしましょう的な対処をとるとはいえ、平文で書くのは抵抗あるなー、とか思ったけど、このファイルを他人に読まれてるってことは root 取られてるってことだから今更どうでもいいのか、とか。で、よくわからないままsudo ln -s /etc/ldap.secret /usr/local/etc/ldap.secret
とかしてみた。
- Self Signed Certificate
FreeNAS では tls_cacertfile で指定したファイルに Open Directory が使ってるであろう証明書を置けばよかったんだけど、 FreeBSD ではそれだとダメで、 tls_checkpeer no と書く(証明書の検証をしない)か、中間証明書を特定のファイル名で置けばいいみたい。うちの証明書は startssl の無料のを使ってるのでこの手順に従って startssl の中間証明書をハッシュ値.0 ってファイル名で置きました。勝手証明書の場合は tls_checkpeer no でいいんじゃないカナcd /etc/ssl/certs wget http://www.startssl.com/certs/ca.pem -O startssl.pem openssl x509 -noout -hash -in startssl.pem ln -s startssl.pem ae8153b9.0
- /etc/pam.d
FreeNAS はシステムがよきに計らってくれましたが、 FreeBSD では自前で設定しないとダメです。Pluggable Authentication Modules 読むなりググるなりしてテキトーに設定すればなんとかなるでしょう
- /usr/local/etc/nss_ldap.conf
- netatalk
なにも考えずにsudo pkg install avahi netatalk
とかやったら netatalk 2 がインストールされたので
sudo pkg delete netatalk sudo pkg install netatalk3
とやり直し。
afp.conf は公式のドキュメント読みながら適当に設定してみた。[Global] uam list = uams_dhx2.so afpstats = yes log file = /var/log/netatalk.log log level = default:info dbus daemon = /usr/local/bin/dbus-daemon [Homes] basedir regex = /Users spotlight = yes [TimeMachine] path = /TimeMachine spotlight = yes time machine = yes
/etc/pam.d に netatalk とかってファイルを作ってそれっぽく設定したんだけど、 FreeBSD 上のアカウントでアクセスできるんだけど Open Directory 上のユーザーではアクセスできない。なんでじゃ!? とか調べていたらどうも pkg でインストールされる netatalk3 は LDAP 認証(と PAM)が無効化されているらしい。仕方ないので
sudo pkg delete netatalk3
してから
cd /usr/ports/net/netatalk3 make config make make install package
とかして KRB5, LDAP, PAM を有効化して入れ直したところ、今度は Open Directory 上のユーザーでアクセスできた! SSO できないのが玉に瑕なんだけど、どうせ TimeMachine の認証情報は SSO 出来ないしーってことで理由は追ってません。ここら辺を解決してる人がいたらこっそり教えてください…あ、 kdc 上で kadmin 使って登録しないといかん、とかいう話?(→そんなお話でした。詳細はこちら) ちなみにオプションで Zeroconf support として avahi と mDNSresponder のどっちかを選べて(デフォルトは avahi) 、それのお陰か avahi で何も設定してないのに OS X からブラウズ出来ました。偉い。
あと、 netatalk 3 は CNID が /var/netatalk/CNID 以下に置かれるって話なんだけど、そのままだと遅い USB メモリに作成されてえれーボトルネックになるような予感がしたのでsudo mkdir /tank/var/netatalk sudo rsync -avr /var/netatalk/ /tank/var sudo mv /var/netatalk /var/netatalk.old sudo mkdir /var/netatalk sudo mount -t nullfs /tank/var/netatalk /var/netatalk
とかしてみた。
が、こうしてブログにまとめてみると、何故 zfs のデータセット作ってそれを /var/netatalk にマウントしなかったのかと小一時間。なのでzfs create tank/var zfs create tank/var/netatalk zfs set mountpoint=/var/netatalk tank/var/netatalk
とするほうが綺麗だな…
とまぁこんな感じで Time Machine Server を OS X Server から FreeBSD に移すのと、 OS X Server に置いてるファイル(Aperture とか iTunes とか)の Time Machine を使わないバックアップができる準備は整ったかなーって。