はじめに

先日、C100 と Geeko Magazine の告知を出した際、geeko.jp のウェブサーバーが落ちてしまいました。普段は全然問題ないのですが、512 MB の VPS のため、ほんの少しアクセスが増えるとメモリーを使い果たしてしまうようです。

openSUSE の Web サーバーは 2009 年頃から使い続けていることもあって Apache で、しかも MPM (Multi-processing modules) は prefork です。複数のアクセスに対してプロセスを作成して対応するので、メモリー使用量やプロセスの生成コストが課題です。設定変更前のメモリー使用量を見ると次のような状態で、1プロセスあたり 30 MB 前後使っています。とりあえずの対策としては、プロセスの最大数を抑えればよいのですが、メモリー使用量削減のため、これを機に MPM を event にすることにしました。

少し前までの Apache の MPM といえば worker で、スレッドを使って並列処理をします。私の知識もここで止まっていました。event は新しい MPM で、今どきのイベント駆動で実装されています。ワーカースレッド内で受信待ちやソケット書き込み待ちをせずに、パケット到着や書き込み可能になったイベントを受けてスレッドに処理を割り当てるようです。

MPM を prefork から event にするために必要なことは、次の通りです。

  • event MPM をインストールする
  • PHP を mod_php による実行から mod_proxy_fcgi + php_fpm (FastCGI) による実行に変える
  • php_fpm で Web アプリを実行できるように AppArmor のプロファイルを設定する

結構面倒くさいですね。

openSUSE のバージョンは Leap 15.4 です。

event MPM をインストールする

これは簡単で apache2-event をインストールするだけです。apache2-prefork もインストールされいる環境では、apache2-event が優先されます。

mod_proxy_fcgi + php_fpm への変更

これまでは mod_php でこの Word Press などを実行してきました。mod_php の場合、PHP のスクリプトは Apache のプロセスで実行されていました。マルチスレッドに対応していない mod_php は event や worker では使用できません。php_fpm で PHP を別プロセスで起動しておき、リクエスト時にこの PHP プロセスに処理を依頼する形に変更する必要があります。

セットアップ手順は以下の通りです。php7-fpm をインストールして、パッケージに含まれるデフォルトの設定を有効化します。

Apache 側の設定を変えます。openSUSE では Apache で使用するモジュールは /etc/sysconfig/apache2 で有効化します。php7 を削除し、proxy と proxy_fcgi を追加します。

次に、php ファイルのハンドリングを mod_php から php_fpm に切り替えます。/etc/apache2/conf.d/ に以下のファイルを作成します。openSUSE のデフォルト設定では php7_fpm は 9000 で待ち受けていますので、php へのアクセスを 127.0.0.1:9000 に転送するようにします。

ProxyErrorOverride on は php_fpm がエラーを返した場合に、php_fpm のエラーメッセージをそのままブラウザに返すのではなく、Apache 側で設定したエラー画面を表示するための設定です。

AppArmor の設定変更

openSUSE Leap 15.4 では php_fpm 用の AppArmor プロファイルが含まれており、php_fpm が行える操作に制限がかかっています。そのため、何も設定しないと、php-fpm が php ファイルにアクセスできません。/var/log/audit/ に次のようなログが出力され、403 が返ります。

php_fpm のプロファイルを調整するには、/etc/apparmor.d/php-fpm.d/ に次のような設定ファイルを作成し、php-fpm がアクセスできるディレクトリを設定します。

結果

設定後にメモリー使用量を見てみます。

php-fpm のプロセスが増えましたが、Apache のプロセスのメモリー使用量はぐっと小さくなりました。Apache と php-fpm の初期プロセス数、最大プロセス数はこれから調整したいと思います。

kkc.el はどんなものなのか

By ribbon @ 2022-06-19 22:36

Emacs で日本語テキストを入力する場合、通常は Windows 上のかな漢字変換システムを使っています(Teraterm からつなぎ込んで作業をすることが大半なので)。ATOK 、Google日本語入力、MS-IME(どうしても、という場合)のどれかを使うのですが、コンソールのみで漢字変換が出来ればもう少し楽になります。
色々調べたところ、Ctrl+\ でかな漢字変換モードになる事が分かりました。かな漢字変換モードになると、Emacs 内部でかな漢字変換が出来るようになります。しかし、かな漢字変換のための変換サーバやライブラリをインストールした覚えはありません。しかも、その手のソフトを全く入れていない、FreeBSD でもかな漢字変換モードが動いてしまうのですね。そこで、一体どうやっているのかを探ってみました。

Ctrl+\ でかな漢字変換モードになると、kkc-なんとか というコマンドが使えるようになります。ただ、一覧を出してみても、バージョン情報等はでてきませんでした。そこで、emacs のソースを展開し、kkc というキーワードで展開してみると、 kkc.el というのが見つかりました。中身をみると、この emacs lisp 自体でかな漢字変換作業をしているようです。コメント欄には AIST が作ったと書いてありました。AIST から GNU に寄贈され、GNU Emacs の一部になっていることのようです。ソースは

http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/international/kinsoku.el?h=emacs-28

にありました。

確かに、他のかな漢字変換システムを使わなくとも、Emacs だけでかな漢字変換作業が出来るのは便利なのですが、機能がちょっと低すぎます。最低限のことしか出来ません。また、カスタマイズも出来ません。どちらかというと、他のかな漢字変換システムが動いていないときの非常用、という感じがします。

Rancher Desktop はデスクトップ環境上に開発用の Kubernetes 環境や Docker 環境を構築できるアプリケーションです。Rancher は現在は SUSE の傘下にあり、Rancher Desktop も SUSE の Rancher チームを中心に開発されています。

