私どものスワップ不足でした orz...

開発:さてそれで、どのプロセスがメモリを食ってるかなんですが。

基盤:top。

基盤:まずは、Gnomeそのものですね(笑)

開発:そもそもプログラム開発環境なので、audio だの evolutionほにゃららとか全部いらないよね。

基盤:どうやって黙らせますかね。

開発:うーん、昔流なら /etc/rc とか /etc/init とか。今流だと systemctl とかみたいですね。ウェブインタフェースでチキチキできる webmin というのがあったみたいだけど、今は apt search しても出てこないね。とりあえずは、単に Gnome 立ち上がらせずにテキストコンソールにしちゃうのが簡単だとも思うけど。

基盤:でもこの、/etc/default/grub というの、どうも思ったようになりませんねー。。。

* * *

社長:どうなりました?

開発:ようやく通りました。

社長:何が問題だったんでしょう?

開発:まあ、貧乏性と無知、ですかね。

社長:およよ。

基盤:技術的には、Mozilla がビルドに使う rustc が非常にメモリ食いで、1プロセスで4GB以上食う、枯渇して死ぬ、という問題です。貧乏根性でVMに4GBしかあげてません。あとOSが1.5GBのswapfileを用意しています。ですので、全プロセスの使用メモリを足して5.5GBに収まらないと、メモリ枯渇でプロセスが死にます。デフォルトの環境で、立ち上げ直後のメモリ使用状況がこうでした。

基盤:この時点で既に、残り4GBちょっとしかありません。ということで、大盤振舞いに4GBばかりswapon してやって、こうなりました。

基盤:見かけ上はとってもお大尽になりまして、あとはもうスルスルと、だと思ったのですが、実は、rustc の最終章で残り1GBを切ってヒヤヒヤだったんです。

開発:それであらためてゼロからビルドして負荷状況を眺めてたんですが、とてもうまく並列化されてるなと思いました。このVMに3コアあげているのですが、それぞれ100%近く使い切っている時が結構あります。こんなのとか。

基盤:一方でVMホストの物理ディスクへのアクセスは1MB/秒以下が続いてますから、遅いHDDでも全然問題ないかなって感じです。コアを6つあげれば、ビルド時間が半分近くになるんじゃないかと。まあ、ゼロからビルドすることは滅多にないので、実際にそこを追求するかどうかは別ですが。一時的にでも多数コアをあげるのも良いですし、Hyper/Vでいろいろ遊べそうです。

開発:それで基本的には一気通貫だったんですが、実は、最終章の幕切れ寸前、92分地点の ld でまたもやディスクフルやってしまいましてアボート。それに ld も4GB近くメモリを食うので、その点でも危険人物でした。ということで、ディスクを空けて make。

基盤:で、これが修了証書です。タイムスタンプは make 再開からの経過時間です。

基盤:で、促された通り mach run。

えんたー! ↓

苦節2日間。Thunderbirdのビルド完了。

基盤:めでたし。

開発:昨日、Firefox の mach run で XPCOM ガー!って怒られたのは、メモリかディスクの不足で、必要なファイルの配置作業が不完全だったのでは無いかと思います。一通り終えたので、この環境で Firefox と Thunderbird のクリーンインストールをもう一度流しておこうと思います。

社長:いやいや、大変でしたね。ですが、このビルド作業のおかげで、最近の事情を色々学んだり、忘れてた技を思い出したりできたんだと思います。いやー、よかったよかった。

開発:そうですね。結果的には、ごく普通にリソースがある環境でなら、Firefox も Thunderbird も、tarball をもらってきて make 一発なのだ、ということがわかりました。なんだかほっとしますね。

--
2020-0606 SatoxITS

クリエイティブコモデティノミニー++

基盤:どっかで切らないと読みにくいですね。

社長:覚えていらっしゃるかもしれませんがー、当社はこの5月、IT社会をもっと気持ちよくする製品を絶賛しその普及を応援するITS more「CC認証制度」を設立し、担当するCC認証事業部を立ち上げたところです。認証の審査基準は、実物に触れるみなさんの主観、気分、気持ち良さ加減ですが、最近その認証候補に大きな動きがあり、みなさんと認識を共有したいと思います。詳細はCC認証事業担当にお願いします。

CC:はい。えー、現状における当社クリエイティブコモディティ認証候補につきましては、当社ブログにてこれまで絶賛されて来たグッズを中心としまして、みなさんの間で既に暗黙のコンセンサスが形成されていると思っています。特に、CC最高!賞候補としてMacOSおよびその関連するApp群は目にも明らかになっているところです。また、この数日も株がウナギ登りのWindows Pro誘引機能群。加えまして最近、急激に、特に社長方面からの強い支持を受けて、有力な候補としてお迎えするべきかと考えているグッズがあります。それは、Appleの「Note」です。

基盤:iCloudに金もらってるのかー?

経理:毎月250円払ってますから、一つでも良いところを見つけないと。

社長:なにしろサクッとかけてiPhoneでもMacでもイケイケで・・・

基盤:あれがバカチョンで使い易いのは確かですが、Appleの、Note である必要はありますかね。似たようなものはいくらでもありそうですけど。基本、iCloudがクソなのが気に障りますね。

開発:印刷・電子署名・保管というフローに載るのかですね。それ次第です。Mailとかカレンダーと連携するのかとか。SMS版Mailみたいな。

--
2020-0605 SatoxITS

Thunderbirdのコンパイル

社長:それで、Thunderbird にも手を突っ込みたいのですが。

開発:今コンパイル中です。41分経過。

基盤:Mozillla用にビルド環境は整備されたので、スルスル進んでますね。例の、.mozconfig に ac_add_options --disable-av1 というおまじないをいれただけです。これも何とかしたいですが。

開発:それにしてもこの、Mozillaファミリーのソースの配布っていったいどういうことになってるんですかね。https://archive.mozilla.org が大元かなと思っているのですが。もうこういう寂しさ満点の景色でして。

基盤: Mozillaのソースはここにアップロードするのやめちゃったみたいですね。1999年1月が最後のよう。

基盤:一方Thunderbirdのほうは、今も生きてるようです。この5月19日版があります。77ってのは最新Firefixと同じだから、Mozillaとしての共通番号なんですかね。

開発:それでこの、「thunderbird-77.0b3.source.tar.xz」というのを落としてきて、ビルドしてるところです。

基盤:ビルド60分経過。Firefoxと大差無いようですね。

社長:いったいその2つはどういう関係にあるんでしょうかね?私はこの2つをくっつけたいというか、密に連携させたいんですが。FirefoxのタブでThunderbirdが動いたら楽ちんですよね。あるいはThunderbirdにタブの概念を持ち込むとか。個別メールのタブとか。というか、タブじゃなくて、タグというメタファをブラウザに持ち込みたいなと思ってるんですが。

開発:少なくともThunderbirdの中で動画再生とかHTMLのレンダリングはやりたいですよね。

基盤:このMozillaの「Downloading Source Archive」なんですが、一応「Last modified: Mar 23, 2019, by MDN contributors」とはありますね。でも、例にあげてるのが「Firefox53.0.3」だったり。

開発:まあ、膨大な数の人が参加して開発してるんで、バージョン管理システム無しではできないと思いますが、アーカイブくらい tarball であげといてくれれば良いのにね。

基盤:てか、ページの冒頭にこう書いてあります。Firefox は Mercurial だけど、Thunderbird は別のやつみたいですね。

The Mozilla source code can be obtained either by downloading a source archive or by using a Mercurial (source control) client. If you are just starting out or you want to build a particular Mozilla product release, downloading a source archive is recommended. Otherwise, get the Mozilla Source Code using Mercurial (for Firefox) or Getting Comm-central Source Code (for Thunderbird, SeaMonkey and Firefox). If you want to browse the source instead of downloading it, read Viewing and searching Mozilla source code online.

基盤:あ、コンパイル、エラーで止まりました。ノースペース。

71:38.54 /usr/bin/ar: libjs_static.a: No space left on device
% df
/dev/sda1       61795116 58690284    236536 100% /

基盤:それでは Hyper/Vでディスクをもうちょいデカくして、Ubuntuでpartedしてresize2fs っと。

/dev/sda1       82437528 58694464  20035968  75% /

基盤:で再度 make。

開発:なんでしょう、この天国感。これはもう、もう一台レノボ機を導入してHyper/Vの編隊飛行させたいですねー。

基盤:ホストレノボのほうのSSDがもうマジ満杯です。月曜に4TBのHDDが来るのが待ち遠しいですね。

開発:それはそうと、まずこのページから読むべきだったのかもですね。なんせ最近は検索して直にGitHubとかにいっちゃって、公式サイト的な所も読まないですからねえ。

基盤:ただもう、MDNてオワコン感ハンパ無いですけどね。あれ、ビルドが固まっているような。。何が起きてるんでしょう?

% ps ax
5526 pts/1    Sl+    4:56 /usr/bin/rustc --crate-name style servo/components/style/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifa ...

開発:でかい塊ですね。もうちょっとこまめに進捗報告してくれると良いのですが。

基盤:あ、これが出た。とりあえずコメントアウトして進行・・・

 9:10.15 /home/ysato/thunderbird-77.0/config/makefiles/rust.mk:293: recipe for target 'force-cargo-library-build' failed
 9:10.15 make[5]: *** [force-cargo-library-build] Error 101
 9:10.17 /home/ysato/thunderbird-77.0/config/recurse.mk:74: recipe for target 'toolkit/library/rust/target' failed

基盤:おっと、これはThunderbirdでは必須のもののようですね。ビルドがエラーで終わってしまいます。

 0:03.64 FileNotFoundError: [Errno 2] No such file or directory: '/home/ysato/thunderbird-77.0/obj-x86_64-pc-linux-gnu/x86_64-unknown-linux-gnu/release/libgkrust.a'

基盤:てか、そもそも obj の下に dist/bin/firefox もできてるから、Thunderbirdの tarball のはずですが、Firefox をビルドしてたんですかね。

