ぶていのログでぶログ

思い出したが吉日

Arch Linux on Raspberry Pi 3のTips

この記事は、先日の社内発表会の資料の補足です。


Arch Linuxは、豊富な日本語化されたドキュメントがあって、Arch Linux on Raspberry Piももちろん完備されている。 Raspberry Pi - ArchWiki

基本的にこれに沿っていけば、失敗することはないし、迷うことはない。素晴らしいディストリビューションであると思う。 ただ、いくつか説明不足なところがあって、私が試したときに気がついた or はまったことがあるのでメモしておく。

OSイメージ解凍時のWARNING

インストール手順はここにある。これは日本語化されていないが、内容的にそんな難しいことはないしコマンドが書いてあるので、その通りにやっていけばよい。 私は、Gentooでこの手順を行ったが、bsdtarコマンドを使ってtarballを回答するときにWARNINGが出た。内容をメモっておかなかったのだが、確か拡張ATTRあたりが設定できないみたいなやつだった記憶がある…。 まぁ、なんか問題なさそうだったし、実際今は問題なく動いているので、ん!?とはなるが気にする必要はない。 (そいえば、bsdtarとGNU tarの違いってなんだろうなぁ…)

OSインストール直後にやったこと

OSインストール直後は、ほとんど何もインストールされていない。sudoすら入っていないので、rootでログインするとsuしてsudoくらい入れておくと楽かもしれない。なお、sshは入っている。 インストール用のOSイメージは、最新のパッケージと乖離がある場合があるのでアップデートしておくとよい。以下のコマンドで、pacmanのパッケージリストをアップデートをした後、全パッケージをアップデートすることができる。

# pacman -Syy
# pacman -Syu

これ以外の使い方は公式ドキュメントが詳しい

pacman - ArchWiki

Raspberry Pi 3 内蔵Bluetoothを使う

Raspberry Pi 3には内蔵WiFiに加えて、内蔵Bluetoothも搭載されている(買ってから知ったw)。内蔵WiFiはインストール後になにもしなくても使えるのだが、内蔵Bluetoothは少し設定しないと使えなかった。 内蔵Bluetoothを使えるようにするには、以下の2つが必要になる。

このパッケージはAURと呼ばれるもので、いわゆる野良パッケージみたいなものである。AURの使い方はシンプルで、AURのページのDownload snapshotからtaballをDLし解凍。解凍先のディレクトリで makepkg -sri するだけである。詳しくは公式ドキュメントを参照。

Arch User Repository - ArchWiki

で、ここでハマったのだが、AURはバイナリパッケージではないのでビルドする必要がある。前述したとおり、ほぼ何も入っていない状態なので、ビルドツールも入っておらず、勘でgccを入れたもの依存パッケージが全然足りずにハマりまくっていた…。公式ドキュメントにもあるのだが、base-develパッケージグループを入れればこの問題は発生しない…。

まとめると、内蔵Bluetoothを使うためには以下の手順が必要だ。

# packman -S --needed base-devel
# curl -LO https://aur.archlinux.org/cgit/aur.git/snapshot/hciattach-rpi3.tar.gz
# tar zxvf hciattach-rpi3.tar.gz
# cd hciattach-rpi3
# makepkg -sri
# curl -LO zxvf https://aur.archlinux.org/cgit/aur.git/snapshot/pi-bluetooth.tar.gz
# tar zxvf pi-bluetooth.tar.gz
# cd pi-bluetooth
# makepkg -sri

これで内蔵Bluetoothが使えるようになっているはずである。この後の一般的なBluetoothの使い方は公式ドキュメントにかいてある。

Bluetooth - ArchWiki

…のだがこれにも罠がある。 blue-utilsパッケージをインストールするとCLIツールが入ってくるのだが、bluetoothcltなどはあるのだがrfcommなどのシェルコマンドが入っていないのだ…。 これはトラブルシューティングにも書かれているのだが、パッケージから削除されているらしい。 で、代わりの機能はD-Bus APIになったらしい。 なったらしいのだが、これをどう使えばいいのか書いていない!!!! D-BusAPIページにリンクが張ってあるのだが、本当にAPIの仕様のページであるために、どうやってこのAPIをたたけばいいのかすらわからない!!!! 挙げ句の果てに、一部の機能はD-Bus APIでは実装されていません!!!と書かれている…まじかよー。 しょうがないので、これらの削除されたコマンドを使いたい場合はbluez-utils-comapt AURパッケージを入れるとよい。

おまけ:ELECOM製無線LANアダプタWDC-433DU2HBKを使う

Raspberry Pi 3には内蔵WiFiがあることを前述した。 しかし、この内蔵WiFiは11acが使えず、また、そこそこ発熱するらしい(未検証)ので、私は外付けのアンテナを購入した。 超小型のUSB-WiFiドングルを昔使ったことがあるのだが、発熱がひどくWiFiがぶつ切りになってしまうので、発熱が少ないWDC-433DU2HBKみたいな外付けアンテナ式にした。 もちろんこいつはデフォルトのままではドライバが入っていないのでインストールする必要がある。 幸いにも、このアダプタに使われているチップは、RealTeakのRTL8812AUというメジャーなチップらしくLinux用のドライバが存在する。

…のだが、これもやっかいなのだ。 OSSとして公開されているのでgithub上に存在するのだが、検索すると大量のRTL8812AUドライバのソースが出てくる…。 どうやら源流は同じらしいのだが、各々が思い思いにforkしまくって、今やどれが最新なのかが全くわからない状態になっているのである…。 しょうがないので、私は以下のリポジトリを使うことにした。WDC-433DU2HBKのデバイスID(056e:4007)が登録されているというだけの理由である。

github.com

このドライバのビルドはmake && make installするだけなのだが、READMEにあるとおりMakefileの当該部分を書き換える必要がある。

CONFIG_PLATFORM_ARM_RPI=y
CONFIG_PLATFORM_I386_PC=n

また、DKMS対応なのでこれもやっておくと便利かもしれない。