ラズパイでMonzilloをビルド

基盤:ラズパイが暇そうにしてるので、Monzilloをコンパイルさせてみることにしました。とりあえず Mercurial をダウンロドして makeして hg を作成、現在 firefox のソースをクローン中です。

基盤:Raspberry pi 4 の 4GB版を使用してますので、メモリ的にはイケると思われます。足りなかったらスワップ追加ですが、SDでスワップが使い物にならないようなら、8GB版を導入するか、SMBマウントを試すか、ということになるかと思います。ただ、そもそも Firefox がラズパイに対応してるかは不明ですが。

開発:そうですね、リソースは必要なら継ぎ足せば良いと思います。

基盤:そもそも Mercurial の make all の時点でなんかぶーたれてましたから、雲行きは怪しいです。

ディスプレイ真っ暗

基盤:それはそうと、ラズパイのHDMIを繋いだら Mac のディスプレイが映らなくなるという恐ろしい経験をしました。この999円の3口HDMIスイッチが何か悪さをしてMac様のHDMIを破壊したのではあるまいな?と深く深く疑いました。

開発:この下賤のモノめって切り捨て御免ですかね。

基盤:しかたがないのでThunderbalt からHDMIを出してそれを挿したらつながったのですが、しばらくするとまた画面が消えます。リモートログインはできてMac本体は元気なことを確認しました。なんやかやしているうちに非常に不思議な現象に出会いました。Macに挿しているマウスでラズパイのデスクトップのカーソルが動くのです。

開発:はは。つまりラズパイにVNC接続をしていて、マウスとキーボードは転送されているけど、画面は映らないって、感じ?

基盤:そうでした。VNCを繋いだ記憶がイマイチなかったのですが。いろいろやっているうちにホットコーナーに行くとカーソルが止まる。そう、Mission Control でMacに制御が移るんでしょう。ですがそれなのに、HDMIをMacに切り替えても No video inputなわけです。どうもフルスクリーンモードでMacからラズパイにVNCすると、そういうことが起き得るようです。しかも、Mission Controlに戻るショートカットが全部ラズパイにとられてしまってるから、ブラックホールからの抜け方がはっきりしない。とりあえずラズパイVNCフルスクリーンはやめました。

基盤:いずれにしても、この生産者不祥のHDMIスイッチ君には疑いをかけて申し訳なかったという気持ちで一杯です。

開発:結局、HDMIチップと電源と基盤とコネクタ、部品代的には数百円なんでしょうね。それにこの五十円くらいのプラケースをかぶせてアマゾンで900円+消費税で売ってると。この妙ちくりんなACアダプタって必要なんですかね?これで100円くらいしたりして。

基盤:アダプタは廃品利用かもですね。ある意味地球に優しい商品です。というか実質上、廃棄物質の輸出?

bingの類似画像検索

開発:ところで、Vivaldi のデフォルト検索エンジンが bing だったんで、しばらく使ってるんですが、なんか全然問題を感じませんね。というか bing って類似画像検索できるんだ。例えばうちのウェブサイトのこれで検索すると・・・

基盤:ほー。こんなふうに見事に似た画像を見つけてくれる。すごいなー。

社長:これ、色のパターンとかだけじゃなくて、何か構造的な認識も入っているんですかね・・・単色で検索してみればわかりますか。例えばこんなのとか。

基盤:なんすかこれ。

社長:あー、Previewで「あ」って描こうとしたんですけどね。あ、ってどう書くんだっけて迷ってたら、先が閉じてしまったと。それで検索するとこんな結果でした。

開発:うーむ。閉じた円を含む赤単色の線画。そんなくくりですかねー。ある種のメタなOCRでもあるのでしょうか。面白い。

社長:手書きのスケッチで検索してみたいんですが、なぜかそういう機能をつけてないみたいで不思議です。

基盤:私はロボットではありません。を手書きでぶつけてみたいですね。あ、今度来る iMac には手書き入力できるなんちゃらパッド的なものが付属しています。楽しみですね。

検索エンジン第2次大戦?

開発:検索エンジンは Google って決めてたけど、そうとも限らないのかもね。検索エンジン第二次戦国時代とか来るのかな。

社長:AltaVista はいまいずこ、ですね・・・

開発:日付でソートする機能、大文字小文字の区別、そして正規表現。Googleが席巻して諦めちゃった機能を、だれかが実現してくれるといいですね。当時は無理だったのが、今なら実現できるのかも知れない。