開発:そもそものエラーが Python系なので、Pythonをアップグレードしてみたらどうですかね?

基盤:やってみました・・・が、変わらないですね。そもそも、Firefoxが作られるけど、Thunderbirdはできてないってどういうことですかね?

開発:Thunderbirdのビルド… ああ、なんかそのものズバリのページがありました。

開発:Thunderbird作りたかったら mozconfig に一行そう書けと。デフォではFirefoxを作っちゃうみたいです。

基盤:すげーわかりやすいインストラクション(笑)。にししてもです、thunderbird-77.0b3.source.tar.xz ってのでビルドしてFirefoxができちゃうってのは不可解ですよねえ。

基盤:まあ、やり直しましょう。・・・んー、最後のところすげー重いですね。top で見ると・・・load average 4。めっちゃスワップしてます。

開発:あー、Thunderbirdのビルドのページの先頭にこう書いてありました。4ギガではギリかもですね。

基盤:そうですか。。メモリ4096MBに制約したのが敗着でしたね。なんせVMのRAMデカくなりすぎると立ち上がらないわ殺せないわになるので制約はしときたいです。では6GBにして。再起動。

開発:お、まともな負荷になりましたね。メモリ消費拡大が5GB寸前で止まってます。

基盤:ともかく、rust が物凄いメモリ食いなことはわかりました。

開発:Rustのmkでエラーが出てるのって、ひょっとしてこれが原因だったりしませんかね?もいっぺんゼロからbuildしてみませんか?

基盤:そうしましょう。そもそも101って終了コードが何かって事ですけどね。なんで一言、シンボリックに表示しないですかねえ。

基盤:あれ、また rust でこけてますね。なんなんでしょう?

開発:行き詰まったら物理層に立ち返るという・・・

基盤:そうですねえ。dmesg ・・・え?なんだコリア。

[   50.078044] hv_balloon: Max. dynamic memory size: 8192 MB
・・・
[ 1816.851449] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/,task=rustc,pid=7061,uid=1000
[ 1816.851499] Out of memory: Killed process 7061 (rustc) total-vm:6400040kB, anon-rss:5184104kB, file-rss:0kB, shmem-rss:0kB
[ 1817.053827] oom_reaper: reaped process 7061 (rustc), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB

開発:out-of-memoryで死んでました。ちゃんちゃん。メモリを6GB食うプロセスって、なんかゴージャス 。

基盤:意味がわからないですねー。仮想メモリじゃなくて、物理メモリを要求してるってことでしょうか?

開発:仮想メモリとしても割り当て上限があるのかも。

基盤:fork してって親の使ってた遺産でふくれちゃったとかじゃ無いでしょうね?

dmesg「メモリが足りなくて死にました」
[   50.023718] hv_balloon: Max. dynamic memory size: 16384 MB
[   68.780991] TCP: eth0: Driver has suspect GRO implementation, TCP performance may be compromised.
[  108.020229] hv_balloon: Balloon request will be partially fulfilled. Balloon floor reached.
[  221.017618] hv_balloon: Balloon request will be partially fulfilled. Not enough memory.
[  284.015897] hv_balloon: Balloon request will be partially fulfilled. Not enough memory.
[  314.016842] hv_balloon: Balloon request will be partially fulfilled. Not enough memory.
[  351.018234] hv_balloon: Balloon request will be partially fulfilled. Balloon floor reached.
[  381.026580] hv_balloon: Balloon request will be partially fulfilled. Not enough memory.
[  393.523863] rustc invoked oom-killer: gfp_mask=0x100cca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
[  393.523865] CPU: 2 PID: 1951 Comm: rustc Not tainted 5.3.0-53-generic #47~18.04.1-Ubuntu
[  393.523866] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS 090008  12/07/2018
[  393.523866] Call Trace:
[  393.523871]  dump_stack+0x6d/0x95
[  393.523873]  dump_header+0x4f/0x200
[  393.523874]  oom_kill_process+0xe6/0x120
[  393.523875]  out_of_memory+0x109/0x510
[  393.523877]  __alloc_pages_slowpath+0xad1/0xe10
[  393.523878]  __alloc_pages_nodemask+0x2cd/0x320
[  393.523880]  alloc_pages_current+0x6a/0xe0
[  393.523882]  __page_cache_alloc+0x6a/0xa0
[  393.523882]  pagecache_get_page+0x9c/0x2b0
[  393.523883]  filemap_fault+0x66d/0xb60
[  393.523885]  ? unlock_page_memcg+0x12/0x20
[  393.523886]  ? page_add_file_rmap+0x5e/0x150
[  393.523887]  ? filemap_map_pages+0x18f/0x380
[  393.523888]  ext4_filemap_fault+0x31/0x44
[  393.523890]  __do_fault+0x57/0x110
[  393.523891]  __handle_mm_fault+0xdd8/0x1260
[  393.523892]  handle_mm_fault+0xcb/0x210
[  393.523894]  __do_page_fault+0x2a1/0x4d0
[  393.523895]  do_page_fault+0x2c/0xe0
[  393.523897]  page_fault+0x34/0x40
[  393.523898] RIP: 0033:0x7f2982105130
[  393.523901] Code: Bad RIP value.
[  393.523902] RSP: 002b:00007f2937456e48 EFLAGS: 00010246
[  393.523903] RAX: 000000000000000f RBX: 00007f2898babe90 RCX: 00007f2806d5f740
[  393.523903] RDX: 0000000000000000 RSI: 00007f27b3cc28b8 RDI: 00007f2937456e78
[  393.523904] RBP: 0000000000000004 R08: 0000000000000010 R09: 00000000ffffffff
[  393.523904] R10: 00007f2806d5f750 R11: 0000000000000000 R12: 00007f2896ef4d40
[  393.523905] R13: 00007f2937456e80 R14: 00007f2898bac038 R15: 000000000000000f
[  393.523906] Mem-Info:
[  393.523908] active_anon:1121207 inactive_anon:186904 isolated_anon:0
                active_file:44 inactive_file:46 isolated_file:0
                unevictable:8 dirty:0 writeback:0 unstable:0
                slab_reclaimable:6473 slab_unreclaimable:9092
                mapped:1795 shmem:4091 pagetables:11466 bounce:0
                free:7661 free_pcp:975 free_cma:0
