隠居日録

隠居日録

2016年(世にいう平成28年)、発作的に会社を辞め、隠居生活に入る。日々を読書と散歩に費やす

非線形科学 同期する世界

蔵本由紀氏の非線形科学 同期する世界を読んだ。一見すると異なるリズムで動いているものが、互いに影響しあって、最終的には同期する現象がある。以下のyoutubeの動画は本書の中で紹介されていたものだが、この同期する現象を端的に表している。

www.youtube.com

最初にこの同期現象に着目し、考察した人物はオランダの科学者クリスチアーン・ホイヘンスだそうだ。1665年の冬、体調が悪く自宅にこもっていたホイヘンスは水平に取り付けられた一枚の支持板にぶら下げられた2つの振り子時計が、完全に歩調を合わせて左右に振れることに気が付いた。最終的にはホイヘンスは振り子が取り付けられている支持板を通して、かすかな振動が振り子に与える相互作用により同期するのだと結論付けた。

本書ではこの例を皮切りに様々な同期現象が紹介されている。ロウソクの炎、カエルの鳴き声、体内時計、橋と歩行の同期、拍手、ホタル、電力供給網、……。リズムを刻むところには必ず同期が存在するのではないかと思われるぐらい色々な例が紹介されている。

この中で紹介されている体内時計の実験なのだが、「人間の体内時計は24時間よりも若干長く25時間ぐらい」というを聞いたことがあったのだが、どうやらこれは最近では実験の方法がよくなかったという結論になっているようだ。1999年にチャールズ・A・ツァイスラーらの米国のハーバード大学の実験によると24時間11分で、以前考えられていた時間より24時間に近い値になっている。彼らの実験では被験者の生活サイクルを28時間にして実験を行い、体温やメラトニンとコーチゾルのレベルの測定を行った。人間の体内時計は28時間という周期には同期できないことが知られているので、この時間が選ばれたようだ。人間の体内時計の周期は24時間よりも長いが、十分強力な明暗サイクルにさらされることにより24時間に体内時計は同期するようになっている。

同期とは直接関係ないがクオラムセンシングという面白い現象も紹介されていた。例えば病原気に感染しても、健康体なら菌の密度が低く保たれるので問題がないが、免疫力が低下し、菌の密度がある限界を超えると、突然病原菌の活動が活発化し発病する場合がある。菌の密度がある限界を超えると急にある物質を生成することをクオラムセンシングと呼んでいる。細菌の集団ではシグナル分子と呼ばれる物資分子で細胞間で情報のやり取りが行われている。細菌が密集していれば、高い濃度のシグナル分子をどの細菌も感じることになり、その濃度がある限度を超えると、細胞脳遺伝子発現パターンにある変化が生じて、特定の物質が算出され始めることになる。

本書では色々な動機が紹介されていたのであるが、新書という性格上のせいか、なぜこのような同期が起こっているかがよく理解できなかった。そのあたりが残念な点で、もう少し詳細を知りたくなった。

armbianのインストールで盛大にはまる

2018年の10月30日にNanoPi NEO2にarmbianをインストールし始めたのだが、初日から盛大にはまってしまった。

書き込み用のイメージは月曜日にダウンロードしていて、「Armbian_5.65_Nanopineo2_Debian_stretch_next_4.14.78.img」がDebianの最新なので、これをSDカードに書き込んだ。そのSDカードをスロットに差し込んで、電源を入れると、DHCPIPアドレスを取得したようなので、そのIPアドレスsshで接続すると、root/1234でログインできた。で、早速rootのパスワードの変更を促されるのだが、そこで新しいパスワードを入れると、接続が切られてしまう。何回か繰り返して試したが、毎回同じ動作なので、出だしの所ではまってしまったことになる。別なSDカードがあったので、それを試したが、全く同じ状態だ。同様の問題がないかと検索すると、以下のページを見つけた。

Initial login (via SSH) can't set password - SD card and PSU issues - Armbian Community Forums

どうやらSDカードがダメなのではと想像しているのだが、このSDカードはブートでしか使わない予定なので、新しいカードを買うのもためらわれる。それで何か回避策はないかと、SDカードの中身をLinuxマシンにつないで見るみると、/rootには以下に.not_logged_in_yetという名前のファイルがある。いかにもそれっぽい名前なので、とりあえずこれをリネームして、x_not_logged_in_yetにして、立ち上げてみた。そうすると、パスワードの変更の所で接続が切れなくなった。理由は全く不明だ。

