Mastdon on Clear Linux

以前、wordの代わりに使えるフリーソフトは無いかと相談を受けた友人から、近況報告が 有った。その友人、会社を退職して悠悠自適な生活を送ってる。

某大学で募集してる、生涯学習講座に申し込みたいんだけど、応募用紙がワードとかで、 難儀したらしい。そんなのワード指定って、何処の馬鹿大学じゃと憤慨しつつ、LibreOfficeで いいんでないかいと提案したのだった。(自分で使った事も無いのに勧めるとは、無責任と 言うのは却下、日経Linuxあたりを信用してますから)

で、報告によれば、無事にワードもどきも受理されて、 『コンピュータで数独パズルは解けるか?』という講座を受けてきたらしい。 平均年齢70歳前後で、中には学生も混じっているらしい。夏の講座が4回だか5回。秋口には 発展コースが用意されているんで、落ちこぼれないようについてきてくださいと言われたとか。

コンピュータとか使う言語はどうするんだろうと思ったら、実習室にあるパソコン利用。 言語は、雲の向こう側にある Wolfram言語というものらしい。mathematicaの親類とか、講師が言っていたらしい。当人は、VBと 一緒じゃんと喜んでいたぞ。楽しい事が一番ですよ。

そんじゃ、オイラーも調べてみるかな。

あらゆる数独パズルを解く

お気楽 Haskell プログラミング入門

Python正月特集:ナンプレを解く (3)Solver編

昔はナンプレとも言っていたようだけど、今は世界中で数独って言葉が通用するみたいだね。

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 用の開発環境

Intero for Emacs

(package-install 'intero)
(add-hook 'haskell-mode-hook 'intero-mode)

たったこれだけを、init.elに書いておくだけど、stack環境のhaskellをemacsから 使えるようになるとな。

初回は、必要なものを取ってきてコンパイルをするんで、待たされるけど、次回からは 快適に使える。(interoモードに必要なモジュールは、.stack内に保存されたのが利用される。)