[  393.523910] Node 0 active_anon:4484828kB inactive_anon:747616kB active_file:176kB inactive_file:184kB unevictable:32kB isolated(anon):0kB isolated(file):0kB mapped:7180kB dirty:0kB writeback:0kB shmem:16364kB shmem_thp: 0kB shmem_pmdmapped: 0kB anon_thp: 0kB writeback_tmp:0kB unstable:0kB all_unreclaimable? yes
[  393.523910] Node 0 DMA free:15868kB min:24kB low:36kB high:48kB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15908kB mlocked:0kB kernel_stack:0kB pagetables:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
[  393.523912] lowmem_reserve[]: 0 3863 5314 5314 5314
[  393.523913] Node 0 DMA32 free:12540kB min:6756kB low:10712kB high:14668kB active_anon:3140036kB inactive_anon:682116kB active_file:16kB inactive_file:268kB unevictable:32kB writepending:0kB present:4046784kB managed:3956652kB mlocked:32kB kernel_stack:5996kB pagetables:37488kB bounce:0kB free_pcp:2036kB local_pcp:248kB free_cma:0kB
[  393.523915] lowmem_reserve[]: 0 0 1450 1450 1450
[  393.523916] Node 0 Normal free:2236kB min:2536kB low:4020kB high:5504kB active_anon:1344792kB inactive_anon:65500kB active_file:204kB inactive_file:224kB unevictable:0kB writepending:0kB present:1572864kB managed:1485392kB mlocked:0kB kernel_stack:1732kB pagetables:8376kB bounce:0kB free_pcp:1864kB local_pcp:256kB free_cma:0kB
[  393.523917] lowmem_reserve[]: 0 0 0 0 0
[  393.523918] Node 0 DMA: 1*4kB (U) 1*8kB (U) 1*16kB (U) 1*32kB (U) 1*64kB (U) 1*128kB (U) 1*256kB (U) 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15868kB
[  393.523922] Node 0 DMA32: 159*4kB (UME) 148*8kB (UME) 118*16kB (UME) 42*32kB (UME) 7*64kB (UE) 1*128kB (M) 1*256kB (M) 1*512kB (M) 0*1024kB 3*2048kB (UM) 0*4096kB = 12540kB
[  393.523926] Node 0 Normal: 60*4kB (UE) 44*8kB (UME) 23*16kB (UME) 4*32kB (UME) 4*64kB (UM) 3*128kB (UM) 1*256kB (M) 1*512kB (M) 0*1024kB 0*2048kB 0*4096kB = 2496kB
[  393.523930] Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=1048576kB
[  393.523930] Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
[  393.523931] 4754 total pagecache pages
[  393.523932] 514 pages in swap cache
[  393.523933] Swap cache stats: add 446601, delete 446088, find 13695/33209
[  393.523933] Free swap  = 0kB
[  393.523933] Total swap = 1557568kB
[  393.523934] 1408910 pages RAM
[  393.523934] 0 pages HighMem/MovableOnly
[  393.523934] 44422 pages reserved
[  393.523935] 0 pages cma reserved
[  393.523935] 0 pages hwpoisoned
[  393.523935] Tasks state (memory values in pages):
[  393.523935] [  pid  ]   uid  tgid total_vm      rss pgtables_bytes swapents oom_score_adj name
[  393.523938] [    311]     0   311    45640       89   385024      142             0 systemd-journal
[  393.523939] [    333]     0   333    11700       84   122880      380         -1000 systemd-udevd
[  393.523941] [    529] 62583   529    36528       14   188416      143             0 systemd-timesyn
[  393.523942] [    531]   101   531    17659       47   180224      123             0 systemd-resolve
[  393.523942] [    573]   102   573    65758       57   163840      225             0 rsyslogd
[  393.523944] [    588]     0   588    73983       33   212992      262             0 accounts-daemon
[  393.523944] [    591]     0   591   108582        0   352256      381             0 ModemManager
[  393.523945] [    592]   103   592    12881      304   139264      171          -900 dbus-daemon
[  393.523946] [    675]   116   675    11813       45   135168       61             0 avahi-daemon
[  393.523947] [    677]     0   677    11307        6   126976      129             0 wpa_supplicant
[  393.523948] [    681]     0   681   125853        1   348160      624             0 udisksd
[  393.523949] [    682]   116   682    11768        5   131072       81             0 avahi-daemon
[  393.523949] [    683]     0   683    17649       18   172032      178             0 systemd-logind
[  393.523950] [    685]     0   685    44666        1   237568     1983             0 networkd-dispat
[  393.523951] [    689]     0   689   160118      376   442368      371             0 NetworkManager
[  393.523952] [    691]     0   691   400753     3169   356352     2126          -900 snapd
[  393.523953] [    694]     0   694     9862       26   114688       46             0 cron
[  393.523954] [    695]     0   695    27178       29   233472      291             0 cupsd
[  393.523955] [    696]     0   696     1137        0    57344       41             0 acpid
[  393.523956] [    704]     0   704    27603       27   118784       56             0 irqbalance
[  393.523957] [    746]     0   746    75882        9   352256      373             0 cups-browsed
[  393.523957] [    747]     0   747    73229      100   229376      585             0 polkitd
[  393.523958] [    762]     0   762    48841        0   270336     2002             0 unattended-upgr
[  393.523959] [    795]     0   795    77302        1   225280      439             0 gdm3
[  393.523960] [    796]     0   796    18074        0   184320      188         -1000 sshd
[  393.523961] [    825]     0   825     6495        1    98304      315             0 dhclient
[  393.523962] [    827]     0   827    68223        1   299008      468             0 gdm-session-wor
[  393.523962] [    840]   123   840   339675        0   696320    41050             0 mysqld
[  393.523963] [    841]     0   841    94434       19   475136     1149             0 apache2
[  393.523964] [    855]   112   855   115546        1   389120      440             0 whoopsie
[  393.523965] [    856]   113   856    14235       26   143360       86             0 kerneloops
[  393.523966] [    861]   113   861    14235        6   139264      106             0 kerneloops
[  393.523967] [    879]  1000   879    19289      139   192512      268             0 systemd
[  393.523967] [    880]    33   880    95070      163   466944     1064             0 apache2
[  393.523968] [    881]    33   881    95018       27   462848     1148             0 apache2
[  393.523969] [    882]    33   882    95014        2   462848     1171             0 apache2
[  393.523970] [    883]    33   883    95014        2   462848     1171             0 apache2
[  393.523971] [    884]  1000   884    28548        0   258048      674             0 (sd-pam)
[  393.523971] [    885]    33   885    95014        2   462848     1171             0 apache2
[  393.523972] [    956]  1000   956    72356       95   180224      169             0 gnome-keyring-d
[  393.523973] [    971]  1000   971    53289        1   176128      169             0 gdm-x-session
[  393.523974] [    973]  1000   973   155168     6259   626688     3497             0 Xorg
[  393.523975] [   1019]  1000  1019    12842      251   147456      254             0 dbus-daemon
[  393.523975] [   1023]  1000  1023   140058      233   425984      433             0 gnome-session-b
[  393.523976] [   1149]  1000  1149     2825        9    61440       70             0 ssh-agent
[  393.523977] [   1154]  1000  1154    87322        1   180224      199             0 at-spi-bus-laun
[  393.523978] [   1159]  1000  1159    12481       66   131072       71             0 dbus-daemon
[  393.523979] [   1161]  1000  1161    55195       13   188416      178             0 at-spi2-registr
[  393.523979] [   1185]  1000  1185   932129    15439  1732608    26389             0 gnome-shell
[  393.523980] [   1191]     0  1191    78759        0   237568      289             0 upowerd
[  393.523981] [   1198]  1000  1198    73249      122   196608      119             0 gvfsd
[  393.523982] [   1203]  1000  1203   104028        0   172032      224             0 gvfsd-fuse
[  393.523983] [   1216]  1000  1216   299048        0   512000      570             0 pulseaudio
[  393.523983] [   1217]   109  1217    45876        0   122880       74             0 rtkit-daemon
[  393.523984] [   1230]  1000  1230    90599      238   200704      126             0 ibus-daemon
[  393.523985] [   1234]  1000  1234    70442        0   172032      200             0 ibus-dconf
[  393.523986] [   1236]  1000  1236    86252      166   417792      992             0 ibus-x11
[  393.523987] [   1240]  1000  1240    69895       29   163840      100             0 ibus-portal
[  393.523987] [   1246]  1000  1246    68146        0   159744      154             0 xdg-permission-
[  393.523988] [   1258]  1000  1258   172409        0   536576      869             0 gnome-shell-cal
[  393.523989] [   1262]  1000  1262   173312        2   741376     1086             0 evolution-sourc
[  393.523990] [   1270]  1000  1270   196193        2   700416     1513             0 goa-daemon
[  393.523991] [   1274]     0  1274    74474       36   204800      174             0 boltd
[  393.523991] [   1281]  1000  1281    76866      209   229376      184             0 gvfs-udisks2-vo
[  393.523992] [   1290]  1000  1290    76096        0   221184      298             0 goa-identity-se
[  393.523993] [   1295]  1000  1295    69216       48   172032       75             0 gvfs-mtp-volume
[  393.523994] [   1299]  1000  1299    94961       51   221184      165             0 gvfs-afc-volume
[  393.523994] [   1304]  1000  1304    72413       47   184320      106             0 gvfs-gphoto2-vo
[  393.523995] [   1308]  1000  1308    68767       56   159744       87             0 gvfs-goa-volume
[  393.523996] [   1312]     0  1312   114452      765   352256      347             0 packagekitd
[  393.523997] [   1313]  1000  1313   129549      314   503808      963             0 gsd-power
[  393.523998] [   1314]  1000  1314    87588        1   307200      360             0 gsd-print-notif
[  393.523998] [   1316]  1000  1316   106092        0   180224      195             0 gsd-rfkill
[  393.523999] [   1318]  1000  1318    69189        1   163840      164             0 gsd-screensaver
[  393.524000] [   1324]  1000  1324   113465      116   241664      267             0 gsd-sharing
[  393.524001] [   1331]  1000  1331    94738        1   233472      262             0 gsd-smartcard
[  393.524001] [   1335]  1000  1335   123889      168   454656     1140             0 gsd-xsettings
[  393.524002] [   1339]  1000  1339    83470        0   266240      291             0 gsd-sound
[  393.524003] [   1350]  1000  1350   125803      193   479232     1041             0 gsd-wacom
[  393.524004] [   1353]  1000  1353    86157      162   421888      994             0 gsd-clipboard
[  393.524005] [   1355]  1000  1355    69794        0   172032      182             0 gsd-a11y-settin
[  393.524005] [   1359]  1000  1359   117691        0   450560      520             0 gsd-datetime
[  393.524006] [   1364]  1000  1364   164959      228   487424      994             0 gsd-color
[  393.524007] [   1367]  1000  1367   126882      365   483328     1015             0 gsd-keyboard
[  393.524008] [   1370]  1000  1370    91367       85   204800      113             0 gsd-housekeepin
[  393.524009] [   1371]  1000  1371    69797        0   167936      189             0 gsd-mouse
[  393.524009] [   1375]  1000  1375   198469      208   520192     1057             0 gsd-media-keys
[  393.524010] [   1409]  1000  1409   127449        0   434176      481             0 gsd-printer
[  393.524011] [   1410]   117  1410    81499        1   270336     1195             0 colord
[  393.524012] [   1423]  1000  1423    67983        0   167936      351             0 gsd-disk-utilit
[  393.524013] [   1424]  1000  1424   198413     1879   790528     1345             0 nautilus-deskto
[  393.524014] [   1451]  1000  1451    92283        0   217088      330             0 gvfsd-trash
[  393.524014] [   1462]  1000  1462   223301        0   909312    10023             0 evolution-calen
[  393.524015] [   1472]  1000  1472    46976      106   131072       63             0 dconf-service
[  393.524016] [   1481]  1000  1481   284205        0   720896     9923             0 evolution-calen
[  393.524017] [   1483]  1000  1483    51478       67   163840      118             0 ibus-engine-sim
[  393.524017] [   1499]  1000  1499   183428        0   581632      897             0 evolution-addre
[  393.524018] [   1507]  1000  1507   254558        0   614400      994             0 evolution-addre
[  393.524019] [   1524]     0  1524    27518        1   262144      256             0 sshd
[  393.524020] [   1611]  1000  1611    27518        0   253952      259             0 sshd
[  393.524021] [   1612]  1000  1612     7673        1   102400      374             0 bash
[  393.524022] [   1639]  1000  1639     4500        0    81920       80             0 make
[  393.524023] [   1640]  1000  1640    64950      294   266240     5627             0 python3
[  393.524023] [   1678]  1000  1678    28138      812   229376     5118             0 python3
[  393.524024] [   1680]  1000  1680     4500        1    77824       85             0 make
[  393.524025] [   1686]  1000  1686     4740        1    69632      310             0 make
[  393.524026] [   1818]  1000  1818     4720       15    77824      292             0 make
[  393.524027] [   1821]  1000  1821     4720       15    77824      294             0 make
[  393.524027] [   1840]  1000  1840     4545        8    73728      109             0 make
[  393.524028] [   1842]  1000  1842   111069       56   667648    45517             0 cargo
[  393.524029] [   1862]  1000  1862  1563767  1236224 12185600   202803             0 rustc
[  393.524030] [   1868]  1000  1868   166884     1161   520192        9             0 update-notifier
[  393.524031] [   1870]  1000  1870   328958    28223  1089536     1981             0 gnome-software
[  393.524032] [   1895]     0  1895   142888      734   520192       21             0 fwupd
[  393.524032] [   1952]  1000  1952   199530     1499   720896        0             0 deja-dup-monito
[  393.524033] [   1961]    33  1961    95014      184   462848      989             0 apache2
[  393.524034] [   1973]  1000  1973   199986     2233   577536        0             0 gnome-terminal-
[  393.524035] [   1981]  1000  1981     7678      372    90112        0             0 bash
[  393.524036] [   1993]  1000  1993    13078      183   139264        0             0 top
[  393.524036] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/,task=rustc,pid=1862,uid=1000
[  393.524079] Out of memory: Killed process 1862 (rustc) total-vm:6255068kB, anon-rss:4944896kB, file-rss:0kB, shmem-rss:0kB
[  393.681287] oom_reaper: reaped process 1862 (rustc), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
u18$ 

