bash on XXXX on docker on ...

『朝2時起きで、なんでもできる』(サンマーク出版)なんて本が有ったので、読んでいる。 オイラーは早くても3時起きだから、上には上が居るなと、感心しつつ手にしたんだ。

口の悪い人は、早起きするのは年寄りになった証拠と言うけど、この本を読んで、決して そんな事は無いと知った次第。

著者は、3歳児のおかあさん。家事に育児に夫の世話と、自分の時間が持てずにイライラ。 夫のアメリカ転勤に同行し、2年間と言う期限の中で、同時通訳を目指して自己学習。 どうしても自分の時間欲しい。

子供に添い寝してるうちに寝てしまった。夫の帰宅でまた起き出して世話? 寝起きが 悪い。だったら、夫には申し訳ないけど、ぐっすり添い寝して、朝2時に起きれば、睡眠 時間は6時間は確保出来るじゃん。(良い子は8時就寝だからね)

こうして、自分だけの時間を手に入れた。家族が7時に起きてくるとしても、誰にも 邪魔されずに、自分だけの時間を5時間は確保出来る。

この間に、メールを書いていたりしたら、発信時刻は朝の3時とか4時。そういう生活を 知らない先方(仕事のクライアント)は、水商売の人と誤解してたとか。

著者は、人は人、自分は自分。世間の風評なんか気にしてたら何も出来ないと、悟ったとか。 激同意。

オイラーが早起きして嬉しいのは、夏の頃なら、早朝すがすがしい時の散歩。陽が出てくる だけで熱く感じますからね。それに、早朝は道路もネットもガラガラと空いている事。 一度体験すると、もう止められない。

くだらんTVなんてのを見て、夜更かしするなんて、なんともったいない人生だろうと、強く 思う次第。

alpine boot

wikiを見てたら、面白い記事に出会った。

Alpine Source Map by boot sequence

こういう解説が有るって楽しいな。なんか、中の人になれる気分ですよ。(道を踏み外していないか、プチ心配)

BoW

毎度お馴染みの日経Linuxを見てる。Windows10がバージョンアップして、linuxのサポートが 充実したんで、その特集が出てたから。怖いもの見たさ、野次馬根性であります。

生粋のWindowsユーザーが途方に暮れないように親切な説明が載ってた。アップデートされて 機能が充実したのの目玉は、Windows、linuxを問わずアプリが実行出来るようになった事らしい。

M$もlinuxの使いよさに脱帽して、linux陣営の英知を取り入れようという魂胆だな。まあ、 普通の人には、Windowsだろうとlinuxであろうと知ったこっちゃない。思ったアプリが実行 出来れば、それでいいのですから。

オイラーが目を引いたのは、pandocってコマンド。こういうコマンドが有る事を知らなかったぞ。このpandocはhaskellで 書かれたアプリとか。昔のBoWは、システムコールの実装が不十分のため、Haskellが動かなかったらしい。それでM$に圧力がかかり、やっと実装が正され、pandocが動き出したそうだ。

で、機能充実のBoWをやるかと言えば、答えは、NO。メインマシンのWindowsは、触らぬ神に 祟りなしと思っているから。余計なものはなるべく入れない主義です。

だから、ドッカーですよ。

Bash on ubuntu on docker on alpinelinux on VMWAREPlayer on Windows10

これなら、Windowsとは絶縁出来るしね。もし何かあっても、多重に保護されてるから、(多分)大丈夫。

で、前回入れたウブを名前で呼んでみる。

alpine:~$ docker run -it --name=ub ubuntu /bin/bash
root@d5f9b8edeeb3:/#

一度起動しちゃえば、後は名前で呼べるよ。

alpine:~$ docker start -i ub
root@d5f9b8edeeb3:/# pwd

デストリ

リナと一口に言っても、共通するのはカーネルだけ。ユーザーランドはご自由にと言う 競争原理が働いている。色々なアプリを詰め合わせて提供してるのがデストリ。 どんなのが有るかな。

Linuxディストリビューション

チェーン店ですな。debianを元祖とするやつとか、赤帽さんを元祖とするやつ、後は独立系。 スマホとか家電品を選ぶ時に、比較サイトを眺めるのが常識。リナ選びも同様ですよ。

Linuxディストリビューションの比較

DistroWatch.comってのは、女房がよく 見に行くのの姉妹サイトかしらん。

arch linux

系列店のものは、どれを選んでも代わり映えしないので、試してみるなら独立系です。 昔やった万次郎でもいいんですが、それの元祖になったやつを久しぶりにやってみるかな。 ドッカーにも収録されてましたからね。

