Raspberry Pi 2にRedashをインストールする

「Re:dash on Raspbery Pi」という投稿を見かけたので、ちょっとしたお遊びでやってみた。

discuss.redash.io

使用したデバイス

ちょっと古いけど検証にはRaspberry Pi 2 Model Bを使用。Raspberry Pi 3でも動くと思う。

Raspberry Pi 2 Model B (2015年2月発売品)

Raspberry Pi 2 Model B (2015年2月発売品)

OSはRaspbian stretch Lite(November 2017)を使いました。

www.raspberrypi.org

インストール

セットアップスクリプト

Raspbianも名前からしDebian系なので、RedashのUbuntu向けセットアップスクリプトにすこし改変を加えて使う。

github.com

@@ -41,7 +41,7 @@
     # Base packages
     apt install -y python-pip python-dev nginx curl build-essential pwgen
     # Data sources dependencies:
-    apt install -y libffi-dev libssl-dev libmysqlclient-dev libpq-dev freetds-dev libsasl2-dev
+    apt install -y libffi-dev libssl-dev libmariadbclient-dev libpq-dev freetds-dev libsasl2-dev
     # SAML dependency
     apt install -y xmlsec1
     # Storage servers
@@ -71,6 +71,9 @@
 }
 
 install_python_packages() {
+    sed -i 's/cryptography==1.4/cryptography==2.1.4/' /opt/redash/current/requirements.txt
+    sed -i 's/pyOpenSSL==0.14/pyOpenSSL==16.2.0/' /opt/redash/current/requirements_all_ds.txt
+    sed -i 's/cassandra-driver==3.1.1/#cassandra-driver==3.1.1/' /opt/redash/current/requirements_all_ds.txt
     pip install --upgrade pip
     # TODO: venv?
     pip install setproctitle # setproctitle is used by Celery for "pretty" process titles

変更点は以下の通り。

  • Raspbian StretchはMySQLではなくMariaDBを使うのが標準なので、 libmysqlclient-dev ではなく libmariadbclient-dev を使う
  • pip install でエラーになるため、 cryptographypyOpenSSL のバージョンを上げる
  • Cassandra データソースはデフォルトで有効になっていないわりに依存ライブラリのビルドに時間がかかるのでコメントアウト

RaspbianにRedashをインストール

セットアップスクリプトをRaspbianをクリーンインストールしたRaspberry Piに転送し、実行する。

$ sudo bash bootstrap.sh.raspi

そのまま動いてくれればいいのだけれど、以下のようなエラーが pip あたりで起きて止まる。

TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'

pip の設定やオプションで解決したかったけど、解決方法が特定できなかったので pip install を何度か実行して成功するまで繰り返した。

PIP_DEFAULT_TIMEOUT を長めにしておくと少しエラーが減った気がするが、気のせいかもしれない。

$ export PIP_DEFAULT_TIMEOUT=600
$ sudo pip install -r /opt/redash/current/requirements.txt
$ sudo pip install -r /opt/redash/current/requirements_all_ds.txt

pip install が実行できたら、 /opt/redash を削除してから再度セットアップスクリプトを実行する。

pip install は先の手順で実行済みなので割と早く終わるはず。

$ sudo rm -rf /opt/redash
$ sudo bash bootstrap.sh.raspi

これでRedashが起動するので、ブラウザで http://raspberrypi.local/setup など、Raspberry PiのURLにアクセスしてadminユーザーを作る。

動作確認

SQLiteでさくっと動作確認。

$ cd /tmp
$ wget https://github.com/wallymathieu/sakila-sample-database-ports/raw/master/sqlite-sakila-db/sqlite-sakila.sq

SQLiteデータソースを作成してから、以下のクエリを実行してみる。

SELECT * FROM actor LIMIT 10;

f:id:ariarijp:20171229235740p:plain

動いたっぽい。

まとめ

実用上どうするかはさておき、Raspberry Pi上でもRedashは動くということがわかった。 だけど、MicroSDのIOがとにかく遅いのであんまりおすすめしない。