(Manjaro Linux) KDE PlasmaでXFce4通知が使われる

先日のAdaptaのアップデートからManjaro XFce4からインストールした環境で使用しているKDE Plasma上で通知が黒背景黒文字になるという問題が発生していた。

KDE Plasmaの通知を設定しても全く改善されないためどうしたものかと非常に困っていたのだが、 よく見てみるとKDE Plasmaの通知ではなく、XFce4 Notifyになっていた。

そこでxfce4-notifydを止めたいと考えたのだが…

xfce4-notifydはsystemdユーザーユニットとして存在していて、/usr/lib以下にコマンド本体がある。 だからsystemctl --user stop xfce4-notifydで一応止まるように見える。 (場合によってはkillする必要がある)

ところが、ここでnotify-sendするとふたたび起き上がってきてしまう。

これを止めるジェントルな方法を模索したのだが、見つからなかったので、仕方なく/usr/share/dbus-1/services/org.xfce.xfce4-notifyd.Notifications.serviceを削除(というか外へ移動)した。 これは恐らく意図以上の影響を及ぼすだろうが、とりあえず当面の問題は解消できた。

アプリケーションに固有のfonts.confを使用させる

意図

私はどうしても、どうしても!!! ウェブサイトが無意味にフォントを固定してくるのが気に入らない。

いくらでもいいフォントはあるのに、よりによってなぜMS PゴシックだのArialだのHerveticaだの気に食わないフォントを強制されなくてはいけないのか。

「MS Pゴシックはないんだからいいじゃん」と思うかもしれないが、それでは済まない。 「完全にMS Pゴシックに決め打ちしているもの」というのも世の中には存在するので(一番はMSWord文書)どうしてもMS Pゴシックはメトリック互換フォントを設定せざるをえないのだ。

Arialに関してはUI部品に本当に使っていて、はみだすケースが少なくないので、変更はより難しい。

そうでなくても指定されるのは気に入らない。 必要ないのではないか。 私としては読みやすいフォントを使いたいのだ。

最も望ましいのはユーザースタイルシートで上書きすることである。 だが、ご丁寧にどのサイトもbodypではなくスコアの高いところにフォント指定してくれやがるのでそうはいかない。滅びてしまえ。

幸いにも私の場合プロファイル切り替えプログラムを使っているのでそのブラウザで見るサイトというのは決まっている。 だから手っ取り早いのはサイトで指定されているフォントをoverrideすることである。

実際、

とかやっているのだが、やはり弊害が大きく、条件は限定したい。

意外とイケてないFontConfigの仕様

FontConfigって結構イケてるソフトウェアだと思っていたのだけれど、そうでもない。

設定にXMLを使っている時点で微妙だし、その文法はさらに微妙だが、 環境変数のような動的要素は全然使えない。

XDG_CONFIG_HOMEだけは理解するのだけど、そのロジックはinclude内のprefix="xdg"である。 このprefixdefault (/)かxdg ($XDG_CONFIG_HOME | ~/.config)のどちらかだけ。 かろうじて~は使えるのだが…

条件式も書けないし、アプリケーションごとの設定もできない。 とにかく自由度が低い。というか、設計がイケてない。

方法はいくつかある。

例えば、~/.application.font.conf.d/をincludeするようにしておいて、 これをシンボリックリンクとして切り替える、というような方法だ。 だが、これは優先度が高いところでincludeするほど影響が大きく、制約される。

ただし、この方法ではアプリケーションがFreeTypeをロードしたあとであればこのリンクを切ってもリンク先のディレクトリをホールドし続ける。FontConfigが再度シンボリックリンクを解決することはない。

だが、よりよいのは環境変数$FONTCONFIG_FILEを使う方法だ。 これによりカスタムのfonts.confを使わせることができる。

だが、これも罠が多い。

まず、ファイル向けの$FONTCONFIG_FILEとディレクトリ向けの$FONTCONFIG_PATHがあるのだが、$FONTCONFIG_PATHにしてもNN-XXXX.confをロードするわけではなく、単にそのディレクトリのfonts.confをロードするだけである。 しかも、どちらも複数指定はできない。

このふたつがある意味がないし、柔軟性が全くない。 やっぱりFontConfigがいまいちだ。

固有のfonts.confを使わせる

だいたいこんな感じである。

この設定ファイルにはしたいことだけ書けばいいわけではなく、/etc/fonts以下でやっているようなことが全て必要になる。 手っ取り早い方法としては

のように書いておくことだ (いや、多分/etc/fonts/conf.dをここで指定する必要はない)。 これで通常の設定ファイルがロードされる。

この設定ファイル内で書いた内容はincludeの前でも後でも優先され、overrideできる。 だから、この内容を基本として固有の内容を書き足せば良い。

ただし、効力は通常されるどの設定ファイルよりも強いので注意が必要。

この方法は汎用性があり、エディタでフォントを使い分けたいときにも有効に働く。 例えばsans-serifmonospaceのような抽象フォントを指定しておき、それをoverrideすれば良い。 arialhelvetica, MS Pゴシックなどをグローバルに置き換えることも避けられる。

Web browser profile chooser version 2.0

My browser profile chooserが従来はこのような余計なコマンドの実行に適していなかったので、特殊なことをしなくても実現できるように変更した。 これは、既に廃止されたブラウザの削除、設定ファイル指定オプションがなくなったMidoriの削除など懸案だった変更を多数含み、 従来とは互換性がない

従来の強引な手法が訂正されたため、設計も改善された。 これで例えば次のようにして任意のフォントプロファイルで起動できる。

ウェブサイト全文検索システムの開発

開発経緯

NamazuやGroongaも試したのだが、いまひとつ望むものにはならなかったので、シンプルで美しい全文検索システムを書くことにした。

これは、第一にはGoogle検索に依存しているMimir Yokhamaの検索機能を自前で持つこと、 第二にはChienomiを含むWordPressのシステムの置換えである。

検索システムの開発自体はそれほど難しくないと思うのだが、どのように動作するのが望ましいかということを考えると非常に難しい。 Googleの検索システムは非常に高度なので、それに匹敵するものを作るのは難しいのだ。

だが、ここはPureBuilder Simplyにふさわしいシンプルなものを目指すことにする。

設計その1

とりあえず、grepを使えば話が早いのだが、HTMLだと余計な要素を含んだ検索になってしまう。 HTMLからタグを除去するのは難しくないが、どういうポリシーで除去するのか、いつどうやって除去するのか、などが難しい。

PureBuilder Simplyの構成から言えば、生成時に、Pandocで生成するのが望ましい。

$ pandoc index.md -t plain index.txt

だが、生成時に生成を全く無視してインデックスを生成するのはどうだろうか? そもそもPre pluginsはソースファイルを、Post Pluginsは生成したHTMLファイルを加工するものであるため、本来の目的から逸脱してしまう。 例えばPre Pluginsを使って

とかもできる。

ただ、今のところ検索対象になるようなソースファイルを加工するようなPre plguinsを使っていないため、別にこのようにする必要性はない。

設計その2

あとから処理するためのもの。 .indexes.rbm に基づいて処理を行う方式。

検索

いずれにせよここまでやってしまえば検索は簡単。 grepで検索できる状態なので、シンプルに検索可能。

AND検索の要領としては

ものすごく検索対象が多い場合は、検索対象そのものを絞り込んでいくほうがいいだろう。 だが、プロセス起動回数が増えることを考えると、そのような場合は自前実装のほうが良い可能性が高い。

OR検索はもっと簡単で

スペースの取り扱い方とか、case問題とか考え始めると難しい。 ただ、世の中そんな複雑な検索をしている検索エンジンはあまりないし、多分ローカルにそんなもの作ったところで報われないのでこれくらいでいいような気もする。

ANDまたはORではなく自由にANDとORを結合できるようにした場合は、expr自体に評価できるメソッドを追加すると良い。例えば

といった感じである。

あとがき

検索機能の実装自体は難しくないのだが、ChienomiをPureBuilder Simply化するという話になると結構難しい。

既にかなりの記事があり、検索からの流入も多いため、どうしても全記事に対してマップせざるをえない。 これもなかなか面倒だ。

だが、もっと問題Chienomiの記事は書き方が一定でない、ということだ。

Chienomiの記述形式はPOD, RDoc, ACCS2, PureDoc, PureDoc2, PureDoc2::Markdown, Pandoc Markdownがある。 PureBuilder SimplyはPandocでの処理を前提としているため、なんとかしないといけない。

過去記事については諦める方針ならばHTMLとして抜き出すという方法もあるのだが(Mimir Yokohamaでウェブサイトのサルベージでよく使う方法だ)、 できれば避けたいというのもある。

また、タグとカテゴリのつけ方が一定ではないため、これを処理しなければならない。

さらに厄介なのがメディアファイルだ。 WordPressはメディアファイルの使い方が独特だし、そのためにメディアファイルについてはWordPress上で追加する方法をとっていた。 さらにサイト移行時にメディアファイルを紛失したこともあって、結構大規模な作業になると思う。

そのことを考えると一筋縄ではいかない。

それはともかくとして、サイトの検索で非常に複雑な演算子を使いたがる人はまずいない、 どころかサイト内検索なんてほぼ使われていないに等しいので、基本的な検索機能で十分だと思うのだが、それであればこの通り実装はとても簡単だ(例によって設計で稼いだ感があるが)。

というわけでちょっとした実装例、そしてシェルスクリプトサンプルとして役立てば幸いである。

OVOフルデジタルスピーカー * Linux

OVOスピーカー

OVOスピーカー

宮城県のJDSoundがクラウドファウンディングで資金調達して開発したポータブルスピーカー、OVO。 小型ながらシアタークオリティのサウンドを発すること、D/Aコンバージョンを含まないフルデジタルであることを売りとしている。

