Arch Linux on Raspberry Pi

Raspberry Pi を買って Arch Linux をインストールして自宅サーバ (NAS) にしてみたのでメモ。

準備

Arch Linux のインストール

Arch Linux を ARM アーキテクチャの上で動かすプロジェクトがあるので、 そのイメージをインストールします。

ここの Installation の通りにやれば大丈夫なはず。

起動

Raspberry Pi は MicroUSB の電源を接続するとすぐに起動します。 このとき電源の供給が不安定だとすぐに電源が落ちてしまいます。 うまく長時間起動しない場合はまず電源を疑います。 安っぽい USB AC アダプタなどの場合はうまくいかないことが多いみたい。

安定して起動した場合でも少しでも消費電力を抑えるために HDMI ケーブルなどは 繋がないほうがいい。電源と Ethernet ケーブルだけつないで最初から SSH で ログインして扱うことにします。

ログイン、パッケージのアップデート

SSH でログインしますが DHCP でどの IP アドレスが割り当てられたかはわからない。 DHCP サーバの情報を見に行ってもいいのだけど、 次のコマンドを打って怪しいところを調べていくと手っ取り早い。

$ for i in `seq 1 255`; do
ping -t 1 -n -c 1 192.168.0.$i 2> /dev/null &
done | grep 'bytes from'
64 bytes from 192.168.0.1: icmp_seq=0 ttl=64 time=7.468 ms
64 bytes from 192.168.0.3: icmp_seq=0 ttl=64 time=7.328 ms
64 bytes from 192.168.0.8: icmp_seq=0 ttl=64 time=3.365 ms
64 bytes from 192.168.0.29: icmp_seq=0 ttl=64 time=0.059 ms
64 bytes from 192.168.0.29: icmp_seq=0 ttl=64 time=0.046 ms

僕の環境では 192.168.0.8 が割り当てられていたのでそいつにログインします。

$ ssh root@192.168.0.8
# パスワードは root

ログインしたらまずパッケージを最新にして再起動。

[root@alarmpi ~]# pacman -Syu
[root@alarmpi ~]# reboot

再び DHCP で割り当てられた IP アドレスを調べてログインします。

$ ssh root@192.168.0.8

IP アドレスの固定

DHCP は不便なので IP アドレスを固定します。 netcfg というパッケージを使います。

[root@alarmpi ~]# pacman -S netcfg
[root@alarmpi ~]# cd /etc/network.d
[root@alarmpi ~]# cp examples/ethernet-static static
[root@alarmpi ~]# vi static

自分の環境に合うように設定を変えて netcfg サービスを登録します。 ここでは 192.168.0.200 に固定したとします。 再起動します。

[root@alarmpi ~]# systemctl enable netcfg@static
[root@alarmpi ~]# reboot

設定した IP アドレスに SSH ログインできれば OK

SD カードの全容量を使うようにする

初期では合計 2GB 程度しか使えないようになっているので、パーティションを広げます。

[root@alarmpi ~]# fdisk /dev/mmcblk0
Welcome to fdisk (util-linux 2.22.1).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p

Disk /dev/mmcblk0: 31.5 GB, 31486640128 bytes, 61497344 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000c21e5

        Device Boot      Start         End      Blocks   Id  System
        /dev/mmcblk0p1   *        2048      194559       96256    c  W95 FAT32 (LBA)
        /dev/mmcblk0p2          194560     3862527     1833984   83  Linux

Command (m for help): d
Partition number (1-4): 2
Partition 2 is deleted

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
      e   extended
      Select (default p):
      Using default response p
      Partition number (1-4, default 2):
      Using default value 2
      First sector (194560-61497343, default 194560):
      Using default value 194560
      Last sector, +sectors or +size{K,M,G} (194560-61497343, default 61497343):
      Using default value 61497343
      Partition 2 of type Linux and of size 29.2 GiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
[root@alarmpi ~]# reboot

再びログインして

[root@alarmpi ~]# resize2fs /dev/mmcblk0p2

しばらく待ちます。戻ってきたらディスク容量を確認。

[root@alarmpi ~]# df -h

増えていれば OK

その他初期設定

root パスワード変更
[root@alarmpi ~]# passwd
SSH 設定変更

ポート変更、 root ログイン拒否くらいは。

[root@alarmpi ~]# vi /etc/ssh/sshd_config
[root@alarmpi ~]# systemctl restart sshd
ホスト名変更
[root@alarmpi ~]# vi /etc/hostname
一般ユーザの追加
[root@alarmpi ~]# adduser
sudo
[root@alarmpi ~]# pacman -S sudo
[root@alarmpi ~]# visudo
ロケールの設定
[root@alarmpi ~]# vi /etc/locale.gen

次の行を加えて

ja_JP.utf8 UTF-8

locale-gen します

[root@alarmpi ~]# locale-gen
時刻を JST に設定

ntpd が勝手に動いてくれているけど、デフォルトでは GMT 時刻になっているはず。

[root@alarmpi ~]# ln -sf /usr/share/zoneinfo/Japan /etc/localtime
以上で

基本的な設定は終わり。最後に一応再起動。

[root@alarmpi ~]# reboot

これから必要に応じてアプリケーションをインストールしていきます。

Samba のインストール

外付け HDD をつないで NAS にします。まず普通にマウントできるか確認。