社長:そういえば、以前話してた画面の常時自動録画なんですが、実現性は?

基盤:全く問題ないと思いますね。CPU負荷的には1%とかのレベルですし、データ量的にも1秒に1MB程度。つまり1時間で3.6GB、1日撮っても100GBにもならないわけです。

社長:まあそりゃ、4K動画を楽勝で処理できる能力があるわけですしね。この子達は。

開発:おそらくキーになる問題は、動画からの特定シーンの検索でしょうね。

社長:まあ我々のは固定カメラだし、検索したいシーンというか事象もコンピュータが生成したものだから、ベテランの鑑識さんとか刑事さんとかはいらないよね。

基盤:あとは録画ツールがそういう風に画像を切り分けたりagingしてくれると楽ですね。できれば RemoteDesctop や VNC が録画機能を持っててくれたら、いちいちいろんなマシンで設定しなくて良いので楽かもです。

開発:ちょっと休憩しましょうか。

* * *

だからモニタの物理的切り替えは嫌

開発:ありゃ、またMacの画面が真っ暗モード。

基盤:VNCフルスクリーン起因説、破れましたね。んー、HDMIスイッチでパイの画面には切り替わると。でラズパイのキーボードからMacには入れる。でもってHDMIスイッチをMacにして見る・・・おー、Macデスクトップ画面復活した。つまり、スクリーンセーバモードとVNCの関係のような。スクリーンセーバをNeverにしましょう。

開発:うーん。つまりスクリーンセーバ状態からはキーかマウスの入力で戻るはずだけど、それがVNC経由でラズパイデスクトップに取られちゃってる、って感じですかね。でも前にはそうならなかった・・・ひょっとして、ラズパイのHDMIを抜いてないことと関係が?ラズパイはVNC経由だけにして柿の種にしましょう。

基盤:そうしましょう。それで、ラズパイはダウンロードを終えてビルドの準備に入ってます。ここで一発キャプチャー・・・あ、あれ?画面が真っ暗に。アイドルという話でもないんですね。しかたがないのでラズパイの手足を戻して、Macに入って起こす。回復。

開発:うーん、スクリーンセーバ説も外れなのかな。なんでしょうね。さすがにVNCがらみだとは思うんですけどねー。Misson Control で別のデスクトップで開いているVNCの問題とか。不可解な現象は物理層を疑ってみるという格言もありますが。まあしばらく VNC Viewer は閉じときましょう。

基盤:そのまえに現状をパシャ。

開発:この、ターミナルに残っているエスケープシーケンスって、回復中に押した何かですかね?

基盤:さあ。

開発:思うに先日ラズパイが来て遊んだ時は、いつも作業中のデスクトップの中に小さなVNC Viewer で表示するようにしてたんだよね。だから、Mission Control 説はありだと思うな。小さく表示しといてみましょう。昔はそういう、どのデスクトップに移動しても同じ位置に現れるウィンドウっていう設定ができたと思うんですが、今はどうなんですかね。

基盤:これ、VNCってウィンドウを小さくするとデスクトップがミニチュアになってしまって、それが良い時もありますが、実質的な仕事ができないんですよね。RemoteDesktopみたいな実サイズでスクロールっていうモードはあるんですかね?んー、VNC Viewer のオプション・・・Scall automatically、なんかこれっぽい。プッシュ。

開発:おー、リアルのサイズになりました。なるほど。

