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

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

社長:覚えていらっしゃるかもしれませんがー、当社はこの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