Raspberry Pi向けArch Linux ARMインストールの自動化(一部)
はじめに
用途が少し特殊なため、役に立つ人はごく少数かもしれない。
完全に自分が楽するためだけに作ったものなので、有益な情報になるかどうかわからないけど、役に立ってくれる人がいたら、少し嬉しい。
Arch Linux ARM OSインストール用スクリプト
概要
- Raspberry Pi用のOS(Arch Linux ARM)をセットアップするスクリプト
- SDカードを挿す→スクリプト実行→SDカードをRaspberry Piに挿し変えるだけ
- OSイメージは、カレントディレクトリに無ければarchlinuxarm.orgから最新版をダウンロードしてくれる
- SDカード容量の内、100MBをbootパーティションに、残りの容量全てをrootパーティションに割当て
- rootパーティションフォーマットはF2FSを使用
- ネットワーク設定は、systemd-networkdを使用
事前に必要なもの(スクリプト実行環境がArch Linuxの場合)
- bsdtar
- dosfs-tools
- f2fs-tools
ソースコード
https://github.com/morinezumiiii/ArchLinuxARM-installer-for-raspberrypi
使い方
- SDカードをPCに挿す。
- 以下のようにスクリプトを実行
# cd ArchLinuxARM-installer-for-raspberrypi # ./install.sh [SDデバイスパス] [IPアドレス] [ゲートウェイ] [DNS]
例:
# ./install.sh /dev/sdX 192.168.0.100 192.168.0.1 192.168.0.1
- スクリプトが完了したら、SDカードを抜き、Raspberry Piに挿し、電源を投入。
これで、指定したIPアドレス上のRaspberry PiにSSHでログイン出来る。
経緯
Arch Linux(x86/x86_64)とArch Linux ARMのインストールの違い
両者は、動作するプラットフォームや、パッケージリポジトリの場所が異なったりするが、同じArch Linux。
ARM版はARM系プロセッサを積んだマイコンボード向けに、それぞれのARMアーキテクチャ毎にOSイメージの配布を行っている。
Raspberry Pi向けにおいては、ARMv6向け(Raspberry Pi Model A/B/A+/B+)と、ARMv7向け(Raspberry Pi 2 ModelB)に、配布を行っている。
x86版とRaspberry Pi向けARM版では、OSインストールの手順が異なり、ある程度の環境が作られた状態のものをインストールすることになる。
具体的には、archlinuxarm.orgからOSイメージをダウンロードし、bootパーティション/rootパーティションそれぞれをSDカードにコピーして手持ちのRaspberry Piに挿して電源を入れてあげるだけで、SSHで接続できる状態になる。
細かい設定等は、まずそのOSを立ち上げてからの作業となる。
Arch Linux ARMをRaspberry Piにインストール
ARM版公式サイトに、インストール手順がご親切に記載されている。
http://archlinuxarm.org/platforms/armv6/raspberry-pi
個人的な事情
私は、県内で日本Androidの会の茨城支部として、毎月勉強会を主催しています。
その際に、Raspberry Piを使ったワークショップ/ハンズオンを行う場合は、前日までに(現時点で)10台のRaspberry Piをセットアップしておく必要があります。
上記の公式インストール手順を、Raspberry Pi台数分を手作業で行っていると、かなりの時間がかかり、当日トラブルで再セットアップを行う必要があったりした場合も、大きな時間ロスとなり、参加者の方々に迷惑をかけてしまうので、今回自分用にスクリプト化しました。
その他設定
OSインストール後のセットアップ作業は、出来るだけ自動化させたいために、settings/setup.sh内に、スクリプトを用意し、それをRaspberry PiのSDカードのルートディレクトリ直下に配布し、SSHログイン後それを実行することでひと通りの必要なパッケージ類をインストールしたり、設定したりするようにしてあります。
Arch使いなら、arch-chrootとpacmanを使ってマウントデバイス上のArch Linuxにchrootした後、環境構築も出来るので、全部自動化させれるのだけど、その場合、ホスト側のArch LinuxもARMアーキテクチャのものを使って行う必要があるので、断念しました。
ここらへん、もっと改善できるといいのですが。
あと、複数台のSDカードリーダ/ライタを接続して、パラレルでSDカードを焼くというのも考えましたが、接続されたUSBデバイスがどのデバイスで、どのSDカードがどのIPアドレスなのかわからなくなりそうな恐れがあるので、こちらは敢えてやらないようにしました。
おわり
とりあえず、勉強会の準備が、少し、いや、かなり楽になりました。