Mastodon on Clear Linux(2)
旗を英語流に言えば、フラグ。ソフト屋さんなならお馴染みのフレーズだろう。オイラーが 初めてこの言葉に接したのは、就職してからだった。
オイラーはハード屋、同期はソフト屋に配属。仕事を終わって呑みに誘いにマシンルームに 行くと、同期はまだ仕事中。もうちょっとで終わるから待っててね。
手持ち無沙汰のオイラーは、備え付けのソフトのマニュアルを眺めていたよ。開いた所が、 アキュムレータに入ってる文字コードをTTY(ASR33)に出力しましょって言う、演習の所。
どんどんデータを送り出しても、タイプライターがそれに付いてこれない。だから、データを 送り出した後、1文字印字が完了しましたって言う目印の旗が上がるのを待ちましょう、てな 事が書かれていた。で、この旗の事をフラグと言うってのを初めて知った次第。 懐かしい思い出だ。あの時の同期は、今何をしてるだろう?
『国旗で知る国際情勢』(原書房)なんて本を読んだおかげで、旗->フラグって言う連想が働いて 出てきたんだな。
旗もエゲレスの海軍だと、ユニオンジャックと言うそうな。軍艦の舳先にかかげる旗を、敬意を 込めてて、こう呼ぶそうな。
国旗の掲揚は、その手順がしっかり法律で決められているとか。折り方まできちんと決まってる と言うから驚き。国旗を大事にするアメリカならではの事だな。
国旗を掲揚するマストのギネス記録は、サウジアラビアにある170Mのものだそうだ。かかげる 旗の大きさは、長さ49M、幅33M、重さ570Kgとか。羽生の鯉のぼりも真っ青な代物。国威を 示すには、こういう事をやる訳だ。
旗とはちょっと異なるけど、かの昔海外出張で利用したJAL。鶴のマークの日本航空って事で、 トレードマークになってた。オイラーはこのマークが日の丸に見えてしょうがなかったぞ。 一人、異国で日本を求めていたのかも知れんな。
全世界の国旗一覧これを、機械学習させたら、正しくクラスタリングしてくれるだろうか?
暇なひと、やってみてね。
米国の州の国旗で、ハワイだけが、英国のかげを 引きずっているのは、歴史的経過があるって同書には解説があったな。
国旗の一覧によると、パラオとかバングラデシュは、日本と同じクラスターになるな。
diff
マストドンのソースツリーの中に、似たような内容のファイルが有る。何処が違うんだ? 特に、.env.nanoboxって名前に惹かれるんだ。構成がナノサイズ? だったら試すにはうって つけと思ったから。
差を見るなら、diffで決まりなんだけど、生憎オイラーのclearLinuxには入っていない。 devバージョンを入れるとやってきそうなんだけど、余計なものがごっそり付いてくる。
このご時世、diffと言ったら、git diff しか使わなくなったから、basicなバンドルでは 入って来ないと思われ。
こういう時は、emacsで何とかならないか? 調べたらediffってのがある事が分かった。 lispででも書いてあるのかな? 喜びいさんで起動したら、バックエンドにdiffが入って ないんで、いかんともしがたいですって言われた。ediffってのは、(差分の)色付け機能 しかない、こけおどしなのね。残念。
で、困った時はpythonって誰かが言ってたので、当たってみたよ。 そしたら、 difflib — 差分の計算を助ける なんてのを発見。巻末にこのライブラリィーを使ったアプリが載ってた。あなたのPythonにも Tools/diff.pyに有りますよってさ。そんなの無かったぞ。自分でコンパイルした場合は、toolsが入るのね。しょうがないので、コピペ。
[clr mastodon]$ diff usage: diff [-h] [-c] [-u] [-m] [-n] [-l LINES] fromfile tofile diff: error: the following arguments are required: fromfile, tofile
説明でfromfileとtofileって出てくるけど、diffの目的を知らないと、戸惑うぞ。 あ、オイラーは、そんなやわではありません。悪しからず。 fromのファイルをtoのファイルに変更するには、どこをどう切り貼りしたら良いか、教えて くれる、有難い道具なのさ。
[clr mastodon]$ diff -u .env.nanobox .env.production.sample --- .env.nanobox 2017-06-11T14:47:33.277777+09:00 +++ .env.production.sample 2017-06-11T14:47:33.278777+09:00 @@ -1,21 +1,19 @@ # Service dependencies # You may set REDIS_URL instead for more advanced options -REDIS_HOST=$DATA_REDIS_HOST +REDIS_HOST=redis REDIS_PORT=6379 -# REDIS_DB=0 - :
これで、目的達成。
で、一つ思い出した。困った時のgauche頼みってのを。確か、diffに使える材料が有ったはず。
text.diff - テキストストリームの相違点を計算する
やっぱり有った。さすがshiroさん。こうなると、rubyには同様なツールが有るか調べたいじゃ ないですか。調べたら、残念ながら無かった。だから、過疎ってしまうのね。 Rubyはデータサイエンスで生き残れるかこういう記事も書かれるぐらいですから、深刻。誰か、救いの手を!!!
で、登場したのが、マストドンだな。これって、Railsで出来てる。Railsの土台はruby。 みんなで、マストドンを建てると、rubyが人知れず使われるわけだ。さっぱりrubyは表に出て こないけど。
マストドンを飼育して変わった事
下記、virtualBoxで動いてるClearLinuxの、メモリー状態
sakae@clr:~$ free -h total used free shared buff/cache available Mem: 3.9G 66M 3.2G 704K 582M 3.6G Swap: 0B 0B 0B
こちらは、VMWareに入れたClearLinux、マストドンがOS起動時から、勝手に活動中。
[clr ~]$ free -h total used free shared buff/cache available Mem: 3.8G 495M 2.7G 13M 684M 3.1G Swap: 0B 0B 0B
そして、NICも何やら増えてるぞ。
4: br-d9cb83e57dd5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue sta te UP group default link/ether 02:42:a9:8c:bd:ab brd ff:ff:ff:ff:ff:ff inet 172.18.0.1/16 scope global br-d9cb83e57dd5 valid_lft forever preferred_lft forever inet6 fe80::42:a9ff:fe8c:bdab/64 scope link valid_lft forever preferred_lft forever
この他に、IPv6のNICが5枚、生えていた。
How to use
マストドンの始め方。アカウント登録から,はじめての「トゥート」まで
通常なら上記のようにすればいいんだけど、メール関係が何も設定してないんで、アカウントの 登録メールが飛ばない。
従って、上記を参考に、マニュアルで、ユーザー登録する。パスワードは8文字以上必要とは、 時代の要請だな。
[clr mastodon]$ docker-compose run --rm web rails mastodon:confirm_email USER_EMAIL=sa@freebsd.org Starting mastodon_redis_1 ... done Starting mastodon_db_1 ... done Updating permissions... Executing process... sa@freebsd.org confirmed
メアドは架空なんだけど、偉そうにしたぞ。登録するのに結構時間がかかる。permissionsの 所で、さっぱり先へ進まないので、何かしくじったかと、プチ心配になった。
次は、管理者の設定
[clr mastodon]$ docker-compose run --rm web rails mastodon:make_admin USERNAME=sakae Starting mastodon_db_1 ... Starting mastodon_redis_1 ... done Updating permissions... Executing process... Congrats! sakae is now an admin. \o/ Navigate to http://mastodon.rootlinks.net/admin/settings/edit to get started
こちらは、さっと終了した。 管理画面に行くには、管理者でログインした後、上記のURLをアクセスするとな。 ってか、ユーザー設定をクリックして、左下にある管理を選べば、admin/settings/editへ 行くじゃん。これは、管理者の権利を持ってる人の特権だろうね。 (特権が無い、ユーザーを作って、挙動を確認すると言う、diff仕事だな)
停止は下記のようにする。起動は、startだな。
[clr mastodon]$ docker-compose stop Stopping mastodon_streaming_1 ... done Stopping mastodon_sidekiq_1 ... done Stopping mastodon_web_1 ... done Stopping mastodon_db_1 ... done Stopping mastodon_redis_1 ... done
停止したら、使用メモリーも、がくんと減った。NICもIPv6の5枚が消えた。
[clr mastodon]$ free -h total used free shared buff/cache available Mem: 3.8G 185M 2.2G 760K 1.4G 3.4G Swap: 0B 0B 0B
管理方法
mastodonの調査(特徴・起動・APIアクセスなど)メモ
Mastodon を CentOS にインストールする (Docker未使用)
管理者画面に、PgHero なんてのが有って、アクセスしてみると、どうもDBの状態をモニター するような雰囲気。知らない事は知るチャンスとばかりぐぐったら、 Mastodonを支えるgems なんてのに出会った。オイラーと同じ匂いを発散する人がいて、ほっとしてますよ。 そうでなきゃ、ただプラモデルを組み立てて、わーい動いたって喜んでいる、餓鬼っちょですからね。
サイドキックなんていうモニター画面も出てくるなあ。メール関係の何かかしら? メールの再試行で失敗したって出てる。メールキューに溜まったものを、昔はよく手動で 送り出したものだ。現在は、監視員が居て、勝手にやってくれるのか。
遺跡調査
上でマストドンの設計図を検証する試みが、全国的に行われているようだけど、オイラーは まず、足を使って、住処の調査をしてみます。ドッカーの壁を越えて、生息地へ行くのが 一番だと思うけど、まずは安全地帯で、予備調査。
ドッカーの史跡と言うかレプリカは、調査の結果、下記にある事が判明しました。
[clr docker]# cd /var/lib/docker/overlay/ [clr overlay]# ls | head -3 086580031c963ed77bb83e146e6c657fed16d49c53071b0b7452f1947a123f55 08e19ec72dcdc17f9b6e2c2321db8d2e7377f6e941976af12cd6fe054630a5f0 0e91393427b9e67ca2e152cb59627d3d43a34e3c0ae54328398f63d06dfb0756
最近は、こういうのばっかり。gitを発明した人が、内容のハッシュをファイル名にするって アイデアを考え付いたんで、誰も彼も真似してる。まあ、近づくなってにおいがプンプンと 漂ってきます。
でも、これにひるんでは、調査隊の名が廃るってもんです。文明の利器、treeが有るでしょ。 これを使って、軽く掘り返してみます。無暗に掘り返すのは、具の骨頭。一番資料が豊富 そうな所を(現代では、人工衛星からリモートセンシングで)あらかじめ、調べておきます。
[clr overlay]# du -s * | sort -n : 48032 ccf69cf558c47e3acf192b014941577ef54b6e4331353213a9c6665b03bb6eeb 663256 595b75364f765dbc464b3e2f6f9e9f077b6f0a72dffbce3a3376aaf1d6c07abf 663476 1b7c69def7861790071f5741a26fb64fa627bca7bfb4328d24d14949a60393d2 663488 e7eff821cd0cfa6a0dfa088550ddb5df97a3ac44403650ce1bbef6637aec7f76 1652660 086580031c963ed77bb83e146e6c657fed16d49c53071b0b7452f1947a123f55
[clr overlay]# tree -d ├── 086580031c963ed77bb83e146e6c657fed16d49c53071b0b7452f1947a123f55 │ └── root │ ├── bin │ ├── mastodon │ │ ├── app │ │ │ ├── controllers
どうも、これっぽいので、少し詳細に見てみます。
[clr overlay]# cd 086580031c963ed77bb83e146e6c657fed16d49c53071b0b7452f1947a123f55 [clr 086580031c963ed77bb83e146e6c657fed16d49c53071b0b7452f1947a123f55]# cd root [clr root]# ls bin etc lib mastodon mnt root sbin sys usr dev home linuxrc media proc run srv tmp var
alpine linux のroot配下に、mastodonの住処が見つかりましたよ。詳細を調べたわけでは ないけど、gitで取ってきたものが、そのまま持って行かれたようです。
潜入捜査の代わりに...
上では、マストドンの活動エリアを見た。でも、生きた証は何処にもない。生きてる証拠は 活動中のプロセスに現れるので、それを調べればよいな。
そんなの、pstreeで、芋づる式に、連鎖が分かるでしょ。その通りなんだけど、オイラーの 狭い画面に収まらないんだ。(何てったって、大型哺乳類ですから)
そこで、CUIの技を使って、プロセス採取。後は、勝手に、頭の中で連鎖を作ってください。 これが、博士の生きる道。 マストドンが動き回っている時のプロセスを採取。 次にマストドンを眠らせてプロセスを採取。
[clr mastodon]$ ps -awxo pid,ppid,cmd > /tmp/start.log [clr mastodon]$ docker-compose stop : [clr mastodon]$ ps -awxo pid,ppid,cmd > /tmp/stop.log
差分を取れば、マストドンが動いてる時のプロセスが分かる。diffした時、冒頭にマイナスが 付くのが、無くなった(プロセス)やつなんで、容易に分かる。
[clr tmp]$ diff -u start.log stop.log | egrep '^-' - 1270 2 [kworker/0:3] - 1295 386 docker-containerd-shim 4c69 /var/run/docker/libcontainerd/4c69 docker-runc - 1303 386 docker-containerd-shim cb26 /var/run/docker/libcontainerd/cb26 docker-runc - 1325 1295 postgres - 1328 1303 redis-server - 1438 386 docker-containerd-shim a545 /var/run/docker/libcontainerd/6545 docker-runc - 1439 1325 postgres: checkpointer process - 1440 1325 postgres: writer process - 1441 1325 postgres: wal writer process - 1442 1325 postgres: autovacuum launcher process - 1443 1325 postgres: stats collector process - 1460 1438 /sbin/tini -- bundle exec sidekiq -q default -q mailers -q pull -q push - 1520 365 /usr/sbin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 3000 -container-ip 172.18.0.5 -container-port 3000 - 1531 365 /usr/sbin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 4000 -container-ip 172.18.0.6 -container-port 4000 - 1536 386 docker-containerd-shim 437b /var/run/docker/libcontainerd/437b docker-runc - 1548 386 docker-containerd-shim 4e18 /var/run/docker/libcontainerd/4e18 docker-runc - 1564 1536 /sbin/tini -- bundle exec rails s -p 3000 -b 0.0.0.0 - 1579 1548 /sbin/tini -- npm run start - 1653 1460 sidekiq 5.0.0 mastodon [0 of 5 busy] - 1663 1564 puma 3.8.2 (tcp://0.0.0.0:3000) [mastodon] - 1666 1579 npm - 1677 1666 sh -c rimraf ./tmp/streaming && babel ./streaming/index.js --out-dir ./tmp && node ./tmp/streaming/index.js - 1706 1325 postgres: postgres postgres 172.18.0.5(47882) idle - 1707 1325 postgres: postgres postgres 172.18.0.4(33578) idle - 1708 1677 node ./tmp/streaming/index.js - 1714 1708 /usr/bin/node /mastodon/tmp/streaming/index.js - 1721 1663 puma: cluster worker 0: 9 [mastodon] - 1731 1663 puma: cluster worker 1: 9 [mastodon] - 1816 2 [kworker/0:1]
コンテナーの所は、引数が非常に長いので端追ってます。
3つの疑問
1) データベースが2種類使われているけど、それは何故? 2) 秘密の呪文を3種類作っているけど、その使用目的は? 3) Clear Linux園の開園と共に、マストドンが活動を始めているけど、その仕掛けは?
まだ、他にもあるけど、余り間口を広げても、あれなんで、これで許したる。
1)は、自分の予想では、postgresの方をエピソード記憶に使い、redisの方を短期記憶に 使ってると思った。最近、『心は数式で表せるか』なんていう脳科学の本を読んだんで、 その影響を受けた思考? どんどんやってくる吠え声を小大漏らさず記憶するに、redisを 使用。後はゆっくりと、postgresで記憶って寸法。なにそれ? コンピュータの記憶階層 じゃないですか。キャッシュと二次記憶?
違った、先人の解析によれば、redisを、mailqのスプール代わりに使っているそうな。 なる程、メールを送り出してしまえば後は用が無くなるんで、気兼ねなく削除出来る。 まあ、これを捉えて、短期記憶と言い張れない事はないな。あれ、馬鹿でかい映像系の 記憶はどうしてる?
オイラーの予想では、ファイル名をキーに、映像実態をファイルにして、特定Dirを 置き場にしてるんだろう。unixのdir管理が、同名ファイルの登録を防止してくれるからね。 まあ、人間が考えたファイル名の採用を止めて、得意のhashをファイル名にすれば、衝突は ほぼ皆無だからね。ユーザーが思いついたファイル名とhash名の対応は、postgresに入れて いるんだろうね。
2)の、秘密の呪文は、どこで使われてるか調べるのが先決だな。例えば、最初の呪文は
[clr mastodon]$ grep PAPERCLIP_SECRET -r * app/models/import.rb: has_attached_file :data, url: '/system/:hash.:extension', hash_secret: ENV['PAPERCLIP_SECRET'] app.json: "PAPERCLIP_SECRET": { scalingo.json: "PAPERCLIP_SECRET": {
レールで、モデルの所か、レールは出た時にやった(そして失敗した)だけなんで、知識が 全く欠乏してる。復習しないとダメだな。
app.jsonに、多少の説明が有った。
"PAPERCLIP_SECRET": { "description": "The secret key for storing media files", "generator": "secret" }, "SECRET_KEY_BASE": { "description": "The secret key base", "generator": "secret" }, "OTP_SECRET": { "description": "One-time password secret", "generator": "secret" },
上で挙げた資料を見てたら、3)に該当するのは、
サービスの起動と自動起動設定 systemctl start mastodon-{web,sidekiq,streaming} && systemctl enable $_
コンポーズコマンドに、
[clr mastodon]$ docker-compose ps Name Command Stat Ports e ------------------------------------------------------------------------------- mastodon_db_1 docker-entrypoint.sh Up 5432/tcp postgres mastodon_redis_1 docker-entrypoint.sh Up 6379/tcp redis ... mastodon_sidekiq /usr/local/bin/run Up 3000/tcp, 4000/tcp _1 bundle ... mastodon_streami /usr/local/bin/run npm Up 3000/tcp, ng_1 run ... 0.0.0.0:4000->4000/tcp mastodon_web_1 /usr/local/bin/run Up 0.0.0.0:3000->3000/tcp, bundle ... 4000/tcp
この他にも、logsだとか、restart、ドッカーに飽きた時のために、downなんてコマンドが 用意されている。
etc
ClearLinuxをVMwarePlayerにインストールする
Clear Linuxって、日本では人気が無いのね。上記ぐらいしか出てこないぞ。結構良いOSだと 思うんだけどなあ。