Raspberry Pi Zero W が手に入ったので、国連ベクトルタイルツールキット (UNVT) を動かすための準備を進めている、という話です。
基本構想(これまでのあらすじ)
基本構想は、次の通りでした。
- Raspberry Pi の上に Rasbian を入れて、その上に Docker を入れて、 Docker の中で使いやすい本物の Linux にアクセスできるようにする。
- その上で、Tippecanoe と Node.js を中心に、UNVT のツールを Dockerfile レベルで導入する。
- その上のレイヤに、実際のテストデータと、個別の変換プログラムと、個別のホストソフトウェアを入れる。
- このようにすることで、ヘッドレスな Raspberry Pi 一台でベクトルタイルのウェブ地図環境が全て動くという形を作り、デモンストレーションやキャパシティビルディングにおける取り付きを良くする。
今回、Rapberry Pi 3+ から Raspberry Pi Zero W に移ってみることで新たに直面した挑戦は、次の2点です。
- イーサネットケーブルがないので、外部からの接続は WiFi のみに頼ることになる。基本的に、同じアクセスポイントに接続したところから ssh で入るという形を目指す。
- チップのアーキテクチャが arm32v6 と古い。少し古い Docker を使う必要がありましたし、また、Docker 上では debian:unstable ではなくて arm32v6/alpine を使う必要がありました。
WiFi 頼り。だから wpa_supplicant.conf 重要
Zero W をヘッドレスで動かす場合、アクセス手段は WiFi を通じた ssh 接続に頼ることになるでしょう。WiFi の接続情報を、Zero W に差す MicroSD 上の /wpa_supplicant.conf
に書き込む必要があります。その内容は、次のようにするそうです。
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="あなたの SSID"
psk="あなたの WiFi パスワード"
key_mgmt=WPA-PSK
}
その他、同じく MicroSD 上(ブートディレクトリ?)に ssh
という名前のからファイルを置いておくと、 ssh 接続が enabled になるそうです。
いずれ、複数台運用などの場合に備えてホスト名の変更などをする必要があると思いますが、ホスト名の変更などは、ログインしてから sudo raspi-config
で行うのが良いようです。
Docker は 18 系を使う
Zero W の CPU のアーキテクチャは arm32v6 と古いらしく、最新の Docker だとコアを吐くなどしてうまく動かないそうです。私の場合には、docker run コマンドでコンテナの中に入れず、そのまま戻ってきてしまうという症状にあたりました。
Rapbian 上で Docker のバージョンを指定して導入することで、上記の症状を回避しました。今、私の手元で安定して支えているのは、18.06.1-ce, build e68fc7a です。
具体的には、私は次の方法で導入を行なったと記憶しています。
curl -fsSL https://get.docker.com -o get-docker.sh
chmod u+x get-docker.sh
VERSION=18.06 ./get-docker.sh
sudo usermod -aG docker pi
Alpine Linux に移る
arm32v6 では debian:unstable は動かないようですので、Docker コンテナイメージのベースを arm32v6/alpine にしなければならないことになりました。
そこで、rasv を代替する新たな v6 というレポジトリを作り、そこで Dockerfile を開発することにしました。
私は、 Alpine Linux をざっくりと次のようなものであると理解しています。
- ベースは busybox で、もともと組み込み用途で考えられたもの。busybox は単一のバイナリに複数のアプリケーションを含んだもの。
- 標準シェルは bash ではなくて ash であり、a は almquist の略。
- musl libc に基づいている。
現在
現在、 ogr2ogr をソースからコンパイルして得る目的で、 PROJ をソースからコンパイルしているところです。Zero W はコアが貧弱なので、コンパイルには時間をかけなければなりません。
また、Zero W はメモリが 512 MB と貧弱なので、バッファあふれも含めて、メモリの負担が重くなる作業については良く注意してかかる必要がありそうだと感じています。