2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

yum updateでWebサーバを止めちゃった人向けのトラブルシューティング

Posted at

開発環境で'yum update'がうまくいったからってそのまま本番環境でyum updateをやったもんだから別のApacheがインストールされて死ぬかと思いました。
同じような目に遭ってる人もいるようですね。
本番環境でsudo yum updateしてサービスが動かなくなった

今後同じ轍を踏んでしまった人のために解決法を残しておきます。
#何が起きたのか
まず、原因はタイトルの通リ以下のコマンドです。

[root]# yum update

このコマンドを打つとyumリポジトリから最新のパッケージを全部インストールしてくれるようです。
その中には当然の様にApacheが混じっている訳で、これが標準としてインストールされてしまいます。

したがって、元々ApacheがインストールされているとApacheが以下の場所に2つインストールされてしまうわけですね。

/user/local/apache2/ …元からインストールされていたApache2.2
/etc/httpd/ …yumによってインストールされたApache2.4

このとき、systemctl的にはyumによってインストールされたApacheを起動します。httpd.confもApache2.4のものがロードされます。
yumでインストールされたApache2.4のhttpd.confはphpのモジュールをロードしませんから、このままだとphpのコードが世界に晒されてしまいます。
#トラブルシューティング
ではお待ちかねのトラブルシュートのお時間です。
##Apache2.4のアンインストール
まずはApache2.4が邪魔なのでこれをアンインストールします。

[root]# yum remove httpd

##SSL設定のリカバリ
ssl.confが参照する証明書ファイルのパスがデフォルトのlocalhostになっている可能性があるので、これを直しに行きます。

[root]# vi /usr/local/apache2/conf/ssl.conf

私はLet's Encryptの証明書を使っていたのでこちらのサイトが参考になりました。
CentOS 7 + Apache 2.4 に Let’s Encrypt の証明書を導入する手順
##起動スクリプトの復元
yum remove httpdによって起動スクリプトが消滅します。これをリカバリします。
手順はこちらのサイトを参考にしました。
Apache起動スクリプト作成

まずは起動スクリプトが無いことを確認します。

[root]# ls /etc/init.d

次に、apachectl/etc/init.d配下にコピーします。

[root]# cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd

ここで、httpdを編集してサーバ起動時にhttpdも起動するようにchkconfigの設定を足しておきます。

[root]# vi /etc/init.d/httpd
httpd
#!/bin/sh
#
# chkconfig: 345 85 15

ファイルができたら自動起動登録します。

# httpdが登録されていないことを確認
[root]# chkconfig --list httpd
# httpdを登録
[root]# chkconfig --add httpd
# httpdが登録されたことを確認
[root]# chkconfig --list httpd
httpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off

最後にserviceコマンドから起動してみましょう。

[root]# service httpd start

起動すれば成功です。

sysytemctlに登録

このままではsystemctl視点で起動できていませんので、登録します。
こちらのサイトを参考にしました。
【CentOS7】init.d起動スクリプトでApache2.2が起動しない場合の対処方法(systemd起動スクリプト作成で解決)

まずはsystemdに対応した起動スクリプトを作成します。

[root]# vi /etc/systemd/system/httpd.service
httpd.service
[Unit]
Description=Apache Web Server Name
After=network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
ExecStart=/usr/local/apache2/bin/apachectl -k start
ExecReload=/usr/local/apache2/bin/apachectl graceful
ExecStop=/usr/local/apache2/bin/apachectl -k stop
PrivateTmp=true
LimitNOFILE=infinity
 
[Install]
WantedBy=multi-user.target

作成したファイルに実行権限をつけます。

[root]# chmod 755 /etc/systemd/system/httpd.service

次に、サービスを有効に設定します。

[root]# systemctl enable httpd.service

では実行してみます。

[root]# systemctl start httpd.service

最後に動作を確認してトラブルシューティング完了です。

#さいごに
終わってみれば「こんなもんだったかなぁ」というぐらいの手順ですが、嵌るとなかなか解決しないものですね。
(Gitの最新版をインストールしたかっただけなのになぁ)

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?