RaspberryPi + Pidora 20 + 外付けHDD｜Macで使えるTime Machineを作る　ver.1.0


## 初めに
これまでも外付けHDDとRaspberry Piを使用したファイルサーバーを立て、
しばらくMacBookからTimeCupsuleとして使用していましたが、
引っ越しを機にサーバーの調子が悪くなってしまいました。

今回は、以前利用していたOSのRaspbianからPidoraへと変更して、
新たにサーバーを設定しました。
わざわざ新規インストールし直すのは勉強のためです。
また職場で使用するOSがCentOSになり、同じくRedHat系のPidoraに変更する狙いもあります。

作業はMacBook Air OS X 10.9.2より行いました。


##imgの入手とSDカードへの書き込み
まずは、http://www.raspberrypi.org/downloads/ よりPidora最新版を入手します。
Downloadsフォルダにダウンロードしたとして

```bash
$ cd /Users/USERNAME/Downloads/
$ unzip Pidora-2014-R1.zip
$ cd Pidora-2014-R1
$ ls 
Pidora-2014-R1.img		Pidora-2014-R1.img.md5sum
```
解凍、確認します。必要なのはPidora-2014-R1.imgです。
`df -h` コマンドでSDカードの位置を確認（私の環境では、/dev/disk1s1）した後に、

```bash
$ sudo dd bs=1m if=Pidora-2014-R1.img of=/dev/rdisk1
$ sudo diskutil umountdisk /dev/disk1s1
```
ddコマンドで書き込み、取り出します。

##RaspberryPiでの初期設定
出来上がったSDカードをRaspberryPiに挿して起動します。
この時はネットワークに接続せずにキーボードとマウスのみを接続しました。
また今回は初回起動時だけHDMI出力を使用して、GUIで設定しました。
設定はダイアログを追っていくだけですので問題なく進められるはずです。

Create Userの項では、ユーザーを作成し、 **Add to Administrators group** にチェックを入れておくことをおすすめします。
これでwheelグループに追加されますので、後でsudoの設定の必要なくsudoが使用可能になります。
初期設定が終わり起動が終了するとログイン画面になりますので、ログインしてそのままシャットダウンします。

```bash
$ shutdown -h now
```
LANケーブル、外付けHDDを接続して起動し直します。
キーボード、マウスは接続しません。

以降はMacのターミナルよりSSH接続して作業します。

```bash
$ ssh USERNAME@192.168.11.2
```
####IPアドレスを固定する

```bash
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
```

>DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
NM_CONTROLLED=yes

>IPADDR=192.168.11.2
NETMASK=255.255.255.0
BROADCAST=192.168.11.255
NETWORK=192.168.11.0
GATEWAY=192.168.11.1
DNS1=192.168.11.1

上記のように設定して保存し、ネットワークサービスを再起動します。

```bash
$ sudo service network restart
```

`ifconfig`でIPアドレスを確認しようと思ったのですが入ってないようなので

```bash
$ sudo yum -y -v install net-tools
```
でインストールして確認。

```bash
$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.11.5  netmask 255.255.255.0  broadcast 192.168.11.255
        inet6 fe80::ba27:ebff:fea8:4d8d  prefixlen 64  scopeid 0x20<link>
        ether b8:27:eb:a8:4d:8d  txqueuelen 1000  (Ethernet)
        RX packets 30120  bytes 34974291 (33.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11727  bytes 1142411 (1.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
```
####rootログインを無効にする

```bash
$ sudo vi /etc/ssh/sshd_config
```
>\#PermitRootLogin yes
を
PermitRootLogin no
に変更

####yum updateで更新する

```bash
$ sudo yum check-update
$ sudo yum -y -v update
```
ログが多かったので`-v`オプションはおこのみで。
1時間ほどで終わりました。

####ssh鍵認証を設定する
ssh公開鍵を設定してパスワード認証によるログインを無効にします。
まず、ssh公開鍵を置くディレクトリを作成してパーミッションを設定します。

```lang:
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
```
そしてMac側で鍵を作成し、`scp`でRaspberryPiに送信します。

```bash:Macのターミナルで
$ ssh-keygen -t rsa   //パスワードを無しにしたいので何も入力せずにReturn
$ scp id_rsa.pub USERNAME@192.168.11.2:~/.ssh/id_rsa.pub
```

再びRaspberryPi側で公開鍵をリネームし、パーミッションを設定します。

```bash
$ cd ~/.ssh
$ mv id_rsa.pub authorized_keys
$ chmod 600 authorized_keys
```
ここまで設定したら一度ログアウトして再度ssh接続します。
そうするとパスワード入力を求められることなくログイン出来るはずです。

####パスワード入力による接続を無効に設定する

