Apacheをソースコードからインストールした後に「lynx: コマンドが見つかりません」が発生
前提
書くこと/書かないこと
Apacheをソースコードからインストールしてプロセスを起動した後、ステータスを確認しようとapachectl statusを実行したところ、「lynx: コマンドが見つかりません」が表示され、ステータスが得られませんでした。
ここではその原因と対応について書きます。
環境
AlmaLinux release 8.6 (Sky Tiger) ※CentOS8代替OS
Server version: Apache/2.4.53 (Unix)
さくっと
後回しにします。
こってりと
原因調査
まずはapachectlの中身を確認するため、テキストエディタで開きます。
(省略)
79 case $ACMD in
80 start|stop|restart|graceful|graceful-stop)
81 $HTTPD -k $ARGV
82 ERROR=$?
83 ;;
84 startssl|sslstart|start-SSL)
85 echo The startssl option is no longer supported.
86 echo Please edit httpd.conf to include the SSL configuration setting s
87 echo and then use "apachectl start".
88 ERROR=2
89 ;;
90 configtest)
91 $HTTPD -t
92 ERROR=$?
93 ;;
94 status)
95 $LYNX $STATUSURL | awk ' /process$/ { print; exit } { print } '
96 ;;
97 fullstatus)
98 $LYNX $STATUSURL
99 ;;
100 *)
101 $HTTPD "$@"
102 ERROR=$?
103 esac
(省略)
今回のケースだと94行目付近に"status)"があり、$LYNXという変数が呼ばれていることがわかります。
$LYNXの定義は上の方にあるので遡ると55行目にありました。
52 # a command that outputs a formatted text version of the HTML at the
53 # url given on the command line. Designed for lynx, however other
54 # programs may work.
55 LYNX="lynx -dump"
ここで、lynxというコマンドを実行していることがわかります。
# lynx
-bash: lynx: コマンドが見つかりません
Lynxとは何か
LynxはテキストベースのWebブラウザで、昨今のブラウザのように動画や画像を表示する機能を持たない、シンプル軽量のブラウザのことのようです。
LynxはCentOS7までは標準リポジトリから入手できましたが、CentOS8ではPowerToolsリポジトリに移っているようですので、これを利用するにはPowerToolsリポジトリを有効にしてインストールする必要があります。
ただ、パッケージ管理システムからdnfでインストールしたapacheはステータス確認にLynxを使っていないのか、インストール後の環境を調べてもlynxは入ってなさそうでした。探し方が悪いのかも知れませんが若干のモヤモヤを抱えつつ、Lynxをインストールしたいと思います。
Lynxのインストール
まずはPowerToolsリポジトリの確認です。今回の環境ではyum.repos.dの下を見るとリポジトリの定義がありましたのでこれを使っていきます。
# ls -al /etc/yum.repos.d/
合計 40
drwxr-xr-x. 2 root root 203 6月 6 09:53 .
drwxr-xr-x. 96 root root 8192 6月 6 13:44 ..
-rw-r--r-- 1 root root 943 5月 19 22:18 almalinux-ha.repo
-rw-r--r-- 1 root root 905 5月 19 22:18 almalinux-nfv.repo
-rw-r--r-- 1 root root 885 5月 19 22:18 almalinux-plus.repo
-rw-r--r-- 1 root root 963 5月 19 22:18 almalinux-powertools.repo
-rw-r--r-- 1 root root 1041 5月 19 22:18 almalinux-resilientstorage.repo
-rw-r--r-- 1 root root 871 5月 19 22:18 almalinux-rt.repo
-rw-r--r-- 1 root root 2666 5月 19 22:18 almalinux.repo
almalinux-powertools.repoの定義を見てみます。
(省略)
[powertools]
name=AlmaLinux $releasever - PowerTools
mirrorlist=https://mirrors.almalinux.org/mirrorlist/$releasever/powertools
# baseurl=https://repo.almalinux.org/almalinux/$releasever/PowerTools/$basearch/os/
enabled=0
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux
(省略)
enabled=0なので、通常では参照しない設定になっています。
これを利用するにはenable=1にして保存するか、dnfの引数にenablerepo=[リポジトリ名]をつけて実行します。
前者の設定だと、dnfを実行する際に常に参照するようになるので、今回は後者の方法でインストールします。
# dnf install --enablerepo=powertools lynx
(省略)
インストール済み:
almalinux-indexhtml-8-7.el8.noarch lynx-2.8.9-4.el8.x86_64
完了しました!
インストールは簡単ですね。
試しにgoogle.comにアクセスしてみます。
# lynx https://google.com
表示されました。色々新鮮です。
Apacheのステータスを再確認
さて、Lynxも無事インストールできたので、本題のApacheのステータス確認ができるようになったかを確認します。
# /usr/local/httpd/bin/apachectl start
# /usr/local/httpd/bin/apachectl status
Not Found
The requested URL was not found on this server.
Apacheのプロセスは確かに起動中なのですがスタータスが確認できません。まだ何かおかしいようです。
http://localhost:80/server-status
apachectlのスクリプトを再度確認すると、下記の通り、lynxで"http://localhost:80/server-status"にアクセスし、取得結果を処理した結果を表示するだけの仕掛けのようです。
mod_statusによって提供される機能のようですが、mod_statusは有効になっていることは確認済みです。
52 # a command that outputs a formatted text version of the HTML at the
53 # url given on the command line. Designed for lynx, however other
54 # programs may work.
55 LYNX="lynx -dump"
56 #
57 # the URL to your server's mod_status status page. If you do not
58 # have one, then status and fullstatus will not work.
59 STATUSURL="http://localhost:80/server-status"
(省略)
94 status)
95 $LYNX $STATUSURL | awk ' /process$/ { print; exit } { print } '
96 ;;
confファイルを見てみます。httpd-info.confにありました。
(省略)
# Allow server status reports generated by mod_status,
# with the URL of http://servername/server-status
# Change the ".example.com" to match your domain to enable.
<Location /server-status>
SetHandler server-status
Require host .example.com
Require ip 127
</Location>
(省略)
コメントに「Change the “.example.com" to match your domain to enable.」とあるので、これを正しく設定しないと動かないようです。
今回は".example.com"を"localhost"に変更して保存します。
次に、httpd.confを見ると、そもそもhttpd-info.confが読み込まれる設定になっていなかったのでこれも直します。
410行目のコメントアウトを外して保存します。
(省略)
408
409 # Real-time info on requests and configuration
410 #Include conf/extra/httpd-info.conf
411
(省略)
準備ができたのでapacheを再起動してからstatusを再確認します。
# /usr/local/httpd/bin/apachectl restart
# /usr/local/httpd/bin/apachectl status
Apache Server Status for localhost (via ::1)
Server Version: Apache/2.4.53 (Unix) OpenSSL/3.0.3
Server MPM: event
Server Built: Jun 6 2022 14:16:17
__________________________________________________________________
Current Time: Tuesday, 07-Jun-2022 13:23:26 JST
Restart Time: Tuesday, 07-Jun-2022 13:23:25 JST
Parent Server Config. Generation: 2
Parent Server MPM Generation: 1
Server uptime: 1 second
Server load: 0.00 0.00 0.00
Total accesses: 0 - Total Traffic: 0 kB - Total Duration: 0
CPU Usage: u0 s0 cu0 cs.02 - 2% CPU load
0 requests/sec - 0 B/second
1 requests currently being processed, 74 idle workers
Slot PID Stopping Connections Threads Async connections
total accepting busy idle writing keep-alive closing
0 58266 no 0 yes 1 24 0 0 0
1 58267 no 0 yes 0 25 0 0 0
2 58268 no 0 yes 0 25 0 0 0
Sum 3 0 0 1 74 0 0 0
W_______________________________________________________________
___________.....................................................
................................................................
................................................................
................................................................
................................................................
................
Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process
やっとスタータスが表示されました。
念のため、Apacheを止めて変化を確認しました。ApacheがホストするWebページを表示する仕様なのでApacheを止めたら接続できなくなるのは当然ですね。
# /usr/local/httpd/bin/apachectl stop
# /usr/local/httpd/bin/apachectl status
探索中: localhost
HTTP で localhost に接続中
警告!: リモートホストに接続できません。
lynx: スタートファイルにアクセスできません http://localhost/server-status
これで解決です。
ディスカッション
コメント一覧
まだ、コメントがありません