あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

シールドの中のRaspberry Pi 4(を測る電流計)

前の記事ではミクをボックスに入れてカメラで見ましたが、電流計でもいいですね。会社で備品として買ったやつを借りてきました。Fan SHIM装着済みと、SSDUSB3.0で接続しています。

以下はアイドル時。USB3.0ファームウェアを初期に戻したので消費電力も上がっています。ちなみに0.3Wくらい変わります。がアップデートして省電力にするとバグって使えなくなるので意味がない。おしい。

f:id:Akkiesoft:20190708232641j:plain:w480

以下はmikutterのAppImageを作る途中。rubyのgtk2モジュールをコンパイルしている様子。

f:id:Akkiesoft:20190708232647j:plain:w480

動画。ミクより見られる。いやミクのほうが見るでしょ。

youtu.be

そういえばコミケ当選してます。既刊の在庫を掃くために今回は新刊ないです。が、ラズピッピいじり4にはPi4いじったハナシとかのペーパーを挟めたらいいなと思っています。4日目南リ-13a「こくだランド」でお待ちしています。

Raspberry Pi 4あれこれ。

raspi.jpのブログにも書いたとおり、スイッチサイエンスさんからシールドボックスをお借りしています(追記:注:ユーザー会として)。

www.raspi.jp

ので、引き続きRaspberry Pi 4の動作検証、というか普通に触っているところです。とりあえず自分で買いました。

f:id:Akkiesoft:20190707233246j:plain:w480

で、すでにいろいろ不具合というかなんかも出ています。

一つは電源の問題。USB Type-Cのプルアップ抵抗の考慮不足によってPD電源およびeMaker入りのUSB Type-Cケーブルの組み合わせでは通電しないというものです。こちらはeMakerがないケーブルを使えば回避可能です。が、そこ調べてなかったんだ……?

Pi4 not working with some chargers (or why you need two cc resistors) – The blog of Tyler Ward (aka scorpia)

ちなみに、USB Type-C電源コネクタを剥がすと、基板設計を担当したJames Adamsの名前がクレジットされているそう。壊さないと見られねえ🤔

www.raspberrypi.org

もう一つはUSB3.0の発熱問題。出荷時のVL805チップのファームウェアは発熱がすごいので、電源を切った直後にボックスを開けて(この時点で箱の熱気がすごい)USBポートを触るとアチアチなのですが、フォーラム上で公開された新しいファームウェアではスリープモードなどの見直されて発熱が収まります。ただ、代わりにストレージデバイスを直接接続した時の動作が不安定になるなどの不具合が出ており、初期ファームウェアに戻してねという感じになっています。なやましい。ここは継続して改良していくようです。

Raspberry Pi 4 temperature - Raspberry Pi Forums

冷却関連は、PimoroniからFan SHIMというファンモジュールが発売されて、PiBowと組み合わせて使えるようになっています。わたしもこれを使用しています。

f:id:Akkiesoft:20190707233046j:plain:w480

ヒートシンクも以前のモデル向けのと比べると大きいものが発売されていますが、ファン冷却のほうが効果は大きいようです。ちなみに、子の記事で言及されているベンチマークのページはraspi.jpに掲載したものよりも詳しく書かれています。以前のモデルとの比較もありわかりやすいのでおすすめです。

blog.pimoroni.com

Benchmarking the Raspberry Pi 4 - Gareth Halfacree - Medium

Seeed Studioからは自作PCでよく見るタイプのヒートシンク+ファンのRaspberry Piサイズというブッ飛んだアイテムも登場しています。冷却能力は不明ながら、意外と写真映えは良さそうで、ちょっと興味あります。

www.seeedstudio.com

その他、ソフトウェアのGPUアクセラレーションの修正とか、RPi.GPIOのPi4対応とか、不具合がポツポツ修正されている状況です。

Pi 4 firmware, software stability improvements - Raspberry Pi Forums

raspberry-gpio-python / Tickets / #168 Pullups not working on Pi 4

なんにしても、いまのところ日本ではシールドボックスに突っ込んででもない限り使えないような状況なので、日本で使えるようになる頃にはバグが修正されたり回避方法がすぐ出てきたりするような、いい状態で遊び始められるのではないかと思います。……という気持ちで気長に待つといいと思います。私もめっちゃ待ってる。

