Raspberry Pi Zero W に Alpine Linux をインストールする

Raspberry Pi Zero W に Alpine Linux をインストールするベターな方法を紹介します。

前置き

Raspberry Pi Zero W (以下ZeroW)は1300円という値段で購入できる、 Wi-Fiに接続可能な本格的なコンピューターです。 ZeroW には発売元よりRaspbianというDebianベースのLinuxが提供されています。 しかしクアッドコアの Raspberry Pi 3 ならともかく、 シングルの ZeroW で動かすにはたとえGUIが省略されたLITE版だとしても、 ZeroWではやや非力に感じてしまいます。 つまりZeroWをより軽いLinuxで使いたいということで、 私が白羽の矢を立てたのが Alpine Linux (以下Alpine)でした。

AlpineはDocker等で使われる軽量OSの1つで、 そのサイズの小ささが特徴です。 また驚いたことにRaspberry Pi向けのイメージが公開されています。 ただ小さいということは普段使う上で便利な、 いろんなドライバやツールが入ってないということでもあります。 案の定ZeroWにインストールするにあたっていくつかハマりポイントがあり、 いくらかハマった結果 それらを回避してインストールができる簡単な方法を確立できました。 本記事ではそれを紹介します。

手順その1 - イメージの作成

  1. Alpine Linux のイメージをダウンロード

    ダウンロードページ から Raspberry Pi 向けのイメージをダウンロードします。 ページ下部の RASPBERRY PI セクションにある armhf のラベルが目印です。 以下のコマンドでもダウンロードできます。

    $ curl -LO http://dl-cdn.alpinelinux.org/alpine/v3.6/releases/armhf/alpine-rpi-3.6.2-armhf.tar.gz
    

    わずか65MBでダウンロードはあっという間です。

  2. ダウンロードしたイメージを展開

    ここでは今後の作業の都合上、 zw/ というディレクトリへ展開します。

    $ mkdir zw
    $ tar xzf alpine-rpi-3.6.2-armhf.tar.gz -C zw
    
  3. zw/usercfg.txt を作成

    これは Alpine のバグで Can't open /dev/ttyS0 というエラーが繰り返し表示されるのを抑制するために行います。 以下のコマンドで示すように enable_uart=1 を書きましょう。

    echo enable_uart=1 >> zw/usercfg.txt
    

    ここで作成したファイルはZeroWのブート時に config.txt から読み込まれます。

  4. Wi-Fi ドライバーのインストール

    Alpine は小ささを優先しているためか、そのイメージにはZeroWのWi-Fiドライバーが含まれていません。 そのために、そのままのイメージを使ってしまうと LANアダプタの無いZeroWだけではネットワークを使ったセットアップができずに詰みます。 そこで以下のようにして Wi-Fiドライバー をダウンロードし、 ディレクトリ zw/firmware/brcm 下に配置する必要があります。

    $ mkdir -p zw/firmware/brcm
    $ cd zw/firmware/brcm
    $ curl -LO https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm80211/brcm/brcmfmac43430-sdio.bin
    $ curl -LO https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm80211/brcm/brcmfmac43430-sdio.txt
    $ cd ../../..
    

    このディレクトリに置いたファイルは ZeroW で Alpine を起動した際に /lib/firmware/brcm へ自動的にコピーされ、 ドライバーとして利用できるという寸法です。

  5. microSDカードへイメージをコピー

    こうしてできた zw/ 下のファイルとディレクトリをすべて microSD カードのルートディレクトリにそのままコピーします。 microSD カードのフォーマットは FAT32 で、 またパーティションにはブート可能とマークしてある必要があります。

    フォーマットにはSD Associationの SDメモリカードフォーマッター を使うとトラブルが少ないようです。 特に、購入してきた NOOBS 入りのmicroSDカードを再利用する場合は、 パーティションなどの情報に気をつけてください。 すべてのパーティションを消して1個の大きなパーティションにした上で、 FAT32 フォーマットするのが余計なトラブルを回避できてオススメです。

手順その2 - 起動と初回のセットアップ

  1. ZeroW を起動

    microSD にファイルとディレクトリを書き込んで準備ができたら、 早速 ZeroW に組み込んで電源を入れてみましょう。 以下の手順にはHDMIモニタとUSBキーボード、 そしてインターネットに繋がる Wi-Fi ネットワークが必須です。

  2. ログイン

    起動がうまく行けばユーザー名は root でパスワードは無し、 もしくは空でログインできます。

  3. セットアップを実行

    $ setup-alpine
    

    これでセットアップが始まります。 幾つかの質問に答える必要がありますが、 基本的にはエンターキーを押すだけでデフォルトを選択していけば問題ありません。

    ただし Wi-Fi 接続を設定する箇所だけは重要です。 デフォルトのインターネット接続に wlan0 を使うと指定した後に、 アクセスポイントのSSIDとパスワードを聞かれます。 ここだけは慎重に選択・回答してください。

  4. 起動時に幾つかのサービスを開始・停止するよう設定する

    起動時に Wi-Fi に接続できるようにするために、 以下のコマンドで wpa-supplicant を起動するようにしてください。

    $ rc-update add wpa-supplicant boot
    

    次にZeroWに存在しないハードウェアクロックをソフトウェアクロックで置き換えます。

    $ rc-update add swclock boot
    $ rc-update del hwclock boot
    
  5. 以上の結果をコミット

    Alpine では、システムに及ぼした変更は何もしなければ再起動するとすべて失われます。 そこで以下のコマンドでこれまでの変更結果を、 次回以降の起動に反映させましょう。

    $ lbu commit -d
    
  6. リブート!

    $ reboot
    

    でリブートし、再起動・ログイン後に以下のコマンドで動作を確認してみてください。

    $ date
    $ ifconfig
    $ iwconfig wlan0
    

まとめ

以上で ZeroW に Alpine を簡単にインストールできます。

本当ならばこの後 ZeroW を Alpine でどう使うかのほうが ほとんどの人にとってはよっぽど大事なのですが、 この記事では一旦ここまでにしておきます。

参考文献