ラズパイでTimemachine対応NASを作る
今回の概要
今回は、ラズパイ3 Model B と HDDを使います。前提の条件としてラズパイにOSのインストール等、sshのセットアップは終わっているものとします。 7/8日追記。 フォーマットの拡張子の変更とavahi関係についてコメントより教えていただきました。それに伴い記事の内容も一部変更しています。 終わってない方は以前の記事であるのでこちらを参照してみてください。 ===>ラズベリーパイで最初にしたこと タイトルにもあるのですが、Raspberry piを使ってMacのバックアップTime machineに対応したNASを作って無線でバックアップを行います。
ハードディスクの設定
Macの標準アプリに『ディスクユーティリティ』というものがあるのでこちらでHDDをフォーマットします。(この時はMacにHDDを接続しておきます。) 接続しているHDDを選択し"消去"を選び、 名前: (任意で自由に) 拡張: Mac OS拡張でのフォーマットを行います。 ここでHDDを右クリックで選択し情報を表示します。下の方に行くと全てのユーザーのところが"読み込み"のみの権限になっていると思います。それを"読み込み"と"書き込み"の権限にします。これをしないとどうもTime machineのディスクとして認識されないようです。
===上記の方法で行うまえに!=== LinuxのカーネルがHFS+(Mac OS拡張)では完全にサポートされていないため2TB以上のボリュームの際にバグが報告されているみたいです。そのためHDDのフォーマットはext4 で行った方がよいと思います。 =>higuchi.com blogで詳しく解説されています。
HDDをラズパイにmountさせる
ラズパイにmountさせる前に必要なインストールがあるのでそちらを済ませておきます。
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install hfsprogs hfsplus $ sudo make -p /media/backup
ここでは作るディレクトリを仮にbackupとしていますが、/media/ の後であれば好きな名前でも大丈夫です。 $ mount
をすると現在mountが行われている情報がたくさん出てくると思います。 環境にもよりますが既にHDDのmountがされていて大抵は/dev/sda2になっていると思います。 次にmountされているHDDの自動設定を行います。以下のコマンドでファイルを開きます。
$ sudo vim /etc/fstab
を
/dev/sda2 /media/backup hfsplus force,rw,user,auto,nofail 0 0
を加えて保存をします。 sudo mount -a
をすると以下のようなエラーが出てくると思いますが無視します。
mount: /dev/sda2 is already mounted or /media/backup busy /dev/sda2 is already mounted on /media/pi/harddisk
ここで $ sudo reboot
で再起動をかけてあげます。 再び $ mount で確認すると/etc/fstabで設定した場所にマウントされています。
Netatalkのインストール
netatalkはUnix系OS上でClassic Mac OSやmacOSに対してAFPによるファイルサーバの機能を提供するオープンソースのソフトウェア wikipediaより引用
なのでこちらをインストールしますが、その前にNetatalkを使えるように必要なものをインストールしておきます。
$ sudo aptitude install build-essential libevent-dev libssl-dev libgcrypt11-dev libkrb5-dev libpam0g-dev libwrap0-dev libdb-dev libtdb-dev libmysqlclient-dev avahi-daemon libavahi-client-dev libacl1-dev libldap2-dev libcrack2-dev systemtap-sdt-dev libdbus-1-dev libdbus-glib-1-dev libglib2.0-dev libio-socket-inet6-perl tracker libtracker-sparql-1.0-dev libtracker-miner-1.0-dev
Netatalkのインストールはソースコードからします。 この時netatalkのバージョンは最新のものでします。 netatalkのバージョンはこちらで確認できます
$ wget http://prdownloads.sourceforge.net/netatalk/netatalk-3.1.11.tar.gz $ tar -xf netatalk-3.1.11.tar.gz $ cd netatalk-3.1.11 $ ./configure --with-cnid-dbd-backend --with-init-style=debian-sysv --with-acls --with-zeroconf --with-cracklib --with-pam-confdir=/etc/pam.d --with-dbus-sysconf-dir=/etc/dbus-1/system.d $ make $ sudo make install
この時$ makeは結構時間がかかるので気長に待ちます。 最後まで実行したら $ netatalk -V
でバージョンなどの情報が表示されれば無事インストールの完了です。
Netatalkの設定
$ sudo vim /etc/nsswitch.conf
で以下を追加します。
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 mdns
7/8日追記。 HATさんのコメントより教えていただきました。 この操作を行っていたために"Failed to add service: Local name collision
"のエラーがでていました。 netatalkが自動でavahiに登録を行うので、以下での手動での登録はいりません。 $ sudo vim /etc/avahi/services/afpd.service
でファイルを作成し、以下のコードを追加します。
<?xml version="1.0" standalone='no'?><!--*-nxml-*--> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group> <name replace-wildcards="yes">%h</name> <service> <type>_afpovertcp._tcp</type> <port>548</port> </service> <service> <type>_device-info._tcp</type> <port>0</port> <txt-record>model=TimeCapsule</txt-record> </service> </service-group>
最後に
$ sudo vim /usr/local/etc/afp.conf
を行い以下を追加します。
[Global] mimic model = TimeCapsule6,106 [Time Machine] path = /media/backup time machine = yes
これで設定は完了です! 以下のコマンドで起動します。
$sudo service avahi-daemon start $sudo service netatalk start $sudo systemctl enable avahi-daemon $sudo systemctl enable netatalk
$ sudo systemctl status netatalk
で現在の状態を確認できるので"active"になったら起動成功です!! するとFinderの⌘+kでサーバーに接続が出るので afp://ラズパイのIPアドレス
で接続ができると思います。 そしたらあとはMacのTime Machineを立ち上げ環境設定を見てディスクの選択をすると"利用可能ディスク"のところに『Time Machine』というディスクが出てくると思います。あとはこれで選択すると無線でバックアップを取ってくれます。
おわりに
7/8日追記。このエラーは手動でavahiに登録していたために起きたエラーでした。Netatalkのインストールを間違えたのかどうなのかは分かりませんが今度調べてみて分かることがあれば記事に載せたいとおもいます。Failed to add service: Local name collision
が出ていました。エラーから見る感じ名前の衝突がおきている...なんのことやら...しかし、実行できたので無視していました。