あと、これも海外とかでは初っ端から指摘されていましたが、添付のマニュアルに未発表の8GB RAMモデルが記述されてます。

f:id:Akkiesoft:20190707235846j:plain:h480

Ebenはそのうち64bitに移行したらうんたらと言及している(翻訳しても読めぬやつだった)ので、そういうのが来れば一緒に8GBモデルも来るんでしょうかね。これも例えば日本で使えるようになる頃にセットで出たりなんかすると、アアww待ってて良かったァwwwなんてこともあるかもしれませんね。おま国が悪くないということもあるかもしれん。

いろいろ書いたんですが、本題としては、シールドボックスをみっくみくにしました。

f:id:Akkiesoft:20190708000819j:plain:w480

カメラを接続。カメラのテストもね、一応いりますよね。

f:id:Akkiesoft:20190708000807j:plain:w480

何度か配置を調整してはいミク。

f:id:Akkiesoft:20190708000911j:plain:w480

動画も一応。

www.youtube.com

以上(異常)です。

Pi 4周りの情報を見聞きしたらMastodonで淡々と流してます(で、同じ情報が数日たってからTwitterの情報が誰かしら経由で回ってきたりしてるかんじです)。三途の川の向こうで待っていぬぞ!

mikutterではじめるAppImage & AppImage for Raspberry Pi

mikutter 3.9.0のalpha3がリリースされました。

mikutter.hatenablog.com

このバージョンから、ゆんたん氏がリクエストしていたAppImage形式での配布がとりこまれました。よくわかっていなかったんですが、mikutterとかそれに必要なソフトとかライブラリとかをまとめて1バイナリパッケージ化して、同じアーキテクチャならそのまま動かせるぜというやつしいです。goといいそういう感じの時代なんですね。いいやん。

AppImage | Linux apps that run anywhere

で、ひとまずx86_64版が公開されたわけですが、頑張ればラズピッピ向けも行けるのかなと思って、この週末ちょっとチャレンジしてました。結果から言うと、できました。

環境

Raspbian Buster 2019-06-10

Docker環境を作る

Busterのdocker.ioパッケージはカーネルオプションがなんちゃらの罠を踏むので、Docker-ceのDebian Busterのナイトリービルドを使いました。

sudo vi /etc/apt/source.list.d/docker.list

deb https://download.docker.com/linux/debian/ buster nightly

んでインストール。後で必要に無るパッケージもここでまとめて入れてします。あとaufs-dkmsは一緒に入るけど動かないので消してしまいました。

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common cmake libjpeg-dev cimg-dev docker-ce docker-ce-cli containerd.io patchelf
sudo gpasswd -a pi docker
sudo apt remove -y aufs-dkms

mikutterのスクリプトを読む

mikutterのdeployment/appimage以下に作成のためのDockerfile、スクリプト、説明があるので、それを読みます。gen_appimage.shを読むと、linuxdeploy.AppImage、exec.soの部分でGitHubからx86_64版をダウンロードするように書かれていたので、これをarmhf版に書き換えればOK…かと思いきや、どちらもarmhf版は提供されていませんでした。

なので、自分でソースコードからコンパイルします。

building exec.so for armhf

github.com

こちらはかんたん。

cd ~
git clone https://github.com/darealshinji/AppImageKit-checkrt
cd AppImageKit-checkrt
make -j4
cp exec.so ~/mikutter/deployment/appimage/

building linuxdeploy.AppImage for armhf (失敗) (1)

github.com

そのままコンパイルしたらlinuxdeployのバイナリができたので組み込んだら、オプションがないとか言われました。それもそのはず、コンパイルしてできたlinuxdeployは素の状態で、それにプラグインを足してAppImage化したものが必要だったのでした。

travis/build.shにある内容がAppImageまで作る手順でした。これを読むとlinuxdeploy-plugin-appimage-armhf.AppImageが別途必要そうです。これを先にビルドします。

(7/5追記)linuxdeploy-plugin-appimage-armhf.AppImageを作るには上記でできた素のlinuxdeployが必要でした。ここでのコンパイルは必要です。

building linuxdeploy-plugin-appimage-armhf.AppImage for armhf

github.com

こちらもtravis/build-appimage.shにAppImageを作るまでの手順が書かれていましたが、travisのことは知らないのでリポジトリのルートにコピーして、パス周りを書き換えて無理やりビルドしました。

