Apacheをソースコードからインストールした後に「lynx: コマンドが見つかりません」が発生

2022年6月17日

前提

書くこと/書かないこと

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

これで解決です。