基盤:まあ、今日びのプロセスはギガ食ってるのもよくありますけどね。

u18$ ps axl|sort -r -n +6|head
0  1000  1185  1023  20   0 3722396 112096 poll_s Sl+ tty1      0:06 /usr/bin/gnome-shell
4     0   691     1  20   0 1603012 7528 -      Ssl  ?          0:01 /usr/lib/snapd/snapd
1   123   840     1  20   0 1358700    0 -      Sl   ?          0:01 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid
0  1000  1870  1023  20   0 1315832 33592 poll_s SLl+ tty1      0:02 /usr/bin/gnome-software --gapplication-service
1  1000  1216     1   9 -11 1196192 1916 poll_s S<l  ?          0:00 /usr/bin/pulseaudio --start --log-target=syslog
0  1000  1481  1462  20   0 1136820 2080 poll_s Sl   ?          0:00 /usr/lib/evolution/evolution-calendar-factory-subprocess --factory all --bus-name org.gnome.evolution.dataserver.Subprocess.Backend.Calendarx1462x2 --own-path /org/gnome/evolution/dataserver/Subprocess/Backend/Calendar/1462/2
0  1000  1507  1499  20   0 1018232 2568 poll_s Sl   ?          0:00 /usr/lib/evolution/evolution-addressbook-factory-subprocess --factory all --bus-name org.gnome.evolution.dataserver.Subprocess.Backend.AddressBookx1499x2 --own-path /org/gnome/evolution/dataserver/Subprocess/Backend/AddressBook/1499/2
0  1000  1462   879  20   0 893204     0 poll_s Ssl  ?          0:00 /usr/lib/evolution/evolution-calendar-factory
0  1000  1973   879  20   0 800104 15600 poll_s Ssl  ?          0:00 /usr/lib/gnome-terminal/gnome-terminal-server
0  1000  1952  1023  20   0 798120  1844 poll_s Sl+  tty1       0:00 /usr/lib/deja-dup/deja-dup-monitor

開発:プロセスのリソースに変なリミットがかかってるんじゃないでしょうね?

基盤:さあ。ulimit -a っと。

基盤:泣けてきましたね。あ、でもやっぱり死ぬか。まさか rustcのバグとかじゃないでしょうね?

開発:ともかく、これは mozilla のビルドという本質とは全く関係ない話ではありますね。そのためにもう何時間ロスしたことか。まあ、昔に帰ったようで面白い経験してますが。

基盤:VMの最大メモリは32GBにしましたし、プロセスの仮想メモリはunlimit、スタックは十分にあげたのに死んじゃうって、なんなんですかね?あとはOSレベルでの上限か、はたまたHyper/Vの動的メモリとのなんかの齟齬か。

[  499.483045] CPU: 1 PID: 2092 Comm: rustc Not tainted 5.3.0-53-generic #47~18.04.1-Ubuntu
[  499.483046] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS 090008  12/07/2018
[  499.483047] Call Trace:
[  499.483064]  dump_stack+0x6d/0x95
[  499.483068]  dump_header+0x4f/0x200
[  499.483069]  oom_kill_process+0xe6/0x120
[  499.483071]  out_of_memory+0x109/0x510
[  499.483075]  __alloc_pages_slowpath+0xad1/0xe10
[  499.483076]  __alloc_pages_nodemask+0x2cd/0x320
[  499.483081]  alloc_pages_vma+0x13b/0x190
[  499.483085]  __handle_mm_fault+0x8a8/0x1260
[  499.483086]  handle_mm_fault+0xcb/0x210
[  499.483091]  __do_page_fault+0x2a1/0x4d0
[  499.483092]  do_page_fault+0x2c/0xe0
[  499.483097]  page_fault+0x34/0x40

開発:rustcのコアダンプがないので、この根っこがどこにあるかわからないですね。たぶん、malloc から brk という流れじゃないかと思いますが。あ。core file size が 0 になってるからですか。うーん、スタックサイズにしてもコアダンプサイズにしても、よくわからないデフォルト値です。

基盤:まー、6GBのコアダンプされたら、みんな道連れでアウトですけどね(笑)というか、いらなそうなメモリ食いのプロセスにとりあえず死んでてもらって、make し直してるんですが、rustc の実行時間が6分代に突入してます。最長不倒距離ですね。これ、いけるんじゃないんですか?

基盤:おおー。しかしまー、ほとんど裏方プロセスがシャカリキ状態ですね。あ、死んだ。

[ 2754.568821] Out of memory: Killed process 2748 (rustc) total-vm:6005212kB, anon-rss:4435804kB, file-rss:0kB, shmem-rss:0kB
[ 2754.712397] oom_reaper: reaped process 2748 (rustc), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB

開発:でもまー、不要デーモンに死んでてもらう作戦は明らかに効果があったんで、その線で進めてみましょう。ちょっとブレークしますか。

--
2020-0606 SatoxITS

本社移転

社長:さっき食事にちょっと北まで行ったんですが・・・

基盤:ルビコン川を渡って。

社長:いや、今日はちゃんと横断歩道を渡りまして。タイのおばちゃんがやってる店でグリーンカレー&アサヒ。で帰りにふと昔よく行ってた店の脇を通ったら、上の階が空室になってるのを見かけまして。ここに本社を置いたらいいかなってひらめいたんです。

開発:あそこだとここから徒歩90秒くらいですね。

社長:オーナーさんが店番してたんで少しお話したんですが、管理は不動産屋さんに任せてますからって。で不動産屋のウェブページ見ながら電話したんです。

基盤:これか。57平米で月12万+共益費3万円って出てますね。リーズナブルっちゃリーズナブルなのかな。

開発:この真ん中にカーペット敷いてコタツみたいのを置いて仕事したら気分が良いでしょうね。

経理:気分のためだけですか?

社長:それが一番重要です。

経理:それにしてもうちの会社には広すぎますよね。

社長:それで間仕切りでもして切り売りしてくれませんかね、って一応聞いたんだけど。

経理:この3分の1くらいで十分かと。

社長:まあ、大家さんに聞いてみないとなんともですが、今のところそういう形は想定してませんでってことで。まあそりゃそうでしょうけどね。

基盤:いつかこういうのをまるっと借りられると良いですね。

社長:「本社移転」とか沿革に書きたいよね 。支店でもいいけど。

営業:(本社ビルという発想は無いのか)

--
2020-0605 SatoxITS

まだまだHDD

開発:やはり少なくとも仮想マシンのホスト機には直付けのディスクが必要ですね。主にアーカイブ用ですけど、比較用の複数の動態保存版をそこで直接動かせればベター。仮想マシン1台あたり100GB程度必要なので、1TBでは心許なく、2ないし4TB。

基盤:テラバイトだと今でもSSDは1TBでも1万円以上はしますよね。HDDなら4TBで1万円くらい。4倍〜5倍の価格差です。

社長:クラウドのドライブはダメですかね・・・1TBで一年1万円、1Gbps回線でつながってれば原理的には100MB/秒。

基盤:性能的に、すごく運が良くても40MB/秒が限界ですかね。すごく調子が悪いと2MB/秒とか。あと、GoogleDrive以外は、ドライブとしてOSでマウントすると、ローカルディスクにキャッシュを作るようなので、ローカルディスクを圧迫します。まず実用的では無いと思います。実際4月に、VMwareの仮想ディスクをクラウドに置いてみましたが、ちょっと実用にはならないかなと。起動が遅くて。

開発:まあスループットじゃなくてマイクロ秒のレスポンスを考えたらどのみち、原理的にローカルキャッシュとのI/Oは必須ですしね。というか、VMwareからHyper/V、VNCからRemoteDesktopに乗り換えて本当に良かったです。もう一台この消耗品でWindows Pro入りのレノボ機欲しいくらいです。

社長:クラウドドライブ上に仮想ディスク構想、意味なかったかー。rsyncと組ませたら面白いかなとも思うんですけどねえ。まあ、やってみるまでもなかったかとは思いますが、はっきり確認はできました。

開発:そういうことで、4TBのHDD一択かなと思います。100MB/秒では書けますから、まず問題ないかなと。

基盤:ヨドバシで人気は、エレコムのこれが1万3千円、バッファローのこれが1万2千円。

経理:そのエレコムの、アマゾンで税込み9,600円で売ってますね。プライム対象。これ発注しておきます。カチャカチャ。プチッ。月曜に来ます。

広報:ところでSSDって、どういうディスクなんですかね?

開発:世が世ならディスクじゃなくてドラムだったかもよ。

社長:いわゆる再現フィルムのようですね。

基盤:それでは、VTRスタート!

--
2020-0605 SatoxITS

Firefoxのコンパイル

開発:やれやれディスクも広々となりました。再開しましょう。

基盤:mach build。。。今度はここで引っかかりました。

 0:08.71 cargo:rerun-if-changed=res/cs_clip_image.glsl
 0:08.71 --- stderr
 0:08.71 thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Custom { kind: InvalidData, error: "stream did not contain valid UTF-8" }', src/libcore/result.rs:1188:5

。。。

 0:04.41 .../mozilla-central-9c1b2859111c/config/makefiles/rust.mk:293: recipe for target 'force-cargo-library-build' failed
 0:04.41 make[4]: *** [force-cargo-library-build] Error 101

