Sun, Aug 21, 2022
Apache 2 prefork から event への乗り換え
はじめに
先日、C100 と Geeko Magazine の告知を出した際、geeko.jp のウェブサーバーが落ちてしまいました。普段は全然問題ないのですが、512 MB の VPS のため、ほんの少しアクセスが増えるとメモリーを使い果たしてしまうようです。
openSUSE の Web サーバーは 2009 年頃から使い続けていることもあって Apache で、しかも MPM (Multi-processing modules) は prefork です。複数のアクセスに対してプロセスを作成して対応するので、メモリー使用量やプロセスの生成コストが課題です。設定変更前のメモリー使用量を見ると次のような状態で、1プロセスあたり 30 MB 前後使っています。とりあえずの対策としては、プロセスの最大数を抑えればよいのですが、メモリー使用量削減のため、これを機に MPM を event にすることにしました。
# smem -U wwwrun -k PID User Command Swap USS PSS RSS 26053 wwwrun /usr/sbin/httpd-prefork -DS 24.2M 576.0K 1.3M 9.5M 23952 wwwrun /usr/sbin/httpd-prefork -DS 14.5M 20.8M 21.7M 30.4M 26051 wwwrun /usr/sbin/httpd-prefork -DS 5.6M 23.5M 24.4M 32.9M 23953 wwwrun /usr/sbin/httpd-prefork -DS 6.3M 23.7M 24.4M 31.8M 2023 wwwrun /usr/sbin/httpd-prefork -DS 5.4M 24.0M 24.8M 32.7M 7054 wwwrun /usr/sbin/httpd-prefork -DS 7.5M 26.0M 26.8M 35.0M 23955 wwwrun /usr/sbin/httpd-prefork -DS 5.0M 32.6M 33.6M 42.2M 23956 wwwrun /usr/sbin/httpd-prefork -DS 5.5M 34.2M 34.9M 43.1M 23959 wwwrun /usr/sbin/httpd-prefork -DS 5.5M 34.4M 35.3M 43.8M 2022 wwwrun /usr/sbin/httpd-prefork -DS 6.0M 34.7M 35.6M 43.6M
少し前までの 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 が優先されます。
zypper in 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 をインストールして、パッケージに含まれるデフォルトの設定を有効化します。
zypper in php7-fpm cd /etc/php7/fpm mv php-fpm.conf.default php-fpm.conf cd php-fpm.d mv www.conf.default www.conf systemctl enable php-fpm systemctl start php-fpm
Apache 側の設定を変えます。openSUSE では Apache で使用するモジュールは /etc/sysconfig/apache2 で有効化します。php7 を削除し、proxy と proxy_fcgi を追加します。
APACHE_MODULES="(省略)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 側で設定したエラー画面を表示するための設定です。
<filesmatch "\.ph(p[3457]?|tml)$"=""> SetHandler "proxy:fcgi://127.0.0.1:9000" </filesmatch> <filesmatch "\.php[3457]?s$"=""> SetHandler application/x-httpd-php-source </filesmatch> DirectoryIndex index.php4 DirectoryIndex index.php5 DirectoryIndex index.php7 DirectoryIndex index.php ProxyErrorOverride on
AppArmor の設定変更
openSUSE Leap 15.4 では php_fpm 用の AppArmor プロファイルが含まれており、php_fpm が行える操作に制限がかかっています。そのため、何も設定しないと、php-fpm が php ファイルにアクセスできません。/var/log/audit/ に次のようなログが出力され、403 が返ります。
type=AVC msg=audit(1661003085.840:89050): apparmor="DENIED" operation="open" profile="php-fpm" name="/srv/www/htdocs/index.php" pid=20329 comm="php-fpm" requested_mask="r" denied_mask="r" fsuid=498 ouid=498
php_fpm のプロファイルを調整するには、/etc/apparmor.d/php-fpm.d/ に次のような設定ファイルを作成し、php-fpm がアクセスできるディレクトリを設定します。
# tmp へのアクセス include <abstractions user-tmp=""> # htdocs への読み書き # 読み取りだけであれば <abstractions/web-data> もあり owner /srv/www/htdocs/** rw,
結果
設定後にメモリー使用量を見てみます。
PID User Command Swap USS PSS RSS 29193 wwwrun /usr/sbin/httpd-event -DSYS 208.0K 804.0K 1.3M 4.9M 29195 wwwrun /usr/sbin/httpd-event -DSYS 208.0K 1.6M 2.8M 11.0M 29194 wwwrun /usr/sbin/httpd-event -DSYS 208.0K 1.6M 2.8M 11.1M 29196 wwwrun /usr/sbin/httpd-event -DSYS 208.0K 2.2M 3.4M 11.6M 29278 wwwrun /usr/sbin/httpd-event -DSYS 208.0K 3.2M 4.4M 12.7M 29094 wwwrun php-fpm: pool www 208.0K 25.3M 30.3M 47.1M 29306 wwwrun php-fpm: pool www 208.0K 33.8M 38.4M 54.5M 29337 wwwrun php-fpm: pool www 208.0K 35.6M 39.5M 54.0M
php-fpm のプロセスが増えましたが、Apache のプロセスのメモリー使用量はぐっと小さくなりました。Apache と php-fpm の初期プロセス数、最大プロセス数はこれから調整したいと思います。
Sun, Aug 07, 2022
Geeko Magazine 2022 夏
今年の夏も Geeko Magazine を発行します。最初の頒布はコミックマーケット C100 1日目 8月13日(土)西2ホール す19b です。事前に入場券の購入が必要になりますので、ご注意ください。
Tue, Jul 19, 2022
openSUSE.Asia Summit 2022 発表提案募集
※訳者注:セッションは英語での発表となります。また、英語版の告知より数日経っています。
本日、openSUSE.Asia Summit 2022 メイントラックの発表提案募集を告知できることをうれしく思います。openSUSE.Asia Summitの実行委員では、様々な活動背景や様々なオープンソースソフトウェアの推進者のスピーカーを探しています。 openSUSE.Asia Summitは毎年アジアでオープンソースソフトウェアを使うことを推進するために企画されており、openSUSEコミュニティ(コントリビューターとユーザーの両方)にその価値を認められているイベントです。昨年のインドチームによって開催されたバーチャルサミットに引き続き、8回目の開催となる openSUSE.Asia Summit 2022 は openSUSEオンラインボランティアチームによって、9月末に開催されます。過去のAsia Summitはインドネシア、中国、台湾、日本、韓国、インドなどから多くの方が参加しました。
今年のイベントは2パートから成ります:Asia Summit メイントラックと、それぞれのアジアの国/地域で開催される、オンラインやオフラインのローカルパートです。今回の募集はAsia Summitのメイントラックになります。Asia Summitメイントラックはオンラインカンファレンスツールを使ったオンラインでの開催のみとなります。トークは基本的にライブ中継になります。しかし、あらかじめ録画しておいたビデオを流す事も出来ます。
トピック
openSUSE.Asia Summit 2022は、openSUSEに関連するトピックや、次のようなトピックを募集しますークラウド、仮想化、コンテナ、コンテナオーケストレーション、Linuxデスクトップ環境やソフトウェアなど。なぜならopenSUSEは様々なFLOSSプロダクトを集めたものだからです。トピックの例は次のようなものですが、これらに限らなくても大丈夫です。
- openSUSE(Leap、Tumbleweed、Open Build Service、openQA、YaST)
- openSUSE Kubic & MicroOS、クラウド、仮想化、コンテテやコンテナオーケストレーション
- 組み込みやIoT
- セキュリティ(アクセス制御、暗号化、脆弱性マネジメント)
- デスクトップ環境やソフトウェア(GNOME、KDE、XFCE)
- オフィススイート、グラフィックスソフト、マルチメディア(LibreOffice、Calligra、GIMP、Inkscape)
- 多言語対応(インプットメソッド、翻訳)
- openSUSEで動いているその他のソフトウェア
技術的では無いトピックを歓迎していることにも注目してください。例えば以下のようなトピックです。
- FLOSS技術の解説
- 開発、品質保証、翻訳
- Tips & Tricks、体験談(成功、失敗問わず)、ベストプラクティス
- マーケティング、コミュニティマネジメント
- 教育
セッションの種類
これらの2種類の発表提案を募集しています。
- プレゼンテーションを使った、基調講演かロングトーク(30分+Q&A)
- プレゼンテーション有り/無しどちらでもよしとする、ショートトーク(15分+Q&A)
オンラインセッションは聞き手が注意力を保つのが難しい為、トークは短く魅力的なものを心がけて下さい。
スケジュール
- 締切:2022年7月31日
- 採用通知:8月15日週
- カンファレンス:
- 9/30日(金) 10:00 UTC – 15:00 UTC(日本時間 19:00 – 24:00)
- 10/1日(土) 4:00 UTC – 7:00 UTC(日本時間 13:00 – 16:00)
発表提案の登録方法
イベントページにご登録下さい。
- 発表提案は英語で書いて下さい。また、適切なタイトルと共に、150〜500字の長さでお願いします。
- 発表とスライドは英語でお願いします。
- 登録前にスペルチェックや文法チェックを行うようお願いします。 LibreOffice Extensions Languagetool や、grammarly が使えます。
- プロフィールの経歴も評価対象になります。ご自身の活動状態・背景を忘れずに記載して下さい。
- openSUSE Conference code of Conduct に従って下さい。発表提案の登録成功後、詳細を入力するフォームのリンクが送付されます。
プロポーザル作成ガイド
発表提案がトピックに関するものや関連するものであることを明確にしてください
例えば、セキュリティやデスクトップアプリケーションに関するトークの場合、アプリケーションのインストールから始まると良いでしょう。
発表提案がそうである理由を含めて下さい
理由として次のようなものが含まれるでしょう
- アプリケーション/技術/ソリューションに必要とされている
- 提案されているソリューションの機能の展望
- 想定聴者(初心者、貢献者)の学習
もし発表提案の書き方やプレゼンテーションの準備に不明な所や確認したい所があれば、お気軽にソーシャルメディアでローカルチームに連絡したり、運営委員に質問したりしてください。
運営委員連絡先
プログラムに関するご質問などは次のメールアドレスにお問い合わせ下さい。
opensuseasia-summit@googlegroups.com
それでは、openSUSE.Asia Summit 2022でお会いできることを楽しみにしています。
Sun, Jun 19, 2022
kkc.el はどんなものなのか
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 だけでかな漢字変換作業が出来るのは便利なのですが、機能がちょっと低すぎます。最低限のことしか出来ません。また、カスタマイズも出来ません。どちらかというと、他のかな漢字変換システムが動いていないときの非常用、という感じがします。
Wed, May 11, 2022
openSUSE.Asia Summit 2022のボランティアスタッフ募集
openSUSE.Asia Summit は、コントリビューターやファンがアジア全域から参加者が集まる、アジア地域の年次openSUSEカンファレンスです。このイベントでは、openSUSEディストリビューションとそのコミュニティ、個人や企業で使用するアプリケーション、そしてオープンソースの文化について、主に焦点を当てています。
2014年から、openSUSE.Asia Summitはオフラインで開催され、コミュニティの人たちが実際に会う非常に良い機会でした。しかしながら、COVID-19の影響により、2020年のサミットはキャンセルせざるを得ませんでした。そして2021年、サミットはインドチームによりオンラインで開催されました。
openSUSE.Asia Summit 2022はどうなる?
openSUSE.Asia Summit 2022はハイブリッドイベントとなります。
中心となるオンラインサミットと共に、各国/地域でのオフラインイベントをそれぞれ開催します。
アジア全体パート(オンライン + サテライトのオフライン)
- 各アジア地域から参加しやすいよう、4:00 – 6:00 UTC(13:00 – 15:00 JST)を目安に開催します。
- 基調講演、招待講演などを予定しています。
ローカルパート(オンライン/オフライン – 開催場所に依る)
- 各国、各地は、COVID-19の影響や制限を熟慮した上で、オフラインイベントを開催することができます。
- 開催内容はそれぞれの開催場所によって異なります。それぞれの開催場所で、トークセッション、ワークショップ、ミートアップなどが企画されます。
ボランティアにお願いしたいこと
このイベントを実現する為、ボランティアを募集しています。今年はボランティアはどの地域からでも参加できます。
ボランティアにお願いしたいことは以下の通りです。
- アジア地域パートの準備の為のレギュラーオンラインミーティングに参加してください(今は金曜日の 13:00 UTC <22:00 JST>にSlackで行っています。)
- ローカルパートのイベントを企画し、アジア地域パートとスケジュール調整を行ってください
- オンラインカンファレンスを手伝い、ボランティア同士のミーティングのスケジュールを調整してください
- オフラインイベントを開催してください(openSUSE.Asia Summitの実行委員に相談し、必要なサポートを受けることができます)
ボランティアに興味がありましたら、5月30日までに簡単な自己紹介と共にメールを opensuseasia-summit@googlegroups.com までお送りください。
※訳者コメント※
今年のopenSUSE.Asia Summitは、メインのオンラインイベントと、各地域のローカルイベントのハイブリッド開催となりました。ボランティアスタッフには、オンラインイベント、ローカルイベントの両方(もしくは片方)のお手伝いをして頂ければと思っています。興味を持たれましたら、上記の実行委員連絡先や、ユーザ会の方へご連絡ください。疑問・質問なども遠慮なくお問い合わせください。
Sat, Feb 12, 2022
openSUSE Leap 15.3 で Rancher Desktop を使ってみる
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/
インストールはいつもの通りです。
sudo zypper ar -c https://download.opensuse.org/repositories/isv:/Rancher:/stable/rpm/isv:Rancher:stable.repo sudo zypper ref sudo zypper in rancher-desktop
あとは、メニューから Rancher Desktop を選べば起動できます。
Kubernetes のインストール
起動すると、何をセットアップするか聞かれます。ここで、containerd を選ぶと nerdctl が使えるようになります。docker を選ぶと、docker コマンドや API が使えるようになるはずです。
しかし、何やらエラーが。
「Reset Kubernetes」でリセットしてみたところ、今度は何も出ませんでした。
クライアントコマンドは ~/.local/bin/ にインストールされるので、パスを通しておきます:
% ls ~/.local/bin docker@ helm@ kubectl@ nerdctl@
~/.kube/config は勝手に設定してくれるので、らくらくですね。
完了すると Kubernetes などが動いている VM (Lima) が走っていることが分かります。
% pgrep -a qemu 984 /usr/bin/qemu-system-x86_64 -cpu host -machine q35,accel=kvm -smp 2,sockets=1,cores=2,threads=1 -m 6144 -boot order=d,splash-time=0,menu=on -drive file=/home/geeko/.local/share/rancher-desktop/lima/0/basedisk,media=cdrom,readonly=on -drive file=/home/geeko/.local/share/rancher-desktop/lima/0/diffdisk,if=virtio -cdrom /home/geeko/.local/share/rancher-desktop/lima/0/cidata.iso -netdev user,id=net0,net=192.168.5.0/24,dhcpstart=192.168.5.15,hostfwd=tcp:127.0.0.1:45009-:22 -device virtio-net-pci,netdev=net0,mac=52:55:55:f4:b7:19 -device virtio-rng-pci -display none -device virtio-vga -device virtio-keyboard-pci -device virtio-mouse-pci -parallel none -chardev socket,id=char-serial,path=/home/geeko/.local/share/rancher-desktop/lima/0/serial.sock,server=on,wait=off,logfile=/home/geeko/.local/share/rancher-desktop/lima/0/serial.log -serial chardev:char-serial -chardev socket,id=char-qmp,path=/home/geeko/.local/share/rancher-desktop/lima/0/qmp.sock,server=on,wait=off -qmp chardev:char-qmp -name lima-0 -pidfile /home/geeko/.local/share/rancher-desktop/lima/0/qemu.pid
使ってみる
簡単に何かを動かしてみましょう。
kubectl run redmine-test --image=redmine --port=3000 kubectl port-forward redmine-test 8080:3000
あとはブラウザで http://localhost:8080 にアクセス
kubectl によるトンネリングだけではなく、Rancher Desktop 側にもポートフォワーディング機能があるようですが、私の環境では出てきませんので、もう少し探してみます。
Mon, Feb 07, 2022
ncdu をテストしてみました(packagesの説明文書を訳しつつ、使えるものを探してみました)
今回は ncdu を紹介します。
ncdu は curces を使用した、ディスク使用量を表示するツールです。その名の通り、du の curces 版です。起動すると、カレントディレクトリの各サブディレクトリやファイルの大きさや使用量を表示します。
注目するディレクトリは、カーソルキーまたは jk キー(vi と同じ)で移動でき、ENTERキーで、そのディレクトリに入ることができます。また、名前順、日付順、項目の数順(おそらく、サブディレクトリ中の項目数)、mtime順に整列し直すこともできます。項目数については、c キーを入力することで表示することもできます。画面の左端には、そのディレクトリの状況(空白とか、読み取れないとか)が表示される場合があります。
起動時にディレクトリを指定することで、任意のディレクトリの状況を表示できます。また、? キーを押すとヘルプ画面が表示されます。
ヘルプにも書いてあるとおり、ncdu から直接ファイルを削除することもできます。ディレクトリを渡りながら、不要なファイルを削除するという作業が効率的に行えます。
du を使って一つずつ調べていくよりも、ncdu を使った方がはるかに効率的に作業ができるので、不要なファイルの掃除をする際には便利に使えそうです。常備しても良さそうです。
Sat, Feb 05, 2022
packagesの説明文書を訳しつつ、使えるものを探してみました(ranger)
今回は ranger を紹介します。
ranger は、コンソール上で動作するファイラーです。日本語化はされていませんが、要所要所で動的にヘルプが出てくるため、それほど困ることはありません。コンソール上で動作するファイラーには mc が有名ですが、mc とは違い、標準で1つのディレクトリに注目するタイプです。
起動すると、このような画面が表示されます。
画面は、三つのペインからなり、左二つがディレクトリ、一番右が注目しているファイルの内容を表示します。テキストファイルであればほとんどのものが表示できます。UTF-8でエンコードされていれば、日本語も表示できます。また、バイナリファイルでも、一部の形式では、ファイルの情報を表示します。
真ん中のペインが今注目しているディレクトリです。ファイルやディレクトリの選択にはカーソルキーのほか、vi と同じ hjkl のキーが使えます。但し、vi のキー配置は、QWERTY 配列に特化しているので、 DVORAK 配列で使うとかなり使いにくいです。
また、複数の画面を管理出来ます。この機能は、タブ機能を使います。”g”の次に”n”を入力することで、タブが有効になり、複数のディレクトリ表示ができるようになります。TAB キーで画面を切り換えることもできますし、”~”キーで左右に表示させることもできます。たとえば、片方のディレクトリからもう片方のディレクトリにファイルをコピーする際には、スペースキーで対象のファイルやディレクトリを選択した後、vi 風のコマンド yy でコピーして、pp でペーストします。
ranger にはこのほかにも、ファイルの整列や検索、パーミッションの設定、シェルの実行など多数の機能があります。色々試してみても面白いと思います。
Mon, Jan 31, 2022
packagesの説明文書を訳しつつ、使えるものを探してみました(p編その1)
今回は 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)なども指定できます。
Tue, Jan 18, 2022
packagesの説明文書を訳しつつ、使えるものを探してみました(C編その2)
今回は cool-retro-term を紹介します。
cool-retro-term は、ターミナルエミュレータですが、CRT での画面イメージを模した表示を行います。たとえば、アンバー色の単色で、CRT の画面のゆがみや、走査線による輝度の変化などを再現しています。アンバー色の単色以外にも、緑色の単色、Appre II、IBM DOS(これはカラー)、IBM 3728(0のフォントが、真ん中にドットがある)などが選べます。また、エフェクト(画面のゆがみ、走査線など)も適宜設定することができます。
ちょっと雰囲気を変えたいときには良いかもしれません。