爆速レンサバ ConoHa Wingを最速で徹底的に調査する!

ConoHa WING

突如彗星の如く降り注いだConoHa WING。

ConoHaが提供する新サービスとはいかなるものか…と思ったらなんとまさかのレンタルサーバー。

なんだ…と落胆したのもつかの間、どうやら相変わらずGMOアプリクラウドの設備に新基盤で作ったっぽい。 そのためスピードが非常に速いらしく、そもそもプラットフォームとしてはレンサバに使うには超贅沢な代物だ。

そして驚愕の「自分でマイグレーション」。 「混雑すると遅くなる」はレンサバの宿命であり、これを均質化するのはサービス提供側としては非常に頭の痛い問題でもある。 それを自分で移せるようにしてしまうことで解決するというのだ。 今の世の中ゲームのサーバー移動ですらままならないというのに、サイト移動がほいほいできる、といえば驚愕っぷりが伝わるだろうか。

これは非常に賢い方法だと思う。 サービス提供側としての負担も少なくなるし、私の研究でも「人間は均質化する条件があれば長い目でみればある程度まで均質化していく」ということが分かっているので、多分うまくいくだろう。 なにより、「気にする人は積極的に動く」ということになるから実際の等しさ以上に不満が出にくい仕組みだ。

ConoHaの中の人 Saito Hironobuさんによると、無停止ではないが停止時間は短いらしい。 厳密性を求めない設計は非常に良いと思う。私としても好みだ。

ちなみに、今回のリニューアルで三雲このはさんは過去の人になってしまった…1

よくある話はちょっとだけ

レンサバはだいたいアフィリエイター大好きなので、同じような内容のブログがGoogleのページをめくるのも困難になるほど書かれるだろう。

だからそんな話はほんとちょっとだけにしよう。

ConoHa WING アプリケーション追加画面

ConoHa WING WordPressを追加する

アプリとしてWordPressとEC-Cubeを追加できる。 すごく今風。世の中それしかないわけじゃないのにぃ!

サイトを作ること自体はこれだけで完了なのでとてもお手軽。 HTTPS接続も可能。

ドメインの操作は手順が多いので若干面倒。 多分how to記事がたっくさん書かれることだろう。

ConoHa WING ドメインの設定

SSLセットアップに関してはサービス任せにできる。 ただし、そのためには事前にDNS側は設定しておく必要があるだろう。

実際にアクセスしてみたが、ちょっと呆れるほど速い。 Chienomiはほとんど調整していない上に重いプラグインが入っているので非常に遅いのだが、絶句するほど速いブログができた。 設定していくと多分遅くなっていくだろうが、素の状態でもかなり差がある感じだ。 サーバー系に精通していない人だけでなく、WordPressに精通していない人にとっても手っ取り早い選択肢になるかもしれない。 (おそらくはここでインストールされるWordPressはチューニング済み)

SSH鍵の登録はVPSと同じ要領。 鍵認証に限定されているのは好感が持てる。

ConoHa WING SSH鍵の登録

なお、 このサーバーは既に無い

では本気を出しましょう

ConoHa WING ホームディレクトリとルートディレクトリ

一見するとフルファイルシステムアクセスが可能に見える。 ファイルシステムツリーは普通にある感じだ。 しかしファイルシステム情報が読めず、ディスク情報を読むためのコマンドも効かない。

/binの中を見てみるとそれなりに豊富に揃っている。

binの下はシェルスクリプトも書けそうな構成

中身はこんな感じ。

lrwxrwxrwx 1 root root     7 Jul 23 21:37 /bin -> usr/bin