開発:このメッセージ、ぐぐっても何だかよくわからないね。最近起きてる問題みたいにも見えるんだけど。そもそもこれ force なんちゃらって、いかにもオプションなものみたいなニュアンスだよね。これを呼んでる rust.mk:293 のあたりをコメントアウトしちゃいましょう。

基盤:ラジャー。コメントアウト。再度 mach build。。。お、先に進みました。

開発:本体を通過してtoolkitに入った模様。

基盤:終わった?あ、エラーか。

15:19.10 make[4]: *** No rule to make target '.../mozilla-central-9c1b2859111c/obj-x86_64-pc-linux-gnu/x86_64-unknown-linux-gnu/release/libgkrust.a', needed by 'libxul.so'.  Stop.
15:19.10 .../mozilla-central-9c1b2859111c/config/recurse.mk:74: recipe for target 'toolkit/library/build/target' failed
15:19.10 make[3]: *** [toolkit/library/build/target] Error 2
15:19.10 make[3]: *** Waiting for unfinished jobs...

基盤:コメントアウト。再度 mach build。

 0:04.01 /home/ysato/mozilla-central-9c1b2859111c/config/recurse.mk:101: recipe for target 'js/src/build/misc' failed
 0:04.01 make[3]: *** [js/src/build/misc] Error 2
 0:04.01 /home/ysato/mozilla-central-9c1b2859111c/config/recurse.mk:32: recipe for target 'misc' failed
 0:04.01 make[2]: *** [misc] Error 2
 0:04.01 /home/ysato/mozilla-central-9c1b2859111c/config/rules.mk:390: recipe for target 'default' failed
 0:04.01 make[1]: *** [default] Error 2
 0:04.01 client.mk:125: recipe for target 'build' failed
 0:04.01 make: *** [build] Error 2
 0:04.01 49 compiler warnings present.

基盤:コメントアウト。再度 mach build。

 0:00.99 ./buildid.h.stub
 0:00.99 ./source-repo.h.stub
 0:01.55 49 compiler warnings present.
 0:01.57 Overall system resources - Wall time: 1s; CPU: 73%; Read bytes: 0; Write bytes: 1191936; Read time: 0; Write time: 13
To view resource usage of the build, run |mach resource-usage|.
 0:01.58 Your build was successful!
To take your build for a test drive, run: |mach run|
For more information on what to do now, see https://developer.mozilla.org/docs/Developer_Guide/So_You_Just_Built_Firefox

Your build was successful!

基盤:通った。

開発:通りましたね一応。「was」successful ってのがちょっと嫌な感じ。

基盤:どれどれ、わくわく、mach run!

u18$ mach run
 0:00.33 .../mozilla-central-9c1b2859111c/obj-x86_64-pc-linux-gnu/dist/bin/firefox -no-remote -profile .../mozilla-central-9c1b2859111c/obj-x86_64-pc-linux-gnu/tmp/profile-default
Couldn't load XPCOM.

Couldn't load XPCOM.

基盤:ズルっ。。

開発:なんですかね XPCOMって。DISPLAYみたいな環境変数かな?検索。「Cross Platform Component Object Model (XPCOM) is a cross-platform component model from Mozilla」。。あんだこれ?

開発:なんか設定というか、-profile で指定しているそれが変なのかな。しかし、ひどいエラーメッセージだねえ。それに、ただ mach run しろってビルドの完成祝賀メッセージにあるのに。

基盤:一つのマシンに一つだけみたいなのも嫌ですよね。いろんな版並行して走らせたいし。

開発:そもそもプロファイルって何なんですかね。ls -l。

u18$ ls -l tmp/profile-default
total 0
-rw-r--r-- 1 ysato ysato 0  6月  5 04:24 prefs.js
-rw-r--r-- 1 ysato ysato 0  6月  5 04:49 user.js
u18$ 

基盤:JavaScriptで書くみたいですね。デフォは空っぽなのか。なんか入っていないとまずいんでしょう。これも mach で生成してくれたりしないのかな。とりあえず、お手本を探しましょう。

u18$ sudo find / | grep firefox | grep prefs.js

開発:ふーん。

基盤:少し飽きたので、いたずらでもしますか。我が社のFirefox改良の第一歩!

開発:One giant leap for mankind WWW。で、どこで出してるんでしょう。

基盤:適当に grep。ああ、ここですか。

