2011-07-23 OSX Lion + Pogoplug でTimeMachineに挑戦

先日Macbook Air(2011)を買って、環境の移行をシコシコやっていたわけですが、どうせならTimeMachineを手元にあるPogoplugから行いたくて、色々と挑戦していた。
成功したのでメモっておく。
なお、面倒なので忙しい方は素直にTimeCapsuleを買おう。
- OpenPogo化する
さすがにこれは適当にググッてもらったほうがいいと思う。
注意点としては、
- ipkg update時にwgetがしょぼくてエラー
#!/bin/sh arg=`echo $* | sed -e 's/--passive-ftp//g'` /bin/busybox wget $arg
ln -s wget.sh wget
- ipkg updateしてもopen pogoがなくなっててエラー
- リポジトリがお亡くなり。次の行を参考にして。
-bash-3.2# cat /opt/etc/ipkg/armel-feed.conf #src cross http://openpogo.com/repo src cross http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/stable
- バックアップしたいディスクを予めHFS+でフォーマットする。
ついでにディレクトリをいっこ作っておこう。私は tm という名前のディレクトリを作った。Pogoplugの余計なメタデータがディスクのルートに作られるため。
- Pogoplugに差してマウントポイントを調べる
私は4つめだったので/tmp/.cemnt/mnt_sdd1だったお
- 依存関係をいっぱいインストールする
netatalk2.2.0-p6をビルドするのだが、たぶん色々と依存関係を解決せねばならない。
avahi, libgcrypt, libssl
あたりを ipkg installで入れよう。もしかしたら他にも必要かもしれない。 私はこの前にlibnslとsambaを入れているので。
netatalkの前に最新のberkeleyDBを入れる。oracleのHPからゲットしてくる。
普通にconfigure, make, make installすればいけたはず。
一点、私の環境では既存のlibdbがあったので、 configure --prefix=/opt/local とした。
- netatalk2.2.0-p6をインストールする
https://github.com/jrmithdobbs/netatalk-2-2-0-p6
ソースはここ。
次に、ソースにパッチを当てる。
http://seongbae.blogspot.com/2009/09/turning-pogoplug-into-timemachine.html
ここは参考になる。転載。
Index: afp_options.c
===================================================================
RCS file: /cvsroot/netatalk/netatalk/etc/afpd/afp_options.c,v
retrieving revision 1.45
diff -r1.45 afp_options.c
212a213,216
> if (strstr(buf, " -noallowroot"))
> options->flags &= ~OPTION_ALLOW_ROOT;
> if (strstr(buf, " -allowroot"))
> options->flags |= OPTION_ALLOW_ROOT;
Index: auth.c
===================================================================
RCS file: /cvsroot/netatalk/netatalk/etc/afpd/auth.c,v
retrieving revision 1.63
diff -r1.63 auth.c
255c255,256
< if ( pwd->pw_uid == 0 ) { /* don't allow root login */
---
> if (!(obj->options.flags & OPTION_ALLOW_ROOT)
> && pwd->pw_uid == 0 ) { /* don't allow root login */
Index: globals.h
===================================================================
RCS file: /cvsroot/netatalk/netatalk/etc/afpd/globals.h,v
retrieving revision 1.26
diff -r1.26 globals.h
39a40
> #define OPTION_ALLOW_ROOT (1 << 8)
cvs diff: Diffing nls
上記パッチを頑張って当てよう。
ちなみに、globals.hはatalkdディレクトリの方に移動しているので注意。
また、上記パッチは少し古いので、手動でやろう。確か
#define OPTION_ALLOW_ROOT (1 << 10)
このあたりが違ったはず。
終わったらビルドする。
./configure --with-bdb=/opt/local --with-ldap=no --prefix=/opt
私の場合のconfigure option。
一応、私の場合の結果を貼っておく。ご参考。
>||
LIBS = -lpthread -L$(top_srcdir)/libatalk
CFLAGS = -I$(top_srcdir)/include -D_U_="__attribute__*1" -g -O2 -I$(top_srcdir)/sys
SSL:
LIBS = -L/opt/lib -L/opt -lcrypto
CFLAGS = -I/opt/include -I/opt/include/openssl
LIBGCRYPT:
LIBS = -L/opt/lib -lgcrypt -lgpg-error
CFLAGS = -I/opt/include -I/home/slug/optware/cs08q1armel/staging/opt/include
BDB:
LIBS = -L/opt/local/lib -ldb-5.2
CFLAGS = -I/opt/local/include/
Configure summary:
Install style:
none
AFP:
AFP 3.x calls activated:
Extended Attributes: ad | sys
CNID:
backends: dbd last tdb
UAMS:
DHX ( SHADOW)
DHX2 ( SHADOW)
RANDNUM ( SHADOW)
passwd ( SHADOW)
guest
Options:
DDP (AppleTalk) support: no
CUPS support: no
SLP support: no
Zeroconf support: yes
tcp wrapper support: no
quota support: no
admin group support: yes
valid shell check: yes
cracklib support: no
dropbox kludge: no
force volume uid/gid: no
Apple 2 boot support: no
ACL support: no
LDAP support: no
||<
あとは祈りながらmakeとmake install。
- いろいろ設定する
ここからはまだ手探り。いろいろなサイトを参考にさせて頂きましたが、
メモりながらやらなかったので見つかりません・・・国内とか海外とかいろいろ漁った。
- /etc/hostsの作成
-bash-3.2# cat /etc/hosts 127.0.0.1 localhost.localdomain localhost 127.0.0.1 Pogoplug
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> <busconfig> <!-- Only root or user avahi can own the Avahi service --> <policy user="avahi"> <allow own="org.freedesktop.Avahi"/> </policy> <policy user="root"> <allow own="org.freedesktop.Avahi"/> </policy> <!-- Allow anyone to invoke methods on Avahi server, except SetHostName --> <policy context="default"> <allow send_destination="org.freedesktop.Avahi"/> <allow receive_sender="org.freedesktop.Avahi"/> <deny send_interface="org.freedesktop.Avahi.Server" send_member="SetHostName"/> </policy> <!-- Allow everything, including access to SetHostName to users of the group "netdev" <policy group="netdev"> <allow send_destination="org.freedesktop.Avahi"/> <allow receive_sender="org.freedesktop.Avahi"/> </policy> --> </busconfig>
- avahiのサービス追加
2011/08/15 追記:どうやらやらなくてもいいようです。HATさんコメントありがとうございます。
-bash-3.2# cat /opt/etc/avahi/services/adisk.service
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_adisk._tcp</type>
<port>9</port>
<txt-record>sys=adVF=0x100</txt-record>
<txt-record>dk0=adVN=TimeCapsule,adVF=0x81</txt-record>
</service>
</service-group>
-bash-3.2# cat /opt/etc/avahi/services/afpd.service
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_afpovertcp._tcp</type>
<port>548</port>
</service>
- /opt/etc/avahi/avahi-daemon.confの一部書き換え
[server] host-name=pogomachine
- /opt/etc/netatalk/afpd.conf末尾に追加
logの場所は適当に変えてね。
- -transall -uamlist uams_dhx2.so -nosavepassword -allowroot -setuplog "default LOG_NOTE /opt/var/log/netatalk.log"
- /opt/etc/netatalk/AppleVolumes.defaultの編集
下あたりのように書き換える。
# The "~" below indicates that Home directories are visible by default. # If you do not wish to have people accessing their Home directories, # please put a pound sign in front of the tilde or delete it. #~ /tmp/.cemnt/mnt_sdd1/tm "TimeCapsule" allow:root rwlist:root cnidscheme:dbd options:tm
- サービス起動だ
まず、なんかdbusがうまく動いていない?ことが多かったので一度殺す
-bash-3.2# /opt/etc/init.d/S20dbus stop -bash-3.2# /opt/etc/init.d/S20dbus start
no such process. と言われたら、rm /opt/var/run/dbus/* してもう一回起動。
次に、avahi関連の起動。
その前に、avahiユーザーを作る。
addgroup avahi -g 500 adduser avahi -G avahi
的な感じで。オプションは任せる。忘れた。
/opt/sbin/avahi-daemon -D /opt/sbin/avahi-dnsconfd -D
次に、bdb用のサービス
/opt/sbin/cnid_metad
最後に、afpd。私の環境だと」なぜかlockファイルが /var/lockに保存される設定になってて、
直し方がわからなかったので、作る。
mkdir -p /var/lock
/opt/sbin/afpd
topコマンドでそれぞれがちゃんと動いているか確認しよう。
- TimeMachineの設定をする
Macのシステム環境 -> TimeMachineでディスクを選択できるか確認する。
認証はpogoに入るときのrootユーザーで。
無事に何事も無くバックアップが始まれば成功。エラー出たら設定を見直す。
特に、 CNIS がなんたらでread only modeにいくよとか言われたらcnis_metad周りを疑う。
ちゃんと起動しているか、など。afpdのログファイルを見るとヒントになる。
以上。長かったー。
*1:unused


adisk.serviceもafpd.serviceもいらない筈です。
後で要らないことに気づきました。記事も修正しておきます。
初MacOSなのでavahiとかafpプロトコルとかよくわかってないんですよね。。。