Arch Linux on Raspberry Pi
Raspberry Pi を買って Arch Linux をインストールして自宅サーバ (NAS) にしてみたのでメモ。
準備
- Raspberry Pi
- ModMyPi というサイトで買うと2週間前後で届くっぽい
- SD カード
- Amazon ベーシックの SDHC カード 32GB を使うことにしました
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 でログイン。
初回は相当重いです。
- admin のパスワードを変えます
- 音楽ファイルを置いてある場所を指定します
/mnt/data/music
など- Fast access mode にチェックを入れておきましょう。 スペック的にこれがないと遅くてやってられないです
- Scan media folders now を押すとライブラリをスキャンします
- 僕の場合は約 7500 ファイル中音楽ファイルは 5000 くらいで、 所要時間が 1 時間半くらいでした
- 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 を設定するスクリプトを使います。
説明は省略。