2016年1月9日土曜日

Raspberry Pi 2にArch Linuxを設定する

最小限の組み込みLinux環境を作るべく,Arch LinuxをRaspberry Pi 2にインストールしたので,そのメモ。

ひとまず起動用に,UHS-1 Class 10の8GBのマイクロSDカードを用意しました。Raspbianと違ってとても小さいのでこんなにいらないのだけれど,年末だったせいか,4GBは全部売り切れだったので,ひとまず最安値で。ブランドは東芝でしたが並行輸入品だそうで。

Raspberry Pi用のArch Linuxは,財団のサイトからは配布されていません。昔はみたような気がするんだけれど,とにかくいまはない。それと,イメージを書けばよいという簡単な話ではなくて,LinuxマシンでSDカードの設定をしていかなくてはいけないので,Linuxマシンが必要です。どのLinuxでもいいので,例えばUbuntuのCD-Rとか作って,CD-R起動の状態で,特にPC等へLinuxをインストールしない状態で作業してもいいんじゃないかと思います(よくわからない)。

手元にはArch Linuxで稼働しているマシンがあったので,作業はそれで行いました。

OS本体は,/rootパーティション以下を.tar.gzした状態で配布されています。また,Pi 2以外(Zeroを含む)とPi 2ではARM Coreの命令セットが違うのですが,別個に作って配布されています。

正直な話,Arch Linuxは他のディストリビューションと違って,Wikiがすべての情報源かつ,OS側に特別なサポートツールがないので,PCでArch Linuxにある程度慣れてからのほうがいいと思います。

というわけで,Wikiはこちら。

Arch Linux: Raspberry Pi

OSは,以下のページにずらっとARM向け各種が並んでいます。

 Arch Linux|ARM Downloads

Raspberry Pi 2はARMv7アーキテクチャということで,下の方に「ArchLinuxARM-rpi-2-latest.tar.gz」というファイルがあると思います。それ以外はARMv6アーキテクチャということで,上の方に「ArchLinuxARM-rpi-latest.tar.gz」というファイルがあると思います。

今回はRi 2用なので,下の方のやつをもってくるわけですが,先にSDカードの準備を含む手順があるので,その説明ページのリンクを示します。
手順はどちらも同じですが,一応Pi 2用に書かれているインストール手順に沿って書いてみます。
  1. SDカードを何らかの手段でLinuxにマウントします。USB接続のカードリーダを使うのが一般的だと思いますが,ノートブック型だとSDカードスロットがあって簡単かもしれません。そのデバイス名を見ておきます。買ってきた状態だと,FAT32でひとつのパーティションになっているはずなので,/dev/sdX1(Xは適当なアルファベット1文字)だけのデバイスに見えるはずです。僕の場合,なぜか/dev/sdg1だったので,以下,それ前提で書きます。
  2. rootになります。sudo -sでいいかな。お好みで。
    1. fdiskでパーティションを自分で切ります。# fdisk /dev/sdg
    2. 試しにpコマンドを入れると,現在のパーティションテーブルが見えると思います。これをメモリ上ですが,いったんクリアします。oコマンド。これでpすると,何もないんだよー的な数行の表示が出ると思います。続けて,nコマンドで/bootパーティション(FAT32フォーマット)を作ります。プライマリなのでpを入力し,1がデフォルト (パーティション番号1ということ)なので,そのままEnterを押してOK。続けてパーティションサイズをきかれるので,「+100M」と入力してEnterします。
    3. このパーティションをFAT32に設定するため,tコマンドを入力して,タイプにはcを入れるらしいです。これは,「W95 FAT32 (LBA)」という型に対応するようです。 心配なら,ここでpコマンドで確認してもいいと思います。
    4. 残りをext4ファイルシステムにするため,nコマンドでパーティションを追加することを指示して,プライマリp,2番目がデフォルトになっていると思うので,このままEnterを押してよいと思います。パーティションサイズは残り全部なので,そのままEnterで確定。この状態でpコマンドで確認してもいいと思います。
    5. 最後にメモリ上のパーティションテーブルを実際のSDカードに書き込みます。wコマンド。途中でわからなくなったら,wするまではSDカードは無事なので,^Cなどで中断して最初からやり直してもOK。
  3. 次に,手でファイルシステムを作ってやります。FAT32は,mkfs.vfatコマンドが必要ですが,Arch Linuxの場合,最初からは入っていません。
    # pacman -S dosfstools
    してやると入ります。
  4. # mkfs.vfat /dev/sdg1
    # mkdir /mnt/boot
    # mount /dev/sdg1 /mnt/boot
    
    パーティションが小さいので,わりとすぐに終わると思います。あと,デバイス名はくれぐれも先に調べたものに合わせてください。それと,Arch Linuxは/mntというディレクトリがあったので,そこにbootとrootを作ることにしました。お使いのLinux環境に合わせて適当に変更してください。/mnt/bootのなかみは空ですが,あとから移してきますので,マウントはしておいてください。
  5. rootパーティションのファイルシステムを作ります。ext4なのでおなじみの通り。
    # mkfs.ext4 /dev/sdg2
    # mkdir /mnt/root
    # mount /dev/sdg2 /mnt/root
    
  6. では,OS本体をもってきて,/root以下に展開します。今回はPi 2なので,そちらのイメージ。それ以外はそれなりに。
    # wget http://archlinuxarm.org/os/ArchLinuxARM-rpi-2-latest.tar.gz
    # bsdtar -xpf ArchLinuxARM-rpi-2-latest.tar.gz -C /mnt/root
    # sync
    
    wgetでとってきていますが,curlじゃなきゃやだとか思う人はcurl使ってください。ドキュメントに書いてあったのを転記しただけです。展開した後安全のためにsyncしていますが,SDカードイメージにそれなりの変更を加えているので,結構待たされます。心配になるかもしれませんが,1分ぐらいのつもりで待ちましょう。
  7. 最後に,/bootパーティションのなかみを/root/boot以下から移します。
    # mv /mnt/root/boot/* /mnt/boot
    
    ここで心配なら,再度syncしてもいいと思います。
  8. 以上でインストールは終わったので,後始末です。
    # cd /
    # umount /mnt/boot /mnt/root
    # rmdir /mnt/boot /mnt/root
    
