Mastdon on Clear Linux
以前、wordの代わりに使えるフリーソフトは無いかと相談を受けた友人から、近況報告が 有った。その友人、会社を退職して悠悠自適な生活を送ってる。
某大学で募集してる、生涯学習講座に申し込みたいんだけど、応募用紙がワードとかで、 難儀したらしい。そんなのワード指定って、何処の馬鹿大学じゃと憤慨しつつ、LibreOfficeで いいんでないかいと提案したのだった。(自分で使った事も無いのに勧めるとは、無責任と 言うのは却下、日経Linuxあたりを信用してますから)
で、報告によれば、無事にワードもどきも受理されて、 『コンピュータで数独パズルは解けるか?』という講座を受けてきたらしい。 平均年齢70歳前後で、中には学生も混じっているらしい。夏の講座が4回だか5回。秋口には 発展コースが用意されているんで、落ちこぼれないようについてきてくださいと言われたとか。
コンピュータとか使う言語はどうするんだろうと思ったら、実習室にあるパソコン利用。 言語は、雲の向こう側にある Wolfram言語というものらしい。mathematicaの親類とか、講師が言っていたらしい。当人は、VBと 一緒じゃんと喜んでいたぞ。楽しい事が一番ですよ。
そんじゃ、オイラーも調べてみるかな。
昔はナンプレとも言っていたようだけど、今は世界中で数独って言葉が通用するみたいだね。
Clear Linux on VMWare Player
前回まで、VBOX上でclearLinuxと戯れていた。大分感触が掴めてきたので、仮想のもう一方の雄である、VMwareでも試してみる事にした。
相変わらずイメージしか提供されていないので、CentOS上で変換した。5Gのイメージを変換 すると1Gになった。これを元に、VMware上で起動。UEFIで起動させるんで、その設定を 間違えなければ、素直に動くはずだ。 Using VMware* Player
で、disk領域は4.9Gと窮屈。Playerにdiskをセットする時に眼にした、DISK拡張ってボタンが 気になる。思わず押してみたぞ。増加出来るみたい。30Gを指定したら、暫く作業が行われて いたな。
後は再起動して、fdiskで、GPTパラメータの矛盾を解消。wコマンドで更新するのね。
[clr ~]# fdisk /dev/sda Welcome to fdisk (util-linux 2.29.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. GPT PMBR size mismatch (10618879 != 62914559) will be corrected by w(rite). GPT PMBR size mismatch (10618879 != 62914559) will be corrected by w(rite). Command (m for help): w GPT PMBR size mismatch (10618879 != 62914559) will be corrected by w(rite). The partition table has been altered. Calling ioctl() to re-read partition table. Re-reading the partition table failed.: Device or resource busy The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).
また、再起動して新しいテーブルを有効化。partedで確認。
Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 17.4kB 1049kB 1031kB Free Space 1 1049kB 67.1MB 66.1MB fat16 primary boot, esp 2 67.1MB 5436MB 5369MB ext4 primary 5436MB 32.2GB 26.8GB Free Space (parted) resizepart 2 End? [5436MB]? 32GB (parted) print Model: ATA VMware Virtual S (scsi) Disk /dev/sda: 32.2GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 67.1MB 66.1MB fat16 primary boot, esp 2 67.1MB 32.0GB 31.9GB ext4 primary (parted) q Information: You may need to update /etc/fstab.
resizerpartとか言うコマンドを、一か八か実行してみた。(インストール直後だから、失敗 しても失う物は何も無い。強気で賭けに出られるよ)で、どうやら、後ろに有った空スペースと 合体してくれたみたい。
次は、resize2fsってコマンドで、生きたままのファイルシステムをリサイズ。これも、 やぶれかぶれの戦法だな。
[clr ~]# resize2fs /dev/sda2 resize2fs 1.43.4 (31-Jan-2017) Filesystem at /dev/sda2 is mounted on /; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 4 The filesystem on /dev/sda2 is now 7796116 (4k) blocks long.
ブロックサイズが大きなものに変更されたようだ。こういうファイルシステムには、ちまちま したファイルがごっそり有るのは似合わないはずだ。なんて雑念が浮かんできたぞ。
で、拡張された証拠。
[clr ~]$ df -ht ext4 Filesystem Size Used Avail Use% Mounted on /dev/root 30G 1.9G 27G 7% /
docker
[clr ~]# swupd bundle-add containers-basic [clr ~]# systemctl start docker [clr ~]# systemctl enable docker [clr ~]# ls -nl /var/run/docker.sock srw-rw---- 1 0 202 0 Jun 10 15:44 docker.sock [clr ~]# vi /etc/group # Gen group file docker:x:202:sakae [clr ~]# pip3 install docker-compose
グループファイルはデフォでは無し。で、docker.sockからGIDを割り出して、定義を追加。 こうしておくと、オイラーのidでも、ドッカーを扱えるようになる。 何故ドッカーなんて入れた? 現代風掲示板をやってみたいから。
一応、今のClearLinuxの環境。
[clr ~]# swupd bundle-list swupd-client bundle list 3.9.3 Copyright (C) 2012-2016 Intel Corporation sysadmin-basic bootloader python-basic web-server-basic network-basic c-basic dev-utils kernel-native containers-basic openssh-server perl-basic os-core os-core-update editors Current OS version: 15770
web check
もう少し、準備と言うか確認。VMwareに建つWebサーバーにWindows10からブラウザーで アクセス出来るのか? 大前提の確認。
適当に、htmlが有る所を探したら、libxmlが見つかった。で、そこに移動して、python備え付けのサーバーを起動。ポートも指定出来るんだけど、デフォは、8000らしい。
[clr ~]$ cd /usr/share/doc/libxml2-2.9.4/html/tutorial [clr tutorial]$ python3 -m http.server Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ... xxx.xxx.xxx.1 - - [11/Jun/2017 06:33:07] "GET /ar01s06.html HTTP/1.1" 200 -
備え付けのブラウザーって事で、emacsのそれを思い出した。
emacs M-x eww http://localhost:8000/
やってみたら応答無し。どうもこのブラウザーは、ネット検索したURLをブラウズするのが 目的なようで、ローカルなURLには、未対応っぽい。(ちゃんと調べていないので嘘かも)
で、主目的な、Windows10側からアクセス。xxx.xxx.xxx.123は、ClearLinuxのIP addressです。
http://xxx.xxx.xxx.123:8000/
最初はエラーだったけど、xxx.1というVMwareが用意したネットのデフォルトルーターが アクセスして、無事にhtmlを参照出来た。
開発用ローカルサーバを立ち上げる方法こちらを参照すると、rubyとかでもサーバーを建てられるんですね。すっかり忘却の彼方ですよ。
Mastodon
いよいよ、現代風の掲示板である、マストドンである。 オイラーの理解では、rubyを土台にしてレールを引く。フロントエンドのWebはapacheなりnginxなり好きなのを使ってくれ。バックエンドのデータベースは、諸般の事情からPostgresDBを 使うとな。 レールの上を、データが右往左往する訳だ。こんな雑な理解で宜しいかな。
Docker環境でMastodonのインストール (こちらに倣って、やってみます)
CentOS7にMastodonをインストールする(参考に させてもらいました。)
まずは、マストドンを取ってくる。
[clr ~]$ git clone https://github.com/tootsuite/mastodon.git [clr ~]$ cd mastodon/ [clr mastodon]$ ls -a . docker_entrypoint.sh .gitignore README.md .. Dockerfile .haml-lint.yml .rspec app .dockerignore ISSUE_TEMPLATE.md .rubocop.yml app.json docs lib .ruby-version Aptfile .editorconfig LICENSE scalingo.json .babelrc .env.nanobox log .scss-lint.yml bin .env.production nanobox .slugignore boxfile.yml .env.production.sample .nanoignore spec .buildpacks .env.test .nvmrc storybook Capfile .env.vagrant package.json streaming .codeclimate.yml .eslintignore .postcssrc.yml .travis.yml config .eslintrc.yml Procfile Vagrantfile config.ru .foreman Procfile.dev vendor CONTRIBUTING.md Gemfile .profile yarn.lock db Gemfile.lock public docker-compose.yml .git Rakefile
多分、Railsとかの仕様書になる、.env.production を編集して、実行
docker-compose build : Step 13/13 : ENTRYPOINT /usr/local/bin/run ---> Using cache ---> 54ddc617b0e8 Successfully built 54ddc617b0e8 Successfully tagged gargron/mastodon:latest
alpineLinuxを入れて、パッケージを入れて、gemとかnode関係のコンパイルが実行されるんで CPUパワーと時間がかかったぞ。
[clr mastodon]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE gargron/mastodon latest 54ddc617b0e8 4 minutes ago 1.34GB ruby 2.4.1-alpine 3db0e32b7207 12 days ago 61.1MB
ふーん、rubyの環境とその上で動くmastodonのイメージが出来上がった。
次は、シークレットキーを3種作って、.env.productionのそれぞれの場所に登録するとな。 同じコマンドを与えているのが不思議
[clr mastodon]$ docker-compose run --rm web rake secret : Executing process... 7dbab3bbcddd28cfd8aae8ea4f6be8fb2706eb42d281312549ade2f051693f60689cc38a80365115f68924aa6012aa6022e0d43cb5d740099a6ad992412fecac
[clr mastodon]$ docker-compose run --rm web rake secret Starting mastodon_redis_1 ... done Starting mastodon_db_1 ... done Updating permissions... Executing process... 1637f244130b0496de6b84f71fd5606966a0d3f95720746bfde2363073be488fe9cd2c37501750b87140bdbd514de2d6b2dfeea988827d2aeee16f76654fa422
[clr mastodon]$ docker-compose run --rm web rake secret 07c8913833896fe7658c3231e5abe43a3a09f30b260a8c420c3a3c3de498132982fa2dfd4d63ce8cf24b4ca358fe18858c3fdb104f921806e2c4063e84d8967a
データベースを作るそうな
[clr mastodon]$ docker-compose run --rm web rake db:migrate : -- add_index(:users, :filtered_languages, {:using=>:gin}) -> 0.0028s == 20170611145338 ChangeLanguageFilterToOptOut: migrated (0.0208s) ============
大事なものはプリコンパイルしとくそうだ。ここでもネットからnodeのモジュールとかを 落としてきて、何やらコンパイルしてた。結構時間がかかる。
[clr mastodon]$ docker-compose run --rm web rake assets:precompile
データベースのイメージが増えてた。redisって、前回予習しておいたメモリー展開される 高速なキーバリューストアじゃないですか。
[clr mastodon]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE gargron/mastodon latest 54ddc617b0e8 37 minutes ago 1.34GB ruby 2.4.1-alpine 3db0e32b7207 12 days ago 61.1MB postgres alpine 4ddf1c7ef6b3 12 days ago 37.7MB redis alpine da2b86c1900b 13 days ago 19.8MB
いよいよ起動。動き出すまで、結構時間がかかる。
[clr mastodon]$ docker-compose up :
Windows側から、http://xxx.xxx.xxx.123:3000/about でアクセス出来た。
裏では、ドッカーの彼方で、色々動いているな。
[clr mastodon]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f0337591463b gargron/mastodon "/usr/local/bin/ru..." 13 minutes ago Up 13 minutes 3000/tcp, 0.0.0.0:4000->4000/tcp mastodon_streaming_1 bf25d0ed6fce gargron/mastodon "/usr/local/bin/ru..." 13 minutes ago Up 13 minutes 3000/tcp, 4000/tcp mastodon_sidekiq_1 3dc5f71c1b55 gargron/mastodon "/usr/local/bin/ru..." 13 minutes ago Up 13 minutes 0.0.0.0:3000->3000/tcp, 4000/tcp mastodon_web_1 81d4316f9d63 postgres:alpine "docker-entrypoint..." 44 minutes ago Up 44 minutes 5432/tcp mastodon_db_1 4618ad275e49 redis:alpine "docker-entrypoint..." 44 minutes ago Up 44 minutes 6379/tcp mastodon_redis_1
停止する時は、以下のようにするとな。
[clr mastodon]$ docker stop $(docker ps -a -q) f0337591463b bf25d0ed6fce 3dc5f71c1b55 81d4316f9d63 4618ad275e49
再起動は、
docker stop $(docker ps -a -q) && docker-compose up -d
運用
user登録
$ docker-compose run --rm web rails mastodon:confirm_email USER_EMAIL=mastodon@mail.address
admin登録。ユーザー登録されてる人が管理者になれるとな
$ docker-compose run --rm web rails mastodon:make_admin USERNAME=mastodon Congrats! mastodon is now an admin. \o/ Navigate to http://mastodon.rootlinks.net/admin/settings to get started
.tmux.conf
前回、tmuxを起動した端末でバックスクロールをどうする? そんなのemacsのeshellで いいじゃんと、投げやりな解決をしたけど、それじゃあんまりだ。意欲的にtmuxを 調べてみた。
バックスクロールは、コピーモードと呼ばれる中で実現されるとな。コピーモード中の 指使いには、vi式とemacs式のどちらかを指定する。オイラーは迷わずemacs式。 遡れる行数は、履歴制限で指定するとな。
set -g prefix C-t unbind C-b bind C-t send-prefix set-window-option -g mode-keys emacs set-option -g history-limit 2500 set -g bell-action none bind-key -T prefix Space next-window # PREFIX + : set status off # PREFIX + [ enter copy mode, q to exit copy mode
コピーモードに入ったら、emacsのキーバインド(ex. C-v, M-v)で、バックスクロールとか が出来る。モードを抜けるには、q キーとな。
ログイン時から、tmuxが起動するように、.profileに、tmux -u と書いておいた。-uは、utfな端末って指定だ。これを書いておかないと、日本語が文字化けする。
指使いで困った時は、REFIX ? で、キーバインドが出て来る。この表示もコピーモードが使われているので(このモードの時は、画面右上に、[0/331]とか出る)、縦横無尽に参照出来るぞ。
stack haskell 用の開発環境
(package-install 'intero) (add-hook 'haskell-mode-hook 'intero-mode)
たったこれだけを、init.elに書いておくだけど、stack環境のhaskellをemacsから 使えるようになるとな。
初回は、必要なものを取ってきてコンパイルをするんで、待たされるけど、次回からは 快適に使える。(interoモードに必要なモジュールは、.stack内に保存されたのが利用される。)