基盤:ちなみにこの ESC [ 25 ~ というのは、Print Screen key (F13) だったということもわかりました(笑)

マルチディスプレイとMission Control

開発:おもうに、Mission Control で物理ディスプレイを一つだけみていれば良いのはよいけど、存在する全てがいつもどっかにミニチュアで表示されてい欲しいとは思いますね。

基盤:まあ近いうちに iMac が来ますからね。現在のフィリップス君が拡張ディスプレイになりますから、そこに監視対象のウィンドウを集めとけば良いのではないかと。どうやってミニチュア化するかですけどね。Mission Controlはイマイチそういう使い方を想定してないような。

開発:そういえば私もついこないだまでそういう環境で仕事はしてたわけですけどね。一つのディスプレイだけで仕事するって、たぶん二十年ぶりくらいだと思う。でもこれが結構良いのです。目と首に優しいというか。あ、そういえばハヅキルーペを経費で購入しましょう。

基盤:Missiion Control と物理的なマルチディスプレイはどういう関係になるんでしょうね。来てのからのお楽しみですかね。

開発:そのへん、実のところまさに自分達で作ってみたいところではあるんですよね。自分の好きなように作れるデスクトップ。昔は X Window のウィンドウマネジャでみんな遊んでたよね。

基盤:まあ今は今で、プログラムを作らなくても結構できちゃうんだとは思いますけどね。

社長:それはそうと、MacのMailに乗り換えてから、新着メールがメニューバーでサクッと見えるようになったのが良いですね。

開発:ところで、UbuntuのVMのほうはどうしてますかね。

基盤:それが、ホストのRAMが8GBしか無い中、VMを2台並列で立ち上がらせるのに、VMに割り当てるRAMを2GBに制約してみたんですが、めっちゃ実行が遅いです。4GBメモリがあれば10分で終わるプロセスが、SSD版では100分、HDD版ではおそらく1000分くらいかかりそうです。ひたすらdiskI/Oしてますね。面白いので最後まで見届けようかなと。明日RAMが24GBになったら、良い思い出話になるかなと。

基盤:あ、ラズパイのMercurialが悲しい終わり方をしました。

基盤:一時的な問題っぽいですね。再チャレンジ、っと。

開発:でも、ラズパイの本命用途はブラウザじゃなくて、サーバだよね。Apatchと WordPressとか。

基盤:ああ、それは apt でとってこれるようです。少なくともバイナリは。firefoxコンパイルは 試金石ですね。

社長:たばこが切れたので買ってきます。

* * *

行き止まり

基盤:再びエラーで終わってました。

開発:これはもう、だめかもですね。

基盤:tarball から行ったほうが良いですかね・・・ 先日ダウンロードした 77.0 を使いましょう。展開してみると。

pi@raspberrypi:~ $ pwd
/home/pi
pi@raspberrypi:~ $ du -s mozilla-central
1605172	mozilla-central
pi@raspberrypi:~ $ du -s thunderbird-77.0
2882172	thunderbird-77.0

基盤:tarball を展開したのが 2.9GB、Mercurial でできたのが 1.6GB。けっこうなとこまでは行っている感じなんですけどね。

基盤:さて、tarball から build しようとすると、まず nodejs が無いと怒られます。で apt install nodejs しようとすると何かバージョンがーと言われる。それでこの際 apt upgrade 行っときます。それにしても、サーバのアドレスが IPv6なのがなかなかですね。

エラー:3 http://raspbian.raspberrypi.org/raspbian buster/main armhf libnode64 armhf 10.19.0~dfsg1-1+rpi1             
  404  Not Found [IP: 2a00:1098:0:80:1000:75:0:3 80]

基盤:ああ、apt upgrade 終わってますね。とりあえず apt install nodejs。mach build。おや zip が無い。apt install zip。rpm。autoconf。。。?libpulse.pcというものがないようだ。Ubuntu版からもらってきて真似しよう。/usr/lib/arm-linux-gnueabihf/pkgconfig/libpulse.pcっと。apt install rustc。おおっと、rustc が古すぎるとな。でも apt ではこれが最新だと言ってるし・・・

Mozilla 66に後退

開発:ちょっと古めの mozilla にしましょうか (^-^;

基盤:では、thunderbird のリリースから。。thunderbird-70.0b4.source.tar.xzあたりで・・・展開して、mozconfig をコピーして、mach build。おーっと惜しい。まだちょっと古かった。

開発:rustc -V によると、この rustcは 1.34.2。でもリリースの日付がわからないんですよね。なんで日付を表示しないんだろう? 理解に苦しみます。でも /usr/bin/rustc のファイルの日付が2019-06-21 になっているから、少なくともこれより前ですね。

基盤:ではキリのいい番号で mozilla 66 行きましょう。日付は 2019-03-08 ですね。そうこうするうちに、ラズパイの32GB SDカード、50%くらい来ました。ではビルド再開。apt install cbindgen。cargo install rustfmt。。。ふー。なんかこう、もっと若い人手が必要ですね。

社長:いや、これは年寄りの道楽というやつですから。若者と同じ体験をできる貴重な機会なのです。

手持ち無沙汰でGo

開発:なんかしばらくコンパイルが続きそうなので、Go言語でもやってみますかね。ラズパイで。

基盤:あれ、もうインストール済みですね。では、まずは Hello World!。

pi@raspberrypi:~/go $ cat hello.go
package main
import "fmt"
func main() {
    fmt.Println("Hello World!!")
}
pi@raspberrypi:~/go $ time go run hello.go
Hello World!!

real	0m1.466s
user	0m1.381s
sys	0m0.434s

開発:うーん、今は rustc がしゃかりきでCPU食ってるからな。ちょいと失礼 control-Z。再度どうぞ。

pi@raspberrypi:~/go $ time go run hello.go
Hello World!!

real	0m1.360s
user	0m1.352s
sys	0m0.475s

撤退の空気

基盤:うーん。3GHzのx86-64で real 0.25s というところだから、その5分の1位の性能って感じですかね。

基盤:おっと、rustfmt インストール終了しました。

  Installing /home/pi/.cargo/bin/rustfmt
  Installing /home/pi/.cargo/bin/cargo-fmt
warning: be sure to add `/home/pi/.cargo/bin` to your PATH to be able to run the installed binaries

基盤:ようやくここまでかって感じですね。mach build。そうですか。apt install llvmと。apt install clangと。んー、なぬ?

 0:18.12 checking rustc version... 1.34.2
 0:18.25 checking cargo version... 1.34.0
 0:19.12 DEBUG: Executing: `/usr/bin/rustc --crate-type staticlib --target=armv7-unknown-linux-gnueabihf -o /tmp/conftestc2HXAw.rlib /tmp/conftest8qU5zT.rs`
 0:19.13 DEBUG: The command returned non-zero exit status 1.
 0:19.13 DEBUG: Its error output was:
 0:19.13 DEBUG: | error[E0463]: can't find crate for `std`
 0:19.13 DEBUG: |   |
 0:19.14 DEBUG: |   = note: the `armv7-unknown-linux-gnueabihf` target may not be installed
 0:19.14 DEBUG: |
 0:19.14 DEBUG: | error: aborting due to previous error
 0:19.14 DEBUG: |
 0:19.14 DEBUG: | For more information about this error, try `rustc --explain E0463`.
 0:19.15 ERROR: Cannot compile for armv7l-unknown-linux-gnueabihf with /usr/bin/rustc
 0:19.15 The target may be unsupported, or you may not have
 0:19.15 a rust std library for that target installed. Try:
 0:19.15   rustup target add armv7-unknown-linux-gnueabihf
 0:19.31 *** Fix above errors and then restart with\
 0:19.31                "./mach build"
 0:19.31 make: *** [client.mk:115: configure] エラー 1

基盤:こっち方面は行き止まりっぽいですね。

開発:うーん、検索するとラズパイ用のFirefoxやっている人もいるみたいですけどね。というかこれ、ARM用のFirefoxだから、Androidにも通じてるわけですよね。いずれまたトライということで、今日は撤収しましょう。

打開の兆し

基盤:・・・ちょっと待った。mach bootstrap をやれって、そのAndroidの記事にありますよね。その段階からやると良いのかも。やってみます。mach bootstrap –no-interactive・・・ おっと、なんか通りましたよ。

Your version of Mercurial (5.4.1) is sufficiently modern.
Your version of Python (2.7.16) is new enough.
Your version of Rust (1.34.2) is new enough.
Rust supports armv7-unknown-linux-gnueabihf targets.
Creating global state directory: /home/pi/.mozbuild
...
Once you have such a checkout, please re-run `./mach bootstrap` from the
checkout directory.

で mach build ・・・

基盤:あこがれの compile フェーズに突入いたしました!

開発:なるほど、mach bootstrap てのをやらないといけなのかー。新しいプラットフォームに来た時とか?しかしこの、「Rust supports armv7-unknown-linux-gnueabihf targets.」。unknownをサポートするって面白いね。この部分、誰がどこで定義するんでしょう。

基盤:いずれにしても、コンパイルは3GHzのx86-64ですら90分以上かかりましたから、もし単純にこのARMが5倍遅かったら9時間掛かりですかね。まあ最後まで届けばの話ですが。

開発:果報は寝てまてですね。あーでも、メモリが厳しそう。

基盤:例によってスワップを8GBばかりプレゼントしておきますか。

SWF=/swapfile
dd if=/dev/zero of=$SWF bs=1M count=8192
mkswap $SWF
swapon $SWF

開発:これで安心して放置ですね。しかしまあ、8GBのファイルの作成に10分くらいかかりましたねー。


2020-0609 SatoxITS

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です