higuchi.com blog

The means justifies the ends

Raspberry Pi と外付けハードディスクで Time Capsule 互換機を作る

しばらく使ってなかった Raspberry Pi に、これまた使ってなかった USB 接続のハードディスクドライブをつないで、Mac のネットワーク越しバックアップに使える Time Machine 対応の NAS を仕立ててみたので、自分用のメモです。
Samba を入れれば Windows/Mac 共用ファイルサーバーに、DAAP サーバーや DLNA サーバーを入れれば、汎用メディアサーバーにもなりますよ。

Photo by Clive Darra

用意したもの

  • Raspberry Pi 1 Model B
  • SDカード 4GB (Class 6 以上がオススメ)
  • USB 接続の外付けハードディスク
  • Micro USB コネクタのACアダプタ

OSのセットアップ

まず、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 [email protected] ← Raspberry Pi の IP アドレス

Raspberry Pi の IP アドレスはルーターが DHCP で割り当てているので、ルーターの管理画面から調べるか、当てずっぽうで試してみる。
ログインパスワードを訊ねてきたら当たり。raspberry と入力する。

まず、初期設定。

$ sudo raspi-config


ここでやること:

  • Expand Filesystem を実行して、SD カードの余り領域をシステムが使えるように割り当ててもらう
    Change User Password で、初期ユーザー pi のパスワードを適宜変える
  • Internationalisation Options(イギリス英語だねぇ)で、日本語文字コード ja_JP.UTF-8 UTF8 を追加。デフォルトのロケールも同じに
  • 同じく Internationalisation Options から Time zone を Tokyo/Asia に

次に 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

Netatalk をインストールする

ここから 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 がオススメです。

コメント

まだコメントはありません

コメントを書く

関連するかもしれない記事

リサイクル [OpenDarwin x86でiTunesジュークボックス]

古いPCにMac OSと互換性の高いUNIXをインストールして、無料ソフトウェアだけでMac/Windows対応のiTunes...

この記事を読む »

Lotus 1-2-3

1,980円 [ロータス アプローチ]

アプローチ入りちょっと旧聞になりますが、ソースネクストが10月31日からLotus 1-2-3を1,980円で売り出...

この記事を読む »

s4ve.as の超シンプルな UI

ログイン不要の気持ちいいファイル転送サービス [s4ve.as]

元ナップスターの Scott Barrow などが設立した Media Hog の新しいファイル転送サービス s4ve.as (sav...

この記事を読む »

Chromiumのダッシュボード

がんばっていただきたい [Chromium OS をつついてみた]

ダッシュボード(仮UI)はWebアプリのブックマーク集連休前に Publickey の「[速報]グーグルが「Chrom...

この記事を読む »

日本語対応 [Nucleusの使い方]

このサイトで使用しているNucleusというBlogシステムを日本語対応させる備忘録です。 このシステム、...

この記事を読む »

Nucleus の終わりと始まり [LMNucleus 3.66]

higuchi.com を10数年にわたって支えてきたブログシステムの Nucleus CMS が、開発終了を宣言してし...

この記事を読む »

アップデート [Nucleus 日本語ランゲージファイル]

Nucleusの日本語ランゲージファイルをアップデートしました。ご指摘をいただいていた誤訳や意味の分かり...

この記事を読む »

ネットをめぐる針小棒大 [アダルト接続1万回]

ネットをめぐる針小棒大 [アダルト接続1万回]

こんなニュースが流れてきました。 アダルト接続1万回超の男性、懲戒処分に 共同通信からの...

この記事を読む »

Joiもすなるblog [Nucleus に日本語を通してみよう]

「今さら何を」と言われそうですが、Joi に触発されて、blog (Weblog)に興味を持ちはじめました。いわゆ...

この記事を読む »

これだけ? [FolderShare]

P2P 技術を使ってネットワーク越しに複数のパソコンのフォルダの中のファイルを自動的に同期してくれる...

この記事を読む »