おつかれさまでした。これで,SDカードのアンマウントも終わったので,カードはLinux PCから抜いて,Raspberry Pi 2に挿しなおしてください。

さて,以下は,Arch Linux ARM起動後の最小限の作業になると思うので, 今回はそこまでメモしておしまいにします。

最初はコンソールで作業しなければいけないので,RPi 2のUSBにキーボード,HDMIディスプレイ,Ethernetケーブルを挿して,電源を投入します。Wi-Fiしかない人は,PC用のArch Linuxのスタートアップマニュアルを参考にしてWi-Fi設定までやってください。

最初に電源を入れると,普通にLinuxの起動シーケンスが進んで,login: まできます。Arch Linux ARMのユーザ名は,Raspberry Pi版かどうかに関係なく共通で,「alarm」です。Arch Linux ARMの大文字の部分だけとってきたんだな,と思えば覚えられると思います。初期パスワードも同じく「alarm」です。

次に,rootの作業をするわけですが,驚くかもしれませんが,sudoが入っていません。よって,最初はsuする必要があります。rootの初期パスワードは「root」です。ログイン名とおんなじ。

気持ち悪いので,sudoを入れて,パスワードを変えたり,「pi」ユーザを作ったりすることにします。
$ su
Password: root
# pacman -S sudo
# vi /etc/sudoers
設定はお好みで。Raspbianに合わせるなら,
%wheel ALL=(ALL) NOPASSWORD: ALL
の行をコメントアウトするんだと思います。書き込み許可がないので,w!で強制書き込みします。

これで,sudoできるようになりましたが,alarmきもちわるいな,と思うので,ユーザ「pi」を作ってwheelグループに入れることにしました。
# useradd -G wheel -m -c "Pi User" pi
# password pi
(raspberryを2回入れる)
ついでなので,alarmはロックしてログインできなくしてしまいます。
# passwd -l alarm
rootのパスワードも変更しておきましょうか。
# passwd root
(お好みで)
 sshは最初から起動しているので,IPアドレスがわかれば,例えばいま作ったpiユーザでsshログインすることはできます。でも,やはりavahiを入れて,ホスト名を広報してもらったほうが使いやすいと思います。
# pacman -S avahi
# systemctl enable avahi-daemon
# systemctl start avahi-daemon
これで,「ホスト名.local」でつながると思います。AvahiはMac OSが採用しているmDNSなので,Windowsマシンからは,iTunes等を入れるなどしてApple Bonjourサービスが起動していないと見えません。

ホスト名は,/etc/hostnameに書かれている内容を起動時に読み込んで設定するので,お好みのホスト名に変更して再起動することで,リモートログインも気持ちよくできるんではないかと思います。初期状態では,「alarmpi」です。

最後に,SSH接続するMacなどの~/.ssh/configに,適当な設定を書いておくなど,通常のSSHクライアント設定をして,ひとまず完了かと思います。