先日、Docker Desktop が個人用途を除いて有償化されたため、代替として注目されています。

インストール

Rancher Desktop の公式ページにも案内がありますが、RPM パッケージは以下の OBS リポジトリで配布されています。
https://download.opensuse.org/repositories/isv:/Rancher:/stable/rpm/

インストールはいつもの通りです。

あとは、メニューから Rancher Desktop を選べば起動できます。

Kubernetes のインストール

起動すると、何をセットアップするか聞かれます。ここで、containerd を選ぶと nerdctl が使えるようになります。docker を選ぶと、docker コマンドや API が使えるようになるはずです。

しかし、何やらエラーが。

「Reset Kubernetes」でリセットしてみたところ、今度は何も出ませんでした。

クライアントコマンドは ~/.local/bin/ にインストールされるので、パスを通しておきます:

~/.kube/config は勝手に設定してくれるので、らくらくですね。

完了すると Kubernetes などが動いている VM (Lima) が走っていることが分かります。

使ってみる

簡単に何かを動かしてみましょう。

あとはブラウザで http://localhost:8080 にアクセス

kubectl によるトンネリングだけではなく、Rancher Desktop 側にもポートフォワーディング機能があるようですが、私の環境では出てきませんので、もう少し探してみます。

今回は ncdu を紹介します。

ncdu は curces を使用した、ディスク使用量を表示するツールです。その名の通り、du の curces 版です。起動すると、カレントディレクトリの各サブディレクトリやファイルの大きさや使用量を表示します。

注目するディレクトリは、カーソルキーまたは jk キー(vi と同じ)で移動でき、ENTERキーで、そのディレクトリに入ることができます。また、名前順、日付順、項目の数順(おそらく、サブディレクトリ中の項目数)、mtime順に整列し直すこともできます。項目数については、c キーを入力することで表示することもできます。画面の左端には、そのディレクトリの状況(空白とか、読み取れないとか)が表示される場合があります。
起動時にディレクトリを指定することで、任意のディレクトリの状況を表示できます。また、? キーを押すとヘルプ画面が表示されます。

ヘルプにも書いてあるとおり、ncdu から直接ファイルを削除することもできます。ディレクトリを渡りながら、不要なファイルを削除するという作業が効率的に行えます。

du を使って一つずつ調べていくよりも、ncdu を使った方がはるかに効率的に作業ができるので、不要なファイルの掃除をする際には便利に使えそうです。常備しても良さそうです。

今回は ranger を紹介します。

ranger は、コンソール上で動作するファイラーです。日本語化はされていませんが、要所要所で動的にヘルプが出てくるため、それほど困ることはありません。コンソール上で動作するファイラーには mc が有名ですが、mc とは違い、標準で1つのディレクトリに注目するタイプです。
起動すると、このような画面が表示されます。

画面は、三つのペインからなり、左二つがディレクトリ、一番右が注目しているファイルの内容を表示します。テキストファイルであればほとんどのものが表示できます。UTF-8でエンコードされていれば、日本語も表示できます。また、バイナリファイルでも、一部の形式では、ファイルの情報を表示します。
真ん中のペインが今注目しているディレクトリです。ファイルやディレクトリの選択にはカーソルキーのほか、vi と同じ hjkl のキーが使えます。但し、vi のキー配置は、QWERTY 配列に特化しているので、 DVORAK 配列で使うとかなり使いにくいです。

また、複数の画面を管理出来ます。この機能は、タブ機能を使います。”g”の次に”n”を入力することで、タブが有効になり、複数のディレクトリ表示ができるようになります。TAB キーで画面を切り換えることもできますし、”~”キーで左右に表示させることもできます。たとえば、片方のディレクトリからもう片方のディレクトリにファイルをコピーする際には、スペースキーで対象のファイルやディレクトリを選択した後、vi 風のコマンド yy でコピーして、pp でペーストします。

ranger にはこのほかにも、ファイルの整列や検索、パーミッションの設定、シェルの実行など多数の機能があります。色々試してみても面白いと思います。

今回は rainbow を紹介します。

rainbow は コマンドの出力に色を付け、見やすくするツールです。たとえば、ping の結果に対して、IP アドレス部分に色を付けることができます。

いくつかのプログラムについては、あらかじめ色を付けるパターンが用意されています。上記の例では、 ping の場合には、IPv4 アドレスに対してマゼンタで着色するように定義ファイルが用意されています。あらかじめ用意されているパターンについては rainbow の引数としてコマンドを指定できます。
そのほかに、個別のパターンを指定して色を付けることもできます。たとえば、IP アドレスに対して黄色を着色したい場合は、下記のようにします。

あらかじめ用意されているパターンは、df、env、ifconfig、jboss、mvn、tomcat、diff、host、java-stack-trace、md5sum、ping、traceroute があります。そのほかに、太字(bold)、網掛け(faint)、イタリック(italic)なども指定できます。

今回は cool-retro-term を紹介します。

cool-retro-term は、ターミナルエミュレータですが、CRT での画面イメージを模した表示を行います。たとえば、アンバー色の単色で、CRT の画面のゆがみや、走査線による輝度の変化などを再現しています。アンバー色の単色以外にも、緑色の単色、Appre II、IBM DOS(これはカラー)、IBM 3728(0のフォントが、真ん中にドットがある)などが選べます。また、エフェクト(画面のゆがみ、走査線など)も適宜設定することができます。
ちょっと雰囲気を変えたいときには良いかもしれません。