cd ~
git clone https://github.com/linuxdeploy/linuxdeploy-plugin-appimage
cd linuxdeploy-plugin-appimage
cp travis/build-appimage.sh .
vi build-appimage.sh

<いじるとこ>
・cleanupを無力化。失敗するとソースコードが全部消えるので。
・以下2行を冒頭に追記
BUILD_DIR=$(pwd)
ARCH=armhf
・ARCHのif分岐にarmhfを追加する。中身はなくてもOKでした。
elif [ "$ARCH" == "armhf" ]; then
    EXTRA_CMAKE_ARGS=()
(下記2点7/5追記)
・linuxdeployのダウンロードをコメントアウト
・deploy linuxdeploy-plugin-appimageのコマンドを前項でできたlinuxdeployに差し替える

いじり終わったらビルド実行。

./build-appimage.sh

linuxdeploy-plugin-appimage-armhf.AppImageができたことを確認します。

building linuxdeploy.AppImage for armhf again (2)

github.com

同じくtravis/build.shをリポジトリのルートにコピーして編集します。

cd ~
git clone https://github.com/linuxdeploy
cd linuxdeploy
cp travis/build.sh .
vi build.sh

・cleanupを無力化。同じ理由。
・冒頭に2行を追記
BUILD_DIR=$(pwd)
ARCH=armhf
・ARCHのif分岐にarmhfを追加する。こちらも中身はなくてもOK。
elif [ "$ARCH" == "armhf" ]; then
    EXTRA_CMAKE_ARGS=()
・linuxdeploy-plugin-appimage-"$ARCH".AppImageをコピーしてきて使うように書き換える
#wget https://github.com/TheAssassin/linuxdeploy-plugin-appimage/releases/download/continuous/linuxdeploy-plugin-appimage-"$ARCH".AppImage
cp ~/linuxdeploy-plugin-appimage/linuxdeploy-plugin-appimage-"$ARCH".AppImage .

そしてビルド実行。armhf版linuxdeploy.AppImageが入手できました。

./build.sh

building mikutter.AppImage for armhf

とりあえずmikutterのコードを用意。

cd ~
git clone git://toshia.dip.jp/mikutter.git
cd ~/mikutter/deployment/appimage/
git checkout develop

編集内容はgistに貼りました。

mikutterのappimageを実行した環境のアーキテクチャでやっていきする改変と、gir1.2-glib-2.0はいるんじゃないですかねえしらんけど · GitHub

がざっくり解説。

作成したexec.soとlinuxdeploy.AppImageは、bin/armhfディレクトリを掘ってその中に入れました。もしi386とか作りたくなったらここにi386ディレクトリを掘れば多分いいです。

Dockerfileをいじります。

  • FROM debian:busterに変える。linuxdeployをビルドした環境より新しいglibc6とlibstdc++が必要になるため
  • libgdbm3をlibgdbm6に書き換え
  • gir1.2-glib-2.0が足りないっぽかったので追加
  • binディレクトリをコピーする行の追加

ubuntuのままがよい場合は、18.10以上にするか、Ubuntu 16.04のglibc6とlibstdc++よりふるいバージョンを採用したRaspbianでlinuxdeployを作る必要がありそうです(すくなくともStretchではだめっぽいです)。

gen_appimage.shの編集は変に気を利かせていろいろいじってしまったのでdiffを見てほしいです。

  • ARCH変数を活用したが、あんな方法でいいのか私にはわからない……
  • wgetでexec.soとかlinuxdeploy.AppImageを拾うところを、ファイルがbin/$ARCH/にあれば適宜mvして、なければwgetするようにした

いじったら、README.mdと同じ手順でビルドを開始します。REVISIONはどこで使われているのかわからんかったのですが、とりあえず指定はしました。SSDをUSB接続したRPi 3B+で1時間くらい気長に待つと終わります。必要に応じてscreenとか張ってSSHが切れてもいいようにしておくと良いです。

export REVISION=develop
docker build -t mikutter-build-appimage . && docker run --rm -v $PWD/volume:/volume -v $(git rev-parse --show-toplevel):/mikutter-src:ro -it mikutter-build-appimage

ビルドが問題なく終わると、volumesの下にmikutter-3.9.0-alpha2-armhf.AppImageができます。alpha3じゃなかったのか?さておき、これをVNC接続したRaspberry Piデスクトップ上で実行すると、(gtkがどうとか出るけど)mikutterが動きました。

f:id:Akkiesoft:20190630232006j:plain

まとめ

mikutterをインストールするAnsible Playbook(わたしのRPi-toolsリポジトリに入ってる)を書いたりなんかもしましたけど、これはいい時代になったわねェという感想です。Raspberry Piという(arm)環境では作れるようになるまでとビルド時間がだるい感じですが、ジョブ的に実行できれば別に良さそうですし、Raspberry Pi 4が日本でも使えるようになればもっと高速にビルドできることでしょう。

私がビルドしたブツはGoogle Driveにぶん投げたので、他人のビルドが怖くない人は試してみたらいいと思います。

appimage-armhf - Google ドライブ

先週のガッツリ発熱風邪に続いて鼻風邪で鼻水を垂らしながらでしたが、久々に面白いものがいじれたので楽しかったです。

ただし、まだ終わらない

mikutter-3.9.0-alpha2-armhf.AppImageはできるんですが、RPi2以降でしか動きません。言い換えるとRPi1とZeroでは動きません。なのでmikutter-3.9.0-alpha2-armv7l.AppImageとなるべきところですが、私のgen_appimage.sh改変が雑なのがよろしくない感じでした。

そもそもarmhfとかarmv7l/armv6lとかarm-linux-gnueabihfを取得する適切な方法というか、それぞれの呼称とかってどうなんでしたっけね……?

4105F10両化のやつ

ついったーで見かけたので夕方に散歩がてら見に行ってきました。が、つくし野に向かって下る最中に検修庫にいるのを見てしまいすでに撃沈。

歩道橋のンゴのジムでレベル上げしていたら検修庫から車庫の奥の方に移動しはじめたため、ちょっとは見られました。ジムレベル上げは多少できた。検車区の奥の方に行って戻ったら敵チームから自チームになってて枠も空いてなくてちょっとしょんぼりしたけど。

f:id:Akkiesoft:20190630185805j:plain

4705-4805。クーラーの汚れ具合はさすがに寝かせてたほうがきれいか。でもそう変わらん気もする。

f:id:Akkiesoft:20190630185817j:plain

デハ4605。iPhoneだとズームはねえ。しかしカメラを持ち歩くのはだるい無精者。でも大丈夫、いい写真は他の人が撮ってどこかにあげている。

f:id:Akkiesoft:20190630185915j:plain

鳥小屋は3422-3522の片割れ。小屋に入ってるほうが反射というか日の当たり具合で帯色飛んでてもうなんもわからん車になった。

f:id:Akkiesoft:20190630190054j:plain

あじさい!!

f:id:Akkiesoft:20190630190714j:plain

コミック

行進子犬に恋文を (1)〜(3)

陸軍少女幼年学校を舞台に犬童が可愛さを振りまいて百合になるお話。犬童ちゃんが可愛すぎるんじゃ。絵柄が好きすぎる。

行進子犬に恋文を(1) (百合姫コミックス)

行進子犬に恋文を(1) (百合姫コミックス)

行進子犬に恋文を(2) (百合姫コミックス)

行進子犬に恋文を(2) (百合姫コミックス)

行進子犬に恋文を(3) (百合姫コミックス)

行進子犬に恋文を(3) (百合姫コミックス)

終電ちゃん(6)/(7)

気づいたら買い逃してしまっていて、6巻はコミティアの的に作者さんから直で、7巻は今日買って読みました。6巻ではいよいよ(元)東急8000系が登場、影は薄めですが。7巻は全通したおおさか東線も取り上げるタイムリーさもあります。床下に書斎を作ってるおおさか東線の終電ちゃんすき。

終電ちゃん(6) (モーニング KC)

終電ちゃん(6) (モーニング KC)

終電ちゃん(7) (モーニング KC)

終電ちゃん(7) (モーニング KC)

くまみこ (12)

お色気とシュールの一冊。かおりがたった数コマの登場でたいへんなインパクトを残していくのすきすぎる。

NEW GAME! (9)

炎上!って言うんでSNS的なものを想像していたら職場がっていう意味だった。くまみこを読んだあとだと文字が多くてやや疲れる感じだけど、ドラマって感じでもあるナー。

NEW GAME!  (9) (まんがタイムKRコミックス)

NEW GAME! (9) (まんがタイムKRコミックス)