はじめに
RaspberryPI を Mac のバックアップサーバー&ファイルサーバーにするべく, avahi-daemon と netatalk をインストールしてみます。
2017年10月10日時点のインストール手順なので,新しい Raspbian をご使用の場合は異なる手順になる場合がありますので予めご了承ください。
使用する主要なソフトウェアとバージョン
- RASPBIAN STRETCH LITE (2017-09-07)
- netatalk 3.1.11
- avahi-daemon 0.6.32-2
※ これらは頻繁にバージョンアップするので,必ず一致させる必要はありません。
構成
お好きな構成にしていただければと思いますが,参考までに私が作った構成を紹介します。
Raspberry PI に 2 台のポータブル HDD を USB 接続して,バックアップ先は一方のポータブル HDD にします。片方は ext4 でフォーマットしてあり,もう片方は ExFAT でフォーマットしたものになります。
注意
Linux Native ではないファイルシステムでフォーマットされた HDD の使用は推奨されません。
詳細は http://www003.upp.so-net.ne.jp/hat/netatalk/andsamba.html の「やらないほうがいいこと」をご覧ください。
特に理由がなければファイルシステムは ext4 等にすることをオススメいたします。
安定した電力を供給したいので,ポータブル HDD はセルフパワー供給可能な USB ハブを使用します。
つまり, Raspberry PI の USB ポートには USB ハブがついていて, USB ハブには ポータブル HDD が接続されています。USB ハブには電源アダプターを接続した状態にします。 Raspberry PI 本体への電源供給は USB ハブから USB ケーブル経由で行います。
ただ, Raspberry PI 本体の USB ポートにポータブル HDD を接続しても電力不足で HDD が動かない可能性があります。
Raspbian をダウンロード
https://www.raspberrypi.org/downloads/raspbian/
上記サイトから「RASPBIAN STRETCH LITE」をダウンロードします。
2017年10月10日時点で,ダウンロードしたのは以下のファイルです。
2017-09-07-raspbian-stretch-lite.zip
ダウンロードした上記 zip ファイルを展開します。すると「 2017-09-07-raspbian-stretch-lite.img 」というファイルが展開されます。
Raspbian を SD カードに書き込み
SD カードを mac に挿します。
次のコマンドで SD カードのディスクを確認します。
df -h
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk1s1 466Gi 146Gi 318Gi 32% 2106888 9223372036852668919 0% /
:
/dev/disk1s4 466Gi 1.0Gi 318Gi 1% 1 9223372036854775806 0% /private/var/vm
/dev/disk2s1 7.4Gi 2.5Mi 7.4Gi 1% 0 0 100% /Volumes/NO NAME
/dev/disk2s1 が SD カードのディスクということがわかりました。 /dev/disk2s1 という文字は環境によって変わるので,必ず df -h コマンドで調べるようにしてください。
アンマウントしましょう。
注意
ここで間違ったディスクを指定して作業を進めると意図しないディスクを消してしまう可能性があります。良く見て確かめて入力してください。
間違った操作でデータを消したとしても当ページの記事を書いた私自身は責任を負いかねますので,自己責任で作業してください。
diskutil unmount /dev/disk2s1
次に書き込みを行いますが,アンマウントした状態のディスクの名前は少し変わります。「/dev/diskNsM」のsMの部分を除き,diskNの頭にrをつけます。「/dev/disk2s1」であれば/dev/rdisk2となります。
「2017-09-07-raspbian-stretch-lite.img」のあるディレクトリーで次のコマンドを実行します。
sudo dd bs=1m if=2017-09-07-raspbian-stretch-lite.img of=/dev/rdisk2
書き込みが終わると,自動的にマウントされるのでアンマウントして Raspberry PI にセットして起動します。
IP アドレスを固定にする
/etc/dhcpcd.conf を開き,ファイルの最後に次の通り設定を行います。
ここでは IP アドレスを 192.168.1.100 とします。
interface eth0
static ip_address=192.168.1.100/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1 8.8.8.8
SSH を使用可能にする
注意しなくてはならないのは,過去のRaspbian とは違い,SSHが最初から使用可能な状態になりません。ディスプレイとキーボードで作業してください。
root でログインして,次のコマンドを実行します。
touch /boot/ssh
再起動します。以降は SSH で接続して作業ができます。
セットアップ
次のコマンドを実行します。
raspi-config
ロケールの変更
Localization Options を選択します。
Change Locale を選択します。
ロケールの一覧が現れるので,スクロールして,「ja_JP.UTF-8 UTF-8」に*を入れます。
次のページでデフォルトのロケールをどれにするか聞かれるので「ja_JP.UTF-8 UTF-8」にします。
タイムゾーンの変更
Localization Options を選択します。
Change Timezone を選択します。
Asia を選択します。
Tokyo を選択します。
再起動
raspi-config のトップページで,「Finish」を選択すると,再起動するかどうかを聞かれるので,再起動します。
必要なソフトウェアのインストール
既存のソフトウェアのアップデート
apt-get update && apt-get upgrade -y
netatalk が必要とするソフトウェアのインストール
apt-get install -y build-essential libevent-dev libssl-dev libgcrypt-dev libkrb5-dev libpam0g-dev libwrap0-dev libdb-dev libtdb-dev libmariadbclient-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 exfat-fuse
netatalk のインストール
netatalk のダウンロードと展開
cd /usr/local/src
wget http://prdownloads.sourceforge.net/netatalk/netatalk-3.1.11.tar.bz2?download -O netatalk-3.1.11.tar.bz2
tar xvf netatalk-3.1.11.tar.bz2
cd netatalk-3.1.11
configure
./configure \
--with-init-style=debian-systemd \
--without-libevent \
--without-tdb \
--with-cracklib \
--enable-krbV-uam \
--with-pam-confdir=/etc/pam.d \
--with-dbus-daemon=/usr/bin/dbus-daemon \
--with-dbus-sysconf-dir=/etc/dbus-1/system.d \
--with-tracker-pkgconfig-version=1.0
ビルド
make
make install
Time Machine 用ユーザーを作成
ユーザーを追加して,パスワードも設定します。
useradd -m timemachineuser
passwd timemachineuser
USB 接続したポータブル HDD のマウント
USB 接続したポータブル HDD をマウントするには次のようにします。
パーティション UUID を確認
ext4 でフォーマットした HDD と ExFAT でフォーマットした HDD を接続した場合以下のような表示になります。私の環境では /dev/sdaN が ext4 , /def/sdbN が EXFAT のディスクになっています。
この後, /dev/fstab にマウントする HDD デバイスを書き込むのですが, /dev/sdaN や, /dev/sdbN を指定すると,起動する度に入れ替わる可能性があるので, PARTUUID を使います。
/dev/sda2 と /dev/sdb2 をマウントしたいので, PARTUUID をメモします。
blkid コマンドを実行します。
blkid
/dev/mmcblk0p1: LABEL="boot" UUID="B64A-B272" TYPE="vfat" PARTUUID="966259d8-01"
/dev/mmcblk0p2: UUID="9a7607bd-5bef-4afc-ac6d-63a957744962" TYPE="ext4" PARTUUID="966259d8-02"
/dev/mmcblk0: PTUUID="966259d8" PTTYPE="dos"
/dev/sda1: UUID="3f242346-3608-4410-b06a-21b24a0de2ac" TYPE="ext4" PARTUUID="b7c18357-2d46-4336-a0af-420998e9a705"
/dev/sdb1: LABEL="EFI" UUID="67E6-17ED" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="46dfc8fc-3719-4bac-9bb0-f55aa762fc5f"
/dev/sdb2: LABEL="Archives" UUID="574A-FF6F" TYPE="exfat" PARTLABEL="Windows_NTFS_Untitled_2" PARTUUID="ed93a832-45e0-46c0-8ce4-3f461f0e5c2e"
ファイル /etc/fstab を次のように編集します。
proc /proc proc defaults 0 0
PARTUUID=966259d8-01 /boot vfat defaults 0 2
PARTUUID=966259d8-02 / ext4 defaults,noatime 0 1
PARTUUID=b7c18357-2d46-4336-a0af-420998e9a705 /mnt/TimeMachine ext4 defaults,user_xattr,acl 0 2
PARTUUID=ed93a832-45e0-46c0-8ce4-3f461f0e5c2e /mnt/ExfatHdd exfat-fuse sync,auto,dev,exec,gid=65534,rw,uid=65534 0 0
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
HDD のマウント先を作成
ディレクトリーを作成
mkdir /mnt/TimeMachine
mkdir /mnt/ExfatHdd
オーナーを変更
chown timemachineuser:timemachineuser /mnt/TimeMachine
chown timemachineuser:timemachineuser /mnt/ExfatHdd
パーミッションを変更
chmod 777 /mnt/TimeMachine
chmod 777 /mnt/ExfatHdd
afp の設定ファイルを編集
ファイル「/usr/local/etc/afp.conf」を編集
hosts allow = 192.168.1.0/24
mac charset = MAC_JAPANESE
log file = /var/log/netatalk.log
vol preset = my default values
[my default values]
valid users = timemachineuser
file perm = 0660
directory perm = 0770
[Time Machine]
path = /mnt/TimeMachine
time machine = yes
[Exfat Disk]
path = /mnt/ExfatHdd
avahi-daemon と netatalk を有効化
systemctl enable avahi-daemon
systemctl enable netatalk
再起動
Raspberry PI を再起動して,完了です。
あとは macOS でバックアップ先を指定すれば TimeMachine として機能します。
バックアップ先を指定するときに入力を要求されるユーザーとパスワードは, timemachineuser とそのパスワードです。
参考