非常に高い期待値でかなりの資金を集めたのだが、デリバリーが極度に遅れたことと、度重なる仕様変更で相当不満が高まっており、全体でみればスタート時点で評判はあまり良くなかったように見える。

私のところには2018-10-31に到着した。

なお、念のために前置きしておくが、私はプロの音楽家であるし、 スピーカーも何種類かのポータブルスピーカー、手軽なPC向けのElecom, Creative, BOSEのスピーカー、全く手軽ではないSony, DENON, FOSTEX, YAMAHAのスピーカーを持っているし使っている。

基本的な仕様

サイズ的には十分にコンパクトで、2つのMicroUSB Type-Bポートを持つ。

操作系はレバーボタンがふたつ、表示系はLEDインジケーターが16個、 脚は裏側と天面にある。

なぜ脚が天面なのか、というのは著しく疑問だった。 単にひっくり返るだけではなく、ステレオスピーカーなのでひっくり返してしまうとLRが逆になる。 設定でLR入れ替えは可能なのだが、わざわざ天面に脚をつける必要は全くなかったのでは…と思ったが、やってみてわかった。 横置きしたときにやや手前に傾くように傾斜しているので、正しい向きで設置するとスピーカー下向きになってしまう。逆にすれば上向きになる。なるほど。

MicroUSBポートはそれぞれ“Audio”, “Power”と表示があるのだが、この表示も大変にまずい。 USB audio deviceとして扱う場合はAudioポートに接続し、Powerポートは補助電源となる仕様だが、アナログ入力する場合、逆に“Audio”を電源供給としてオーディオデバイスとは“Power”で接続する。 非常にわかりにくい。

ちなみに、 製品版ではADCを含まないためにそもそもオーディオデバイスとの接続自体できない 。 これは致命的であるように思えた。だが、実はそうでもなかったことについては後述。

操作方法は大変わかりにくい。 レバーボタンを押すと設定モードになり、レバーで項目移動、ボタンで決定する方式。 なんかBIOS画面っぽい。保存または取り消しは反対側のレバーで行う。

このわかりにくさを緩和するため、インジケーターが意味する設定を表示するシールが付属している。 これがあれば操作方法さえわかっていれば戸惑うこともないだろう。

OVOはフルデジタルスピーカーであり、その内容としてはDnoteを使っている。 Dnoteの詳細についてはDigital Audio Lab.で掲載されている

Dtoneの基本的な特性は空間に余裕がない場合でも音量や音質を確保しやすいということだろう。 デジタルスピーカーそのものは昔から試行錯誤されてはいるのだが、いまひとつ実用には至っていない。 Dtoneが理想形というわけでもないと思うが、次世代の期待ということで刮目せざるを得ない。

LinuxにおけるOVO

基本的にダメだった。

PulseAudioから見ると-0.26dBでOVOのボリュームは0となり、-0.00dBで100になる。 あまりにもレンジが小さく、ボリュームコントロールが機能しない。 ちなみに、-0.26dbでOVOのボリュームは0になっているのだが、OVO自身はちゃんと信号を受け取っているのでインジケーターは適切に表示される。だが音は出ない。

また、USBバスパワーで駆動する場合(補助電源を使うとしても)ローパワーモードにしないとうまく動作しないかもしれない。

また、OVOはボリュームレバーでコンピュータ側のボリュームをコントロールするようになっているのだが、これはXF86VOLUMEキーとして機能するため、プライマリデバイスの音量が変更されてしまい全く機能しない。 さらにいえば前述の通り非常に特殊なボリュームレンジで動作することから、XF86VOLUMEDOWNしてしまうと-0.26dBよりも小さな音が設定され音がでなくなるため、仮にOVOをプライマリにしたところで何も解決しない。 この状態でボリューム・コントロールするにはデバイスボリュームではなくPulseAudioのアプリケーションボリューム側で絞って調整することになるのだが、これだと起動時にOVOから音を出すアプリケーションは音量設定前となり100%の音で出るし、OVOも100%で出すことになるから結構な爆音で出ることになる。ちょっと困る。

OVOの設定でローカルボリュームをonにした場合はちゃんと機能する。 恐らくLinuxで運用する場合は必須だろう。この場合はOVOのデバイスボリュームを100%に固定しておき、OVO側でボリューム調整が可能。 また、この状態であればデバイスボリュームを操作することでも音量調整ができる。

ただし、デバイス自体はやや不安定で、デバイスは接続されているが音が出ない、という状態に落ちたりすることがよくある。 また、ソースボリューム、というかソースのそのものの波形に影響を受けやすく、例えば随分音が小さいAmazon Videoなどはかなり小さな音で再生される。

OVOスピーカーのレビュー

試聴時にはわかっていたことだけれど、「ポータブルスピーカーとして無難なレベル」を出てはいない。

別に音が悪いということはないのだけど、表現力はそんなにないし、音が埋没しやすい。 標準設定ではLOW+2となっているのだけど、この設定はものすごく音がこもってしまい、ポータブルスピーカーの悪い音として普通のレベルになっている。

ただし、これは調整することで改善可能である。 HIGH+1またはLOW+1&HIGH+2が正しい音に近づくようだ。 LOWはBASSなのだが、HIGHはTribbleではなくヴォーカル音域あたり(2kHzかな?)である。

この状態であれば、確かにサイズからすれば驚くほどクリーンな音が出る、といっていい。

が、それはサイズ比、というか重量比である。 値段比で言うと製品版は2万円くらいするようなので、2万円くらいするスピーカーならもっといい音出せるからなぁ…と思ってしまう。

サイズ比でもやや微妙で、Victim Royaler Speakerというポータブルスピーカー(恐らく現在は入手不能)が非常に良い音を鳴らすのだが、体積的には2倍いかない程度、フットプリントは同等である。 ただし、重量に関してはこちらはOVOの比ではないほど重いので、重量比になると「すごくいい音を鳴らす」と言っていいだろう。

なお性質上筐体が非常に強く震えるのだが、そのために「置き方と置く場所」がすごく重要になる。 裏側を下にしてべったり置いたほうが響きやすいし、置く場所は板の厚い机の上がいい。 これで低音がぐっと強まり豊かな音になる。

難しいのは配置で、音がよく聞こえる位置というのは、「スピーカーを横置きしてスピーカーの上に頭をもってきたとき」である。 空間に対するスピーカーとしては非常に弱いニアスピーカーである。

また、音楽を鳴らしたときの話に限って話をしている。私は音楽家であって、特に映画フリークではないから、シアターシステムとしてどんな音声チューニングが好ましいか、ということはよくわからない。 ただ、低音はかなり出るし(そのかわりこもってしまうが)、高音を強調すれば越えも聞こえやすいので映画を見たりするのにはいいかもしれない。 実際、このスピーカーでアニメーション作品を見たところ、声優の演技は非常に聞きやすく、分離して邪魔にならない程度にクリーンに音楽が聴こえた。 OVOは元はGODJ OlusというDJシステムに内蔵されていたスピーカーであるため、DJ向きのチューニングなのかもしれない。 そう考えればこもった低音もある程度納得できる。

音楽を聴く上で大きなディスアドバンテージとなるのが中高音域の薄さだ。 ベースの際立ちはスピーカーとしては素晴らしい(スピーカーではベースはもわもわしてしまってベースの音は判別するのが結構難しい)のだが、アコースティックギターやピアノといった楽器がうまく響いてこない。Highを上げてやればこもってしまうことはなく粒立ち良く聴こえるのだが、粒立ちが良いために調和が悪く、広がりもないのであまり音楽的でない。多分根本的な問題は音の広がりがなさすぎることになるのだと思う。実際、スイートスポット小型スピーカーとしても非常に狭い部類で、ちょっと席を立つと音は一気に悪くなる。だから、もしOVOをでかいキャビネットに組み込んだらかなりいい音が出るのではないかとも思う。

音の広がり方という意味ではラップトップのスピーカーにすごくよく似ている。ラップトップのスピーカーでこの音が出てくれたら幸せなんだけど。

私はメインで使用しているコンピューターのシステムスピーカーとして4000円ほどのElecom MS-75CHを使っているのだが、 こちらは丸みのある音で疲れにくく、意外と音楽も聴けてしまう。それと比べると音は確実に良いのだが、音楽的に優れているかと言われるとちょっと困ってしまう。 もっとも、MS-75CHは極端にいいバランスを持ったスピーカーであり、ここまで使えるスピーカーはもっと高い金額でもないので比べるのは酷かもしれない。

19800円(税別)という価格はだいたいM-AUDIO BX5 D2と同価格である。これは35+35Wのスタジオモニターであり、かなり大きなスピーカーだが、音は素晴らしく良い。さすがにBX5と比べると、比べる意味がない程度には違う。 だが、BX5は設置場所も必要だし、ちゃんと鳴らすためには結構な音量が必要になるのでその点で見るとOVOに利点もある。デスクトップモニターのAV42(15000円くらい)にしても音は圧倒的に向こうが良いが、40Wクラスのデスクトップモニターは設置するためにはデスク自体をそれを前提として設計しなければならず、マルチディスプレイと組み合わせるのは相当難しいので、メリットはあると思う。

やはり価格に対する音という点ではどうしても気になってしまう。これで8000円くらいなら絶賛できるのに。 ラップトップと組み合わせやすいスピーカーとしても、同価格帯にTimedomain lightという強敵がいたりするため、ここでも明確なアドバンテージがない。 だが、「携行向きの」という条件をつけると話は大きく変わってくる。携行するときはまさかリスニングルームで聴くわけでもないので、これだけの音が出てくれれば、会議室のプレゼンテーションでも、騒がしい展示場でのデモンストレーションでも、彼女に家にお邪魔したときでも文句ない音を聴かせてくれる。

だからリスニングスピーカー(いわゆるオーディオスピーカー、あるいはモニタースピーカー)と同列で考えなければ素晴らしい音質なのだが、純粋に音質だけで勝負すると厳しいものがある。 基本的には音に不満はないし、OVOの使われ方を考えれば文句はない。リスニングという特別な条件を前提として純粋に音質だけを求めるなら最善ではないということだ。

もし家の中でステレオホームシアター的な使い方、あるいは音楽鑑賞用にスピーカーを求めているのであればOVOが最適解ということはないだろうと思う。 それはもっと大きいスピーカーのほうが向いている。 あるいは、固定的に使用されるラップトップ用スピーカーとしてもBOSE Companionもあることだし、実際私はBOSE MM-1も使っているけれどリスニング音質としてはこちらのほうがずっと良い。要はOVOの口上が過剰なのであり、「ポータブルスピーカー」という点を踏まえれば音は良いし、不満はない。だが、OVOがあれば映画館いらずなどというJDSound側の宣伝文句は鵜呑みにすべきではない

また、構造的理由から高サンプリングレートの音源はその意味を消されることとなる。 それが無意味なことだとは思わないが、ハイレゾ音源に本当に不可聴音域までの音を求めている人はこれでハイレゾ音源を再生すべきではない。

音量

デジタルスピーカーの潜在性という点で注目したい、「駆動電気量に比例するはずの音量がめちゃくちゃ出る」というのは事実だ。

Victim Royaler Speakerは音量も非常に大きいのだが、こちらは10+10Wである。 対してOVOは1Aと表示されており、USB給電は5Vであるため5Wである。 5W、この筐体でこの音量はすごい。机の上だとさらに大きくなる。(この場合筐体が巨大になったのと同じ話だが)

シアタークラス、とは言わないが、とりあえず防音のないマンションで聴く音としては限界以上に出る。 6畳クラスの部屋ではうるさすぎるほどだ。普通に20Wか30Wクラスの音量といった感じ。

ラップトップだとデモンストレーションするときに音量が足りない、というケースは非常に多いのだが、この問題はあっさり解決される。 音量だけの問題であればもっと小さなポータブルスピーカーでも良いのだが、音質的にもリスニングスピーカーとして選択する領域では言うほどのことはないだけで、BGMとして流しておくのになにも不満はない音であるため、プレゼンテーションやデモンストレーション用途には非常に良い。 実際、私はこの目的で購入したのでなかなか満足だ。

サイズと重量と携行性

サイズと重量に関しては携行性最優先で考えるとだいぶ不満がある。

コンピュータ系の仕事を外でするタイプの人は持ち運ぶ機材も多いので大きめのバッグを使っているだろうが、それでも結構なスペースを取る。 コンパクトなバッグを使っている人は収まらないかもしれない。

重量的にも気にならないほど軽いとはいえず、これひとつ持つことで重量感が変わる。 だから、「携行性が良い」とは言えない。

が、間違いなく「携行性はある」。 Victim Royaler Speakerは音も音量も大変優れているが、体積的にカバンの中では相当邪魔になる上に、重量がかなり重いのでよっぽどのことがない限り持ち歩く気にはならない。 音楽系のなにかをするときくらいのものだろうか。スタジオだとだいたいコンソール経由で音が出せるから、ダンススタジオでの練習なんかに使う程度な気がする。 だいたい、重量がありすぎて、無造作にカバンの中に入れてしまうと壊れそうだ。

OVOは常時携行する気にはならない重さだが、必要であれば持ち運ぶのが苦にならない程度ではある。 音質と音量、そして携行性のバランスを考えたときに、「ただ音さえ出ればいい」というわけではなく、きちんと音質も気にしつつ音量も出したいようなケースにおいては許容されるギリギリのバランスであると思う。

どちらかといえば気になるのは音の狭さだ。 音が狭いため望ましい設置を行うためにはキーボードの手前に置く必要があるのだが、そこまでコンパクトというか薄いわけではないので、すごく邪魔である。 ケーブルが出るのでなおさらだ。

製品版でADCが省かれたことは後退ではないかと考えたものの、実際のところ電源確保が別途になることも考えると、あまりポータブルオーディオと組み合わせるようなものではなく、そのような場合はまあまあ準備をするもので頻繁にある状況ではない、と考えると別に別途ボックスがあっていいか、とも思う。というか、そこまでしてOVOで聴きたいかが疑問。なんだか高価そうだし。

結論

「高い」「言い過ぎ」 これに尽きると思う。

携行性の良いポータブルスピーカーとしてAUKEYのスピーカーを持っているのだけど(これはメーカーからご提供いただいたもの)、音量はまぁまぁでるものの騒がしい空間だと流石に厳しいし、音質も「音楽も聴くに耐えないわけではない(ラップトップスピーカーよりはいくらかマシ)」という程度に留まる。

Victimのポータブルスピーカー(こちらはセラーにご提供いただいたもの)は音質も良く音量も出るが、重すぎて携行性に乏しい。

私がOVOに期待したのは、「講演とかプレゼンとかデモとかでちゃんと聴こえて、音質も添え物じゃなく惹きつけられるくらいのものだといいな」ということなので、その期待には100%応えてくれたから、私としては満足だ。

だが、それはクラウドファンディングで11000円ほどで手に入れたからであって、2万円は高い。

音楽鑑賞用のスピーカーとして見れば2万円の音ではない。ポータブルスピーカーであることを抜いてしまったら、そんなに音は出ていない。 まぁ、「動画視聴用」と強調しているので、オーディオスピーカーとして評価すること自体が間違っているのかもしれないけど。

そして、「映画館を完全再現」はできていない。だいたい、それはいくらなんでもスピーカーアレイをナメ過ぎだ。スピーカーアレイはモノもそうだが、その配置にはものすごくテクニックが必要になる。PAエンジニアをナメてはいけない。

だが、言っていることの中で間違いなく事実であるポイントがある。 それは「声が聞き取りやすい」だ。

私が持っているスピーカーは全てモニター、あるいはオーディオスピーカーなので、個人的なシアタースピーカー/AVスピーカーの経験はそもそもないのだが、 私が持っているどのスピーカーよりも声は聞き取りやすく、アニメでもYouTubeでもスピーカーにおいて常に感じるセリフの聞きづらさがかなり解消される。 確かに、「動画視聴用」程度のライトな感覚ならば文句の出ようがない。いや、それでも2万円は高い気がするけれども。

価値は間違いなくあると思うのだけど、絶賛するなら8000円、賞賛するなら15000円くらいで出してほしかったところだ。 そして、大言壮語に良いことはない。

Arch / Manjaro open-iscsiのサービスユニット名が変更

Manjaro Linux Stable Update 2018-10-25でopen-iscsiのサービスユニットがopen-iscsi.serviceからiscsi.serviceに変更になった。 これはArch Linux側でも行われた変更である。

結果的に、open-iscsiに依存しているユニットが正常に起動できなくなった(特に自作したサイトローカルユニットは)。 それに加え、従来open-iscsi.serviceをenableにしていた場合でも起動されなくなった。

必要な対応は以下の通り。

まず、open-iscsi.serviceという名前を用意する場合

  • /usr/lib/systemd/system/iscsi.serviceAlias=open-iscsi.serviceを書いておいた上でenableする
  • または/usr/lib/systemd/system/open-iscsi.service -> /usr/lib/systemd/system/iscsi.serviceというシンボリックリンクを用意する

iscsi.serviceという名前に合わせる場合

  • 他のユニットでopen-iscsi.serviceとなっている箇所を全てiscsi.serviceに修正する
  • 必要ならばiscsi.serviceをenableする

これはイニシエータの話だけれども、ターゲット側もopen-iscsid.serviceからiscsid.serviceに変更されているので同様である。

Mousepadで設定が保存されない

XFce4のエディタ、Mousepadだが、2年ほど前から一部の設定が保存されなくなっている。 bugとして報告もされているのだが、一向に修正される気配はない。

反映されないのは行番号表示、折返しなどだ。

修正する気はなさそうなので、直接修正する。

% gsettings list-recursively | grep org.xfce.mousepad 

これでMousepadの設定情報が得られるので、必要な部分を修正する。

% gsettings set org.xfce.mousepad.preferences.view show-line-numbers true
% gsettings set org.xfce.mousepad.preferences.view tab-width 4
% gsettings set org.xfce.mousepad.preferences.view word-wrap true

Systemdがserviceプロセス終了時にstopするのは正しいか

SystemdユニットでExecStopを書いたのが初めてだったのだけれど、どうしてもExecStopを書くとTypeによらずstopされてしまう。

Typeoneshotであるならばこれは正しい。 Type=oneshotである場合、.serviceユニット起動時にExecStartを実行し、この終了を待つ。 ExecStartプロセスの実行中はactiveとなり、実行が終了するとサービスそのものが終了したとみなし、inactiveになる。

Systemdユニットに詳しい人は割と少ないのでサービスタイプについて改めて解説しておこう。

oneshotは単純にその時に実行するだけのサービスである。 起動は実行終了を待ち、終了したらサービス自体を終了する。

simpleはデフォルトのサービスタイプである。 このサービスタイプはプロセスを実行していることで機能するサービスである。 フォアグラウンドで実行を継続するタイプのサービスに対して適用し、起動時は実行すると起動完了とみなす。oneshotのように起動したプロセスの実行中がactiveとなる。

forkingはoneshotのようにサービスの実行終了を待つが、ステータスは直接実行したプロセス($MAINPID)だけでなく、その子プロセスで判断する。 これは実行するのがサービスそのものではなく、起動スクリプトである場合に有用である。

さぁ、ここまではいい。 問題は、ExecStopがいつ実行されるのか、である。