u18$ grep 'Couldn.t load XPCOM' */*/*.cpp
browser/app/nsBrowserApp.cpp:    Output("Couldn't load XPCOM.\n");

開発:ところで、一昨日リリースされたMozilla 77なんですが、証明書の管理がしやすくなったんだとか。どれどれ。

基盤:Anonymous User?

開発:なんだ、delegate.org のか(笑)。これ、何とかしないとね。

基盤:さて、もうビルドに必要なツールは完備したので、この環境でゼロからビルドしてみましょう。まず .mozconfig に ac_add_options --disable-av1 入れときます。

* * *

基盤:エラー出てました。

78:58.45 .../Firefox/mozilla-central-9c1b2859111c/config/makefiles/rust.mk:293: recipe for target 'force-cargo-library-build' failed

開発:でも、ここまで78分一気通貫でしたね。

基盤:コメントアウトしてmake。あ、config/recurse.mk出たのでこれもコメントアウトしてmake。通った。つまり、問題は3点だけでした。たぶん、マイナーな問題。

u18$ mach run
 0:00.34 .../Firefox/mozilla-central-9c1b2859111c/obj-x86_64-pc-linux-gnu/dist/bin/firefox -no-remote -profile .../Firefox/mozilla-central-9c1b2859111c/obj-x86_64-pc-linux-gnu/tmp/profile-default
--- MyMozilla (^-^)/(Jun  5 2020 12:17:04)
Couldn't load XPCOM.

開発:おー、仕込んでおいたメッセージが出ましたね。我が社初のMozillaソースコード改変。

--
2020-0605 SatoxITS

驚くほど簡単になってたディスク拡張

社長:Firefoxのmakeはどうなりましたか?

開発:それが、makeを走らせておいたら1時間くらい走った後にディスクフルで終わってまして。それでどうやってこの仮想マシンで使えるディスクを拡大しようかということであれこれ、1日潰してしましました。

基盤:そもそもがこれ作る時に、まあ32GBあれば足りるだろうと思って、Hyper/Vで仮想ディスクの最大サイズを32GBに設定してしまったのが敗因ではあります。Hyper/Vの、使ってる分しか割り当てないモードで作ってるので、上限を厳しくする必要はなかったのですが。

開発:ディスクを大きくするのって、バックアップして差し替えてリストアするとか、すごく面倒臭いイメージがあるので、何かもっと簡単な方法はないかなーと。別の仮想ディスクをつけたほうが良いかなとか、この際リモートドライブにしたほうがにしたほうが良いだろうかとか。

基盤:で、バックアップも含めていろいろ作業しようとしたら、そもそもあちこちの物理ディスクが満タンになってしまって身動きがとれなかくなってたんです。作業スペースとして50GB程度は欲しかったのですが、Hyper/VホストのLenovoのSSD 250GBも満杯、MacMiniの250GBも満杯。Googleドライブも今のところ100GBしかなくて満杯。あれって、1TB付きのサブスクリプションてまだ契約してないんでしたっけ?あと、Macには一応、3年前に買った4TBのHDDがついてて3TBばかり空いてるんでしすが、リモートにHDDというのにどうも抵抗感があり・・・

開発:1TBのOneDriveは十分空いてるのですが、どうも様子が変で。結果的に気づいたのは、OneDriveはマウントするとローカルにキャッシュを持つので「OneDriveに移動した」はずのデータが実はローカルディスク上にあったというオチでした。これを消して80GBくらいローカルSSDが空いたので、ようやく作業に着手できました。

基盤:念のためVMごとバックアップしてはおきましたが、実はバックアップ作業不要でした。必要な作業はこれだけです。所用時間約5分。

1. Hyper/Vで仮想ディスクのサイズ上限を変更する
 1.1 チェックポイントをマージして単一ディスクにする
 1.2 ディスクの上限サイズを変更
2. 仮想マシン(Linux)でパーティションを拡大する
 2.1 parted コマンドでパーティションをリサイズ (resizepart)
 2.2 resize2fs コマンドでファイルシステムに反映
1.1.1 チェックポイント削除前
1.1.2 チェックポイント削除後
1.2 仮想ディスクの最大サイズ変更
2.1.0 ディスク 満杯ですわ
2.1 parted コマンド起動
2.1、2.2 コマンド2発でインスタント拡大

社長:ひゃー、マウントしたまま拡張できるですか。まあ長年、そうあって欲しいものだと思ってましたが、イマドキのOSではそうなってるんですね。良い時代になりました。

開発:いずれやってみますが、縮小するとどうなるかですね。

基盤:デフラグ的に前のほうに詰変えするでしょうから、きっと時間がかかるでしょうね。でも、データ転送量的には数ギガバイトなら、まあ1分仕事かなという気もします。

開発:VMごと配る時に、中身がちょうど収まるサイズにしたら、ゴミの入る余地がなくなって、多少小さくなるかなとは思いますね。

--
2020-0604 SatoxITS

さらばIPv4

社長:IPv4をやめようと思います。

一同:えええええ!

社長:もうDHCPとかかったるいし。DNSだけでやりたいです。世の中ほとんどIPv6で通るようになっているのに、IPv4にこだわる必要はもう無いと思います。

開発:ですが、IPv4でしか通じないサイトもありますよね。

社長:それはプロキシなりなんなりでゲートウェイすれば良いと思います。少なくとも、社内、イントラネットではIPv6はもう、いらないと思います。

近未来的居酒屋風景

社長:飲んできました。

経理:領収書は?

社長:いや、あそれこはデフォでは出さないし。今日はやり残した仕事が気になったので40分で帰ってきました。おとおし+季節の野菜系つまみx4+キリン生中+竹鶴ハイボールx2で3,950円。なんか計算上3,949円だったようなんですが、切り上げてましたね(笑)。私は財布を持たないので現金、特にコインてほんと嫌いなんで四捨五入は良いですが、あそこもカード使えるようになったらお釣りの単位は1円未満でもウェルカムなのに。

基盤:40分で4,000円て、時間単価的にはうちのレンタルサーバの2,000倍ですね。

開発:例の、外装が万年クリスマスというかナイアガラのようになってしまった居酒屋ですか。

社長:そう、数日ぶりに行ったんですが、入った時にハッとしました。

基盤:めっちゃ可愛いバイトの子が居たとか。

社長:いや、そういうのじゃなくて、いつもはすすけた感じの内装が、今日はまばゆいほどにケバケバになってたんです。竜宮城ですかってくらい。

基盤:クリスマスにはまだ半年以上ありますけど、内装の切り替え早過ぎませんか?

社長:それで、一体どうしたんですか?ってマスターに聞いたら、あ、いけね切り替え忘れてましたって、何かスイッチをプチってしたら、一瞬でいつもの内装に戻ったんです。

開発:ああ、内装が液晶とかで出来てるわけですか。

社長:まあ液晶ではなくて、電子インクというか電子ペーパーですね。最近安くなったので、まさに紙として壁紙に使ってるそうです。

経理:この頃は1平米3千円くらいで買えるようですね。ちょっと高めの壁紙程度。

社長:それで、もしやひょっとしてこの木目のテーブルも?って良く見たら、やはり電子ペーパーでした。こっちは強度の問題もあるし、ちょっと値がはる4Kの電子ペーパーだそうです。

開発:ならそれ、ディスプレイとして使えそうですね。

社長:ええ、そう聞ききました。そしたら、いやー社長さんはそっち系詳しいでしょうけど、おいらトンとそういうことは苦手でって。でも、なんか機能をイネーブルすれば普通にディスプレイとして使えるそうです。料金も最初の720時間は無料だとか。しかもですよ、よく聞くとあれ、ディスプレイとかそんな単純なものじゃなくて、どうやらかなり総合的なITシステムらしいのです。もとは店内のオーダーシステムとして作り始めたらしいんですが。せっかくあるのになんで活用しないんですか、私がちょっと使ってみせますよってことになりまして。

基盤:インターネット喫茶の居酒屋版みたいな感じですかね。

開発:いやー、私たちの世代だと、喫茶店のテーブルが全部インベーダーゲーム卓になっちゃった経験をしてますからねー。違和感無いです。

社長:基本、店内に見えるもの全体が、穴あきの仮想デスクトップ的にべたコントロールされてて、あの店の壁面規模だと16,000 x 32,000 ピクセル程度の解像度だそう。入力は不定数のマルチポイントなんですね。だから何人かで共有する大きいウィンドウを作ったり、お一人様用のディスプレイを切ったり、自由自在なんです。YouTubeとかはもちろん無料。テレビとかの有償コンテンツも見れますが、秒単位での課金だそうです。

開発:あの映画に出てくる「私からです、よかったらどうぞ」ピっ、みたいな使い方もできるんですか。

社長:はい。今日見た操作方法は、自分のメニューから人のテーブルにメッセージ付きでドラッグ&ドロップするみたいな感じで、見栄え的にイマイチでしたが。オプション料金取られるので入れてないそうですが、カメラシステムも入れると人のジェスチャを分析してそういう意味に割り当てるこもとできるみたいです。

社長:となりの人と将棋さしたりとか、まあ普通にパソコンやらスマホやらでできることは、当然にできるわけです。空間的に広いので、ダーツみたいなゲームアプリも臨場感ありました。やはりそういうのって、自室で一人で出来たとしても、つまらないですからね。

広報:フィーリングカップル5x5みたいな感じのアプリもあると良いですね

基盤:パブリックビューイングとかの世界も変わりそう。

開発:なんか、スマホ持ち歩く必要なくなりましたね。もはや無用の短物。

経理:ポケベルみたいに歴史の中に消えてなくなるのですね。

社長:そうね。これからは、行った先々の目に入るもの触るものが全てパソコン。みたいな世界になるでしょう。自分で携帯する必要がない。5Gとか6Gとかもいらないですね。手ブラコードレスです(笑)。天動説への回帰ですね。

開発:それで、そいつらってやっぱり、ラズパイでできてるわけですね。

経理:持って歩くのはマイナンバーカードのみってなるんですかねー。

基盤:もしくはQRコードの刺青とか。

--
2020-0603 SatoxITS

WordPress仮想マシンの作成

開発:だいぶ様相も見えてきたので、そろそろ本気の開発環境を作りましょう。

基盤:要件は。

開発:ブラウザとサーバの開発環境がまるっとはいる一番手間いらずの標準的な開発環境ですね。

基盤:やはりLinuxですかね。

開発:ですね。昨日、macOSにMozilla開発環境インストールしかけたんですが、suで/usr/localとかいじりたがるので勘弁して欲しいわ。生活環境と隔離しましょう。まあ、chroot とかする手もあるけど副作用もありそう。ここは社長のMacへのこだわりはおいといて。

仮想マシンの作成

基盤:ではUbuntu 18 の仮想マシンで、まともなリソースを割り当てたやつを作りましょう。といっても、30GBあれば十分でしょうけど。

基盤:もちろんVMホストは信頼と実績の Hyper/V で行きます。ゲストは ITS more 2020 標準の Ubuntu 18.04.4。手元にある ubuntu-18.04.4-desktop-amd64.iso で行きます。今回はクイック作成じゃなくて普通に作成。ん?この第1世代、第2世代ってなんですかね?まあうちは過去との互換性は不要だから第2世代で。起動メモリは1024MBですかね。どうもこの動的メモリを使用っていうのが、メモリ不足で立ち上がらなくなるシャットダウンもできない原因のような気もしますが。。仮想ハードディスクは最大32GBでよろしくと…

基盤:あれ、ブートできないですね。どうも第2世代というのがダメくさい。どうせうちは旧世代ですよと。プチっ。おー、立ち上がった。ホスト名とユーザ名を決めてGo。。

基盤:あらかじめどう構成するか決まってれば、ここまで10分はかからないですね。5分かな。

開発:そのへんは、クラウドでも同じですね。でも、やはりデスクトップが見えるというのは、ローカルに作るVMの圧倒的な強みというか安心感ですねえ。というかこのHyper/V、VMwareより好きになりました。RemoteDesktop もバッチリだし。

経理:Windows 10 Pro入り Lenovo機カッコ消耗品、めっちゃモトが取れましたね。

基盤:で sudo halt して停止してスナップショットとか… あれあれ?停止で固まりますね。うーぬ、su shutdown now。これならいいのか。

開発:その、動的メモリ割り当ての最大値の意味が不明ですね。1048576MBっていったい…

基盤:「メモリが足りなくて起動できません」とかいうエラー、こいつのせいかもですね。とりあえずmax 2048MBにしときましょう。で、さて、この時点でVMファイルのサイズ、8.6GB となりました。

開発:これが第1基準線ですね。記念写真をパシャ。

基盤:VMファイルを圧縮してみましょう、… 時間かかりますね。というか何故全くプログレスしないのか…CPUは食っているのに。おっといきなり進行・終了。5分くらい?で結果がこれですか。

開発:おー、8GB が 2GBになりましたか。1/4。まるごとたくさんアーカイブしとくのには良いですね。

基盤:外からアクセスしたいのでブリッジ型のネットワークアダプター付けときましょう。

開発:このへんはVMwareならデフォでついてるのにね。

基盤:で ifconfig。おおー、無い!最近はこれは使わないのかなぁ。sudo apt install net-tools。無いと。netstat も無い。廃止されたのか。ふむ。なるほど、ip a でみろと。

開発:IPAみたいですね (^-^)。というか、もうGUIでみようよというオチとか。

基盤:で、外向け ssh は繋がりますよね。と。OK。あれ?外からコネクト出来ないですね・・・自分からも Connection refused。どうするんでしたっけ?man sshd、ありゃ無い。sudo apt install ssh。で ssh localhost。つながった。で、公開鍵で認証するようにして・・・OK 。自動認証したいので、ssh-agent 起動して、ssh-add -s xxxx。ssh。OK 。

開発:自動認証はMacだと .ssh/config に一言書いておけばOKなんですけど、どうれやればそうなるんでしょうね。

基盤:さあ。・・・あ、.ssh/config に Host * AddKeysToAgent yes って書くだけで良いみたいですね。らくちんらくちん。

開発:とりあえずVMのファイルがちょうど10GBになりました。一旦パワーオフして 、zipに固めて。その間に一服しましょう。

基盤:ところで、鍵をVMの中に置いときたくないんですが、リモートの鍵ストアみたいなのはないんですかね?

開発:さあ。とりあえずSMBマウントでいいかなって気もしますが。

基盤:あ、du で見ると du vm は 11GB、du vm.zip は2.2GBになりました。 ゲストで見ると df / は 5.8GB で 19%。

Golangインストール

開発:いい感じですね。では Golang を。あれれ?なにか警告されますね。

基盤:まあ捨ててもいいVMですし。sudo snap install go --classic。えいっ。一瞬でできましたね。Goちっちゃ!。でも600MBくらい食ったか。

$ go version
go version go1.14.4 linux/amd64

開発:Macの上のが go1.14.3 だから、ひとつ新しいですね。

SMBインストール

基盤:昨日のSMB経由GoogleDriveのマウントしてみますか。sudo apt install cifs-utils・・・おや?obsolete だとか。

$ sudo apt install cifs-utils
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package cifs-utils is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

開発:Azureお仕着せの18.04.4にも、Hypver/V用の18.04.3にもあったんですけどね。SMBがなくなるってことないですよね・・・

apt-get update実行

基盤:apt search cifs・・・なんかありますね。sudo apt install smbclient ・・・あ、なんかうごいた。Not Fund ... apt-get update してはいかがとメッセージが。そういえば前にもそんなことを言われましたね。パッケージのデータベースが更新されて無い的な・・・

% sudo apt-get update
・・・どどどど・・・

開発:なるほど (^-^;

基盤:なんで apt install golang とか cifs-utils の時にこういう事を教えてくれないんですかね。まあいいや。これで、cifs-util も golang もふつうに apt install できました。ディスク使用 23%、7.1GB 到達。

GoogleDrive / SMB マウント

基盤:でもって、$ sudo mount.cifs //192.168.10.10/G $HOME/GoogleDrive -o user=・・・。OK。問題無しですね。

開発:zip して一服しますか。

基盤:さて、終わってるかなと・・・げ?

基盤:あ、終わった。おどかしやがって。でも・・・

開発:いきなりでかくなりましたね。

基盤:実態は7.4GBですからね。GoogleDriveをマウントした時にディスクが汚れたんですかね。なにかのキャッシュとか。ゼロを詰めるとかやればいいんでしょうけど。

開発:いずれ検討しましょう。ではわたし的にはいつものDeleGateのコンパイルで性能を測定・・・おお、所要1分25秒。ほぼ最速ですね。

WordPressサーバの構築

WordPress

開発:さて、それでは WordPress 行ってみましょうか。何をどうインストールすればいいんでしょうね?

基盤:さあ。とりあえず apt search wordpress ・・・なんか、プラグイン的なものばかり・・・あれ、でもこれ、その名も wordpress とありますね。

wordpress/bionic,bionic 4.9.5+dfsg1-1 all
  weblog managerwordpress-theme-twentyseventeen/bionic,bionic,now 4.9.5+dfsg1-1 all [installed,automatic]
  weblog manager - twentyseventeen theme files

社長:われらが愛しの TwenteenSeventeen がありますね。インストールしといてください。

開発:これはさすがに先人の知恵をお借りしましょう。

基盤:Ubuntu 18.04 にWordPress ・・・何人か書かれてますね・・・2020年05月16日updateとあるので、このQiitaの方のにしましょう。まず Apache・・・ああもともと入ってますね。起動するだけか。つながった。

基盤:つぎはPHP。OK。次は、、MariaDB ?なんですかねこれ? apt -y install ・・・。おや、エラーが。バージョンが不整合とな。

開発:なんかそれSQLみたいですから、手作業でmySQLを設定すればいいんじゃないですかね。

社長:SQLは他の用途にも使うので、GUIのを入れといてもらえるといいな。

開発:そうですか。Ubuntu SofotwareをmySQLで検索・・・いくつかありますね。mariadb で検索。いくつかありますね。うーん、このBeeKeeper Studioが2020-05-05版で、★★★★☆みたいだからこれにしてみますか。インストールして起動。んー?rootユーザのパスワードってなんですかね?

基盤:mysql のコンフィグに書いてあるんじゃないですかね。んー、cd /etc/mysql; sudo grep -i pass * ・・・ debian.cnf にありますね。でも、管理者は root じゃなくて、debian-sys-maint みたいですが。

開発:どれどれ debian-sys-maint ログイン。ああ、入りました。それで CREATE ほにゃらら SQL 文を食わせて。SHOW。おー、できてる。

開発:ということであとはWordPress本体ですね。

基盤:えーと、wget。12MB?ちっさ!展開しても49MBです。

開発:4月30日付けってのは、うちで使ってる5.4.1のことですかね。

開発:さあ。それで wp-config.php にデータベース名とユーザを設定して、おもむろにアクセス!

開発:おーっ、ぱちぱちぱち。出ましたね。

基盤:でサイトを作ってダッシュボードへ!

開発:おーっ、5.4.1 ですね。

基盤:仕上げの TwentySeventeen!

開発:やったー!パチパチパチ。

社長:おー、我がオンプレミスの TwentySeventeen ですね。

開発:もうさっさとXSOから撤収しましょう(笑)

基盤:ここまで工数的には、Ubuntu VMの作成に2時間、WordPressのインストールに2時間、という感じでした。まあ、慣れてれば全部で1時間という感じでしょうか。

社長:でも、慣れてないと1日では終わらないよね。いっそこういう仮想マシンごと配布してくれちゃえば良いのに。まあうちでやっちゃっても良いけど。

開発:ライセンス的にどうなんですかね。

基盤:サイズ的には、df で 7.98GB、VMとしては、ZIPして4GBになりました。

開発:でもおそらく、ファイルのキャッシュとかディスクのゴミが1GB以上あるから、ISOにしたら3GBくらいになるでしょうね。

基盤:とりあえず必要そうなファイルのサイズだけ見てみましょうか。

$ time sudo tar cfzv - --exclude=kcore --exclude=cache --exclude="*snap" --exclude=swapfile / | wc
6103048 35076761 1702021288

real	4m43.588s
user	4m1.118s
sys	0m17.548s

基盤:1.7GBですね。まあでも、この手動でやった一連のインストールを自動的にやるスクリプトを配るだけでいいんじゃないですかねぇ。

めっちゃスケーラブル・ラズパイクラスタ

社長:さてさて。それで次なる興味は、これが同じようにラズパイで動くかなんですが。ちょうどいまゆうパックで2つ届きました。長野県から。

経理:また買ったんですか?

社長:いやー、4GB版というのも試してみたくてですね・・・2GB版のほうは4,620円でしたし。それと「ラズパイ・クラスター」とかやったら面白そうだなーって。

開発:ノンストップ・コンピュータってやつですね。高信頼WordPressサーバクラスターとか。

広報:イメージ湧いてきました。キャッチコピーは「めっちゃスケーラブル」とかどうでしょうか。

社長:我社のライバルはAzureとAWSです(笑)

経理:まとめ買いを割引してくれると良いですね。

ブラウザ開発環境

開発:さて、本題のブラウザ開発環境なんですが。

基盤:ちょっと休みましょう。

社長:そろそろ飲みたくなって来たのですが。

経理:まだ5時前なので、店が開いてないでしょう。

開発:その前に作業机の上の、この10年ものの青いキシメンを一掃したいですね。まともなケーブルに変えてネットの性能測定も早くやりたいのですが。

経理:今日アマゾンからCAT6Aが届くはずなですが。

基盤:あ、いま外に出たらドアに立てかけてありました。

社長:なにー!最近のクロネコはけしからんな。ピンポンすらしないのか。しかも宅配ボックスにすら入れないというのはどういう了見?

開発:例のあれで甘やかされ過ぎましたかね。

社長:そういえば佐野ラーメンどうなったかな。

基盤:開封!おお、なんだこれは。ふやけ系のうどんのような。お伊勢参りですか。

開発:CAT6の太いよりひとまわり以上太いですね。

基盤:それでまず熟成キシメン5eだとこう。

基盤:で、ふやけうどんだとこう。

基盤:あれ?

開発:いや、これは再現性は低いんで。ばらつき大。ベストの値を見たいです。

基盤:これとか。

開発:きしめんでもこれくらいまでは行きましたね。MTUはどうなってますか?

基盤:9000ですが。

開発:うーむ。ちょっとこの、20個も開いているOperaを閉じて図りましょう。

基盤:代わり映えしないですね。これってどうやって測ってるかわからないですが、たぶんサンプリングだと思うんで、まあ目安の数値みたいな感じなのでは。

開発:実質的なデータ転送をGoogoleDriveとの通信でやってみますか。例のやつ。

基盤:こんな感じですかね。

基盤:アップロードで35MB/sつまり280Mbps出ています。並列にやってみたりすると。

開発:450Mbps出ますね。このへんはもう、ネットワークじゃなくてサーバの処理能力かディスクI/Oで律速されてる可能性がありますね。まあ4月に計測した時もそうでしたから、最高速度的には、こういう事なんでしょう。

社長:キシメンにも良いのと悪いのがあったということですね。確かに、4月頃に使ったやつは、ちゃんと使えてた実績のあるやつでした。

開発:後はこのv6おまけルータより外でやったらどうかということですね。ただ、まあこれで十分だという気はしますが。

経理:ところでこのインターネット通信て、従量制じゃないですよね?

一同:ドキッ

社長:まあいずれにしても、Macの通信が遅いなどということは全く無かった、という結論ですね。

開発:ただ、ノイズにデリケートで、Etherの通信速度の自動認識を低めに設定しがちという可能性は否定しきれいませんけど。

基盤:Macの性行ですかね。わたくし、腐ったキシメンなどお相手できませんのオホホみたいな。

社長:そういえば、うちも光テレビというのにすると良いかも。

経理:今現在、ケーブルテレビに月4,400円払ってますから、めっちゃ削減できるかと。月額基本料金1,500からのようです。

社長:CSのゴルねというのを見てみたいです。

基盤:浮いたぶんでもう一本ギガビット回線引けますね。どのくらいバンド幅食うのかな。え?20Mbpsで十分なの?・・・まあ確かに、動画ってそんくらいか。

Firefox

開発:さてそれでは、問題のFirefoxです。昨日はどこだったからかえっちらおっちらしましたが、せっかくなのでこれも apt でやりたいですね。

基盤:apt search firefox する。これですかね?

firefox/bionic-updates,bionic-security 76.0.1+build1-0ubuntu0.18.04.1 amd64 [upgradable from: 72.0.2+build1-0ubuntu0.18.04.1]

開発:さっき更新する前のがそれだったみたいですね。更新したら、今の最新は77.0となりました。

基盤:じゃ問題なさそう。sudo apt install firefox。あれ?50MBしかない。ああ、これってバイナリかな(笑)firefox-dev。あれ、これも250KBしかない。もともと入ってたとか?firefox-dbg。おっとこれは、462MBある。でもあっという間にダウンロード。うーん、ソースっぽいの入ってない。

開発:機能落としてきたやつでやりましょう。

基盤:じゃ、./mach bootstrap ... うおー、なんかすごいぞろそろと… Mercurial から名前聞いてきましたけど?

社長:私の本名とEメールで。

基盤:ラジャー。。。うー、いったいくつ質問に答えればいいんだ。。。なんか30問くらい聞かれましたね。途中から読まずにYes になりました。ふー。では Mercurial のレボジトリーを自分のホームのクローンすると。Go!

開発:これは時間かかりそうですね。一服しましょう。

社長:こういうQ&Aこそ、アクティブなフォームになってれば良いのにねえ。。。あ、ひらめいた。ドメイン名とっとこう。うーん、.app は2,480円か。高嶺の花ですね。

経理:くれぐれも .inc はクリックしないでください。

社長:いつかは .inc、取ってみたいね。

基盤:終わりました。30分くらいかかりましたね。

開発:df は 63%到達。さすがにVMもデカくなりました。まあ、エクスポートかなんかすれば身綺麗になって小さくなるでしょう。

開発:で、ここからどうするのかな?ただ変更して make すればいいのだろうか?

社長:ちょっと待った。このままずるずるとやってると今日も飲みに行きそびれてしまいます。ここで一旦、アルコール・ブレイクにしましょう。

Mircurial

社長:与太話を書いてたら戻るのが遅くなりました。それで、どうなりました?

開発:いえ、我々も今再開するところです。

基盤:それはそうと、今日届いたギガビットのハブですが、電源コードが15A行けそうなぶっといやつで、全然昔から進化してないですね。100Vで4Wなんですけど。電源系は、昔からACアダプタ乱立とか電池形状とか、どうにもなりません。

開発:まあきっといずれ、全ての電源はUSB-Cになるんでしょう。丸型プラグのACアダプタってもうなくなるなるんじゃ無い?情報ラインとの統合もされるのかな。まあでも、スターじゃなくてリニアバスがいいんだけど。

社長:それでそもそも、Mercurialて何なんですか?Firefox的には、Gitのオルタナティブらしいから、バージョン管理システムなんでしょうけど。

開発:Wikiにも、分散型VCSだって書いてありますね。「その一方で、Mercurial には、統合された Web インターフェイスが含まれており、グラフィカルユーザインタフェースの拡張機能が利用できる。」。それ使いたいな。でも、とりあえずソースをちょこっといじってmake してみたいだけなんだけど。

社長:まず make しましょう。

基盤:make しようとするとまず rustc が無いと言ってきますね。サビシー。sudo apt install rustc。次は cbindgen が無いと行ってくる。うーん、このあたりは昨夜、Macでやるとして通った道なんですがやり直しですか。apt にはない。ああ、cargo install cbindgen ですか。Go!。うわ、めっちゃなんかやってる。休憩しましょう。

開発:やれやれ。あ、まだやってる。

基盤:ていうかこれ、Marcurialでやればコマンド一発なんじゃないですかね。んー、でもそのためのセットアップなのかな。あ、終わった。10分くらいかかりましたかね。

Installed package `cbindgen v0.14.2` (executable `cbindgen`)
warning: be sure to add `$HOME/.cargo/bin` to your PATH to be able to run the installed binaries

開発:ああ、これ昨夜Macで見ましたね。

基盤:PATHに入れてと。./mach build。あそうですか。cargo install rustfmt。。。またまた時間かかりそう。それにしても、$HOME/.xxx/bin てどういう感覚ですかね。隠れて開発したいとか?

開発:たぶん、かなり進んで来ているとは思うんですが、ここまでインストールするのに既に2時間くらいかかってますよね。開発環境まるっと入った仮想マシンがあればいいのに。あ、というかあるっていうんで取りに行ったら、サイトごとなかったというわけでした。

基盤:あ、終わった。./mach build。今度は cargo install bindgen。ていうか、なんでこれ、エラーメッセージ出すだけで、自動的にやってくれないんですかねえ。

開発:ひとつひとつ、ありがたく頂戴しろよって感じなのかな。

基盤:clang と libclang が not found ってどういうことでしょうね。想定しているパスが違うのかな?PATHを検索してくれればいいのに。おや?こんなこと言ってますね。

Please install the necessary packages, run `mach bootstrap`, or use --with-clang-path to give the location of clang.

開発:ぐぐりましょう。

基盤:ありました。https://bugzilla.mozilla.org/show_bug.cgi?id=1557030

***

基盤:いろいろ調べ回って、.mozconfig の事を少し理解しましたが、結局 clang というコマンドが見つからない。インストールされてなかったから。ということでした。sudo apt install clang。で前進。./mach build

0:07.56 ERROR: nasm 2.14 or greater is required for AV1 support. Either install nasm or add --disable-av1 to your configure options.

% sudo apt install nasm
Reading package lists... Done
Building dependency tree       
Reading state information... Done
nasm is already the newest version (2.13.02-0.1).

基盤:とほほ。.mozconfig に --disable-av1 を追加。./mach build。

開発:おおっと、通過しましたね。なんかバリバリはじめましたよ。

基盤:一服して来ます。。。

基盤:お、ついにコンパイルをはじめた!Warning出まくり(笑)

開発:ほとんどが int と unsigned int のミスマッチですね。

基盤:そういえば昨日、ああもう一昨日になってしまいましたが、やった回線速度の測定の時に、ラズパイが遅いのが気になったんです。あれもキシメンのせいかなと思うんで、この時間にまた測ってみます。

基盤:あれ?VNCがつながらない。。ああ、ルータをリブートしたんでDHCPでアドレスが変わったんですかね。直にHDMIで見ますか。。。あれ?映らない。キーにもマウスにも反応しませんね。HDMIの信号は出ているようですがスリープしてるんでしょう。真っ暗。

開発:スリープとか意味ないですよね。切っときましょう。

基盤:しかしつながらないですね。画面が反応しない。この999円のプラケーススイッチ、ちゃんとHDMI通してるんですかねぇ?メーカ名も生産国も書いてないというこの怪しさ!どうせあのコロナを輸出した国製なんでしょうけど・・・ムッカー!!

開発:まあ、こういう時って、往々にして物理層がキレてますよね。。。

基盤:あ、USB抜いてました。VNCにしたし、もういらないかなって(笑)。さて fast.com で測定と。。あれー、70Mbpsくらいしか出ないですね。ifconfig によれば、接続は1000Mbpsだって認識してるんですが・・・

開発:Firefoxのコンパイル、いったいいつまで続くんですかね。

基盤:何をどういう順番でコンパイルするのか知りませんからねー。もう34分経ちました。それにしてもあのバグトラッキングシステム、読んでて頭痛くなりました。切れ切れの憶測コメントの連鎖みたいな。そのうえ結論を誰かがまとめてるようでも無い。昔からああいうBTSとかITSとかってどうも苦手なんです。そもそも「どうしてそういうエラーが出るか」を追跡する手段を明確に提供してくれれば、あとはこっちで追跡するんで、その方法を一言書いてくれればいいんですよ。憶測はいいんで。なぜそういうエラーを出したかは、そのエラーを出したシステムが知ってるわけだから、そこをちゃんとわかりやすく作るだけで、どんだけ人間の労力が減って生産性が上がることか。

開発:まあ一般論としてはそうだけどね。今回われわれは、Mozilla どころか Linux の apt に経験も知識もなくやって来て、憶測で作業をやっているわけですからねえ・・・

基盤:あ、コンパイル止まった。44分15秒地点。

開発:人間向けのエラ〜メッセージではないですね(笑)

基盤:error: could not compile 'style' って、あの <style> の処理系ですかね。どきどき。とりあえずもいっちょ./mach build。。あれ?違うところでエラーが出た。

 0:08.54 error: failed to run custom build command for `webrender v0.61.0 (/home/ysato/mozilla-central-9c1b2859111c/gfx/wr/webrender)`
 0:08.55 Caused by:
 0:08.55   process didn't exit successfully: `/home/ysato/mozilla-central-9c1b2859111c/obj-x86_64-pc-linux-gnu/release/build/webrender-973279d8005d2f44/build-script-build` (exit code: 101)

基盤:exit code: 101 ってなんですかね。なんか、コールスタックのトレースまでしてますが。

開発:ひょっとして、メモリが足りなくてメモリの allocに失敗したとかじゃ無いでしょうね。まあ、だったらその時点でエラーを出すだろうとは思いますが。コアダンプしている感じもなく。でも再現性がないというのがどうも。2GBじゃ足りないのかも。もうちょっと足してやりましょう。あれ?そもそもVMホストPCのディスクがもう満タン近いですね。。これが原因かも。でっかいファイルをOneDriveにどんどこ移しましょう。ぽいぽいぽいぽいっと。おー、OneDriveへのアップロードも、並列にやると500Mbps出ますね。

基盤:OneDrive にしろGoogleDrive にしろ、高速に使いたかったら並列転送にしろということですね。ファイルの前半と後半を並列転送するなんていうcopyコマンドがあると良いかも。

基盤:それでいつになったら作業再開できますか?

開発:いやそれがね、VMを止めてその40GBをZIPを始めたらいつまでたってもプログレスしないんですよ。ずーっとディスクにアクセスしてるんですが。。。うーん、直線的に読んでるだけなのに何で直線的に進まないんだろ。一体どういう圧縮アルゴリズムなんだ?すげー圧縮のウィンドウとか辞書がでかいとかですかね?今諦めて gzip にしてみました。これは着々と進んでます。それにしてもさすがにSSD、読み出しは100MB/秒超出ますね。Macのファイルシステムだとどうなだろう。

基盤:右クリックのコンテクストメニューに、zip じゃなくて tgz を作るメニューを入れると良いですね。

開発:しかしあれだよね。ディスクを暗号化していると圧縮が聞かないからこういうことは出来ないね。

基盤:暗号強度が保たれてて圧縮が効くみたいな暗号があったら面白いでしょうね。原理的になさそうですけど。

開発:おっと、おわりました。では、VMを起動します。

基盤:同じところにひっかかりますね。

開発:ビルド環境をインクリメンタルに作ってきたから、何か変な状態の中間生成物ができてしまってる可能性もありますね。一旦、生成物をクリアしてからやり直しませんか?

基盤:そうしましょう。では、make clean; ./mach bild。結果が出るのは1時間以上先ですね。

開発:また明日やりましょう。

基盤:そうしましょう。

--
2020-0603 SatoxITS