$ sudo mkdir /mnt/data
$ sudo mount -t ext3 /dev/sda1 /mnt/data

問題なければ /etc/fstab に書く。

$ sudo vi /etc/fstab
/dev/sda1 /mnt/data ext3 defaults 0 0

再起動して自動でマウントされていれば OK

$ sudo reboot

次に Samba のインストール。

$ sudo pacman -S samba

Samba 関連はこれだけで全部入ります。

$ sudo vi /etc/samba/smb.conf

デフォルト設定をコピーせずに全部自分で書くほうが早いのでそうします。

[global]
workgroup = WORKGROUP
security = share
log file = /var/log/samba/log.%m
max log size = 50

dos charset = CP932
unix charset = UTF8
display charset = UTF8

[data]
comment = data
path = /mnt/data
public = Yes
guest ok = Yes
read only = No
writable = Yes
force user = dai
create mask = 0777
force create mask = 0777
directory mask = 0777
hosts allow = 192.168.

こんな感じに最低限。 ザルセキュリティだけどどうせ自分しか使わないのでいいことにする。

(2013-04-14 追記) サービスを起動する前に Samba ユーザの追加が必要かもしれない。

$ sudo pdbedit -a dai

Samba サービスを起動

$ sudo systemctl start smbd.service
  • Windows の場合はエクスプローラから \\192.168.0.200 と入力
  • Mac の場合は Finder で Cmd+k を押して 192.168.0.200 と入力

で、見えることを確認します。大丈夫ならサービスを登録

$ sudo systemctl enable smbd.service
$ sudo reboot

再起動しても大丈夫なことを確認。

Windows のエクスプローラとか Mac の Finder から自動で見えるようにしたいのだけど、 その設定はよくわかりませんでした。 Windows の場合はとりあえずショートカットを作成することができます。 Mac は AFP? の仕様が変わったらしくて (http://www.dejavuz.com/root-jobs/9423.html)、 この URL のとおりにやってみたのだけど無理そうだったので諦めました。

Subsonic のインストール

Subsonic は音楽のストリーミングをするためのサーバ。 こいつを立てておけば出先からでも自宅から音楽をストリーミングできるので、 持ち歩く手間もなければ外部のサービスにアップロードする手間もなく、 音楽の管理がとても楽になります。 もちろんインターネットからアクセスできるようにする設定は必要です。

Debian とかの場合はパッケージが用意されているのだけど、 Arch にはないので Download ページから Stand-alone 版を使います。

まず Java, lame, ffmpeg が必要なのでこれらをインストール。

$ sudo pacman -S openjdk6 lame ffmpeg

Stand-alone 版をダウンロードして SCP などでサーバに持っていきます。

次に

$ mkdir subsonic
$ mv subsonic-4.7-standalone.tar.gz subsonic
$ tar xvf subsonic-4.7-standalone.tar.gz
$ cd ..
$ sudo mv subsonic /var

Subsonic 用のユーザを作ってやるのが行儀良いですが、 ここではログインしている一般ユーザのままとして進めます。

subsonic.sh を実行するとサーバが起動します。

$ /var/subsonic/subsonic.sh

Raspberry Pi では HTTP でアクセスできるまでにかなり時間がかかるので、 この後

$ tail -f /var/subsonic/subsonic_sh.log

としてログでも眺めていると良いでしょう。

しばらくすると http://192.168.0.200:4040/ にアクセスできるようになります。 ユーザー名 admin 、パスワード admin でログイン。

初回は相当重いです。

  1. admin のパスワードを変えます
  2. 音楽ファイルを置いてある場所を指定します
    • /mnt/data/music など
    • Fast access mode にチェックを入れておきましょう。 スペック的にこれがないと遅くてやってられないです
    • Scan media folders now を押すとライブラリをスキャンします
      • 僕の場合は約 7500 ファイル中音楽ファイルは 5000 くらいで、 所要時間が 1 時間半くらいでした
  3. Transcoding のメニューから m4a, mp4 を削除します

3G 回線でストリーミングしたい場合など適当にダウンサンプリングしますが、 このとき transcoder を /var/subsonic/transcode に置いてやる必要があります。

$ cd /var/subsonic/transcode
$ sudo ln -s `which ffmpeg` .
$ sudo ln -s `which lame` .

さらにダウンサンプリングするプレイヤーで Max bitrate を設定してやる必要がある? このへんの設定はいじってもうまく動いてないっぽくてわからない・・

最後に、起動時に自動で立ち上がるように .service ファイルを書いて登録します。

$ sudo vi /etc/systemd/system/subsonic.service
[Unit]
Description=Subsonic

[Service]
Type=forking
User=dai
Group=users
ExecStart=/var/subsonic/subsonic.sh

[Install]
WantedBy=multi-user.target

正直 .service ファイルの書き方はよくわかってないのだけどこんな感じ。 man systemd.service が詳しいので読むほうがいいと思います。

日本語ファイルがうまく再生できなかったので、

export LANG=ja_JP.UTF-8

subsonic.sh の先頭に書きました。正しくなさそうなやり方な気がするけど。

で、サービスを登録

$ sudo systemctl enable subsonic.service

再起動して自動的に起動されることを確認。

$ sudo reboot

あとはルータの設定をいじってポート解放しておきます。

DDNS 自動設定

ValueDomain でドメインをとっているので、自動で DDNS を設定するスクリプトを使います。

説明は省略。