```bash
$ sudo yum -y -v install vim   //vimがなかったのでインストール　viでも問題ありません
$ sudo vim /etc/ssh/sshd_config
```
>PasswordAuthentication no

最後にサービスを再起動して設定完了です。

```bash
$ sudo service sshd restart
```

##TimeMachineの設定
いよいよTimeMachineを設定していきます。

####外付けHDDのマウント
`fdisk`で外付けHDDがマウントされたボリュームを確認します。

```bash
$ sudo fdisk -l
---
/dev/sda1         2048 1953525167 976761560  83 Linux
```
/dev/sda1にマウントされていました。
>この段階で必要に応じてHDDのフォーマットやパーティションの設定を行ってください。
私の場合はLinuxパーティションを既に作ってあったのでそのまま設定を続けています。

この外付けHDDをマウントするディレクトリを作成してそこにマウントします。

```bash
$ sudo mkdir /media/mactc
$ sudo chmod 777 /media/mactc/
$ sudo mount /dev/sda1 /media/mactc
$ mount
/dev/sda1 on /media/mactc type ext3  //この行があることを確認
```

####起動時に自動的にマウントするように設定する
```
$ sudo vim /etc/fstab
```

```lang:/etc/fstab
/dev/sda1       /media/mbatc    ext3    relatime        0       2
```
再起動してマウントされるか確認します。

```
$ reboot
$ mount
```

####Netatalkのインストール

ソースコードからビルドしてもいいのですがせっかくなので簡単に済みそうなパッケージ版でインストールしてみます。

```bash
$ sudo yum -y -v install netatalk
$ cd /etc/netatalk
$ sudo vim afpd.conf
```

```lang:/etc/netatalk/afpd.conf
- -tcp -noddp -uamlist uams_dhx.so,uams_dhx2.so -maccodepage MAC_JAPANESE -unixcodepage UTF8
```


最終行に上記を追記します。
他の設定ファイルも同様に以下のように設定します。

```lang:netatalk.conf
#### machine's AFPserver/AppleTalk name.
ATALK_NAME=TimeMachine

#### server (unix) and legacy client (<= Mac OS 9) charsets
ATALK_UNIX_CHARSET='UTF8'
ATALK_MAC_CHARSET='MAC_JAPANESE'
```
```lang:AppleVolumes.default
# The line below sets some DEFAULT, starting with Netatalk 2.1.
:DEFAULT: options:upriv,usedots cnidscheme:dbd dperm:0774 fperm:0664 ea:sys

# 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.
#~
/media/mactc "TimeMachine" allow:USERNAME or GROUP options:tm
```
ここまで設定したらNetatalkを起動します。

```bash
$ sudo systemctl start netatalk.service
```
OS起動時に自動的にNetatalkを開始するように設定します。

```
$ sudo systemctl enable netatalk.service
```

ここまででTimeMachineとして利用可能なはずです。
が、しかし。
![スクリーンショット 2014-06-10 22.50.12.png](https://qiita-image-store.s3.amazonaws.com/0/43890/1826adfb-2bfe-1682-35b9-5625018b5b49.png)
となり接続できません。

原因を調べるためにNetatalkに含まれている動作チェック用のPerlスクリプトを動かしてみます。

```bash
$ asip-status.pl 192.168.11.2
AFP reply from 192.168.11.2:548
Flags: 1  Cmd: 3  ID: 57005
Reply: DSIGetStatus
Request ID: 57005
Machine type: Netatalk2.2.3
AFP versions: AFP2.2,AFPX03,AFP3.1,AFP3.2,AFP3.3
UAMs: No User Authent
Volume Icon & Mask: exist
Flags: SupportsCopyFile,DontAllowSavePwd,SupportsServerMessages,SupportsServerSignature,SupportsTCP/IP,SupportsSrvrNotifications,SupportsOpenDirectory,SupportsUTF8Servername,SupportsUUIDs,SupportsSuperClient
Server name: TimeMachine
Signature:
9f 71 d3 60 af f8 97 90 83 e9 89 46 ba a3 fa 61  .q.`.......F...a
                                                  
Network address: 192.168.11.2 (TCP/IP address)
UTF8 Servername: TimeMachine
```
####`UAMs: No User Authent`

なるほど、ユーザー認証に必要なものが何もありませんでした。
試しにゲストユーザーでの認証を許可して接続すると接続出来ました。
このまま使ってもいいのですがせっかくなのでソースコードからコンパイルして、最新版のnetatalkを動かしてみようと思います。

できればこのままUAMライブラリーだけ追加できればいいのですが、方法がわかりません。
ご存じの方がいらっしゃいましたらお願いします。

次回へ続くかも

---

###追記：このUAMに関する[バグの対処法](http://qiita.com/ente04/items/646c0ec1a764568e7c7e)を書きました。