普通に考えればsystemctl stop foo.serviceしたときに実行されるものだろう。 ところが実際は「サービスが終了した場合にも実行される」。 これはExecStopPostと同じだ。

だが、そうでないケース(今回の場合は、iscsiターゲットにログインし、ファイルシステムをマウントする)は困ってしまう。 このようなケースにおいてはiscsiターゲットログインとファイルシステムマウントをそれぞれ別のユニットとして管理するという方法もあるが、いずれにせよ「実行時に終わっては困る」のである。 このようなケースにおいてはTypeとしてoneshotを指定した上でRemainAfterExit=trueとすることで目的を達することができる。 これにより、実行が終了した(起動したプロセスが終了した)場合でも実行ステータスは実行中になる。

つまり、ExecStopというのは、「サービスを停止する」のではなく「サービスプロセスのガベージコレクション」なのだ。

RemainAfterExit=trueは基本的にoneshotと組み合わせる前提になっている。 simpleforkingでも作用するが、マニュアルにはoneshot前提で書かれている。 つまりSystemdが起動したプロセスが終了してもサービスは有効な状態になっているようなスクリプトはoneshotであるべきだと考えられているのだろう。

だが、これは適切なのだろうか? 確かに、実行終了してもactiveな状態になっているようなものはsimpleの「サービスを提供するために実行しつづける」には該当しないし、forkingの「子プロセスがサービスとして機能する」である必然性もない。 だからoneshotだけの例外的な振舞いだと考えていいように思われるが、それでも「サービス終了時に明示的にstopしてしまう」のであればRemainAfterExit=falseがデフォルトであることには違和感がある。

それ以上に「ExecStopは明示的に停止された場合にのみ実行する」オプションがないのは問題ではないのか。 OnSuccessOnFailreはあるが、「明示的に指定された場合のみ実行したい」という希望には沿わない。 (あるいは、存在するが私が見つけられないのだろうか)

むしろ「OnSuccessOnFailreがあるのだから、ExecStopは明示的停止した場合にのみ実行したい」というのが自然なように思うのだが…

シェル芸: 並列処理するシェルスクリプトで表示も並列(分割)にする @4種

概要

シェルスクリプトでの並列実行時

各Workerが情報を出力する(例えばffmpegなど)場合ぐちゃぐちゃになって表示されてしまう。

特にrun時間が長い場合、表示も分けて並列で(multipane, split view, STDOUT splitting)表示したいところだ。

考えはするもののなかなか難易度も高く、実際にやる人は少ないと思う。 特にASCIIエスケープシーケンスを伴う場合や、プログラムがTTYを要求する場合は初歩的な知識では不足する。

いずれもなかなかのシェル芸なので、楽しんでいただけたら幸いだ。

tput (縦並び・水平分割 split horizontal)

シェル芸奥義tputを使えば横分割も可能。tput cupでカーソル移動を実現している。

  • 各workerは出力をファイルに保存する
  • 子プロセスとして定期的に画面出力を行うdisplayerを起動する
  • メインプロセスではdisaplyerのpidを保持しており、workerをすべてwaitしてからこのプロセスを停止する
  • displayerはsleepを使ったタイマーループ
  • tputで画面クリアやカーソル位置の移動を行っている
  • 開始行の位置は行数をワーカー数で割った数 * ワーカーナンバーに等しいが、余裕をもたせるため全体行からは3、出力行数は3をひいている。(出力行には2行が追加されるので、1行空白をもたせている)

なお、Zshの正数除算は切り捨てが行われる。

multiview (横並び・垂直分割 vertical split, パイプ)

それほど難しい表示でない場合はmultiviewが便利である。インストールは

$ sudo npm -g multiview

でできる。

これで

で大丈夫だ。

ただし、multiviewが表示される前に大量に流し込んだり、multiviewで表示可能な速度(結構遅い)より早く流し込んだりするとえらいことになる。 (簡単に言えばバッファがあふれる)

なお、ASCIIエスケープシーケンスを含むものも認識はするが、画面表示がおかしくなったり、スローダウンしたりするのでおすすめできない。

Terminator

ffmpegのようなプログラムは進行状態をかなり緻密に標準出力に書き出す。 進行状態を書くプログラムはどれも似たようなもので、だいたいがカーソル位置を動かすASCIIエスケープシーケンスによって実現している。

このようなプログラムの場合、少なくともcolumnやtputを使う方法はうまくいかない。

そこで登場するのがTerminatorである。 この方法は恐らくここにあるすべての方法の中で最も理想的に動作する。 ただし方法自体はあまり美しくない。

まず、Terminatorをインストールしたら起動し、右クリックでレイアウトを施してから再び右クリックで設定を開き、レイアウトとして保存する。 さらに、ここでCustom commandとして専用のセットプランスクリプトを用意する。

これにより、Terminator上で開かれるシェルはすべて.sttyというファイルに自身の$TTYを出力してからcatに置き換わる。

やっていることは

  1. .sttyファイルに対してflockによるロックを伴って$TTYを書き込む
  2. catにexecする