vcatechnology/archを選んで みたよ。各種デストリで一番差が出るのは、パッケージ管理の部分。どんな風にパッケージを 管理するかと、どんな品を揃えているかだ。後の違いは無いと思って間違いは無い。

すっかり忘れている。 An Arch Linux image which is updated daily とか、 pacman とか、 はじめてのpacmanパッケージ管理ガイドを見て、思い出している所。

[root@c767081e4c12 /]# pacman -Syu
:: Synchronising package databases...
 core                     124.9 KiB   262K/s 00:00 [######################] 100%
 extra                   1682.4 KiB   732K/s 00:02 [######################] 100%
 community                  3.8 MiB  1551K/s 00:03 [######################] 100%
:: Starting full system upgrade...
resolving dependencies...
looking for conflicting packages...

Packages (1) npth-1.4-1

Total Download Size:   0.01 MiB
Total Installed Size:  0.07 MiB
Net Upgrade Size:      0.00 MiB

:: Proceed with installation? [Y/n] y
:: Retrieving packages...
 npth-1.4-1-x86_64         13.6 KiB  0.00B/s 00:00 [######################] 100%
(1/1) checking keys in keyring                     [######################] 100%
(1/1) checking package integrity                   [######################] 100%
(1/1) loading package files                        [######################] 100%
(1/1) checking for file conflicts                  [######################] 100%
(1/1) checking available disk space                [######################] 100%
:: Processing package changes...
(1/1) upgrading npth                               [######################] 100%

一度、必要なものを入れてしまえば、後はSyuするだけで済ますよ。他のデストリはパッケージをDLしてきてインストールするってのが見え見えだけど、archはちと考え方が違う。

何処かに置いてあるパッケージの集積所に、手元の環境を同期させるって考えだ。これ、新鮮と 言うか斬新と言うか、、、。

clearlinux on docker

ドッカーハブのオフィシャルを見ていると、色々なアプリの他に各種OSも列挙されてる。 amazonlinuxなんてのが有って、アマゾン雲を使う練習にして下さいって魂胆が透けて見えるよ。そうかと思うと、oraclelinuxなんてのも有るぞ。これもブランドのDBを使ってもらうための 販促材料だろう。日本贔屓のエリクソンなら、日本からのDLで、olacle12のデータベース ぐらいは添付してよ。そうしないと、日本のユーザーは、オラクルに見切りをつけちゃうぞ。 最近、ぼらくるらしいですからね。

ああ、haskellとかclojureなんてのも公式ドッカーになってるな。ドッカー社なかなか頑張っているぞ。

そして、面白そうなと言うか、オイラーの知らないリナが公式に登録されてた。 Official docker build of Clear Linux OS for Intel Architectureですって。糞石専用のLinuxらしい。 米インテル、今度はOS市場に参入! コンテナ稼働専用Linuxを開発中こんな記事が出てた。 入れてみるか。こういう時は、ドッカーなら手軽に試せますからね。

インテル用語では、パッケージの事をバンドルと言うのか。ああ、パッケージと言うより、 パッケージを論理的にまとめた、メタパッケージなんだな。 詳しくは、 Bundles overviewをミロのビーナスざんしょ。

clear linux on virtuakBox

なかなかclearlinuxが面白そうなので、ドッカー上じゃなくて、普通にインストールしてみたくなった。

インストールに必要なISOファイルが有るかと思ったら、そんな過去の遺物はもうサポート してません。今なら、USBしょって事らしい。

Getting started 詳細なインストール手順は、 Clear Linux host OS install on bare metal を参照。大事な事は、USBからインストールするんで、BIOSの設定をUEFIにしとけって事。 UEFIって、ウィンテルが唱えたboot手順なんで、意地でも使わせようと言う魂胆です。 (古い方法は切り捨て御免ですな。)

上記は、clearlinuxの為にまっさらなパソコンを用意出来る富豪向け。貧乏人は、 バーチャルボックスなりVMWARE Playerを使って、あらかじめ用意したライブイメージを それぞれのdisk形式に変換して使えという、お情けが用意されてます。

んでもって、諸般の事情から、バーチャルボックスへまず入れてみる事にしました。

Using VirtualBox

なお、こちらが他の仮想へ入れる方法です。 Running in virtual environments

VBOXへ入れた場合、VBOXのツールCDを入れると、kernel LTSを使うと、DeskTopのサイズを カスタマイズ出来、広々とした画面で、FireFox等のGUIを楽しめます。(但し、日本語は サポートしてないので、豆腐文字になってしまう)ネイティブなkernelだと、画面サイズが、1024x768に固定です。

どんなカーネルが使われているか、取り合えず確認。

root@clr:~# uname -a
Linux clr-9da243b09dad4005819074560d3b83ea 4.11.3-355.native #2 SMP Wed May 31 22:48:19 UTC 2017 x86_64 GNU/Linux

VBOXを起動してから、プロンプトが出てくるまでの時間が爆速。今までは、ストップウォッチで 時間を測っていたけど、少しは近代的に、dmesgの起動経過時間を見てみます。

まずは、VBOXに入っているdebian様

[debian ~]$ dmesg | tail -2
[   17.996547] IPv6: ADDRCONF(NETDEV_UP): docker0: link is not ready
[   18.130357] aufs au_opts_verify:1570:dockerd[634]: dirperm1 breaks the protection by the permission bits on the lower branch

次は、VMWAREに入っているCentOS。

[cent ~]$ dmesg | tail -2
[   18.773988] Netfilter messages via NETLINK v0.30.
[   18.780233] ip_set: protocol 6

そして、今回VBOXに入れたclearlinus。

sakae@clr:~$ dmesg | tail -2
[    3.425113] e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[    3.425957] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s3: link becomes ready

爆速である。流石、石を弄んでいるインテルだけあるな。

お情けのイメージなんで、使える容量は少な目です。

root@clr:~# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root        5095040 3115972   1700540  65% /
devtmpfs         2019812       0   2019812   0% /dev
tmpfs            2022004       0   2022004   0% /dev/shm
tmpfs            2022004     676   2021328   1% /run
tmpfs            2022004       0   2022004   0% /sys/fs/cgroup
tmpfs            2022004       0   2022004   0% /tmp
clr_debug_fuse   5095040 3115972   1700540  65% /usr/src/debug
clr_debug_fuse   5095040 3115972   1700540  65% /usr/lib/debug
tmpfs             404400       0    404400   0% /run/user/1000

何処でDISKを消費してるか調べてみたら、

root@clr:/var/lib/swupd# du -sh *
10M     15330
732K    15370
3.3M    15390
2.2M    15400
3.7M    15410
14M     15430
4.0K    delta
4.0K    download
0       pack-c-basic-from-0-to-15390.tar
0       pack-cryptography-from-0-to-15370.tar
0       pack-dev-utils-from-0-to-15390.tar
0       pack-kernel-lts-from-0-to-15370.tar
0       pack-libX11client-from-0-to-15330.tar
0       pack-os-utils-gui-from-0-to-15400.tar
0       pack-xfce4-desktop-from-0-to-15330.tar
2.4G    staged
4.0K    swupd_lock
24K     telemetry
4.0K    tmprenamedir
4.0K    version

なんと、パッケージマネージャの作業エリア(?)でした。 特に容量を消費してる、stagedの中に残骸っぽいのが残ってる。

root@clr:/var/lib/swupd/staged# ls | head -3
0001c96b4f79c8ef5e5bb56aea41613069f896f4cce833b8f986820f77904217
000238a6bf54cf80c8f98a7f8952059ec1b13feb3f01b8445c73a3b47d83534b
0003401cbfe11ccf7a73a46b4af132dd87adee4fde8b5f69780485504b4ef03b

内容は、ASCIIファイルだったり、画像ファイルだったり、ライブラリィーだったりと 雑多なもの。消してしまえ。

clojure on docker

上で見つけた、clojure なんてのに反応してみる。これでどうだ。

alpine:~$ docker run -it --name clojure clojure:alpine /usr/bin/clojure
Unable to find image 'clojure:alpine' locally
alpine: Pulling from library/clojure

cfc728c1c558: Pull complete
5b12b87f0a0e: Pull complete
b7d6497a92f9: Pull complete
f1658a217ee3: Pull complete
27fb92513618: Pull complete
a1cbf964559a: Pull complete
Digest: sha256:3e19d2b0e59325f630f43ddd88ee4715702d894ef3893f2d312d68e714c11e4b
Status: Downloaded newer image for clojure:alpine
docker: Error response from daemon: oci runtime error: exec: "/usr/bin/clojure": stat /usr/bin/clojure: no such file or directory.

あらら、clojureなんていうアプリは無いと怒られた。ならば、shellを起動して、内部監査 するか。

alpine:~$ docker run -it --name clojure clojure:alpine /bin/ash
docker: Error response from daemon: Conflict. The name "/clojure" is already in use by container 9de2b80743ce715d67dde950575347512b6d3fa46e8d6c761a0c1a265bbbbe23. You have to remove (or rename) that container to be able to reuse that name..
See 'docker run --help'.
alpine:~$ docker run -it --name clj clojure:alpine /bin/ash
/tmp #

名前が被るといけないのね。別名を付けて、もう一度。

~ # java -version
openjdk version "1.8.0_121"
OpenJDK Runtime Environment (IcedTea 3.3.0) (Alpine 8.121.13-r0)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)
~ # javac -version
javac 1.8.0_121

clojureはJAVAのアプリなんで、土台を確認。勝手に取ってきたんだな。jarファイルが 無いか、家宅捜索。

~ # find / -name '*jar'
/usr/lib/jvm/java-1.8-openjdk/bin/jar
 :
/usr/share/java/leiningen-2.7.1-standalone.jar

関係者発見。もう、clojureを裸で使う事は無いんか。leinから起動させる。

~ # lein repl
Retrieving org/clojure/tools.nrepl/0.2.12/tools.nrepl-0.2.12.pom from central
Retrieving org/clojure/pom.contrib/0.1.2/pom.contrib-0.1.2.pom from central
Retrieving org/sonatype/oss/oss-parent/7/oss-parent-7.pom from central
Retrieving clojure-complete/clojure-complete/0.2.4/clojure-complete-0.2.4.pom from clojars
Retrieving org/clojure/clojure/1.8.0/clojure-1.8.0.pom from central
Retrieving org/clojure/tools.nrepl/0.2.12/tools.nrepl-0.2.12.jar from central
Retrieving org/clojure/clojure/1.8.0/clojure-1.8.0.jar from central
Retrieving clojure-complete/clojure-complete/0.2.4/clojure-complete-0.2.4.jar from clojars
nREPL server started on port 33979 on host 127.0.0.1 - nrepl://127.0.0.1:33979
REPL-y 0.3.7, nREPL 0.2.12
Clojure 1.8.0
OpenJDK 64-Bit Server VM 1.8.0_121-b13
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
    Exit: Control+D or (exit) or (quit)
 Results: Stored in vars *1, *2, *3, an exception in *e

user=> (cons 123 '())
(123)
user=> Bye for now!
alpine:~$ docker start -i clj
/tmp # lein repl
nREPL server started on port 35897 on host 127.0.0.1 - nrepl://127.0.0.1:35897
REPL-y 0.3.7, nREPL 0.2.12
Clojure 1.8.0
OpenJDK 64-Bit Server VM 1.8.0_121-b13
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
    Exit: Control+D or (exit) or (quit)
 Results: Stored in vars *1, *2, *3, an exception in *e

user=> Bye for now!

一応動いたな。でも、replを回すのに一手間かかるな。何とかならんかね?

alpine:~$ cat Dockerfile
FROM clojure:alpine
CMD ["lein", "repl"]

こんなドッカーファイルを作る。内容は、clojure環境を作って、leinをreplを引数として 起動せいという、簡単なもの。

alpine:~$ docker build -t my-clojure-app .
Sending build context to Docker daemon 6.082 MB
Step 1 : FROM clojure:alpine
 ---> 63df96dc3823
Step 2 : CMD lein repl
 ---> Running in bb27ad6fd48f
 ---> 06a505c58170
Removing intermediate container bb27ad6fd48f
Successfully built 06a505c58170
alpine:~$ docker run -it --name lein my-clojure-app
Retrieving org/clojure/tools.nrepl/0.2.12/tools.nrepl-0.2.12.pom from central
 :
user=>

イメージを作って、それにタグを付ける。後は、そのタグで指定されるイメージを起動。

alpine:~$ docker start -i lein

起動時に名前を付けたんで、名前で呼べるよ。

Mastodon on docker

ドッカーの本当の応用は何か? オイラーみたいに、見境なく変なOSを入れる事では無いはず。 そう思って今世間で注目を集めているマストドンとドッカーて組み合わせで、トレンドを 調べてみた。出て来る、出て来る。お手軽にマストドンを飼う方法が。

CentOS7にMastodonをインストールする

Docker環境でMastodonのインストール

Mastodonインスタンス構築(Mastodon)

Raspberry PiでMastodonインスタンスを立てる方法

24時間営業なら、電気を喰わないラズパイっしょってのは、正しい選択だと思うぞ。

ツイターが流行ってフェースブックが流行っていたけど、所詮一社がやってる中央集権。 企業の逆鱗に触れると締め出される。対してマストドンは草の根。個人が勝手に建てられる、 パソ通の進化形。

昔みたいに、データベースを用意する、webサーバーでCGIを考えるなんて事もなく、お手軽 モード全開。せいぜい頑張って、プラモデル作りに励んで下さい。(身も蓋もない結論だな)