The means justifies the ends
しばらく使ってなかった Raspberry Pi に、これまた使ってなかった USB 接続のハードディスクドライブをつないで、Mac のネットワーク越しバックアップに使える Time Machine 対応の NAS を仕立ててみたので、自分用のメモです。
Samba を入れれば Windows/Mac 共用ファイルサーバーに、DAAP サーバーや DLNA サーバーを入れれば、汎用メディアサーバーにもなりますよ。
Photo by Clive Darra
まず、Raspberry Pi の OS を準備します。
一番新しい Raspbian、Raspbian Jessie。デスクトップ環境などは要らないので、小さい方の Lite をここからダウンロード。
PC にダウンロードした zip ファイルを展開して、出て来たイメージファイルを SD カードに書き込みます。
Mac を使ったので、ターミナルのシェルから dd コマンドで。Windows なら Win32DiskImager とか使ってください。
まず、
$ diskutil list
で、SD カードのデバイス名を確認。表示された
/dev/disk数字
の、数字を間違えないように。そのまま、SD カードをアンマウント。
$ diskutil umountDisk /dev/disk数字
そして、書き込む。
$ sudo dd bs=1m if=/ダウンロードした/イメージファイル.img of=/dev/rdisk数字
「/dev/disk数字」じゃなくて「/dev/rdisk数字」なのがミソ。
書き込んだ SD カードを Raspberry Pi に差し込んで、LAN ケーブルと電源をつなぐと Raspbian が立ち上がります。
Raspberry Pi に HDMI ディスプレイと USB キーボードをつないでコンソールから作業してもいいけれど、面倒くさいので、LAN 越しに SSH でログインして、ディスプレイなしで作業を進めます。
初期ユーザーのユーザー名は pi、パスワードは raspberry。
ターミナルから
$ ssh pi@192.168.1.20 ← Raspberry Pi の IP アドレス
Raspberry Pi の IP アドレスはルーターが DHCP で割り当てているので、ルーターの管理画面から調べるか、当てずっぽうで試してみる。
ログインパスワードを訊ねてきたら当たり。raspberry と入力する。
まず、初期設定。
$ sudo raspi-config
ここでやること:
次に Raspberry Pi の IP アドレスを固定してしまいます。Mac からつなぐだけなら Bonjour が自動的にアドレスを見つけ出してくれるので、この作業はしなくてもいいんですが、他の OS からの接続やメンテナンスの時に、固定アドレスの方がなにかと間違いがないので、ついでに。
/etc/networks/interfaces は DHCP クライアントデーモンの dhcpcd が牛耳っているので、dhcpcd の設定ファイル /etc/dhcpcd.conf の最後あたりに次の内容を追加します。
interface eth0 static ip_address=192.168.1.100/24 # DHCP の割り当て範囲外の固定アドレスを指定 static routers=192.168.1.1 # ルーターのアドレス static domain_name_servers=192.168.1.1 # DNS のアドレス
続いて USB 外付けハードディスクをフォーマットして、マウントします。
フォーマット形式は Linux のネイティブフォーマットである ext4。Mac のファイルシステムである HFS+ でフォーマットしておくと、万一 Raspberry Pi が不調になったときでもそのまま USB ハードディスクとして Mac に直結してファイルを取り出したりするのが楽なのですが、今の Linux のカーネルはまだ HFS+ のサポートが不完全で、2TB 以上のボリュームを使うときにバグがある、ジャーナリングが使えないので万一システムが突然落ちたりするなどのトラブルの時にディスクの修復がうまくいかないリスクがある、とバックアップファイル用のサーバーに使うのは適していません。
ハードディスクのUSBケーブルを Raspberry Pi に接続して、fdisk で Linux パーティションを作り、mkfs で ext4 ファイルシステムを作れば、ディスクはマウントできる状態になります。
マウントする先(マウントポイント)のディレクトリを作ります。
$ sudo mkdir /mnt/harddisk
そして、マウントしてみる。
$ sudo mount -t ext4 -o defaults /dev/sda数字 /mnt/harddisk
/dev/sda数字のところは、さっき作った ext4 パーティションのデバイス名。
マウントできることを確認したら、システムが再起動するときにこのディスクが自動的にマウントされるように設定します。
/etc/fstab に1行追加。
/dev/sda数字 /mnt/harddisk ext4 defaults,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0,user_xattr 1 2
オプションの default, の後ろの部分は、ユーザー毎のディスク使用量を指定できるディスククオータと、拡張ファイル属性が使えるようにするおまじない。
「/dev/sda数字」のデバイス名の代わりに「UUID="xxxxx”」と UUID で指定しておくと、物理的な接続場所が変わってもつながるのでおすすめ。
ディスクの UUID は
$ sudo blkid
で調べられます。
/etc/fstab の内容に沿ってマウントし直します。
$ sudo mount -o remount /mnt/harddisk
ここから Raspberry Pi をファイルサーバーにするソフトウェアをインストールします。
Mac OS X は 10.9 Mavericks 以降、ファイル共有のプロトコルとして Apple 純正の AFP よりも Windows 由来の SMB を優先して使うようになりました。それに合わせて、Linux 上の SMB ファイル共有サーバープログラムである Samba もバージョンアップして、Samba 4.2.4 以降は OS X が独自に拡張した SMB 共有に対応するようになっています。なので、ただファイル共有をするだけだったら Samba だけ入れておけば、Windows/Mac 共用のファイルサーバーができあがるのですが、Mac OS のバックアップ機能である Time Machine だけはいまだに AFP を使います。なので、Linux で AFP ファイル共有ができるようにするプログラムが必要です。
AFP ファイルサーバー機能のプログラムは Netatalk。ネタトーク、じゃなくて、NET A(pple) TALK。Apple の通信プロトコルが AppleTalk と言われていたころの名残ですね。
最新バージョンの 3 シリーズが Debian のパッケージで提供されていないので、ソースからコンパイルします。
が、その前に、Netatalk が動くのに必要なそのほかのプログラムをパッケージからインストールします。
まず、パッケージリポジトリの更新と、インストール済みソフトウェアの更新など。
$ sudo apt-get update $ sudo apt-get -y dist-upgrade; reboot
リブートすると、さっき指定した固定 IP アドレスで起動しているはずなので、ログインし直します。
Netatalk を動かすのに必要なパッケージをまとめてインストールします。
$ sudo apt-get -y install libssl-dev libgcrypt11-dev libpam0g-dev libwrap0-dev libdb-dev libavahi-client-dev libacl1-dev libldap2-dev libcrack2-dev
Netatalk のソースファイルを Sourceforge からダウンロードしてきます。今日時点での最新版は 3.1.8。
ダウンロードしてきたtarballを展開。
$ tar xvfz netatalk-3.1.8.tar.gz
展開したソースファイルのディレクトリに移動して configure
$ cd netatalk-3.1.8 $ ./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
エラーなく configure できたら make
$ make
ちょっと時間がかかります。make が終わったら install
$ sudo make install
Netatalk の設定ファイル /usr/local/etc/afp.conf を書いて、共有するディレクトリを指定します。
[Global] ; ここは Netatalk 全体の設定 hostname = Raspberry ; お好きなホスト名を mac charset = MAC_JAPANESE log file = /var/log/netatalk.log ; ログファイルの保存場所 log level = default:info ea = samba ; 拡張属性の保存方法を Samba と同じにする。Samba との共存に備えて [Homes] ; ユーザー毎のホームディレクトリ basedir regex = /home home name = Home: $u [Time Machine Volume] ; Time Machine Volume という名前の共有ディスクを作る path = /mnt/harddisk/TimeMachine ; 共有ディスクの実体を置くハードディスク上の場所 time machine = yes ; Time Machineのバックアップ用に使うよ、という指定 vol size limit = 1000000 ; Time Machine 用に使う容量の上限をMB単位で指定できる [Music] ; これは、Music という名前の共有ディスクを作る指示。以下同様。 path = /mnt/harddisk/Music file perm = 0660 directory perm = 0770 [Pictures] path = /mnt/harddisk/Pictures file perm = 0660 directory perm = 0770 [Movies] path = /mnt/harddisk/Movies file perm = 0660 directory perm = 0770
このままだとログファイルが際限なく大きくなるので、ログのローテーションを指定します。
/etc/logrotate.d/netatalk というファイルを次の内容で作ります。
/var/log/netatalk.log { rotate 4 minsize 10M weekly copytruncate compress delaycompress notifempty }
そして、仕上げに netatalk の自動起動と停止の設定。
$ sudo update-rc.d netatalk defaults
これで、できあがり。
Mac からネットワーク越しにつながります。
このほか、Samba を入れると Windows からもファイル共有ができるようになります。
また、minidlna を入れて DLNA 対応機器から動画を再生させたり、forked-daapd(こちらの改良版がおすすめ )を入れて iTunes 共有のサーバーとしても使えるようにしたりと、1台で便利に使えます。
で、AVラックに収まった Raspberry Pi の図。
今から Raspberry Pi を買うなら、CPU が速くなってメモリも増えた Raspberry Pi 2 Model B がオススメです。