rpm パッケージの設定ファイルを初期の設定に戻したい

LINEで送る
Pocket

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つのファイル間の違いを出力します。

LINEで送る
Pocket

  • このエントリーをはてなブックマークに追加

アマゾン

LINEで送る
Pocket

記事が面白かった。為になったと思ったら。下記リンクより商品を購入頂くと筆者は喜び記事を更新致します。


LINEで送る
Pocket

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください