Hatena::ブログ(Diary)

EncloCircle このページをアンテナに追加 RSSフィード Twitter

2011-07-23 OSX Lion + Pogoplug でTimeMachineに挑戦 このエントリーを含むブックマーク このエントリーのブックマークコメント

先日Macbook Air(2011)を買って、環境の移行をシコシコやっていたわけですが、どうせならTimeMachineを手元にあるPogoplugから行いたくて、色々と挑戦していた。

成功したのでメモっておく。

なお、面倒なので忙しい方は素直にTimeCapsuleを買おう。

  1. 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
  1. バックアップしたいディスクを予めHFS+でフォーマットする。

ついでにディレクトリをいっこ作っておこう。私は tm という名前のディレクトリを作った。Pogoplugの余計なメタデータがディスクのルートに作られるため。

  1. Pogoplugに差してマウントポイントを調べる

私は4つめだったので/tmp/.cemnt/mnt_sdd1だったお

  1. 依存関係をいっぱいインストールする

netatalk2.2.0-p6をビルドするのだが、たぶん色々と依存関係を解決せねばならない。

avahi, libgcrypt, libssl

あたりを ipkg installで入れよう。もしかしたら他にも必要かもしれない。 私はこの前にlibnslとsambaを入れているので。

netatalkの前に最新のberkeleyDBを入れる。oracleHPからゲットしてくる。

普通にconfigure, make, make installすればいけたはず。

一点、私の環境では既存のlibdbがあったので、 configure --prefix=/opt/local とした。

  1. 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。

  1. いろいろ設定する

ここからはまだ手探り。いろいろなサイトを参考にさせて頂きましたが、

メモりながらやらなかったので見つかりません・・・国内とか海外とかいろいろ漁った。

  • /etc/hostsの作成
-bash-3.2# cat /etc/hosts 
127.0.0.1 localhost.localdomain localhost
127.0.0.1 Pogoplug
  • /opt/etc/dbus-1/system.d/avahi-dbus.conf
<!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コマンドでそれぞれがちゃんと動いているか確認しよう。

  1. TimeMachineの設定をする

Macのシステム環境 -> TimeMachineでディスクを選択できるか確認する。

認証はpogoに入るときのrootユーザーで。

無事に何事も無くバックアップが始まれば成功。エラー出たら設定を見直す。

特に、 CNIS がなんたらでread only modeにいくよとか言われたらcnis_metad周りを疑う。

ちゃんと起動しているか、など。afpdのログファイルを見るとヒントになる。

以上。長かったー。

*1:unused

K-HATK-HAT 2011/07/25 22:43 Zeroconf support: yesになっているのだから、
adisk.serviceもafpd.serviceもいらない筈です。

aflcaflc 2011/08/15 11:15 遅レスすいません。
後で要らないことに気づきました。記事も修正しておきます。
初MacOSなのでavahiとかafpプロトコルとかよくわかってないんですよね。。。