次にSDカードのファイルシステムをHDDにコピーする必要があるのだが、armbianではnand-sata-installというコマンドで、この作業を実行していくれるということがarmbianのドキュメントのページに書いてあるので、実行してみた。だが、ファイルシステムのコピーの所でこれまた接続が切れてしまう。これも何回か試してみたが同じなので、マニュアルでファイルシステムのコピーをした。

最近のu-bootは非常に柔軟にできており、/boot/armbianEnv.txtにrootdev=というパラメータがあり、ここにUUID=XXXXXXXX-YYYY-ZZZZ-WWW-AAAAAAAAAというように、rootデバイスになるディスクのパーティションのUUIDを書き込んでおくと、そこから起動してくれるようだ。そこで、HDDの第一パーティションのUUIDを書き込んで、リブートすると、希望通り、HDDからブートしてきた。ここまで、問題があったものの何とか設定できた。この後色々設定を変えたり、ffmpegコンパイルしてみたり、5~6時間ぐらい動作させたが、予期せぬ接続断やリブートはなかったので、今日の作業はここまでにしようと思い、最後にリブートして、まだちゃんと立ち上がって、ログインできるかどうか確認しようと思った。いざ実行したみると、HDDから立ち上がってこない。pingにも応答しない。

しかたがないので、SDカードにrootdevを元に戻して、立ち上げると、これは大丈夫。起動してきて、ログインできる。そこで、rootdevをHDDに変えると、ログインできない。ファイルシステムは壊れていないだろうという、希望的観測のもと、/etc/fstabが悪いのではないかと推測して、これをいろいろ修正しながら、試していると、nodiratimeと書くところを、一行だけnodirtimeになっている行があり、それが原因で、立ち上がらなかったようだ。でも、指定ミスをしていたパーティションは作業用のディレクトリで、rootdevのパーティションじゃないのだが、一つでもおかしいと、そこでブートプロセスが止まるようだ。初めて知った。このリカバリー作業に1時間半も費やしてしまった。

2018/11/6追記
ようやくサーバー群をインストールし、設定も終えて、だいたい環境設定も完了に近づきてきたのだが、カーネルがクラッシュし、再起動されることが頻発するようになった。最初に気付いたのはaptitude実行時に処理が止まった時で、

Unable to handle kernel paging request at virtual address 20be0f0020be2f

と出ていて、更にこの下に、

Modules linked in: zram sun8i_codec_analog snd_soc_core snd_pcm_dmaengine snd_pcm sun4i_gpadc_iio snd_timer iio_hwmon industrialio usb_f_acm u_serial g_serial libcomposite uas sunxi usb_hdrc

とあったので、zramが何か悪さをしているのかと思って、zramを無効にした。しかし、使っているとやっぱり再起動するので、さらにpaging関係の設定を見ていると、/etc/sysctl.confにvm.swappiness=100となっており、そんなに責めなくてもと思い、小さな値にしたが効果なし。で、よーく見ると、実メモリは1GBなので、スワップに1GB割り当てていたつもりが、907MBしか割り当てられておらず、「これか?」と思い、割り当てサイズを大きくしてみた。一見安定したように見えたのだが、やはり数時間すると再起動してしまう。armbianではなく、friendlyarm提供のlinuxを試してみるか。

2018/11/8追記
http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO2を見ると、ubuntuベースのlinux (nanopi-neo2_sd_friendlycore-xenial_4.14_arm64_20181011.img)があるので、これを試してみた。しかしこれもサーバー類を設定していくとやはり再起動してしまう。一つ気づいたのは、何やら変なパケットを受信した後に再起動しているように見えることだ。例えば、こんなパケット。

[ 1059.493645] dwmac-sun8i 1c30000.ethernet eth0: len 2032 larger than size (1536)
[ 1059.677500] dwmac-sun8i 1c30000.ethernet eth0: len 1677 larger than size (1536)
[ 1059.762794] dwmac-sun8i 1c30000.ethernet eth0: len 1665 larger than size (1536)
[ 5303.596996] dwmac-sun8i 1c30000.ethernet eth0: len 1667 larger than size (1536)

それともう一つ気づいたのは、100%の確信はないが、tinyproxyを動作させると再起動するようになるということだ。現在tinyproxyを止めて様子を見ている状態だったが、やはり再起動してしまった。なので、関係ないのだろう。どうしたものか。