だけである。

あとは次のようにする。

ffmpegなどはリダイレクトやパイプを拒否するので、予め/dev/pts/nにリダイレクトした上でworkerを起動している。youtube-dlのようにリダイレクトを受け入れるのであれば

とすることもできる。

なお、exec catとしているが、実のとろここのcatプログラムは一切使われない。 出力はcatに書き込んでいるのではなく、仮想端末そのものに対して書き込んでいるからだ。

catにしている理由は

  • プロンプトが邪魔になるのでシェルを起動したくない
  • catならタイムアウトで終了したりしない
  • シェルプロセスを終了する方法としてシェルプロセスをkillしたり親端末をkillしたりする以外にcatに対してEOFを送るという手段が確保できる

からだ。

GNU screen

今回の本命である。表示がある程度バグるものの、Terminatorよりは美しい方法で、multiviewよりもうまくいく。

まずはレイアウト用の設定ファイルを用意しておく。 縦分割のほうが速いが、横分割のほうが乱れにくい。

layout new
split
split
screen 0
title worker1
focus next
screen 1
title worker2
focus next
screen 2
title worker3
detach

さらに先程と同じように起動用のスクリプトも用意しておく。

これで準備は完了だ。

Terminatorの場合は事前の設定が必要で、任意数のワーカーを起動することは事実上不可能なのだが、 screenを使う場合は実行時にscreenの設定ファイルを生成するようにすれば可能というメリットもある。

任意数のワーカーを使う場合は分割は諦めたほうが良い。 その場合でもウィンドウ切り替えで処理でき、並べたい場合は任意にレイアウトできるため柔軟性は高い。 さらに分割を諦めるのであれば設定ファイルを使わずに-dmオプションで起動し、-X screenオプションでウィンドウを増やしていくこともできる。 ビューの分割はデタッチ状態ではできない。

このスクリプトで起動後にsleepしているのは、screen起動時に起動シェルセットアップ状態に関係なくデタッチされるため、.sttyの書き込みが間に合わないからだ。

補助知識

端末について

基本的に古の端末は文字だけを扱うので、「構造的に組版される」ようにできている。 つまり、座標はX何文字目、Y何文字目という扱いになるのだ。

互換性のために現在でもこのような仕様になっているが、実際にはドット単位で取り扱えるようになっている場合も多い。

だが、互換性をもっている以上、文字数を数える構造は今も持っている。 だからtput linesで端末の行数をカウントすることができるのだ。 これは現在のグラフィカルなアプリケーションの多くでは割と難しい。

端末の互換性

一般的にはVT100という古の端末をエミュレートするようにできているのだが、互換性をもつ範囲でも微妙に違うためうまく動作しないことがある。 これは、現在の端末はX Window System上で動作するためにVT100ではできないようなことがいろいろできるためだ。

tputはそのような端末の互換性問題を吸収する。 例えばclearは単に現在のウィンドウの行数だけ空行を出力するような仕様の端末も多いが、tput clearすると表示そのものがクリアされる場合が多い。

Terminator

ビューを分割できることで有名なターミナルエミュレータ。 ちなみに、分割自体はKonsoleでもできる。

pts

仮想端末はそれぞれ/dev/pts/nという形でアクセスできる。 これは「端末に対して読み書きする」プログラムは少なくないからだ。

これは端末そのものであり、このファイルに書き込めば端末の画面上に表示されることになる。 「端末上で動作しているプロセスに対する読み書き」ではないことに注意してほしい。

典型的にはwallやtalkといったプログラムがこれを使う。 SSHがリダイレクトとは別に端末で操作できるのも、標準入出力ではなく端末デバイスを直接取り扱うためだ。

exec

シェルコマンドのexecは続く引数をコマンドとして実行し、そのコマンドで現プロセスを置き換えるが、引数がない場合は自分自身を自分自身で置き換えることになるため何もしない。

ただし、このときリダイレクトしているとファイルディスクリプタのオープンは行う。 そしてファイルディスクリプタをオープンしたプロセスで置き換えることになるため現プロセスでファイルディスクリプタは開きっぱなしになる。

という理屈はさておき、現在のシェルでファイルディスクリプタを開いたままにしておきたい場合にexecを使うのはそういう呪文なのである。 空のexecを使うシーンは他にないため、呪文だと思っても割と差し支えない。

基本的には

exec command 9> file

とするのと同じことである。 この場合commandではリダイレクトが効くのでファイルディスクリプタ9は開きっぱなしであり、そのコマンドでファイルディスクリプタ9に対して書き込みができる。 ここでcommandがなければ自分自身になるため、当該シェルプロセス上でファイルディスクリプタが開きっぱなしになる。

なお、{fd}>という書き方はZshで整数型変数を使う場合のみ可能な特殊な書き方。

爆速レンサバ 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だからこそ使える部分も大きい。なにより、プライバシーを脅かすかもしれない要素は廃してコストをかけて自前で用意するあたり気合が入っている。

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

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