/usr/bin:
total 121972
-rwxr-xr-x 1 root root      15059 Jun 10  2014 GET
lrwxrwxrwx 1 root root         15 Sep 12 18:57 Mail -> ../../bin/mailx
-rwxr-xr-x 1 root root      41480 Apr 11 13:35 [
-rwxr-xr-x 1 root root     107856 Aug  3  2017 a2p
-rwxr-xr-x 1 root root      36734 Jun 10  2014 aclocal
-rwxr-xr-x 1 root root      36734 Jun 10  2014 aclocal-1.13
-rwxr-xr-x 1 root root      29104 Apr 11 14:38 addr2line
-rwxr-xr-x 1 root root      19712 May 15 22:07 agentxtrap
-rwxr-xr-x 1 root root      62680 Apr 11 14:38 ar
-rwxr-xr-x 1 root root      33080 Apr 11 13:35 arch
-rwxr-xr-x 1 root root     377984 Apr 11 14:38 as
-rwxr-xr-x 1 root root     167272 Jun 10  2014 aspell
-rwxr-xr-x 1 root root        733 Apr 11 09:13 at
-rwxr-xr-x 1 root root        734 Apr 11 09:13 atq
-rwxr-xr-x 1 root root        735 Apr 11 09:13 atrm
-rwxr-xr-x 1 root root      14768 Jun 10  2014 autoconf
-rwxr-xr-x 1 root root       8534 Jun 10  2014 autoheader
-rwxr-xr-x 1 root root      32181 Jun 10  2014 autom4te
-rwxr-xr-x 1 root root     252350 Jun 10  2014 automake
-rwxr-xr-x 1 root root     252350 Jun 10  2014 automake-1.13
-rwxr-xr-x 1 root root      21066 Jun 10  2014 autoreconf
-rwxr-xr-x 1 root root      17123 Jun 10  2014 autoscan
-rwxr-xr-x 1 root root      33872 Jun 10  2014 autoupdate
lrwxrwxrwx 1 root root          4 Sep 12 18:57 awk -> gawk
-rwxr-xr-x 1 root root      37352 Apr 11 13:35 base64
-rwxr-xr-x 1 root root      29032 Apr 11 13:35 basename
-rwxr-xr-x 1 root root     964544 Apr 11 09:53 bash
-rwxr-xr-x 1 root root       6964 Apr 11 09:52 bashbug-64
-rwxr-xr-x 1 root root        137 Apr 11 09:13 batch
-rwxr-xr-x 1 root root     402744 Aug  2  2017 bison
lrwxrwxrwx 1 root root          5 Sep 12 18:57 bunzip2 -> bzip2
lrwxrwxrwx 1 root root          4 Sep 12 18:57 byacc -> yacc
lrwxrwxrwx 1 root root          5 Sep 12 18:57 bzcat -> bzip2
lrwxrwxrwx 1 root root          6 Sep 12 18:57 bzcmp -> bzdiff
-rwxr-xr-x 1 root root       2128 Nov 20  2015 bzdiff
-rwxr-xr-x 1 root root       1677 Nov 20  2015 bzgrep
-rwxr-xr-x 1 root root      32656 Nov 20  2015 bzip2
-rwxr-xr-x 1 root root      15608 Nov 20  2015 bzip2recover
lrwxrwxrwx 1 root root          6 Sep 12 18:57 bzless -> bzmore
-rwxr-xr-x 1 root root       1259 Nov 20  2015 bzmore
-rwxr-xr-x 1 root root     772744 May 15 05:19 c++
-rwxr-xr-x 1 root root      28584 Apr 11 14:38 c++filt
-rwxr-xr-x 1 root root      36607 Aug  3  2017 c2ph
-rwxr-xr-x 1 root root        224 May 15 05:19 c89
-rwxr-xr-x 1 root root        215 May 15 05:19 c99
-rwxr-xr-x 1 root root        743 Dec 29  2015 cagefs_enter.proxied
-rwxr-xr-x 1 root root      33616 Apr 11 15:50 cal
lrwxrwxrwx 1 root root          3 Sep 12 18:57 captoinfo -> tic
-rwxr-xr-x 1 root root      54080 Apr 11 13:35 cat
-rwxr-xr-x 1 root root       3336 Jun  1 23:48 catchsegv
lrwxrwxrwx 1 root root          3 Sep 12 18:57 cc -> gcc
-rwxr-xr-x 1 root root      62928 Apr 11 13:35 chcon
-rwxr-xr-x 1 root root      62792 Apr 11 13:35 chgrp
-rwxr-xr-x 1 root root      58584 Apr 11 13:35 chmod
-rwxr-xr-x 1 root root      62840 Apr 11 13:35 chown
-rwxr-xr-x 1 root root      32992 Apr 11 15:50 chrt
-rwxr-xr-x 1 root root      33136 Apr 11 13:35 cksum
-rwxr-xr-x 1 root root       7044 Jul  2 23:32 cldetect
-rwxr-xr-x 1 root root       7192 Sep  7  2017 clear
-rwxr-xr-x 1 root root      54504 Dec  9  2017 clusterdb
-rwxr-xr-x 1 root root      45184 Jun 10  2014 cmp
-rwxr-xr-x 1 root root      24504 Apr 11 15:50 col
-rwxr-xr-x 1 root root      11632 Apr 11 15:50 colcrt
-rwxr-xr-x 1 root root      20288 Apr 11 15:50 colrm
-rwxr-xr-x 1 root root      28680 Apr 11 15:50 column
lrwxrwxrwx 1 root root          9 Sep 12 18:57 combinediff -> interdiff
-rwxr-xr-x 1 root root      37408 Apr 11 13:35 comm
-rwxr-xr-x 1 root root     155176 Apr 11 13:35 cp
-rwxr-xr-x 1 root root       5094 Aug  3  2017 cpan
-rwxr-xr-x 1 root root     772720 May 15 05:19 cpp
-rwxr-xr-x 1 root root      54544 Dec  9  2017 createdb
-rwxr-xr-x 1 root root      58456 Dec  9  2017 createlang
-rwxr-xr-x 1 root root      59000 Dec  9  2017 createuser
-rwxr-xr-x 1 root root        935 Apr 11 10:48 crontab
-rwxr-xr-x 1 root root      50384 Jun 26 17:11 crontab.cagefs
-rwxr-xr-x 1 root root      49992 Apr 11 13:35 csplit
-rwxr-xr-x 1 root root     243704 Jun 10  2014 ctags
-rwxr-xr-x 1 root root     156736 Apr 13 02:39 curl
-rwxr-xr-x 1 root root      41568 Apr 11 13:35 cut
-rwxr-xr-x 1 root root      62200 Apr 11 13:35 date
-rwxr-xr-x 1 root root       6293 Jun 10  2014 dbiprof
-rwxr-xr-x 1 root root       5474 Jun 10  2014 dbiproxy
-rwxr-xr-x 1 root root      74896 Apr 11 13:35 dd
-rwxr-xr-x 1 root root       1351 Jun 10  2014 dehtmldiff
-rwxr-xr-x 1 root root     100896 Apr 11 13:35 df
-rwxr-xr-x 1 root root     200104 Jun 10  2014 diff
-rwxr-xr-x 1 root root      62072 Jun 10  2014 diff3
-rwxr-xr-x 1 root root     117672 Apr 11 13:35 dir
-rwxr-xr-x 1 root root      41416 Apr 11 13:35 dircolors
-rwxr-xr-x 1 root root      28992 Apr 11 13:35 dirname
-rwxr-xr-x 1 root root      11312 Aug  6  2015 dltest
-rwxr-xr-x 1 root root      54352 Dec  9  2017 dropdb
-rwxr-xr-x 1 root root      58448 Dec  9  2017 droplang
-rwxr-xr-x 1 root root      54328 Dec  9  2017 dropuser
-rwxr-xr-x 1 root root     112960 Apr 11 13:35 du
-rwxr-xr-x 1 root root       1026 Sep  7  2017 dvipdf
-rwxr-xr-x 1 root root      33072 Apr 11 13:35 echo
-rwxr-xr-x 1 root root      49848 Jun 10  2014 ed
-rwxr-xr-x 1 root root       2047 Jun 10  2014 editdiff
-rwxr-xr-x 1 root root        290 Aug  3  2017 egrep
-rwxr-xr-x 1 root root      39153 Jun 10  2014 enc2xs
-rwxr-xr-x 1 root root      15656 Jun 10  2014 enchant
-rwxr-xr-x 1 root root      11400 Jun 10  2014 enchant-lsmod
-rwxr-xr-x 1 root root      28992 Apr 11 13:35 env
-rwxr-xr-x 1 root root        638 Sep  7  2017 eps2eps
-rwxr-xr-x 1 root root     147880 Jun 10  2014 eqn
-rwxr-xr-x 1 root root       1563 Jun 10  2014 espdiff
lrwxrwxrwx 1 root root          2 Sep 12 18:57 ex -> vi
-rwxr-xr-x 1 root root      33240 Apr 11 13:35 expand
-rwxr-xr-x 1 root root      37432 Apr 11 13:35 expr
lrwxrwxrwx 1 root root          8 Sep 12 18:57 f95 -> gfortran
-rwxr-xr-x 1 root root      95520 Apr 11 13:35 factor
-rwxr-xr-x 1 root root      28920 Apr 11 13:35 false
-rwxr-xr-x 1 root root      15736 Jun  1  2017 fc-cache
-rwxr-xr-x 1 root root      15672 Jun  1  2017 fc-cat
-rwxr-xr-x 1 root root      11432 Jun  1  2017 fc-list
-rwxr-xr-x 1 root root      11504 Jun  1  2017 fc-match
-rwxr-xr-x 1 root root      11432 Jun  1  2017 fc-pattern
-rwxr-xr-x 1 root root      11392 Jun  1  2017 fc-query
-rwxr-xr-x 1 root root      11440 Jun  1  2017 fc-scan
-rwxr-xr-x 1 root root      11464 Jun  1  2017 fc-validate
-rwxr-xr-x 1 root root        290 Aug  3  2017 fgrep
-rwxr-xr-x 1 root root      19768 Nov  6  2016 file
-rwxr-xr-x 1 root root      46256 Jun 10  2014 filterdiff
-rwxr-xr-x 1 root root     199200 Nov 20  2015 find
-rwxr-xr-x 1 root root      23614 Aug  3  2017 find2perl
-rwxr-xr-x 1 root root       1870 Jun 10  2014 fixcvsdiff
-rwxr-xr-x 1 root root     329664 Jun 10  2014 flex
lrwxrwxrwx 1 root root          4 Sep 12 18:57 flex++ -> flex
lrwxrwxrwx 1 root root          9 Sep 12 18:57 flipdiff -> interdiff
-rwxr-xr-x 1 root root      24504 Apr 11 15:50 flock
-rwxr-xr-x 1 root root      37360 Apr 11 13:35 fmt
-rwxr-xr-x 1 root root      37320 Apr 11 13:35 fold
-rwxr-xr-x 1 root root        311 Sep  7  2017 font2c
-rwxr-xr-x 1 root root      19784 Apr 11 09:42 free
-rwxr-xr-x 1 root root      32128 Apr 11 14:24 funzip
-rwxr-xr-x 1 root root     772744 May 15 05:19 g++
-rwxr-xr-x 1 root root     428584 Jun 29  2017 gawk
-rwxr-xr-x 1 root root     768648 May 15 05:19 gcc
-rwxr-xr-x 1 root root      27136 May 15 05:19 gcc-ar
-rwxr-xr-x 1 root root      27136 May 15 05:19 gcc-nm
-rwxr-xr-x 1 root root      27144 May 15 05:19 gcc-ranlib
-rwxr-xr-x 1 root root     319000 May 15 05:19 gcov
-rwxr-xr-x 1 root root      23136 Jun  2 00:11 gencat
-rwxr-xr-x 1 root root      15648 Nov  6  2016 geoiplookup
-rwxr-xr-x 1 root root      11432 Nov  6  2016 geoiplookup6
-rwxr-xr-x 1 root root      11496 Nov  6  2016 geoipupdate
lrwxrwxrwx 1 root root          3 Sep 12 18:57 geqn -> eqn
-rwxr-xr-x 1 root root      22920 Jun  2 00:11 getconf
-rwxr-xr-x 1 root root      27896 Jun  2 00:11 getent
-rwxr-xr-x 1 root root      15832 Apr 11 15:50 getopt
-rwxr-xr-x 1 root root     772728 May 15 05:19 gfortran
lrwxrwxrwx 1 root root          2 Sep 12 18:57 ghostscript -> gs
-rwxr-xr-x 1 root root    1523768 Jun 25 22:28 git
-rwxr-xr-x 1 root root    1523768 Jun 25 22:28 git-receive-pack
-rwxr-xr-x 1 root root     735200 Jun 25 22:28 git-shell
-rwxr-xr-x 1 root root    1523768 Jun 25 22:28 git-upload-archive
-rwxr-xr-x 1 root root     810440 Jun 25 22:28 git-upload-pack
-rwxr-xr-x 1 root root       7136 Dec 22  2015 gm
lrwxrwxrwx 1 root root          4 Sep 12 18:57 gmake -> make
lrwxrwxrwx 1 root root          4 Sep 12 18:57 gneqn -> neqn
lrwxrwxrwx 1 root root          5 Sep 12 18:57 gnroff -> nroff
lrwxrwxrwx 1 root root          4 Sep 12 18:57 gpg -> gpg2
-rwxr-xr-x 1 root root      23736 Jun 10  2014 gpg-error
-rwxr-xr-x 1 root root       3307 Nov  6  2016 gpg-zip
-rwxr-xr-x 1 root root     749928 Nov  6  2016 gpg2
-rwxr-xr-x 1 root root      49976 Nov  6  2016 gpgsplit
lrwxrwxrwx 1 root root          5 Sep 12 18:57 gpgv -> gpgv2
-rwxr-xr-x 1 root root     353648 Nov  6  2016 gpgv2
lrwxrwxrwx 1 root root          3 Sep 12 18:57 gpic -> pic
-rwxr-xr-x 1 root root     100768 Apr 11 14:38 gprof
-rwxr-xr-x 1 root root     159024 Aug  3  2017 grep
lrwxrwxrwx 1 root root         10 Sep 12 18:57 grepdiff -> filterdiff
-rwxr-xr-x 1 root root      83584 Jun 10  2014 groff
-rwxr-xr-x 1 root root     144232 Jun 10  2014 grops
-rwxr-xr-x 1 root root     100952 Jun 10  2014 grotty
-rwxr-xr-x 1 root root      33200 Apr 11 13:35 groups
-rwxr-xr-x 1 root root      11368 Sep  7  2017 gs
-rwxr-xr-x 1 root root        350 Sep  7  2017 gsbj
-rwxr-xr-x 1 root root        352 Sep  7  2017 gsdj
-rwxr-xr-x 1 root root        352 Sep  7  2017 gsdj500
-rwxr-xr-x 1 root root        353 Sep  7  2017 gslj
-rwxr-xr-x 1 root root        350 Sep  7  2017 gslp
-rwxr-xr-x 1 root root        277 Sep  7  2017 gsnd
lrwxrwxrwx 1 root root          6 Sep 12 18:57 gsoelim -> soelim
lrwxrwxrwx 1 root root          3 Sep 12 18:57 gtar -> tar
lrwxrwxrwx 1 root root          3 Sep 12 18:57 gtbl -> tbl
lrwxrwxrwx 1 root root          5 Sep 12 18:57 gtroff -> troff
-rwxr-xr-x 1 root root       2253 Apr 11 09:01 gunzip
-rwxr-xr-x 1 root root       5931 Apr 11 09:01 gzexe
-rwxr-xr-x 1 root root     100800 Apr 11 09:01 gzip
-rwxr-xr-x 1 root root      28310 Aug  3  2017 h2ph
-rwxr-xr-x 1 root root      60565 Aug  3  2017 h2xs
-rwxr-xr-x 1 root root      41472 Apr 11 13:35 head
-rwxr-xr-x 1 root root      32840 Apr 11 15:50 hexdump
-rwxr-xr-x 1 root root      28984 Apr 11 13:35 hostid
-rwxr-xr-x 1 root root      15768 Jun 10  2014 hostname
-rwxr-xr-x 1 root root      54368 Nov  6  2016 hunspell
-rwxr-xr-x 1 root root      60376 Jun  2 00:11 iconv
-rwxr-xr-x 1 root root      41480 Apr 11 13:35 id
-rwxr-xr-x 1 root root      33232 Nov 22  2015 idn
-rwxr-xr-x 1 root root       4128 Jun 10  2014 ifnames
-rwxr-xr-x 1 root root       3188 Jun 29  2017 igawk
-rwxr-xr-x 1 root root      57416 Sep  7  2017 infocmp
lrwxrwxrwx 1 root root          3 Sep 12 18:57 infotocap -> tic
-rwxr-xr-x 1 root root     142920 Apr 11 13:35 install
-rwxr-xr-x 1 root root       4247 Jun 10  2014 instmodsh
-rwxr-xr-x 1 root root      49856 Jun 10  2014 interdiff
-rwxr-xr-x 1 root root      24512 Apr 11 15:50 ionice
-rwxr-xr-x 1 root root      24464 Apr 11 15:50 ipcrm
-rwxr-xr-x 1 root root      49592 Apr 11 15:50 ipcs
-rwxr-xr-x 1 root root      24432 Apr 11 15:50 isosize
-rwxr-xr-x 1 root root        988 Jun 10  2014 ispell
-rwxr-xr-x 1 root root      32432 Aug  6  2015 isql
-rwxr-xr-x 1 root root      24152 Aug  6  2015 iusql
-rwxr-xr-x 1 root root      49896 Apr 11 13:35 join
-rwxr-xr-x 1 root root      29544 Apr 11 15:50 kill
lrwxrwxrwx 1 root root         20 Sep 12 18:57 ld -> /etc/alternatives/ld
-rwxr-xr-x 1 root root    1006184 Apr 11 14:38 ld.bfd
-rwxr-xr-x 1 root root       5302 Jun  1 23:48 ldd
-rwxr-xr-x 1 root root     158240 Jul 31  2015 less
-rwxr-xr-x 1 root root      11376 Jul 31  2015 lessecho
-rwxr-xr-x 1 root root      17056 Jul 31  2015 lesskey
-rwxr-xr-x 1 root root       2291 Jul 31  2015 lesspipe.sh
lrwxrwxrwx 1 root root          4 Sep 12 18:57 lex -> flex
-rwxr-xr-x 1 root root      15724 Aug  3  2017 libnetcfg
-rwxr-xr-x 1 root root     321577 Apr 13  2017 libtool
-rwxr-xr-x 1 root root      78648 Apr 13  2017 libtoolize
-rwxr-xr-x 1 root root      28984 Apr 11 13:35 link
-rwxr-xr-x 1 root root      58608 Apr 11 13:35 ln
-rwxr-xr-x 1 root root      38720 Jun  2 00:11 locale
-rwxr-xr-x 1 root root     322928 Jun  2 00:11 localedef
-rwxr-xr-x 1 root root      29328 Apr 11 15:50 logger
-rwxr-xr-x 1 root root      37304 Apr 11 15:50 login
-rwxr-xr-x 1 root root      28984 Apr 11 13:35 logname
-rwxr-xr-x 1 root root      11616 Apr 11 15:50 look
-rwxr-xr-x 1 root root       4608 Sep  7  2017 lprsetup.sh
-rwxr-xr-x 1 root root     117672 Apr 11 13:35 ls
lrwxrwxrwx 1 root root         10 Sep 12 18:57 lsdiff -> filterdiff
-rwxr-xr-x 1 root root     154800 Nov 20  2015 m4
-rwxr-xr-x 1 root root     182776 Nov  6  2016 make
-rwxr-xr-x 1 root root      15896 Apr 11 15:50 mcookie
-rwxr-xr-x 1 root root      41504 Apr 11 13:35 md5sum
-rwxr-xr-x 1 root root      11240 Jun 10  2014 mesg
-rwxr-xr-x 1 root root      79760 Apr 11 13:35 mkdir
-rwxr-xr-x 1 root root      63064 Apr 11 13:35 mkfifo
-rwxr-xr-x 1 root root      67192 Apr 11 13:35 mknod
-rwxr-xr-x 1 root root      41632 Apr 11 13:35 mktemp
-rwxr-xr-x 1 root root      41192 Apr 11 15:50 more
-rwxr-xr-x 1 root root     130344 Apr 11 13:35 mv
-rwxr-xr-x 1 root root    5606560 Mar  4  2018 my_print_defaults
-rwxr-xr-x 1 root root   11151376 Mar  4  2018 mysql
-rwxr-xr-x 1 root root        840 Mar  4  2018 mysql_config
-rwxr-xr-x 1 root root    9889493 Mar  4  2018 mysqladmin
-rwxr-xr-x 1 root root   11880582 Mar  4  2018 mysqlbinlog
-rwxr-xr-x 1 root root   10184976 Mar  4  2018 mysqlcheck
-rwxr-xr-x 1 root root   10259124 Mar  4  2018 mysqldump
-rwxr-xr-x 1 root root    9875732 Mar  4  2018 mysqlimport
-rwxr-xr-x 1 root root    9833986 Mar  4  2018 mysqlshow
-rwxr-xr-x 1 root root      28672 Apr 11 15:50 namei
-rwxr-xr-x 1 root root        271 Jun 10  2014 neqn
-rwxr-xr-x 1 root root       1328 May 15 22:06 net-snmp-config
-rwxr-xr-x 1 root root      30163 May 15 22:06 net-snmp-config-x86_64
-rwxr-xr-x 1 root root       3049 May 15 22:06 net-snmp-create-v3-user
-rwxr-xr-x 1 root root      33104 Apr 11 13:35 nice
-rwxr-xr-x 1 root root      41568 Apr 11 13:35 nl
-rwxr-xr-x 1 root root      42392 Apr 11 14:38 nm
-rwxr-xr-x 1 root root      33184 Apr 11 13:35 nohup
-rwxr-xr-x 1 root root      33128 Apr 11 13:35 nproc
-rwxr-xr-x 1 root root       3392 Jun 10  2014 nroff
-rwxr-xr-x 1 root root      66264 Apr 11 13:35 numfmt
-rwxr-xr-x 1 root root     232776 Apr 11 14:38 objcopy
-rwxr-xr-x 1 root root     366288 Apr 11 14:38 objdump
-rwxr-xr-x 1 root root      66368 Apr 11 13:35 od
-rwxr-xr-x 1 root root      11288 Aug  6  2015 odbc_config
-rwxr-xr-x 1 root root      28328 Aug  6  2015 odbcinst
-rwxr-xr-x 1 root root     555296 Apr 11 13:58 openssl
-rwxr-xr-x 1 root root      50616 Jun  3  2017 pango-view
-rwxr-xr-x 1 root root        737 Jun 10  2014 passwd
-rwxr-xr-x 1 root root      33120 Apr 11 13:35 paste
-rwxr-xr-x 1 root root     150624 Apr 24 04:34 patch
-rwxr-xr-x 1 root root      33088 Apr 11 13:35 pathchk
-rwxr-xr-x 1 root root        698 Sep  7  2017 pdf2dsc
-rwxr-xr-x 1 root root        909 Sep  7  2017 pdf2ps
-rwxr-xr-x 1 root root      11408 Aug  3  2017 perl
-rwxr-xr-x 1 root root      11408 Aug  3  2017 perl5.16.3
-rwxr-xr-x 1 root root      43873 Aug  3  2017 perlbug
-rwxr-xr-x 1 root root      42526 Jun 10  2014 perlcritic
-rwxr-xr-x 1 root root        203 Jun 10  2014 perldoc
-rwxr-xr-x 1 root root      10772 Aug  3  2017 perlivp
-rwxr-xr-x 1 root root      43873 Aug  3  2017 perlthanks
-rwxr-xr-x 1 root root     116926 Jun 10  2014 perltidy
-rwxr-xr-x 1 root root      10527 Jun 10  2014 perlver
-rwxr-xr-x 1 root root        498 Sep  7  2017 pf2afm
-rwxr-xr-x 1 root root        516 Sep  7  2017 pfbtopfa
-rwxr-xr-x 1 root root     313144 Dec  9  2017 pg_dump
-rwxr-xr-x 1 root root      75664 Dec  9  2017 pg_dumpall
-rwxr-xr-x 1 root root     129904 Dec  9  2017 pg_restore
-rwxr-xr-x 1 root root     428672 Jun 29  2017 pgawk
-rwxr-xr-x 1 root root      28336 Apr 11 09:42 pgrep
lrwxrwxrwx 1 root root         24 Jul 23 21:37 php -> /etc/cl.selector/php-cli
lrwxrwxrwx 1 root root         20 Jul 23 21:37 php-cgi -> /etc/cl.selector/php
-rwxr-xr-x 1 root root       4524 Apr 19 21:19 php-config
-rwxr-xr-x 1 root root       4760 Apr 19 21:19 phpize
-rwxr-xr-x 1 root root     184736 Jun 10  2014 pic
-rwxr-xr-x 1 root root       8177 Jun 10  2014 piconv
-rwxr-xr-x 1 root root        735 Aug  4  2017 ping
-rwxr-xr-x 1 root root      37448 Apr 11 13:35 pinky
-rwxr-xr-x 1 root root      45448 Jun 10  2014 pkg-config
-rwxr-xr-x 1 root root      28336 Apr 11 09:42 pkill
-rwxr-xr-x 1 root root       4531 Aug  3  2017 pl2pm
-rwxr-xr-x 1 root root      28264 Apr 11 09:42 pmap
-rwxr-xr-x 1 root root       4096 Aug  3  2017 pod2html
-rwxr-xr-x 1 root root      10340 Jun 10  2014 pod2latex
-rwxr-xr-x 1 root root      13581 Jun 10  2014 pod2man
-rwxr-xr-x 1 root root      11004 Jun 10  2014 pod2text
-rwxr-xr-x 1 root root       3755 Jun 10  2014 pod2usage
-rwxr-xr-x 1 root root       3784 Jun 10  2014 podchecker
-rwxr-xr-x 1 root root       2612 Jun 10  2014 podselect
-rwxr-xr-x 1 root root     192048 Jun 10  2014 post-grohtml
-rwxr-xr-x 1 root root        404 Sep  7  2017 pphs
-rwxr-xr-x 1 root root      66664 Apr 11 13:35 pr
-rwxr-xr-x 1 root root      88312 Jun 10  2014 pre-grohtml
-rwxr-xr-x 1 root root       5656 Jun 10  2014 precat
-rwxr-xr-x 1 root root       5656 Jun 10  2014 preunzip
-rwxr-xr-x 1 root root       5656 Jun 10  2014 prezip
-rwxr-xr-x 1 root root      11320 Jun 10  2014 prezip-bin
-rwxr-xr-x 1 root root        395 Sep  7  2017 printafm
-rwxr-xr-x 1 root root      28976 Apr 11 13:35 printenv
-rwxr-xr-x 1 root root      49776 Apr 11 13:35 printf
-rwxr-xr-x 1 root root      13444 Aug 12  2015 prove
-rwxr-xr-x 1 root root     100120 Apr 11 09:42 ps
-rwxr-xr-x 1 root root        740 Sep  7  2017 ps2ascii
-rwxr-xr-x 1 root root       2794 Sep  7  2017 ps2epsi
-rwxr-xr-x 1 root root        272 Sep  7  2017 ps2pdf
-rwxr-xr-x 1 root root        215 Sep  7  2017 ps2pdf12
-rwxr-xr-x 1 root root        215 Sep  7  2017 ps2pdf13
-rwxr-xr-x 1 root root        215 Sep  7  2017 ps2pdf14
-rwxr-xr-x 1 root root       1097 Sep  7  2017 ps2pdfwr
-rwxr-xr-x 1 root root        647 Sep  7  2017 ps2ps
-rwxr-xr-x 1 root root        669 Sep  7  2017 ps2ps2
-rwxr-xr-x 1 root root      53329 Aug  3  2017 psed
-rwxr-xr-x 1 root root     449288 Dec  9  2017 psql
-rwxr-xr-x 1 root root      36607 Aug  3  2017 pstruct
-rwxr-xr-x 1 root root      66648 Apr 11 13:35 ptx
-rwxr-xr-x 1 root root      33232 Apr 11 13:35 pwd
-rwxr-xr-x 1 root root      11528 Apr 11 09:42 pwdx
-rwxr-xr-x 1 root root      62680 Apr 11 14:38 ranlib
-rwxr-xr-x 1 root root      11624 Apr 11 15:50 raw
-rwxr-xr-x 1 root root     517936 Apr 11 14:38 readelf
-rwxr-xr-x 1 root root      41800 Apr 11 13:35 readlink
-rwxr-xr-x 1 root root      62704 Apr 11 13:35 realpath
-rwxr-xr-x 1 root root      40824 Jun 10  2014 recode
-rwxr-xr-x 1 root root       3436 Jun 10  2014 recountdiff
-rwxr-xr-x 1 root root         89 Jun 10  2014 red
-rwxr-xr-x 1 root root      36880 Jun 10  2014 rediff
-rwxr-xr-x 1 root root      58624 Dec  9  2017 reindexdb
-rwxr-xr-x 1 root root      11600 Apr 11 15:50 rename
-rwxr-xr-x 1 root root      11552 Apr 11 15:50 renice
lrwxrwxrwx 1 root root          4 Sep 12 18:57 reset -> tset
-rwxr-xr-x 1 root root      11600 Apr 11 15:50 rev
-rwxr-xr-x 1 root root      62864 Apr 11 13:35 rm
-rwxr-xr-x 1 root root      45536 Apr 11 13:35 rmdir
-rwxr-xr-x 1 root root      93144 Jun  2 00:11 rpcgen
-rwxr-xr-x 1 root root         85 Jun 10  2014 run-with-aspell
-rwxr-xr-x 1 root root      33256 Apr 11 13:35 runcon
lrwxrwxrwx 1 root root          2 Sep 12 18:57 rvi -> vi
lrwxrwxrwx 1 root root          2 Sep 12 18:57 rview -> vi
lrwxrwxrwx 1 root root          3 Sep 12 18:57 rvim -> vim
-rwxr-xr-x 1 root root      53329 Aug  3  2017 s2p
-rwxr-xr-x 1 root root      91408 Apr 11 13:21 scp
-rwxr-xr-x 1 root root      20152 Apr 11 15:50 script
-rwxr-xr-x 1 root root      49528 Jun 10  2014 sdiff
-rwxr-xr-x 1 root root      76016 Jun 10  2014 sed
-rwxr-xr-x 1 root root       5817 Jun 25 18:35 selectorctl
-rwxr-xr-x 1 root root      49632 Apr 11 13:35 seq
-rwxr-xr-x 1 root root      11560 Apr 11 15:50 setsid
-rwxr-xr-x 1 root root      28224 Apr 11 15:50 setterm
-rwxr-xr-x 1 root root     145440 Apr 11 13:21 sftp
lrwxrwxrwx 1 root root          4 Sep 12 18:57 sh -> bash
-rwxr-xr-x 1 root root      37448 Apr 11 13:35 sha1sum
-rwxr-xr-x 1 root root      41600 Apr 11 13:35 sha224sum
-rwxr-xr-x 1 root root      41600 Apr 11 13:35 sha256sum
-rwxr-xr-x 1 root root      41592 Apr 11 13:35 sha384sum
-rwxr-xr-x 1 root root      41592 Apr 11 13:35 sha512sum
-rwxr-xr-x 1 root root      54216 Apr 11 13:35 shred
-rwxr-xr-x 1 root root      50320 Apr 11 13:35 shuf
-rwxr-xr-x 1 root root      33128 Apr 11 14:38 size
-rwxr-xr-x 1 root root      24184 Apr 11 09:42 skill
-rwxr-xr-x 1 root root      19984 Apr 11 09:42 slabtop
-rwxr-xr-x 1 root root      33120 Apr 11 13:35 sleep
lrwxrwxrwx 1 root root          5 Sep 12 18:57 slogin -> ./ssh
-rwxr-xr-x 1 root root      24184 Apr 11 09:42 snice
-rwxr-xr-x 1 root root      26137 May 15 22:06 snmpconf
-rwxr-xr-x 1 root root      33368 Jun 10  2014 soelim
-rwxr-xr-x 1 root root     117728 Apr 11 13:35 sort
-rwxr-xr-x 1 root root        122 Jun 10  2014 spell
-rwxr-xr-x 1 root root      18459 Aug  3  2017 splain
-rwxr-xr-x 1 root root      71128 Apr 11 13:35 split
-rwxr-xr-x 1 root root       3186 Jun 10  2014 splitdiff
-rwxr-xr-x 1 root root      23224 Jun  2 00:11 sprof
-rwxr-xr-x 1 root root      56240 Nov 20  2015 sqlite3
-rwxr-xr-x 1 root root     778736 Apr 11 13:21 ssh
-rwxr-xr-x 1 root root     360944 Apr 11 13:21 ssh-add
---x--x--x 1 root nobody   382240 Apr 11 13:21 ssh-agent
-rwxr-xr-x 1 root root      10469 Apr 11 13:21 ssh-copy-id
-rwxr-xr-x 1 root root     419240 Apr 11 13:21 ssh-keygen
-rwxr-xr-x 1 root root     445152 Apr 11 13:21 ssh-keyscan
-rwxr-xr-x 1 root root      74904 Apr 11 13:35 stat
-rwxr-xr-x 1 root root      66448 Apr 11 13:35 stdbuf
-rwxr-xr-x 1 root root     646168 Apr 11 16:10 strace
-rwxr-xr-x 1 root root      29112 Apr 11 14:38 strings
-rwxr-xr-x 1 root root     232776 Apr 11 14:38 strip
-rwxr-xr-x 1 root root      70272 Apr 11 13:35 stty
-rwxr-xr-x 1 root root      37432 Apr 11 13:35 sum
-rwxr-xr-x 1 root root      28976 Apr 11 13:35 sync
-rwxr-xr-x 1 root root      15680 Sep  7  2017 tabs
-rwxr-xr-x 1 root root      33256 Apr 11 13:35 tac
-rwxr-xr-x 1 root root      66816 Apr 11 13:35 tail
-rwxr-xr-x 1 root root      24496 Apr 11 15:50 tailf
-rwxr-xr-x 1 root root     346080 Apr 11 11:11 tar
-rwxr-xr-x 1 root root      28952 Apr 11 15:50 taskset
-rwxr-xr-x 1 root root     118744 Jun 10  2014 tbl
lrwxrwxrwx 1 root root          8 Sep 12 18:57 tclsh -> tclsh8.5
-rwxr-xr-x 1 root root       7168 Nov 20  2015 tclsh8.5
-rwxr-xr-x 1 root root      33160 Apr 11 13:35 tee
-rwxr-xr-x 1 root root      37328 Apr 11 13:35 test
-rwxr-xr-x 1 root root      65800 Sep  7  2017 tic
-rwxr-xr-x 1 root root      15920 Jun 12  2014 time
-rwxr-xr-x 1 root root      54592 Apr 11 13:35 timeout
-rwxr-xr-x 1 root root      15736 Apr 11 09:42 tload
lrwxrwxrwx 1 root root         23 Sep 12 18:57 tmpwatch -> ../../usr/sbin/tmpwatch
-rwxr-xr-x 1 root root      15800 Sep  7  2017 toe
-rwxr-xr-x 1 root root     106848 Apr 11 09:42 top
-rwxr-xr-x 1 root root      62488 Apr 11 13:35 touch
-rwxr-xr-x 1 root root      15784 Sep  7  2017 tput
-rwxr-xr-x 1 root root      45656 Apr 11 13:35 tr
-rwxr-xr-x 1 root root     525272 Jun 10  2014 troff
-rwxr-xr-x 1 root root      28920 Apr 11 13:35 true
-rwxr-xr-x 1 root root      53936 Apr 11 13:35 truncate
-rwxr-xr-x 1 root root      20072 Sep  7  2017 tset
-rwxr-xr-x 1 root root      37344 Apr 11 13:35 tsort
-rwxr-xr-x 1 root root      28960 Apr 11 13:35 tty
-rwxr-xr-x 1 root root       7339 Jun  1 23:47 tzselect
-rwxr-xr-x 1 root root      20016 Apr 11 15:50 ul
-rwxr-xr-x 1 root root      33080 Apr 11 13:35 uname
-rwxr-xr-x 1 root root      33240 Apr 11 13:35 unexpand
-rwxr-xr-x 1 root root      45784 Apr 11 13:35 uniq
-rwxr-xr-x 1 root root       4165 Sep  7  2017 unix-lpr.sh
-rwxr-xr-x 1 root root      28984 Apr 11 13:35 unlink
-rwxr-xr-x 1 root root       5940 Jun 10  2014 unwrapdiff
-rwxr-xr-x 1 root root     185488 Apr 11 14:24 unzip
-rwxr-xr-x 1 root root      90736 Apr 11 14:24 unzipsfx
-rwxr-xr-x 1 root root      11480 Apr 11 09:42 uptime
-rwxr-xr-x 1 root root      33192 Apr 11 13:35 users
-rwxr-xr-x 1 root root      15896 Apr 11 15:50 utmpdump
-rwxr-xr-x 1 root root      58728 Dec  9  2017 vacuumdb
-rwxr-xr-x 1 root root     117672 Apr 11 13:35 vdir
-rwxr-xr-x 1 root root     910072 Apr 11 08:54 vi
lrwxrwxrwx 1 root root          2 Sep 12 18:57 view -> vi
-rwxr-xr-x 1 root root    2294256 Apr 11 08:54 vim
lrwxrwxrwx 1 root root          3 Sep 12 18:57 vimdiff -> vim
-rwxr-xr-x 1 root root       2084 Apr 11 08:54 vimtutor
-rwxr-xr-x 1 root root         54 May 11 02:26 virtualenv
-rwxr-xr-x 1 root root      32224 Apr 11 09:42 vmstat
-rwxr-xr-x 1 root root      24720 Apr 11 09:42 watch
-rwxr-xr-x 1 root root      41640 Apr 11 13:35 wc
-rwxr-xr-x 1 root root        286 Sep  7  2017 wftopfa
-rwxr-xr-x 1 root root     418736 Oct 27  2017 wget
-rwxr-xr-x 1 root root      20720 Apr 11 15:50 whereis
-rwxr-xr-x 1 root root      24336 Jun 10  2014 which
-rwxr-xr-x 1 root root      49872 Apr 11 13:35 who
-rwxr-xr-x 1 root root      28984 Apr 11 13:35 whoami
-rwxr-xr-x 1 root root      11296 Jun 10  2014 word-list-compress
-rwxr-xr-x 1 root root     772744 May 15 05:19 x86_64-redhat-linux-c++
-rwxr-xr-x 1 root root     772744 May 15 05:19 x86_64-redhat-linux-g++
-rwxr-xr-x 1 root root     768648 May 15 05:19 x86_64-redhat-linux-gcc
-rwxr-xr-x 1 root root      62288 Nov 20  2015 xargs
-rwxr-xr-x 1 root root      19752 Jun 23  2016 xmlcatalog
-rwxr-xr-x 1 root root      63408 Jun 23  2016 xmllint
-rwxr-xr-x 1 root root      24568 Nov 29  2016 xmlwf
-rwxr-xr-x 1 root root      24056 Sep 15  2014 xsltproc
-rwxr-xr-x 1 root root       4557 Aug  2  2017 xsubpp
-rwxr-xr-x 1 root root      14768 Apr 11 08:54 xxd
-rwxr-xr-x 1 root root      86504 Jun 10  2014 yacc
-rwxr-xr-x 1 root root      28976 Apr 11 13:35 yes
-rwxr-xr-x 1 root root       1941 Apr 11 09:01 zcat
-rwxr-xr-x 1 root root       1760 Apr 11 09:01 zcmp
-rwxr-xr-x 1 root root       5768 Apr 11 09:01 zdiff
-rwxr-xr-x 1 root root        123 Apr 11 09:01 zegrep
-rwxr-xr-x 1 root root        123 Apr 11 09:01 zfgrep
-rwxr-xr-x 1 root root       2144 Apr 11 09:01 zforce
-rwxr-xr-x 1 root root       6132 Apr 11 09:01 zgrep
-rwxr-xr-x 1 root root     215840 Nov  6  2016 zip
-rwxr-xr-x 1 root root     100456 Nov  6  2016 zipcloak
-rwxr-xr-x 1 root root       2953 Oct 11  2008 zipgrep
-rwxr-xr-x 1 root root     185488 Apr 11 14:24 zipinfo
-rwxr-xr-x 1 root root      95984 Nov  6  2016 zipnote
-rwxr-xr-x 1 root root     100096 Nov  6  2016 zipsplit
-rwxr-xr-x 1 root root       2041 Apr 11 09:01 zless
-rwxr-xr-x 1 root root       2859 Apr 11 09:01 zmore
-rwxr-xr-x 1 root root       5343 Apr 11 09:01 znew
-rwxr-xr-x 1 root root     736320 Aug  2  2017 zsh
lrwxrwxrwx 1 root root          6 Sep 12 18:57 zsoelim -> soelim

sbinのほうはこう。

lrwxrwxrwx 1 root root    8 Jul 23 21:37 /sbin -> usr/sbin

/usr/sbin:
total 892
-rwxr-xr-x 1 root root      33240 Apr 11 13:35 chroot
-rwxr-xr-x 1 root root        302 Jul  2 23:42 cloudlinux-selector
-rwxr-xr-x 1 root root       7096 Apr 11 14:09 consoletype
-rwxr-xr-x 1 root root       7208 Jun 10  2014 cracklib-check
-rwxr-xr-x 1 root root        246 Jun 10  2014 cracklib-format
-rwxr-xr-x 1 root root      11328 Jun 10  2014 cracklib-packer
-rwxr-xr-x 1 root root       7184 Jun 10  2014 cracklib-unpacker
-rwxr-xr-x 1 root root        990 Jun 10  2014 create-cracklib-dict
-rwxr-xr-x 1 root root      15368 Apr 11 12:22 faillock
-rwxr-xr-x 1 root root      19496 Apr 11 12:22 mkhomedir_helper
-rwxr-xr-x 1 root root      40640 Apr 11 12:22 pam_console_apply
-rwxr-xr-x 1 root root      15400 Apr 11 12:22 pam_tally2
-rwxr-xr-x 1 root root      11216 Apr 11 12:22 pam_timestamp_check
-rwxr-xr-x 1 root root      15592 Apr 11 13:20 pluginviewer
-rwxr-xr-x 1 root postdrop 218552 Jun 10  2014 postdrop
-r-xr-xr-x 1 root root      20264 Dec 28  2015 proxyexec
-rwxr-xr-x 1 root root      15808 Apr 11 12:22 pwhistory_helper
-rwxr-xr-x 1 root root      11344 Jun 10  2014 safe_finger
-rwxr-xr-x 1 root root      94832 Apr 11 13:20 saslauthd
-rwxr-xr-x 1 root root      19720 Apr 11 13:20 sasldblistusers2
-rwxr-xr-x 1 root root      15448 Apr 11 13:20 saslpasswd2
-rwxr-xr-x 1 root root        806 Jun 10  2014 sendmail
-rwxr-xr-x 1 root root      31888 May 15 22:07 snmpd
-rwxr-xr-x 1 root root      32048 May 15 22:07 snmptrapd
-rwxr-xr-x 1 root root      37496 Jun 10  2014 tcpd
-rwxr-xr-x 1 root root      41808 Jun 10  2014 tcpdmatch
-rwxr-xr-x 1 root root      15448 Apr 11 13:20 testsaslauthd
-rwxr-xr-x 1 root root      28448 Jun 10  2014 tmpwatch
-rwxr-xr-x 1 root root      24032 Jun 10  2014 try-from
-rwxr-xr-x 1 root root      36280 Apr 11 12:22 unix_chkpwd
-rwx------ 1 root root      36272 Apr 11 12:22 unix_update

結構色々ある。curlなんかもあるし、vimもあるし、zshも入っている。 だが、管理系のプログラムがない。

ユーザー固有の環境 iproute, sudo, iptablesなどは叩けない
ディストリビューションはRHEL7

/homeは自身単独のディレクトリになっていて、passwdを見て見も他のユーザーの情報がない。

iproute2は入っておらず、ifconfigもない。iptablesも叩けない。 だが、OpenSSHはあるので踏み台にすることはできる模様(レンサバでやる意味は不明)。

OSはLinuxで、RedHat Enterprise Linux 7であることがわかる。 sbinのほうにcloudlinux-selectorというのがあるので、多分GMOインターネットのグループ企業であるGMOクラウドで作っているCloud Linux上で動作しているのだろう。割とテクノロジー盛り盛り。オラわくわくしてきたっぞ。

CPU情報を見てみると、Xeon E5-2640 v4が6コアだった。 なにそれ超贅沢。

processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 79
model name  : Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz
stepping    : 1
microcode   : 0xb00002e
cpu MHz     : 1781.906
cache size  : 25600 KB
physical id : 0
siblings    : 20
core id     : 0
cpu cores   : 10
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 20
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu cpuid_faulting pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 invpcid_single intel_pt spec_ctrl ibpb_support tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
bogomips    : 4794.07
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor   : 1
vendor_id   : GenuineIntel
cpu family  : 6
model       : 79
model name  : Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz
stepping    : 1
microcode   : 0xb00002e
cpu MHz     : 2752.031
cache size  : 25600 KB
physical id : 1
siblings    : 20
core id     : 0
cpu cores   : 10
apicid      : 32
initial apicid  : 32
fpu     : yes
fpu_exception   : yes
cpuid level : 20
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu cpuid_faulting pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 invpcid_single intel_pt spec_ctrl ibpb_support tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
bogomips    : 4799.21
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor   : 2
vendor_id   : GenuineIntel
cpu family  : 6
model       : 79
model name  : Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz
stepping    : 1
microcode   : 0xb00002e
cpu MHz     : 1842.468
cache size  : 25600 KB
physical id : 0
siblings    : 20
core id     : 1
cpu cores   : 10
apicid      : 2
initial apicid  : 2
fpu     : yes
fpu_exception   : yes
cpuid level : 20
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu cpuid_faulting pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 invpcid_single intel_pt spec_ctrl ibpb_support tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
bogomips    : 4794.07
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor   : 3
vendor_id   : GenuineIntel
cpu family  : 6
model       : 79
model name  : Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz
stepping    : 1
microcode   : 0xb00002e
cpu MHz     : 3029.343
cache size  : 25600 KB
physical id : 1
siblings    : 20
core id     : 1
cpu cores   : 10
apicid      : 34
initial apicid  : 34
fpu     : yes
fpu_exception   : yes
cpuid level : 20
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu cpuid_faulting pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 invpcid_single intel_pt spec_ctrl ibpb_support tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
bogomips    : 4799.21
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor   : 4
vendor_id   : GenuineIntel
cpu family  : 6
model       : 79
model name  : Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz
stepping    : 1
microcode   : 0xb00002e
cpu MHz     : 3303.281
cache size  : 25600 KB
physical id : 0
siblings    : 20
core id     : 2
cpu cores   : 10
apicid      : 4
initial apicid  : 4
fpu     : yes
fpu_exception   : yes
cpuid level : 20
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu cpuid_faulting pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 invpcid_single intel_pt spec_ctrl ibpb_support tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
bogomips    : 4794.07
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor   : 5
vendor_id   : GenuineIntel
cpu family  : 6
model       : 79
model name  : Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz
stepping    : 1
microcode   : 0xb00002e
cpu MHz     : 2656.031
cache size  : 25600 KB
physical id : 1
siblings    : 20
core id     : 2
cpu cores   : 10
apicid      : 36
initial apicid  : 36
fpu     : yes
fpu_exception   : yes
cpuid level : 20
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu cpuid_faulting pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 invpcid_single intel_pt spec_ctrl ibpb_support tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
bogomips    : 4799.21
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

ちなみにVPSのほうはXeon E5-2650なのだが、v3と世代がひとつ違うため性能はWINGのほうが上だ。

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 63
model name      : Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz
stepping        : 2
microcode       : 0x1
cpu MHz         : 2294.686
cache size      : 4096 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 
clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good 
nopl cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt 
tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single pti fsgsbase 
tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf
bogomips        : 4591.59
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 63
model name      : Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz
stepping        : 2
microcode       : 0x1
cpu MHz         : 2294.686
cache size      : 4096 KB
physical id     : 1
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 
clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good 
nopl cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt 
tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single pti fsgsbase 
tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf
bogomips        : 4591.59
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

デバイスファイルはすごく絞られていて、ディスクデバイスが見えない(!)し、/dev/randomも見えない。 メモリはなんと128GB(!!!!)もある。使用量は相当余裕があるようだった。多分まだ収容サイト数が少ないのだろう。

devfsやprocfsは限定的、sysfsはアクセス不可

procfsはごく一部だけ見える。sysfsはマウントされておらず見えない。 プロセステーブルも読めるのはユーザーのものだけだった。

所感

Mimir Yokohamaのお客様でウェブとメールだけ欲しい方は結構多いのだけど、VPSでやるとどうしても管理にコストがかかるため費用が割と高い。 Conoha WINGのサービスを見ていて思ったのは、「もしかしてこれでサービス品質の向上とコストダウンができるのでは?」ということだった。

性能に関しては間違いないだろうと考えていたのだけど、問題はセキュリティだった。 私としては並のセキュリティではうちで提供するサービスとして納得できない。今まで私が個人的に使ってきたレンタルサーバーもどれも潜在的に攻撃可能なものばかりであった。 私が提供するサービスは堅牢なセキュリティが魅力のひとつだ。もしセキュリティが甘ければ採用できない。逆にセキュリティがしっかりしていれば、これは私にとって、そしてMimir Yokohamaにとって大きな武器になる。

果たして、そのセキュリティは申し分ないものであった。 気になる点としてはOpenSSHクライアントが叩けるようになっているのは好ましくないが、基本的には何もできない。 gccがあるのでCで直接叩くようにすれば触れる可能性もあるが、おそらくcgroupsによって隔離されているものなので試す価値は乏しいだろう (もっとも、実際にサービスとして始めるとなったら私は確認するけれども)。

つまりConoHa WINGとは

  • 爆速。これより高速な構成はコストの桁が変わるレベルには爆速
  • WordPressとEC-Cubeに関してはとても簡単。 メールとSSLも簡単
  • セキュリティは非常に堅牢。安心して使える
  • レンサバとしてはお値段はちょっとお高め。といっても機能や性能を求めた場合はその限りではない

「爆速」「簡単」「安全」が揃っていれば、さすがにちょっと高い程度なら全然受け入れられるという人も多いのではないだろうか。 個人的な趣味のサイトでは高いかもしれないが、事業性のサイトを展開するならば超有力な選択肢だと思う。

むしろ、私はグループ企業の展開しているヘテムルの立ち位置が心配だ。

私は今回の結果を受けてMimir Yokohamaとしても従来のVPSベースのウェブサービスをConoHa WINGベースに切り替える検討を開始することにした。 今回の調査で ConoHa WINGはセキュリティ的に信頼できる ということが分かったからだ。

ちなみに、もうひとつConoHa WINGの魅力としてモリサワwebフォントが使える、というメリットがある。 モリサワといえば最高に美しいフォントなのだが、実は3書体、25万PV/月上限で月額2160円だったりする。 全書体、100万PV/月のほうは4320円だ。 ConoHa WINGでは2.5万PV/月で30書体が使えるため、世の中に浸透しているシステムデフォルトフォントをCSSで強制するという愚かな行為を抑制できそうでとても嬉しい2

ちょっとだけ「レンサバにグレードダウン」などと思ってしまったが、実は大変魅力的なサービスであった。 この性能はアフィリエイターだけに任せるにはもったいない…というよりも、アフィリエイターの手にはさすがに余るのではないか (私が知らないだけで、アフィリエイトブログというのはデイリーPVが何十万というレベルなのかもしれないが)。

高度なWordPressサイトを構築したい人、セキュリティに関心のある人、 しっかりしたプラットフォーム上でウェブサイトを構築したい人には最適解となりうる。 ちなみに、PureBuilder Simplyは静的ウェブページを高いスループットで処理できるホストに向いているため、PureBuilder Simplyも大いに活用できるだろう。


  1. ConoHaのサービスページ上からいなくなってしまったので、「ConoHaには三雲このはというマスコットがいる」ということは外部の人は知らない情報になってしまったのだ。せめてロゴに残してくれればよかったのに

  2. ちなみに、Chienomiの月間PVは15万PV程度はあるため、到底使用できないということになる。

Vivaldi 2.0

Vivaldi ウェブブラウザのバージョン2.0がリリースされた

動画にキレイな日本語字幕が入っていたりしてとてもいい感じだ。

Vivaldiは1.15から2.0に上がった形になる。 初期は不具合もそれなりに多く(それでも初期としては非常に良い出来で期待はできたが)開発者も少なかったので先行き不安なところもあったが、今やちゃんとしたブラウザになった。 今回の修正ではAltの無効化が大きい。VivaldiはAltがキャプチャされても(例えばスクリーンショットとか)メニューを開いてしまうので、この問題が(正しい解決方法ではないが)解決されるのは非常に嬉しい。

Vivaldの成り立ちは若干複雑で、Operaがコミュニティを捨ててただのChromiumに成り下がったことに納得が行かない人たちが出ていって作ったブラウザだ。 ところが、VivaldiはChromiumのフロントエンドでしかないし、コミュニティ機能のほうも当初から随分後退して「よくある程度よりも消極的」というレベルまで落ちてしまっている。

ではVivaldiに価値がないのかというとそんなこともなくて、中国企業に買収されたこともあってか不透明な振舞いを繰り返すOperaや、不信感を煽るような行為の多いGoogleと違ってクリーンでオープンという空気は保たれている。 Mozillaも多分に政治的になってしまっている現状において、Vivaldiは数少ない信頼できるオープンなブラウザだと見ていい。 このあたりはTakaakiさんのブログで詳細に説明されている。 また、マイナビの記事もなんとなくその空気が分かる。

また、VivaldiはChromiumをベースとしたブラウザとしては非常に珍しく、フロント部分はほぼ自前になっている。 Braveなどもそうなっているけれども、これによってVivaldiだからこそ使える部分も大きい。なにより、プライバシーを脅かすかもしれない要素は廃してコストをかけて自前で用意するあたり気合が入っている。

以前独自エンジン開発も辞さず、みたいな記事があったような気がしたけれども、それは見つからないので置いておこう。

この素晴らしいブラウザは使うほどに手に馴染む。 もしまだ使ったことがないという人がいたならば、ぜひ一度使ってみてほしい。

Linux zsh/デュプレクサ/ssh設定の勘所

ここのところ大作をいくつも書いているため、忙しさも手伝ってなかなかアップロードできない。 この話もLinuxを使えるようセットアップする話をまとめようと思っていたのだが、それはあまりに時間がかかってしまうので、かいつまんで解説しようと思う。

世の中にはLinuxをインストールだけ繰り返すという人もいるのだが、だいたいそういう人はセットアップをしない。

1台だけのコンピュータを使う人、というのも、実はLinux手練(というよりも達人)の中でも結構多いのだが、1台だけ使っているうちにはその中で順次セットアップを煮詰めていけば良いのだが、Linuxは複数台使ってこそその真価を発揮するし、そうなると素早く適切にセットアップすることが求められる。 特にConoHaでインスタンスを立てたり閉じたりする場合にはなかなか重要だ。

ここでは頻繁にセットアップを行うがまだ手順を確立していない人、あるいはセットアップ自体確立していない人のために私のコツをご紹介しよう。

なお、ここでは前提としてManjaro Linuxあるいは(サーバーにおいては)Arch Linuxをセットアップする前提にあり、その中で極力少ない労力でセットアップしようとしている。 基本的な方針は他のディストリビューションでも応用できるはずだが、労力の多寡に関してはこの限りではない。

また、シェルはZshを使っていることを前提としている。 Bashを使っている人はZshに乗り換えてしまえば良いと思うが、Fishを使っている人に関しては私はわからないので留意していただきたい。

初期セットアップに関して

とりあえずアップデートして再起動

# pacman -Syu
# reboot

vimがないと設定に困るのでvimを用意する。 viも別パッケージであるのだが、むしろ不便なのでシンボリックリンクにする。 vim-pluginsが入っていればだいたい良いので、一緒にいれておく。これでvimで苦痛を感じることなく使うことができるようになる。 (デスクトップではvimではなくgvimを入れる。そうするとXセレクションを扱えるようになる)

# pacman -S vim vim-plugins
# (cd /bin; ln -s vim vi)

設定ファイルをViなんかで書けるか! Emacsにしろ! という人はEmacsも入れる。 私はEmacsを使わないのであまり詳しくない。 こちらもデスクトップではemacsパッケージを入れる。

# pacman -S emacs-nox

ここで一般ユーザーを作っておく。もちろん、Manjaroでは必要のない作業。 Manjaroでは一般的なデスクトップユーザーに追加すべきグループが多いので留意する必要がある。

# useradd -m -U -c "First User" -s /bin/zsh -G wheel,storage,sys,network luser
# passwd luser

wheelグループにsudoを許すようにする。 $wheelの行のコメントアウトを外す。NOPASSWDになっている行ではないほうが良いだろう。

# visudo

Zshをログインシェルにしたが、まだ設定していないのでbashで入る。

# sudo -u luser bash -l

AURを扱うのであればとりあえずyayを入れるのがお勧め。 Archでも2パッケージで済むからだ。それにタイプ数も少ない

$ sudo pacman -S go
$ git clone 'https://aur.archlinux.org/yay.git
$ cd yay
$ makepkg
$ sudo pacman -U yay*.pkg.tar.xz

あとはほしければTrizenでも入れておけば良い。 yaourtとpacaurは「安全ではないソフトウェア」になりつつあるらしいので、とりあえずお勧めはしない。

$ yay -S trizen

w3mとlvがあればとりあえず文書を読むのは楽になる。 コンソール作業する場合は必須

$ yay -S w3m lv

ターミナルマルチプレクサを入れる。Powerlevel9kはGNU Screenで位置がバグる問題があるので、ここでtmuxを入れておく。 一応、screenも入れておく。

$ yay -S screen tmux

Moshは便利だと思うけれど、私はUDPを透過するファイアウォール設定をしたくないため、ここではMoshの話はしない。

Zshとターミナルマルチプレクサ

とりあえず

私が新インスタンスに対して最初にすることは、Zshを導入しセットアップすることである。

ZshからFishに変えた、あるいはZshが使えなくてBashがいいという人の多くはZshのセットアップができていない。 ディストリビューションに良いZshの設定が含まれていることは稀だし、Zshの設定は非常に多くて難しい。 マニュアルを読んで設定を作り上げてこそなのだが、それをしない人が圧倒的に多い。 (似たようなことはVimにも言えるが、Vimの場合はそれが気になるケースは少ないかもしれない)

実は話は実に簡単で

$ sudo pacman -S grml-zsh-config zsh-completions

これで再ログインすれば立派に使えるZshが出来上がっている。

grmlの設定は非常に練られていて、多くの場合これで十分だろう。 (場合によっては調整がいるかもしれない)

なお、Archのgrml-zsh-configはskelが含まれているのだが、Manjaroは含まれていない。 skelのほうは便利ツールがコメントアウトされているものなので、別になくても構わない。

なお、Zshの設定ファイルに日本語を使うとサーバーではトラブルのもとになるので注意してほしい。

オプション

だが、もう少し練ることにしよう。 まず、grmlの設定ではAUTO_CONTINUEが有効ではないので、間違ってフォアグラウンドで起動してdisownしたあとSIGCONTをわざわざ送る必要がある(実際はこのケースではbgしてからdisownするほうが良い)。

重複する部分が多いが、重要なオプションは設定しておこう。

私は次も設定しているが、多分いらない。(RC_EXPAND_PARAMはgrmlではオフかも)

シンタックスハイライト

プラグインの中では便利なもの。 ただし、いくつかのオプションが制限される。

% sudo pacman -S zsh-syntax-highlighting

履歴の機能を拡張

grmlの履歴機能はhistory-beginning-{for,back}ward-endを採用している。 これは、「コマンド部分は途中ならその位置、コマンド部分が入力されていればその部分を維持し、カーソル位置を末尾としてヒストリをたどる」というものだ。

だが、個人的にはオプションも含めてカーソル位置まで維持してくれるほうが好きだ。 全面的に書き換えるのではなく、PgUp/PgDown時はカーソル位置を維持してヒストリをたどるようにする。

本来は記述が足りていないが、この内容はgrmlを前提としている。

履歴を残す量も設定しておこう。 HISTSIZEは検索で辿れる量、SAVEHISTはファイルに残す量だ。

viモード

私はviモード使いなので、設定しておく。

なお、逆にEmacsキーバインドで使いたい人で、EDITORvivimnvimにしている人はちゃんと設定する必要がある。

ターミナルマルチプレクサ

SSHの場合は切れないとか、セッション増やしたいとかだいたい起きるので、使用させることにする。

なお、これでtmuxの設定で

set -g default-terminal "xterm-256color"

とかすると地獄をみるので絶対にしてはいけない。 必ず

set -g default-terminal "screen.xterm-256color"

または

set -g default-terminal "screen-256color"

とすること。

なお、私はGNU Screen使いなので、tmuxのキーバインドはscreen互換にしてある。

プロンプトとテーマモード

私は普段はgrmlプロンプトテーマを使っているが、SSHではPowerlevel9kを使っている。 これは、見やすく、わかりやすいため。普段から使わないのはプロンプトが戻るのがちょっと遅いからだ。

% sudo pacman -S zsh-theme-powerlevel9k awesome-terminal-fonts powerline-fonts

私はテーマ読み込みにこんなことをしている。

前述の$_DEFAULT_SHELLMODEはこのためのものだ。 だが、常にPowerlevel9kで良いのなら、別にロード部分を直接書いてもいい。

grmlと競合してしまうので、prompt offすること。

私の設定はこんな感じ。

このあたりは好みなのだが、実はPowerlevel9kの公式マニュアルにはあるが動かないものというのが結構合ったりする。 典型的には$POWERLEVEL9K_SHORTEN_STRATEGYは多くがうまく動かない。

ポイントになるのが、プロンプトにcontextを使わずuser hostと分けた上でホストのREMOTEのみ色を設定していること。

基本的には「ローカルの場合はどのマシンでも同じ色でいいが、リモートの場合はどのマシンか判別できたほうがよい」と思う。 別にこれ以外のプロンプトテーマでもホスト名は出しているのだが、現在作業中のホストを勘違いしてやっちまった、ということはしょっちゅうある。

まずホスト名に一貫性があってわかりやすい名前をつけることが大切だ。

% sudo hostnamectl set-hostname thinkpad-x1

私の場合は花の名前をつけることにしている。 実はこれは1993年の出来事に由来しており、運用は1998年から、と私としてはとても歴史がある。

さらにメリットとして花なので、色が連想できる。私は$POWERLEVEL9K_HOST_REMOTE_{FORE,BACK}GROUNDはその花の代表的な色をモチーフにした色使いにしている。 それぞれのマシンでイメージが離れた花の名前をつけているため、色被りも少ない。

簡単でわかりやすいのは、機種名とケースの色だろうか。VPSは難しい。

なお、

vi_modeを正しく表示するために必要な部分。

SSH

基本的なSSH

とりあえずroot鍵を登録してパスワード認証は閉じる。

まずはログインするほうでssh-keygen -f <file>によって生成した.pubのほうのファイルを ログインされるほうの~root/.ssh/authorized_keysにコピーする。

なお、.sshはパーミッション0600であること。

このroot鍵を登録するステップはサーバーに対するもので、直接ログインできるのであればスキップすべき作業である。

そして/etc/ssh/sshd_config (ssh_configではない!)を

PasswordAuthentication no

としておく。 この時点で一旦リロード

% sudo systemctl reload sshd

同じ要領でユーザー鍵を登録する。 鍵そのものも分けたほうがいい。

% ssh-keygen -f server-luser_rsa
% rsync -e "ssh -i server-root_rsa" server-luser_rsa.pub root@server:/home/luser/.ssh/authorized_keys
% ssh -i server-root_rsa root@server "chown luser:luser -R /home/luser

以降のために~/.ssh/configに設定しておく。

Host server-luser
  User luser
  Port 22
  HostName server.example.org
  IdentityFile ~/.ssh/server-luser_rsa

これでssh server-luserとして入れるようになる。

なお、HostNameだが、LANで同じセグメント内にいるのであればZeroconfによる.localを使えばいいだろう。 あるいは、各マシンを固定アドレスとして/etc/hostsに書いておくというのも手。 /etc/hosts上の名前は1マシン1つではなく、役割ごとに名前をつけておくと、その役割が他のマシンに移ったときにあまり苦労しなくて済む。dnsmasqで配るという方法もある。

SSHに関する話は以前にしたので、応用技としてはそのあたりを参考にしてくれると良い。

いざというときのための暗号化経路

なにかのときのため、ネットワークごとに1台は透過的にアクセスできると良いだろう。 これはいくつかの方法がある。

最も簡単なのは、Socksプロキシを使うことだ。

% ssh -TND 4711 -o ServerAliveInterval 10 -o ServerAliveCountMax 3 luser@server

これでlocalhost:4711をSOCKS5プロキシとして使用すればSSHサーバーを経由してアクセスすることが可能になる。 これは、ウェブブラウザやメールクライアントで有用である。これは公衆Wi-Fiからアクセスする程度の場合に有効だ。

もうひとつは、SSH経由の環境から利用できるようにしておくことだ。 w3mやMutt, Vim, Emacs, lvなど端末から利用できるアプリケーションを一通り揃えておけば、GUIは使えなくてもひととおりの作業が可能だろう。

本当にそのネットワークを通じてアクセスする必要が生じた場合はどうだろうか? 私はそんなサバイバルな経験を何度かしているが、普通の人はあまりない。 常時必要とするのであればVPNを用意しておけば良いのたでが、緊急避難的に使用できるようにしておくと何かと便利だ。

まずは双方にpppをインストールしておく。

% sudo pacman -S ppp

ログインするサーバーに対してはパスワードをかけたコマンド用rootキーを使うのが最も確実で安全。

command="/usr/sbin/pppd nodetach notty noauth",pty,no-X11-forwarding,no-port-forwarding,no-agent-forwarding ssh-rsa ...

さらに実際に使うときにログインした上でフォワーディングを許す。

# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

そしてつなぐ。

% sudo pppd updetach noauth silent nodeflate pty "sudo -u luser ssh server-ssh-ppp" ipparam vpn 192.168.32.1:192.168.32.2

192.168.64.0/24に対してアクセスできるようにしたい場合:

% sudo ip route add 192.168.64.0/24 via 192.168.32.1

すべての未知のホストにこの経路でアクセスしたい場合。サーバーのアドレスは10.0.8.1、現在のデフォルトゲートウェイは192.168.1.1だとすると:

% sudo ip route add 10.0.8.1 via 192.168.1.1
% sudo ip route replace default via 192.168.32.1 proto static metric 101

Pandoc Markdown のあまり知られていない書法

これで全部ではないし、どちらかといえばPandocユーザーズガイド日本版に記載されているものはそれを読むほうが早いので、記載されていないものを中心にあまり知られていないものを集めてみた。

上付き文字 (superscript)

^ではさむ。

下付き文字 (subscript)

~ではさむ。

打ち消し

~~で挟む

ヘッダーのIDを制御する

日本語を使用している場合やかぶる場合、あるいは主導でヘッダーへのフラグメントを書く場合などは名前をつけたいもの。

これでこのh1ヘッダのIDはHelloWorldになる。

divとspan

ユーザーズガイドに記載されていない機能。

div

3つ以上のコロンをフェンスブロックのように使用する。

span

[]形式。

特にspanに関しては{}を伴わないのは危険かもしれない。

任意にID/クラス/属性を書く

ユーザーズガイドに記載されていない機能。

{...}という形式でヘッダやコードブロックに限らずIDを明示することができる。 #IDによるIDと、.classによるクラス表記ができるほか、attr_name="attr_value"という形で属性も書くことができる。

これはインラインコード, コードブロック, リンク, 画像, ヘッダ, div, spanなどで利用できる。

順序つきリストにラベルをつける

順序つきリストマーカーに(@)という形式があり、(@label)と書くことができる。 そして(@label)として参照できる。

結果

シンタックスハイライトニング

フェンスブロックで言語名を書けばよい。 一応、ユーザーズガイドにはないZshなんかも対応している。

クラスとして言語が指定された場合もそれを認識する。

なお、対応している言語を指定したときだけsourceCodeというクラスが振られるようになっている。

コードに行番号をつける

ユーザーズガイドに記載されていない機能。

コードブロックにnumberSourceというクラスが設定されていると行番号をつける。 numberSourceをつけていなくても必要な情報自体はついているので、CSSを改変すれば必須ということもない。

定義リスト

dtは普通に先頭からはじめて、dd側を:に続けてインデントする。

まずddが一行なのであれば、空行をあけずに書けば良い。

複数の段落に渡るような場合は空行をあける。 ddの最初の行は:にスペース3つ、以降はスペース4つ。

ラインブロック

いわゆるVerb。

単に|ではじめるだけ。

リストにブロックレベルのコンテンツを含む

定義リストと同じように継続するものが4つのスペースではじまっていると、それは複数のブロックレベル要素を含むものとみなしてくれる。

このため、4つのスペースでコードブロックを表している場合、これをリストの一部だとみなしてしまう。

コメントをいれれば良い、とガイドにはあるのだが、これはHTML以外で困る。 タブを使えば解決するのだが、いくらなんでもスペースでインデントしてからタブを重ねるのは嫌という人もいるだろう。 であれば、フェンスブロックを使えば良い。

YAML front matter

Markdownの先頭にYAMLを置くことでメタデータを書くことができる。 title, subtitle, author, date, keywordsはofficialなもの。

テーブルキャプション

ユーザーズガイドに記載されていない機能。

方法その1。手前に:で始まる行を置く。

もうひとつはTable:という行を後置する。

コードブロックにキャプションをつける

captionという属性を書くとdata-captionが定義されるので、

とCSSに書いておけば良い。

GoogleはURLをやめたいらしい?

WIREDの記事はいくらなんでも釣りタイトルだろう

WIREDになかなか刺激的な記事が出ている

タイトルの

グーグルは「URLがない世界」をつくろうとしている

は明らかに釣りタイトルだろう。WIREDだし。ちなみに、USの記事では

GOOGLE WANTS TO KILL THE URL

とさらに釣りタイトルである。

少なくともURLの表示をやめたいのは確か

そもそもURLとは

まずURIとURLの関係を説明しておこう。

URIはURN/URC/URLを包括した呼び方である。

URNはWikipediaによれば

URNは個人の名前のようなもので、URLは個人の住所のようなものと言える。URNは何かの識別子を定義したもので、URLはその何かを探す方法を提供する。つまり、“what” と “where” の関係である。

URNはしばしば、本を一意に識別するISBNと比較される(実際、ISBNをURNとしてエンコードできる)。本の一意な識別子があることで、その本について議論できる(その本を読んだかどうか、面白かったかどうかなど)。しかし、実際にその本を読むには、本の在り処(例えば、ベッドの脇のテーブルの上など)を知る必要がある。したがってURNとURLは相補的である。例えば、あるRFCについて議論するとき、両方の概念を使って「urn:ietf:rfc:3187 (URN) は http://tools.ietf.org/html/rfc3187.html (URL) にある」ということができる。

とのことだが、URNはNIDが公式に登録されたものだけ、と限定されるため使い勝手は全くよくない。 そもそもURNで書く必要性が乏しいのだ。URNで書いたところでほとんどの場合リソースにアクセスする方法はなく、識別子として書くのであればURNの書式に従う必要性が非常に乏しい。urn:ietf:rfc:3187と書かなくても、RFC3187と書けば十分だからだ。

対してURLは極めて馴染み深いものだろう。例えば https://chienomi.reasonset.net/ である。

URLの構造は<scheme>:<location>である。locationはschemeが何であるかによって全く異なる。

最もよく見かけるhttpスキームでは、

http://[user[:password]@]domain[:port]/path

となっている。pathはquery [?key=value[&key=value...]] とfragment [#fragment] をオプションで含んでいる。 この形式はhttps, ftp, sftpスキームでも同様だ。

URLスキームはものすごくたくさんあり、IANAが定めるオフィシャルなもの1以外にもたくさんある。 広く通用しているmailtojavascripttelや、最近はアプリ専用のlineのようなURLも増えている。

実際にChromeがURLを隠し始めた

従来もアドレスバーにアクセスしない限りパスなどを隠匿していたのだが、 Chrome 69からはwww.m.といったアドレスを省略するようになった。

だが、これは明らかに問題である。

例えばm.github.iomというGitHubユーザーのページだが、Chromeはこれをgithub.ioとオフィシャルページであるかのように表示してしまう。

また、URL途中にあったとしても省略するため、www.comというドメインを取得すれば、google.www.comというアドレスを用意するだけで、google.comに見せかけることができる。

これはフィッシングにおいて極めて有用で、重大なセキュリティホールである。 なお、この機能はChromiumには載っていない。

私としては、すっごく迷惑な話である。 普通にwww.のあるページとないページは別にページにマップされていたりするのだから。

ほんとにURLいらないのか

使われなくなってきたアドレスバー

Internet Explorer 5やNetscape Navigator 4に関してはアドレスバーはアドレスバーであり、アドレスを入力するところで、検索に利用することはできなかった。

Netscape 6ではアドレスバーに検索機能が追加された。 実はこのときは現在のChromeと同じように統合されたアドレスバーがあるだけで、現在も(NetscapeのベースであるMozillaの後継の)SeaMonkeyではそうなっている。Firefoxは最初からアドレスバーと検索窓が別で、Konquerorも別だった。

昔は「検索」というのはあまりメジャーな手段ではなくて、主なインターネットブラウジングの方法は「リンク」だった。 有名なサイトやコミュニティページ、あるいはリンク集から辿っていく、というのが主な手段であり、検索エンジンは登録式だったりした。

だが、いつしか検索が当たり前になっていった。 恐らく「アドレスバーに入力したらデフォルトの動作が検索になったので、それが検索するものだと認識された」というのが大きいだろう。

なぜかこの頃(2005年ころ)から「アドレスバー」の存在を認識しておらず、いくら説明しても通じないという人が増えた。 検索するのには使っているはずなのだが。 もしかしてスタートページから検索していて、アドレスバーで検索したことがないのだろうか。

だが、私は普通に使う。 だいたい私が使う主要なサイト及びページのURLは覚えているから直接入力するし、そもそも私はVivaldiのセッティングでアドレスバーの検索機能を切ってある。Twitterの通知を見たいときはhttps://twitter.com/i/notificationsだ。

パスでサイト自体が区分されているという環境も今も普通にあるので(たとえばAmeblo)アドレスバーは常に見ているし、入力もする。ページがなんのパラメーターを渡しているか、というのは、サイト側に悪意がないかをチェックする簡単な方法でもあるのでクエリも見ている。

少なくともURLはそれだけのものではない

URLは「リソースの表し方」である。

ウェブだけでなくSSHやGitなど様々なソフトウェアが、その場所を表すために利用している。 であるから、Googleごときが「なくす」ことができるようなものではない。

だいたい、なんらかの形で同じリソースを表さなければならないことにはかわりない。 それもやめたいのならHTTP自体をやめるところからはじめなくてはならないし、URLを利用している他の様々なりソースも滅ぼさなければならない。

URLをやめたところで、

site:example.com&path=/a/b/c.html&query={a:abc,b:128}

みたいな書き方をするのだろうか。 URLよりも良い書き方を考えるのは大変だし、考えたところで問題は何も変わらない。

問題はファシズム

例えばGoogleが「パス部を一切示さない」という仕様にした場合、 パス部をサイトパートとして用いているサイトは機能性を大幅に失うことになる。

これを検索エンジンの仕様にも含めけてしまうと、そのようなサイトは壊滅状態になるため、 現実的にはこれに抗う方法がなく、パス部をサイトに含まないという変更を強要されることになる。

あるいはそのような場合でも直接に不利益を受けるのはプロバイダーではなくユーザーであるため、プロバイダーはそのような変更を拒むかもしれない。

「WIREDの釣りタイトル」というのはその部分だ。 あまりに問題が大きく、さすがにそんなことはしないだろう、ということなのだ。

もししてしまうと、これは恐ろしいファシズムである。 Googleが検索エンジンを握っている状況を利用してすべての者が従わざるをえないという前提のもとに望む変更を加える、ということになるからだ。

実際のところGoogleにはややその傾向があり、本来はそのような世の中を維持するために機能しているものを変更することに対しては、保守的であるべきで、多数派と利益だけで決めていいものではないのだが、とも思う。

だが、さすがに今回のはWIREDの拡大解釈しすぎだろう。


  1. インターネットの標準をIANAが定めるというのはさすがに問題があると思うが

シェルスクリプトで並列処理

なんだか検索件数が多いので、シェルスクリプトによるコンカレンシーのお話をしよう。

ただし、bad design (変数を書き換えるとか、相互にやりとりするとか)は除外する。

また、Zshを前提とする。

投げっぱなし

まず基本。投げっぱなしはとても簡単。

シェルスクリプトではジョブコントロールは無効になっているので、SIGHUPの送信はなされないので、さっさと終了してしまっても大丈夫。

処理の終了を待ちたい場合はwait

flock

flockを使う方法は簡単でシンプル。 ロックファイルを使ってファイルデスクリプタを開きっぱなしにし、そのファイルデスクリプタを指定してロックする。

まずファイルデスクリプタ9.lockファイルをライトモードでオープンする場合

そしてファイルデスクリプタ9を閉じる場合

これを利用するとこんな感じ。

ロックしている間に共有しているリソースの読み込み/変更を行い、ファイルデスクリプタを閉じる。

リソースを読むより簡単な方法は、ひとつのストリームを共有したファイルデスクリプタとして開き、 ロックを中に読むことである。

ワーカーを生成するサブシェルの標準入力はqueueファイルにリダイレクトされている。 そのため、ファイルデスクリプタ0queueファイルなのだが、そのサブシェルの子プロセスであるワーカープロセスはリダイレクトしていないため、このファイルデスクリプタが共有される。 結果、全てのワーカーはqueueファイルを標準入力とするのだが、ストリーム自体を共有しているため、どのワーカーが一行読んだとしてもストリームの位置が変更され、次に読み込む位置は他のワーカーにとっても変更される。実際

WORKER 1: foo
WORKER 2: bar
WORKER 3: baz

となる。

producer-consumer キュー

もっと凝ったことがしたいのであればUNIXドメインソケットを使ってproducer部分をシングルスレッド化することができる。

zsocket -lのタイミングで接続を受け付けているのだが、zsocket -lしていないタイミングでは接続しようとするプロセスをブロックするため、producer側の処理は直列に行われる。

双方向性があるときはproducerと直接やりとりできるのはメリット。

Orbit designの場合

私が採用しているOrbit designはレギュレーターはZshスクリプトなので、基本的にこのような並列化手順をとっている。 とはいえ、ものによっては直列(serial)になっていたりする。

ただ、並列化されているものが多い。ワーカープロセスは最も多いもので5。

基本的にワーカースクリプトが受け取るのは処理対象ID(ほとんどの場合ファイルパス)だけである。 それ以外の情報はスクリプト側で生成するか、別途取得するかする。

検索ワードにお応え @2018-09

第4回の「検索ワードの内容にコメントする」コーナー。

今回からは、「あくまで記事の何かで言及していないもの」に限定して話していきますよぉ

検索ワードからピックアップ

「ターミナルエミュレーター sakura」

sakuraはVTE3を使ったターミナルエミュレータ。 Ubuntuとかで使われているらしい。

ただ、Gnome Terminalなどと比べて「VTEむき出し感」があって割と使いにくい。 少なくともお勧めはできない。

「midori メモリ消費 ブラウザ」

midori自体はgtkwebkitのブラウザなのでメモリ消費は少なめだけれども、ページ自体で消費するメモリは基本的に変わらない。

ただ、Chrome系列は信じられないほどメモリを消費するので最初からメモリが限られている場合は大きな違いになる。 ただし、動的要素のあるページを見続ける場合は優位性に乏しい。例えばTwitterとかFacebookとか。

YouTubeはChromiumのほうが軽い。

「zenfone4 selfie pro シャッター音鳴らない」

小さめなだけで鳴ります。

シャッター音にあまり気を遣わなくて済むから私はこれくらいがいい。 Axon7なんかデジイチの音より大きいので、結構何事かと振り返られてしまう。

「xephyr xnest」

基本的にxephyrがxnestを置き換える。

「Ricty nerd-fonts unicode」

RictyにNerd Fontのパッチを当てたものだね。

Nerd Fontのグリフも含めてちゃんとサイズ設定されたものが欲しいならいいかもしれないけど、Cicaのほうがいいかもしれない。

「ryzen g linux modesetting」

KMSかな?

KMSだとしたら、AMDGPUドライバは最初から有効になっているので、わざわざKMSを無効化しない限りは有効なはず。

Ryzen Gを使っているならばビデオドライバはAMDGPUでしょう。 Catalystの場合はKMSは使えず、KMSが設定上有効になっているとトラブルの元だったので、切るのが普通だった。

「シェルスクリプト csv ぐちゃぐちゃ」

CSVがそもそもどういうフォーマットかという点があるのだけど、そもそもCSV自体が結構複雑な規格だし、 よくシェルスクリプトでawkを使ってCSV云々とか言っているのを見かけるけれど実際到底無理なので、とてもお勧めできない。

どうしてもやるなら、少なくともタブ区切りにすべきだし、それでもエスケープの処理などなかなか難しい。 CSVと言っているものが本当にCSVかという問題を含めてCSVライブラリを使うのですらも割と色々難しい。

とりあえずRubyなりPerlなりPythonなりを使うことを検討してはどうだろうか。

「windows98マシン linux」

やってできないことはないし、実際私もVAIO PCV-MX2にLinux入れたりもしているけれども、 なんのメリットもない のでやめたほうがいい。

Xアプリを動かすにはパワーが足りず、かといってコンソールではデバイス認識が厳しいため、 「Xだけ起動してずっとターミナル」ということにしかならない。

また、Archが入らないため(Archはx86_64のみ)最小限の構築もなかなか大変。

組み込みみたいにしたいわけじゃないだろう?

「gtk4 xfce」

Gnome4も目処が立っていないし、XFce4 GTK3も一体いつになるやらという状況なのに、気が早すぎないか。

現状ではGtk4は十分なパフォーマンスが出ておらず、実用にはほど遠い。 また、ユーザービリティの面で言えばGtk3とほとんど変わらないのにメモリ消費量がだいぶ増えているのであまり期待はできない。

「sonar アクティベーション 解除」

特に処理は必要ないが、Melodyneだけは必要。

ただし、現在はMelodyneはウェブからディアクティベートできるようになったので、そこまで難しい手順はなくなった。

「ssh 複数端末に一斉コピー」

SSH鍵を、という話なら間違っている。 SSH鍵は端末ごとに持たせるべきだし、ログイン端末ごとに鍵自体分けるべきである。

ファイルを、ということであればそれも考え方としては正しくない。 そういうケースでは共有するほうが普通だし、管理したいのならVCSを入れるべき。

どうしてもというのであれば

みたいにもできるけれど。

「win98 ネットブック」

ネットブックという概念ができたのはWindows XP時代。

「d vine luv win7」

D†VINE LUV は名作だね (エロゲーです)

知らない人のために言っておくと、ゲーム性自体はだいたいディアブロ (エロゲーです)

今の若い人はディアブロも知らないだろうなぁ…

Windows 7で動作するものの、カラーモードがうまく設定できず色がおかしくなる。 もしかしたら256色モードで起動したら大丈夫とかあるかもしれないけれど、確かめていないのでなんとも言えない。

「discord デュアルメッセンジャー」

Discordのマルチアカウントは結構難しい。

Linux版Discordはそもそもマルチインスタンス実行ができない仕組み。 やろうとするとユーザーを分けるとかしないといけないのだけれど、だいぶ面倒。

方法としてはpurple-dircordとPidginの組み合わせやRipcordなどのサードパーティクライアントもあるけれど、使っていないので推奨はできない。

「windows dd バックアップ」

Windows diskが/dev/sdbだとすると

dd if=/dev/sdb of=winbackup.img bs=1M

しかし、ほんとにddするの? めっちゃ扱いにくいよ?

「Manjaro ドライバー アップデート」

Manjaroの場合Nvidiaドライバなんかはpacmanで普通に上がる。

ほとんどのドライバはカーネルに含まれているから、カーネルのアップデートでアップデートされる。

「btrfs 問題点」「btrfs 不安定」

ほとんどの普通の場合問題はないし不安定でもない。

地雷になるのは「RAID5/6を使う」「RAID構成を変更する」。

あと、ディスクが不安定になったときにbtrfsごと不安定になるのは改善してほしいポイント。 完全にディスクが死んだ場合は他のファイルシステムは即死だからそれよりはマシなのだけど、そうでなく問題があった場合にハングする条件が多すぎて、ディスクが不安定になると(BtrfsのRAIDで保護されていても)Btrfsが死んでしまうのはなんとかしていただきたい。

でも、悪い点といったらそれくらいしかない。速度も近年は少なくとも私は気にならない。 NVMe SSDだったりするし。

「btrfs zfs 比較」

明らかに良い点は最新のカーネルに常に追従できることと、サイズが違うディスクでRAID1を組める(1ディスクだけが全体容量の半分を越えるのでなければちゃんとディスクを使い切れる)ことかな。

「format btr ファイルシステム」

これ以外のオプションはあまり使わない。

重要なのは-d-mで、それぞれデータ、メタデータを冗長化するかどうかのオプション。 raid1とraid0に関してはシングルディスクでも指定できるけれど、それ以外は作成時点で必要なディスク数を満たしていないとダメ。

標準はメタデータがraid1で、データはraid0。

「skype 改悪」

ひどいよね。もはや使い物にならないと思う。

それでもしばらくは通話品質が良いから使い続けていたのだけれども、今や通話品質も悪くなって使い物にならないので、使わなくなってしまった。

「discordノート的な機能」

専用にチャンネル作れば良いのではないでしょうか。

「シェルスクリプト 並列化」「shell マルチスレッド」

これ、結構要望があるみたいなので、ちょっと何かでまとめる。

「投票サイト ip」

IPアドレスベースのアクセスカウントとか前時代的すぎるのでやめてください。

「nvenc vs qsv」

直接に比較した記事がないけれど、とりあえずNVENCのほうが圧倒的に高速。 それにQSVは結構CPU使うし、ハードウェアエンコードの目的を考えると明らかにNVENC有利。 QSVはどちらかといえばCPUでは重すぎる動画に対する再生/配信/録画支援じゃないかな。

ただ、これは明らかにシステムによるので、ディスクリートビデオカードを使うかどうかの話にとどまるから、あまり意味のない比較だと思う。

画質は確かにQSVのほうがちょっといいのだけど、画質にこだわる場面ではQSVも使えないのが正直なところ。 スクリーンキャストとかでやむなく使う場合はQSVであれNVENCであれ、あとでエンコードする想定でかなり大きいビットレートで保存することになる。

「z400 前期 後期」

2009年モデルが前期で、2010年モデルが後期。 後期型で水冷になった。

水冷かどうかというよりも、前期型は正直ラインナップがかなり微妙だったので買いな個体は少ないと思う。 基本的にはAMDビデオカードである点も、この世代のAMDビデオカードはATIドライバかCatalystドライバになるけれど決してよくはないし。

なのでZ400買うなら後期型がお勧め。

Facebookがスパムを押し付けてくる件

Facebookがやたらに「知り合いかも」を押し付けてくる。

一日3件から5件も押し付けてくる(もちろん、私に知り合いなどいるはずもない)し、それをメールでも通知してくるのですっかりスパムメールだし、オフにすることもできない。

しかも、送りつけてくるのは、明らかにスパムアカウントだったりする。 スクリーンショットをみればわかるとおり、共通の知り合いがいるわけではない。

だが、この高瀬陽菜というアカウントも、村上美嘉というアカウントも典型的なLINE詐欺のアカウントだ。

だが、共通の知り合いがいるわけでもないが、Facebookはスパムアカウントをフォローしろと言ってくるわけだ。

なにもこのときだけというわけではなく、Facebookは今も1日1アカウントはスパムアカウントを押し付けてくる。

スパムを押し付けることも、オプトアウトできないことも、 マイペースで利用させずにあれをしなければペナルティだといい続けてくることも、 完全に悪徳企業のそれではなかろうか。

Facebookがかつての出会い系と同じような手法で、 同じように悪質なことをしているのに、誰も問題にしないのだろうか。

新しいメールフィルタを開発 (Dovecot LDA, Postfix alias/PIPE)

新手のスパムが増えてきたので、追加のスパムフィルタを適用しようとしたのだが、従来のスパムフィルタがちょっと力技過ぎて(まぁ、2時間で作ったものだから)拡張が難しかったので、新しいフレームワークを作った。

GitHubで公開しているけれど まだREADMEを書いていないので利用は難しいだろう。

これ自体は大した話ではないのだが、部分的にとても苦戦したところがあったので、その話をしよう。

旧フィルタはPostfix aliasのPIPEで起動し、通過したものはsendmailでキューに戻すという仕様だった。 これは問題なかったのだが、フォルダへの振り分けも行いたい(特にJunkフォルダに対して振り分けたい)という理由でDovecot LDAを使うことにした。 これはArch Linuxだと/usr/lib/dovecot/dovecot-ldaである。

だが、ここで問題があった。Dovecot LDAはメールボックスに配送する。 一方Postfix sendmailはキューに入れるだけで、メールボックスへの配送はPostdropが行う。

だが、PostfixはPIPEをnobody:nobodyで起動する。 だから、メールボックスに対するアクセス権がなく、Dovecot LDAでメールボックスに配送することができない。

PIPEのユーザーを指定して起動する方法を検討したのだが、公式Wikiに「suidしろ」とか書いてあって絶望した。

ここまで特定するのに随分苦労したが、結局Postfix Sendmail同様、サーバーに対して送信する、という仕組みにすることにした。 rootで起動されているサーバーがDovecot LDAを呼ぶのでroot権限で動かすことができる。

これを実現するためにRubyのUNIXServerインスタンス(socketファイル)を777にしてあげる必要があるのだが、 UNIXServer.openにその機能がないため、

という感じ。

また、ログファイルもnobodyで書き込める必要がある。

R.I.P. Twitter

RIP

Twitterはどこへ行くのだろう。

かつてTwitterは自由で活気のあふれる場であったらしい。 それを支えたのがサードパーティクライアントだった。Twitter自体は非常にシンプルでさしたる機能もなかった。 それに対して様々な開発者が「こうだったら便利だよね」という機能を実現すべく様々なアプリを開発した。

だが、ある時期からTwitterはサードパーティクライアントに対して厳しい制約を課し、公式と同程度の機能を実現できないようにしてきた。 その制限を理由に積極的に「APIキーとアカウントの凍結」をちらつかせて迫るようになり、サードパーティクライアントを締め出した。 その後、Twitterは「サードパーティクライアントとの和解」を掲げ「帰ってきてほしい」と呼びかけたものの、一方でアプリ開発者のアカウントを凍結するなどの措置を繰り返した。

そして今、従来のAPIを廃止し、新APIは現実的でない制限を課すことでサードパーティクライアントの完全な締め出しを行った。

Twitterはなにがしたいのだろう。

Twitterがおかしくなった頃、タイムラインの並び替え、「いいね」したツイートの拡散、ブロックを無視した表示、機械的なアカウント凍結、事実上の電話番号の強制(新しく登録したアカウントはただちに凍結され、電話番号を登録しないと解除されない)などを行うようになった。 さらにモーメント機能を提供すると政治的に偏った内容を並べるようになったりもした。

Twitterがしていることは、Facebookの模倣に見える。 TwitterはFacebookに対する(嫉妬に近い)憎悪をもって始まったものにもかかわらずだ。

だが、Twitterをどういうものにしたいのかということは全く見えない。 ユーザーが喜んでいないのは明らかなのに、あるいはTwitterは(広報で言うとおりに)ユーザーが喜んでいると思っているのだろうか。

Twitterはここ2年間、ずっと自滅への道を進み続けた。

崩壊する「場」

Twitterがどういうメディアであるかは、大いに観測範囲に依存する。

Twitterで愚かさを示す者が多いというのも聞くが、幸いにして私のタイムラインにはそのようなものはあまり流れてこない。 Twitterをしているのはオタクでアニメなどに詳しいと信じて疑わない人もいるようだが、私のタイムラインにおいては限定的だ。 政治的・思想的な発言(特に差別的な発言)を繰り返す人は、私は積極的にブロックしているので、目にすることはあまりない。

それを踏まえた上でだが、私の経験としてもTwitterはかつてない「飛び越えるメディア」だったと思う。

それ以外にもブログなどでpopular personと親しくなるようなこともあったけれども、Twitterは通常であれば認知はしていても接することはできなpopular personに簡単に話しかけられる。それに相応するならばそれを始まりにすることもできた。 これはかつてないことだった。Twitterがなければ意見を交わすことなどかなわないような格上の相手とも話せるのだから!!

これは、「一方的な発信でない」という点で画期的だった。 Twitterは非常に双方向性が高い。ブログでも他のSNSでも発信主体であるのに対して、Twitterはそのような性質が最も低い。

それでも多くのpopular personは時折書き連ねるだけで発信用メディアとして利用している傾向が強かった。 そうした点を鑑みるとTwitterを特別たらしめていた大きな点は積極的な双方向性を見せた企業アカウント、アイドル、そしてコスプレイヤーだったと思う。1

企業アカウントに関しては特殊性が高いし、Twitterによって企業アカウントが双方向性を持ったことについては色々と他所で考察もされているのでおいておく。

残り2者については意味的には近い。 「女性総popular化」みたいな時代の中で、「popular personとして発信しているけれども認知度は高くない人」というのがたくさん生まれた。 これは本人の中では矛盾であるし、商業的であるならば好ましくない状態でもある。 幸い、可愛い女の子にはだいたい男が群がるので、ちょっと返信するだけでも大変ありがたがられる。

どの程度それを踏まえて利用する意図があるかはそれぞれとして、popularityを確立する確実かつ手っ取り早い手段であったのだ。 「積極的なファン交流」という意味も含めて、Twitterで双方向性を持つことには大きな意味をもってきた。

だが、これはなかなか「自分を特別な位置に置く」としていると成立しない。 そのため、相手に近いところに降りて話さねばならない。これはpopular personとしての思い上がりの抑制という2意味でも大きなものを持っていた。

もっとも、このときでも妙な思い上がりと自己拡大を示す者たちもいた。 私が印象深いのは、なんだかの店が、それに属する人にアカウントを作らせて展開していたのだが、Twitter上での発言は店のルールが適用されるとし、店のルールに従わない発言を当該アカウントに対して行ったら警察に通報すると言ったことだろうか。

だが、この時点では「有意義なもの」だったのだ。

だが、そのような者にとってはInstagramのほうが容易に自己顕示欲を満たせる。 そして、「発信する特別な自分とそれに群がる下々の者」という構図が簡単に作れる。

このほうが楽だ。いくらでも増長していられるし、積極的に払うコストがない。

だが、同時にこれは意義を失った。Instagramで一方的な発信をするのは、単に「低コストな方法」というだけであり、特殊性は全くないからだ。

Instagramを好むような人が向き合わなくて済むInstagramに逃げた、という見方もできる。 だが、結果的にはTwitterに残った人の多くも「上からで一方的な発信」に傾く明確な傾向ができた3。もちろん、これは“コスプレイヤー”の急激なメジャー化に伴うものもあろうが。

さらに理由はわからないが、企業アカウントが双方向性を破棄する、あるいはアカウントそのものを取り消す傾向も強まった。 Twitterだからこそという要素がどんどん減っている。

心地よくない場

Twitterは完全ではないにせよある一定の居場所となりうるものだったと思う。 (私の場合はそうでもないが)

しかし近年、随分乱暴な言葉が増えた。 少なくとも攻撃的言動が総じて増えたのは確かだ。もっとも、データ上はTwitterが殊更に増えたわけではなく、YouTubeなどを含めいろんなところで増えているし、単純に5ちゃんねる、ニコニコ動画、はてななどのもとより攻撃性の高い人の多いメディアが場をわきまえずに流入しているという可能性が高いが。

そして、差別的発言、極度の無知と断定など愚かな発言が目立つようにもなった。

これは、

  1. Twitterの中で増えた、Twitterの住人は変わっていないがそのような言動が増えたのならメディア自体が崩壊し、荒むようなものと化したことになる
  2. Twitter外からの流入によってそのようなことになったのだとしたら、世の中はそれほど愚かな人で溢れているという可能性が高いということになる

テレビなどを鑑みるに後者である可能性が高そうだが。

行き場がない

「人は本質的にコミュニケーションを求めるのではないのだろうか」という発言は、かなり以前からしている。 きっかけは多分、「Twitterですらリアルでのつながりを前提とする傾向」に対するものだったと思う。

みんなそんなにリアルでの出会いに恵まれているのだろうか? 私は中学高校のときの友人たちとはそれきりだし、仕事ではプライベートのつながりはないから特にプライベートなコミュニケーションをとることもない。 そもそもそんなことでは自分の生活圏の人しか出会えないし、それはどうしたって「自分と属性が近い人」に限られてしまう。

そんなの面白くない。 世界には多様な人がいるはずなのだ。 だから、私のつながりは主にチャットで築かれてきた。

しかし偏った思想のneophobiaたちによって、「ネットは悪だ、ネットで知り合うのは犯罪だ」というプロパガンダが繰り広げられ、私達の居場所は剥奪されてしまった。

果たしてTwitterがそのようなコミュニケーションの「拡がり」を意識していたかはわからない。 そうあるべきなのかもわからないが、少なくともTwitterは公共の場であることは確かで、望まない人に読まれたり、反応されることを悪しとするようになったのはTwitterというメディアのあり方を利用しながら逸脱していると言えるだろう。

例えTwitterがコミュニケーションを拡げるものでないとしても、出会いの場4として機能するものでないとしても、他のメディアで交流がない人と交流できる、という点は大きく、直接交流しないとしても観測できることには大きな意味がある。 私にとってはまつもとゆきひろさんや、緑の恐竜先生だけど、スポーツ選手や、作家や、アイドルだってそうだろう。

成瀬さん5には何度か貴重なご意見を頂いたし、間違いなくそれは私にとって成長の糧となっているが、Twitterをやっていなければそれは得られなかったものだ。

しかしそれは彼らがいればこそ実現するものであって、彼らがいなければ当然に成立しようがない。 Twitterをやる意義には「そこに誰がいるか」ということがとても大きいのだ。

だから、メディアとして代替するものが現れたとしても彼らがいないので価値がまるで違ってしまう。

Yet Another Twitter

さらに文化的理由が加わる。 MastodonはTwitterの代替として期待されたが、実際のところ公式のMastodonインスタンスは基本的に「オタクのもの」であり、大部分のユーザーはいわゆる「アニメアイコン」である。

さらにニコニコや5ちゃんねるの文化である用語や罵詈雑言に溢れ、ネガティブな、特に攻撃的な発言ばかりで溢れている(Mastodonはローカルタイムラインによってそのインスタンス全体の発言を見ることができる)。 さらに、検索機能もろくにないため、自分が接したいユーザーを見つけることが不可能だ。

ソフトウェア的にはGNU Socialだってあるのだが、基本的にこのようなSNSはうまくいっていないように思う。 Vivaldiだって当初はSNSを持っていたのだが、あっという間になくなった。

SNSはユーザーがいることが命なので、スタートアップが大変に難しい。 これは、今までいくつかのコミュニケーションサイトを運営してきた私の実感としても思う。

結局、Twitterこそが求めているものだがTwitterが邪悪になってユーザーの追い出しにかかっているからTwitterから出ていきたいのであって、となると人々が必要としているのはYet Another Twitterであり、言い換えるならば「かつてのTwitter」なのである。

だが、ユーザー集め、規模とインフラ、そして資金的な問題、 さらにはTwitterが始まったときよりもはるかに厳しくなった法規制…と様々な問題が立ちふさがり、今のところYA-Twitterは出てきそうにない。

出ていきたいが行く場所がない。 Twitter自身もそう高をくくっているので独裁的な振る舞いをやめようとしない。

果たしてNet worldはどこへいくのだろうか。


  1. “コスプレイヤー”という単語に対する妥当性はここでは置いておく。気になるのであれば、「コスプレイヤーを自称する人」としよう。

  2. だいたいの人が覚えていないし認知していないとも思うのだが、私はまぁまぁpopularだったことがある

  3. これは私のAI研究の付随研究でデータ分析上明らかになっている。

  4. 出会い=異性目的のような謎の風潮があるが、もちろんそのような意味ではない。

  5. Rubyコミッタの方である。