httpd の 設定ファイルを編集して、サービスを再起動したら設定ファイルが間違っていてサービスが起動しなくなったとトラブルに陥った事はありませんか?今回は httpd パッケージを参考に書いていますが、どんなパッケージでも応用出来るので試してみて下さい。
# systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: failed (Result: exit-code) since 木 2017-12-14 18:03:55 JST; 4s ago Docs: man:httpd(8) man:apachectl(8) Process: 2500 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE) Process: 2499 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE) Main PID: 2499 (code=exited, status=1/FAILURE) 12月 14 18:03:55 192.168.0.10 httpd[2499]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:22 12月 14 18:03:55 192.168.0.10 httpd[2499]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:22 12月 14 18:03:55 192.168.0.10 httpd[2499]: no listening sockets available, shutting down 12月 14 18:03:55 192.168.0.10 httpd[2499]: AH00015: Unable to open logs 12月 14 18:03:55 192.168.0.10 systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE 12月 14 18:03:55 192.168.0.10 kill[2500]: kill: cannot find process "" 12月 14 18:03:55 192.168.0.10 systemd[1]: httpd.service: control process exited, code=exited status=1 12月 14 18:03:55 192.168.0.10 systemd[1]: Failed to start The Apache HTTP Server. 12月 14 18:03:55 192.168.0.10 systemd[1]: Unit httpd.service entered failed state.
設定ファイルの編集を行う時、私は初期設定ファイルのバックアップをまず最初に保存します。
# cp -a /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
その後、/etc/httpd/conf/httpd.conf の編集を行って行くのですが、設定ファイルのバックアップを保存して置くのを忘れ、いろいろ設定をいじっているうちにアプリケーションが起動しなくなってしまったという経験はみなさんもあると思います。そんな時、パッケージの中から設定ファイルを取りだせれば初期状態に戻せます。一番簡単な方法は、rpm を上書きインストール方法です。
まず初めに、上書きしたい設定ファイルがどのパッケージに属しているのかを調べます。
$ rpm -qf /etc/httpd/conf/httpd.conf httpd-2.4.6-67.el7.centos.6.x86_64
パッケージ名が分かったらその RPM をダウンロードします。
$ yum install yum-utils
$ yumdownloader httpd-2.4.6-67.el7.centos.6.x86_64
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
httpd-2.4.6-67.el7.centos.6.x86_64.rpm
ダウンロード出来たら、初期状態にしたいファイルを削除してから
rpm の 強制インストールオプション –force を使用し、上書きインストールを行えば
/etc/httpd/conf/httpd.conf が再インストールされ初期状態に戻ります。
# rm -f /etc/httpd/conf/httpd.conf # rpm -ivh httpd-2.4.6-67.el7.centos.6.x86_64.rpm --force 準備しています... ################################# [100%] 更新中 / インストール中... 1:httpd-2.4.6-67.el7.centos.6 ################################# [100%]
しかし待って下さい。設定ファイルはそのままで、差分だけを知りたいという場合もあるかもしれません。そんな時は、httpd.conf だけ RPM から抜き出しましょう。実は、RPM も自体も圧縮されたアーカイブなので、rpm2cpio コマンドで rpm のデータを cpio に変更し出力する事が出来ます。
# mkdir tmp # cd tmp # yumdownloader httpd-2.2.13-1.fc11.i586 # rpm2cpio httpd-2.4.6-67.el7.centos.6.x86_64.rpm |cpio -idm 19344 blocks # ls etc httpd-2.4.6-67.el7.centos.6.x86_64.rpm run usr var # ls etc/httpd/conf/httpd.conf etc/httpd/conf/httpd.conf # diff etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf 74c74 < KeepAlive Off --- > KeepAlive On 81c81 < MaxKeepAliveRequests 100 --- > MaxKeepAliveRequests 50 134c134 < Listen 80 --- > Listen 22
* cpio
cpio は、tar と同じく は、ユーザ情報、グループ情報、パーミッション、最終更新日時、ディレクトリ構造などの情報を同時にアーカイブすることが出来る事が出来ます。
cpio
-d 必要に応じてディレクトリを作成します。
-m コピー先のファイル生成時に、コピー元のファイルの更新時刻を保持します。
-i アーカイブからファイルを抽出します。
diff : ファイルの比較を行い、2つのファイル間の違いを出力します。