Raspberry Piに Arch Linux Armをインストールするのこと
Arch Linux Arm on Raspberry Pi
RaspbianからArch Linux Armに載せ替えてみた。
GUIなどはインストールしなかった分、起動は早かった……ような気がする。
以下に手順を残しておく。
ガイドに従ってインストール
サイトの指示に従ってインストールする。
ガイドは作業PCがLinux前提で書いてあるけど、
Windowsだったらどうするんだろうなぁ。
Raspberry Pi | Arch Linux ARM
環境設定
以下はArch Linuxをインストールした時と同じ手順で行えた。
初期起動時点でsshdは起動しているのでリモートで作業できる。
nagamitsu1976.hatenadiary.jp
GW-900Dのドライバ導入
うちのRaspberry Piは初期型なのでWifiはドングルを使っている。
このドングルはドライバが用意されていないので、
ソースからビルドする必要があるのはRaspbianと変わらない。
ビルド環境の準備
ビルド環境とgitをインストール
$ pacman -S base-devel $ pacman -S linux-raspberrypi-headers $ pacman -S git
RTL8812au ドライバの作成&インストール
$ cd [適当なworking directory] $ git clone https://github.com/gnab/rtl8812au.git $ cd rtl8812au $ nano Makefile # ターゲットCPUをi386からarmに変更 $ make $ cp 8812au.ko /lib/modules/extramodules--raspberrypi/kernel/drivers/net/wireless/ $ depmod $ reboot
再起動したらlsmodとdmesgでドライバがロードされているか確認。*2
ip linkでネットワークインターフェイス名を確認し、wifiのI/Fが確認できればOK。
Pacmanフックの追加
カーネルが更新されるとwifiドライバもビルドし直しとなる。
手動ビルドも面倒なので、Pacmanフックを使って自動化してみる。
Pacmanフックを設定するには/etc/pacman.d/hooks配下にhookファイルを配置する。
Arch Linuxのwiki Pacmanフックの項を参考に作ってみたhookファイルはこんな感じ。
/etc/pacman.d/hooks/rtl8812au.hook …… [Trigger] Operation = Upgrade Type = Package Target = linux-raspberrypi Target = linux-raspberrypi-headers [Action] Depends = linux-raspberrypi-headers Depends = make Depends = gcc When = PostTransaction Exec = /usr/local/src/rtl8812au/8812au_make.sh ……
カーネルとカーネルヘッダの更新をトリガーとして、
それらが更新された後にExecで指定したmake用のシェルを実行する、
といった感じ。ドライバのビルドにはカーネルヘッダが必要なので
依存条件にカーネルヘッダが入れてある。*3
wpa_supplicantの設定
接続情報の設定
wpa_passphreseでssidのパスワードを自動生成しておく。
/etc/wpa_supplicant/wpa_supplicant-wlan0.confを新規作成し、以下の内容を記述する。
ctrl_interface=/run/wpa_supplicant update_config=1 network={ ssid="XXXXXXXXXXX" proto=RSN key_mgmt=WPA-PSK pairwise=CCMP group=CCMP #psk="xxxxxxxxxxxxx" psk=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345678901 scan_ssid=1 }
wpa_supplicant起動パラメータの編集
このまま起動するとこんな感じで、ドライバー未サポートのエラーが出る。
Successfully initialized wpa_supplicant nl80211: Driver does not support authentication/association or connect commands wlan0: Failed to initialize driver interface
Arch Linuxのwikiにあるwpa_supplicantの項に対処方法が書いてあるので、
wikiに従って対処する。
WPA supplicant - ArchWiki
$ nano /usr/lib/systemd/system/wpa_supplicant@.service …… # ExecStartの行の最後に「-Dnl80211,wext」を追加する。 ExecStart=/usr/bin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -i%I -Dnl80211,wext ……
wpa suppliantサービスの有効化
wpa suppliantサービスの有効化を行う。
$ systemctl start wpa_supplicant@wlan0 $ systemctl status wpa_supplicant@wlan0 # ステータス確認で問題なければenableする。 $ systemctl enable wpa_supplicant@wlan0
IPアドレスの割り当て
IPアドレスはsystemd-networkdが管理しているようなので*4、以下を編集する。
ファイルの書き方はここを参照。*5
Ethernetポートの場合
/etc/systemd/network/eth0.networkを編集
[Match] Name=eth0 #[Network] #DHCP=yes [Address] Address=192.168.10.32/24 [Route] Gateway=192.168.10.1
Wifiの場合
/etc/systemd/network/wlan0.networkを編集。
ファイルがなければ/etc/systemd/network/eth0.networkをコピーしてリネームしてから編集する。
[Match] Name=wlan0 #[Network] #DHCP=yes [Address] Address=192.168.10.33/24 [Route] Gateway=192.168.10.1
systemd-networkdのリロード
systemd-networkdをリロードして、
ip aでIPアドレスが設定通りか確認する。
$ systemctl restart systemd-networkd
再起動
再起動して、ネットワークが自動起動すればOK。
Congraturations!
初期設定はこんな感じでおしまい。