By ribbon @
2022-12-07 21:40
この記事は openSUSE Advent Calendar 2022 の5日目です。
systemd が使われるようになると、daemon の制御とかのやり方は大きく変わりました。/etc/init.d にあるスクリプトから、systemd パッケージに含まれるコマンドを使うようになってきました。それらのコマンドは、xxxxxctl という、末尾に ctl が含まれるものが多いように感じました。そこで、/usr/bin/ の中にある、末尾が ctl なプログラムがどんなものかを簡単に調べて見ることにしました。
今回は、hostnamectl を紹介します。
コマンド名: hostnamectl
パッケージ: systemd-249.12-150400.8.13.1.x86_64
動作: ○
詳細:
hostnamectl は、システムのホスト名や関連する情報の表示や変更を行うプログラムです。昔ながらの、ホスト名を表示するプログラム hostname は、引数を指定しないで入力すると、単にホスト名を返すだけですが、hostnamectl を引数を指定しないで実行すると、
|
Static hostname: suse154 Icon name: computer-vm Chassis: vm Machine ID: 61ee5253e44f403c9918308e232c84b8 Boot ID: 2dc4f7eae3724c6497708a64e08a516c Virtualization: kvm Operating System: openSUSE Leap 15.4 CPE OS Name: cpe:/o:opensuse:leap:15.4 Kernel: Linux 5.14.21-150400.24.33-default Architecture: x86-64 Hardware Vendor: QEMU Hardware Model: Standard PC _i440FX + PIIX, 1996_ |
と、たくさんの情報を表示します。今回テストしている環境が KVM 配下であることもバレてしまいます。旧来の hostname コマンドと互換を取るには、引数として hostname を指定すれば良いです。単に hostname を返します。
もちろん、root でないとできませんが、host 名を変更することも可能です。
|
# hostnamectl hostname suse154A # hostnamectl hostname suse154A |
そのほかに、JSON形式で出力することも可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
hostnamectl --json=pretty { "Hostname" : "suse154", "StaticHostname" : "suse154", "PrettyHostname" : null, "DefaultHostname" : "localhost", "HostnameSource" : "static", "IconName" : "computer-vm", "Chassis" : "vm", "Deployment" : null, "Location" : null, "KernelName" : "Linux", "KernelRelease" : "5.14.21-150400.24.33-default", "KernelVersion" : "#1 SMP PREEMPT_DYNAMIC Fri Nov 4 13:55:06 UTC 2022 (76cfe60)", "OperatingSystemPrettyName" : "openSUSE Leap 15.4", "OperatingSystemCPEName" : "cpe:/o:opensuse:leap:15.4", "OperatingSystemHomeURL" : "https://www.opensuse.org/", "HardwareVendor" : "QEMU", "HardwareModel" : "Standard PC _i440FX + PIIX, 1996_", "ProductUUID" : null } |
JSON 形式で出力する場合、hostname オプションを指定すると、json 機能は無効になってしまうようです。
従来からの hostname コマンドもたぶん残っていくとは思いますが、新しい hostnamectl コマンドも覚えて置いた方が良いかもしれません。
Category
openSUSE,
Tips,
サーバ |
受け付けていません
By ribbon @
2022-12-07 00:42
この記事は openSUSE Advent Calendar 2022 の7日目です。
systemd が使われるようになると、daemon の制御とかのやり方は大きく変わりました。/etc/init.d にあるスクリプトから、systemd パッケージに含まれるコマンドを使うようになってきました。それらのコマンドは、xxxxxctl という、末尾に ctl が含まれるものが多いように感じました。そこで、/usr/bin/ の中にある、末尾が ctl なプログラムがどんなものかを簡単に調べて見ることにしました。
今回は、loginctl を紹介します。
コマンド名: localectl
パッケージ: systemd-249.12-150400.8.13.1.x86_64
動作: ○
詳細:
loginctl は、systemd の login マネージャからの情報を表示したり設定するためのツールです。表示に関しては、従来の w コマンドや ps コマンド などの機能が含まれています。たとえば、現在ログインしている情報は、下記のように表示されます。
|
%loginctl SESSION UID USER SEAT TTY 11 1000 ribbon pts/0 12 1000 ribbon pts/2 13 0 root 6 1000 ribbon seat0 tty2 |
w コマンドではこのように表示されます。表示する内容がかなり異なります。
|
%w 20:10:49 up 12:55, 5 users, load average: 0.00, 0.01, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT ribbon : : 15:20 ?xdm? 2:18 0.07s gdm-session-worker [pam/gdm-password] ribbon tty2 tty2 15:20 12:55m 0.08s 0.08s /usr/lib/gnome-session-binary ribbon pts/0 192.168.X.Y 18:17 10:29 0.28s 0.00s less ribbon pts/2 192.168.X.Y 19:46 1.00s 0.11s 0.01s w root pts/3 ::1 20:02 7:58 0.09s 0.09s -bash |
自分自身のセッション情報は session-status サブコマンドで表示できます。
|
%loginctl session-status 12 - ribbon (1000) Since: Sat 2022-12-03 19:46:34 JST; 28min ago Leader: 7798 (sshd) TTY: pts/2 Remote: 192.168.X.Y Service: sshd; type tty; class user State: active Unit: session-12.scope ┣ 7798 "sshd: ribbon [priv]" "" ┣ 7800 "sshd: ribbon@pts/2" "" "" ┣ 7801 -bash ┣ 8134 loginctl session-status ┗ 8135 less |
さらに、 user-status サブコマンドで、詳細な情報を得ることができます。pstree コマンドにも似た感じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
%loginctl user-status ribbon (1000) Since: Sat 2022-12-03 15:20:50 JST; 5h 8min ago State: active Sessions: 12 11 *6 Linger: no Unit: user-1000.slice ┣session-11.scope ┃┣ 7431 "sshd: ribbon [priv]" "" ┃┣ 7437 "sshd: ribbon@pts/0" "" "" ┃┣ 7438 -bash ┃┣ 7780 man loginctl ┃┗ 7792 less ┣session-12.scope ┃┣ 7798 "sshd: ribbon [priv]" "" ┃┣ 7800 "sshd: ribbon@pts/2" "" "" ┃┣ 7801 -bash ┃┣ 8270 loginctl user-status ┃┗ 8271 less ┣session-6.scope ┃┣ 4748 "gdm-session-worker [pam/gdm-password]" ┃┣ 4778 /usr/bin/gnome-keyring-daemon --daemonize --login ┃┣ 4784 /usr/lib/gdm/gdm-wayland-session /usr/bin/gnome-session ┃┣ 4788 /usr/lib/gnome-session-binary ┃┗ 7997 /usr/bin/ssh-agent -D -a /run/user/1000/keyring/.ssh ┗user@1000.service ┣app.slice ┃┣app-gnome-YaST2\x2dorg.opensuse.yast.LAN-5394.scope ┃┃┣ 5523 dbus-launch --autolaunch 61ee5253e44f403c9918308e232c84b8 --binary-syntax> ┃┃┗ 5524 /usr/bin/dbus-daemon --syslog-only --fork --print-pid 5 --print-address 7> ┃┣app-gnome-gnome\x2dsoftware\x2dservice-5036.scope ┃┃┗ 5036 /usr/bin/gnome-software --gapplication-service ┃┣app-gnome-org.gnome.Evolution\x2dalarm\x2dnotify-5045.scope ┃┃┗ 5045 /usr/lib/evolution-data-server/evolution-data-server/evolution-alarm-noti> ┃┣app-gnome-org.gnome.SettingsDaemon.DiskUtilityNotify-5018.scope ┃┃┗ 5018 /usr/lib/gsd-disk-utility-notify |
そのほかに、セッションを強制切断する kill-session サブコマンドがあります。たとえば、ssh でログインしているセッションを強制切断するためには、
1) w コマンドでユーザを調べる
2) そのユーザが使っている sshd プロセスを ps コマンドで調べる
3) kill コマンドでそのプロセスを終了させる。
というステップが必要でしたが、loginctl では、セッション番号を表示させた後、そのセッションを終了するコマンドを入力することで作業が行えますので、手間が減ります。
|
# loginctl SESSION UID USER SEAT TTY 11 1000 ribbon pts/0 12 1000 ribbon pts/2 13 0 root 6 1000 ribbon seat0 tty2 4 sessions listed. # loginctl kill-session 13 # loginctl SESSION UID USER SEAT TTY 11 1000 ribbon pts/0 12 1000 ribbon pts/2 6 1000 ribbon seat0 tty2 3 sessions listed. |
loginctl は、表示形式が見やすいので、w コマンドなどと併用すると便利でしょう。
Category
openSUSE,
Tips,
サーバ,
デスクトップ |
受け付けていません
By ribbon @
2022-12-04 08:12
この記事は openSUSE Advent Calendar 2022 の4日目です。
systemd が使われるようになると、daemon の制御とかのやり方は大きく変わりました。/etc/init.d にあるスクリプトから、systemd パッケージに含まれるコマンドを使うようになってきました。それらのコマンドは、xxxxxctl という、末尾に ctl が含まれるものが多いように感じました。そこで、/usr/bin/ の中にある、末尾が ctl なプログラムがどんなものかを簡単に調べて見ることにしました。
今回は、busctl を紹介します。
コマンド名: busctl
パッケージ: systemd-249.12-150400.8.13.1.x86_64
動作: ○
詳細:
busctl は、D-Bus の状態を表示させたり、設定を行ったりするためのツールです。取りあえず起動してみると、
|
NAME PID PROCESS USER CONNECTION UNIT SESSION DESCRIPTION :1.0 1 systemd root :1.0 init.scope - - :1.1 632 wickedd-dhcp6 root :1.1 wickedd-dhcp6.service - - :1.10 705 wickedd-nanny root :1.10 wickedd-nanny.service - - :1.105 3249 busctl ribbon :1.105 session-4.scope 4 - :1.13 720 ModemManager root :1.13 ModemManager.service - - :1.16 1120 gdm root :1.16 display-manager.service - - :1.17 1128 accounts-daemon root :1.17 accounts-daemon.service - - :1.2 618 avahi-daemon avahi :1.2 avahi-daemon.service - - :1.24 1275 power-profiles- root :1.24 power-profiles-daemon.service - - :1.26 1280 rtkit-daemon root :1.26 rtkit-daemon.service - - :1.27 1274 upowerd root :1.27 upower.service - - :1.3 628 wickedd-auto4 root :1.3 wickedd-auto4.service - - :1.32 1324 wpa_supplicant root :1.32 wpa_supplicant.service - - :1.4 630 wickedd-dhcp4 root :1.4 wickedd-dhcp4.service - - :1.45 1437 colord colord :1.45 colord.service - - |
のように、現在のバスの一覧が表示されます。とは言っても、D-bus がどういう物で、何をしているかを分かっていないと、この表示の意味も分かりませんね。Wikipedia先生に聞いてみると、
D-Bus(Desktop Bus、ディーバス)は、メッセージバスと呼ばれる、アプリケーション間でやりとりを行うための、プロセス間通信 (IPC) 実装の1つである。
なのだそうです。
Unix系のプロセス間通信としては、パイプ、シグナル、ソケットとかいろいろありました。また、KDE や Gnome も独自のプロセス間通信機能を持っていました。それらの乱立を統一化するために作られたのが D-Bus ということになります。
ただ、D-Bus そのものは、ユーザが直接さわる物ではありません。あくまでもプロセス(プログラム)の世界で使われるものです。そのため、busctl も、D-Bus の動作の確認やデバッグ、テスト用に使われるものと思った方がよいでしょう。
Category
openSUSE,
Tips,
サーバ,
デスクトップ,
未分類 |
受け付けていません
By ribbon @
2022-12-03 00:00
この記事は openSUSE Advent Calendar 2022 の3日目です。
メーカー製のプロダクトの一部には、Windows/Mac だけではなくて Linux 向けの物を用意している場合があります。しかし、たまたま使おうとしたものが、Ubuntu 向けしかありませんでした。
そこで、Ubuntu 向けのバイナリ(dpkg として提供されている物) が openSUSE で動くかどうかを試してみました。
結論から言うと、できます。しかもやり方は難しくありません。
まず、Ubuntu 上で、openSUSE で動かしたいバイナリ(dpkg) をインストールします。この時、どこにインストールされたかを控えておきます。dpkg -deb -c dpkg名 とすれば一覧が表示されます。
次に、インストールされたファイルを全部まとめて openSUSE 側に持って行き、展開します。その後、展開したファイル中にあるターゲットのプログラムを起動すれば動作します。
たとえば、QNAP が提供している、QNAP NAS 一覧を表示したり、ログインしたりするためのツール QFinderPro で試してみましょう。Ubuntu 上では、dpkg の内容は
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
$ dpkg-deb -c QNAPQfinderProUbuntux64-7.8.2.0928.deb drwxrwxr-x qnap/qnap 0 2022-09-28 18:55 ./ drwxrwxr-x qnap/qnap 0 2022-09-28 18:55 ./usr/ drwxrwxr-x qnap/qnap 0 2022-09-28 18:55 ./usr/local/ drwxrwxr-x qnap/qnap 0 2022-09-28 18:55 ./usr/local/bin/ drwxrwxr-x qnap/qnap 0 2022-09-28 18:55 ./usr/local/bin/QNAP/ drwxrwxr-x qnap/qnap 0 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/ drwxrwxr-x qnap/qnap 0 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/ -rw-rw-r-- qnap/qnap 5587 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/cs.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 6546 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/da.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 5731 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/de.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 13337 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/el.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 5497 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/en.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 5847 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/es.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 6431 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/fi.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 5945 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/fr.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 6025 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/hu.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 5752 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/it.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 6276 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/ja.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 38927 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/ko.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 6498 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/nl.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 6454 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/nn.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 5714 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/pl.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 5700 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/pt.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 5716 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/ro.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 7367 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/ru.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 6516 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/sv.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 8952 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/th.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 5696 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/tr.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 5093 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/zhcn.UEPConsentForm.htm -rw-rw-r-- qnap/qnap 6582 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/Docs/zhtw.UEPConsentForm.htm drwxrwxr-x qnap/qnap 0 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/License/ -rw-rw-r-- qnap/qnap 94964 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/License/QfinderThirdPartySoftwareNotices.htm -rwxrwxr-x qnap/qnap 20314824 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/QfinderPro -rwxrwxr-x qnap/qnap 274 2022-09-28 18:55 ./usr/local/bin/QNAP/QfinderPro/QfinderPro.sh (以下略) |
となっています。ですので、/usr/local/bin/QNAP 配下やその他を何らかの手段で openSUSE 側に持って行き、展開します。あとは、 /usr/local/bin/QNAP/QfinderPro/QfinderPro.sh を実行すれば、Ubuntu 向けとして提供されているプログラムが openSUSE でも動きます。
Category
openSUSE,
Tips,
デスクトップ |
受け付けていません
By ribbon @
2022-12-01 11:42
この記事は openSUSE Advent Calendar 2022 の1日目です。
systemd が使われるようになると、daemon の制御とかのやり方は大きく変わりました。/etc/init.d にあるスクリプトから、systemd パッケージに含まれるコマンドを使うようになってきました。それらのコマンドは、xxxxxctl という、末尾に ctl が含まれるものが多いように感じました。そこで、/usr/bin/ の中にある、末尾が ctl なプログラムがどんなものかを簡単に調べて見ることにしました。
今回は、bluetoothctl を紹介します。
コマンド名: bluetoothctl
パッケージ: bluez-5.55-150300.3.11.1.x86_64
動作: ○
詳細:
bluetooth の制御をするためのコマンドです。初っ端からですが、systemd とは無関係です。動作には、bluethoothd が必要です。
手持ちの、openSUSE が動く物理マシンでは、bluetooth 機能が標準で入っていなかったので、USB 接続の、バッファローの USB アダプタを使って検証してみました。
まずは、systemd で bluetoothd を起動しておきます。
続いて、USB アダプタを差し込み、bluetoothctl を起動します。
起動すると、プロンプトが表示されるので、デバイスのスキャンをするため、スキャンコマンドを入力すると、エラーになってしまいます。
|
# bluetoothctl Agent registered [CHG] Controller 00:1B:DC:F3:8B:51 Pairable: yes [bluetooth]# scan on Failed to start discovery: org.bluez.Error.NotReady [bluetooth]# |
これは、USB Bluetooth アダプタを差し込んだだけでは、まだ機能が動いていないためです。まずは、Bluetooth アダプタの機能を有効にするため、power on と入力します。すると、今度は見えるようになりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
# power on [CHG] Controller 00:1B:DC:F3:8B:51 Class: 0x00000104 Changing power on succeeded [CHG] Controller 00:1B:DC:F3:8B:51 Powered: yes [bluetooth]# scan on Discovery started [CHG] Controller 00:1B:DC:F3:8B:51 Discovering: yes [NEW] Device 77:6C:E6:94:2A:38 77-6C-E6-94-2A-38 [NEW] Device 7E:4D:FE:CB:CC:D9 7E-4D-FE-CB-CC-D9 [CHG] Device 77:6C:E6:94:2A:38 RSSI: -73 [NEW] Device 4C:FD:32:93:41:95 4C-FD-32-93-41-95 [CHG] Device 77:6C:E6:94:2A:38 RSSI: -65 [NEW] Device 46:D9:DC:39:CC:E8 46-D9-DC-39-CC-E8 [NEW] Device 8C:DE:52:B8:AB:EA SRS-X33 [CHG] Device 77:6C:E6:94:2A:38 RSSI: -73 [CHG] Device 77:6C:E6:94:2A:38 RSSI: -65 [bluetooth]# |
ここで、pair コマンドを入力すると
|
# pair 8C:DE:52:B8:AB:EA Attempting to pair with 8C:DE:52:B8:AB:EA [CHG] Device 8C:DE:52:B8:AB:EA Connected: yes [CHG] Device 8C:DE:52:B8:AB:EA Modalias: bluetooth:v0039p1582d2110 [CHG] Device 8C:DE:52:B8:AB:EA UUIDs: 00001108-0000-1000-8000-00805f9b34fb [CHG] Device 8C:DE:52:B8:AB:EA UUIDs: 0000110b-0000-1000-8000-00805f9b34fb [CHG] Device 8C:DE:52:B8:AB:EA UUIDs: 0000110c-0000-1000-8000-00805f9b34fb [CHG] Device 8C:DE:52:B8:AB:EA UUIDs: 0000110e-0000-1000-8000-00805f9b34fb [CHG] Device 8C:DE:52:B8:AB:EA UUIDs: 0000111e-0000-1000-8000-00805f9b34fb [CHG] Device 8C:DE:52:B8:AB:EA UUIDs: 00001200-0000-1000-8000-00805f9b34fb [CHG] Device 8C:DE:52:B8:AB:EA ServicesResolved: yes [CHG] Device 8C:DE:52:B8:AB:EA Paired: yes Pairing successful [bluetooth]# |
となり、ペアリングが出来るようになりました。
この先は試してみていませんが、デバイスの削除とか情報の取得とか色々できるようです。
GUI な環境が無い状況での bluetooth 利用には使えると思います。
Category
openSUSE,
Tips,
サーバ |
受け付けていません
By ftake @
2022-08-21 21:30
はじめに
先日、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 が優先されます。
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 の初期プロセス数、最大プロセス数はこれから調整したいと思います。
Category
openSUSE,
Web,
サーバ |
受け付けていません
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 だけでかな漢字変換作業が出来るのは便利なのですが、機能がちょっと低すぎます。最低限のことしか出来ません。また、カスタマイズも出来ません。どちらかというと、他のかな漢字変換システムが動いていないときの非常用、という感じがします。
Category
openSUSE,
デスクトップ |
受け付けていません