設定ファイルのデフォルト状態を見たい
◆ バックアップしてないと直接過去バージョンは見れない
◆ rpm があればファイルパスをしてファイルを取り出せる
◆ rpm ファイルからインストールならその rpm を使える
◆ dnf なら rpm をダウンロードしたりダウンロード URL を取得できる
◆ rpm があればファイルパスをしてファイルを取り出せる
◆ rpm ファイルからインストールならその rpm を使える
◆ dnf なら rpm をダウンロードしたりダウンロード URL を取得できる
前記事を書いていて設定ファイルのデフォルト状態が知りたい時どうすれば良いんだろうと思いました
昔は 現状の設定ファイルをバックアップした上で再インストールしたり ネットで公開されてるところ (Github とか 公式とか) を見つけてダウンロードしたりでした
dnf で取得できる rpm から 1 ファイル取り出したりできないのか調べてみると rpm を cpio 形式に変換してから extract する方法がありました
rpm といってもファイルをまとめた zip みたいなものの一種ですから できなくはなさそうです
もう少し調べていると 全部解凍するのではなく 1 ファイルだけ指定して標準入力に送るという機能がありました
これをリダイレクトすれば目的のことができそうです
今回は前記事にそって 「/etc/php-fpm.d/www.conf」 を使います
インストールしたときは php と httpd しか入れてないのですが 依存関係で入ったパッケージの予感がしますね
このコマンドでどのパッケージにあるかわかります
「php-fpm.x86_64」 というパッケージでした
まず rpm をダウンロードします
rpm2cpio コマンドで rpm を cpio 形式に変換できます
cpio コマンドで cpio ファイルの操作ができます
今回は 1 ファイルだけ解凍したいので -i で解凍 --to-stdout <path> で指定のパスのファイルだけを標準出力へ出力するようにします
ここのコマンドの php-fpm は今ダウンロードした物のバージョンです
バージョンによって名前は変わるので パッケージ名だけ入力してあとは自動補完でダウンロードしたバージョンのものを指定します
--to-stdout の指定は ./ から始まっていないとダメみたいです
解凍先が /etc/~ なので / から始めるとダメでした
これで rpm に入ってるデフォルトのファイルが www.conf という名前でできてるはずです
あとは diff を使って差分を見たり上書きしてしまうなど好きにできます
直接 URL のものを解凍したいなと思ってあれこれやっていると これでできました
「dnf repoquery --location php-fpm」 では php-fpm の場所 (URL) を取得します
候補となる URL がミラーを含めて複数返ってくるので 1 つだけにするために 「head -n 1」 を通してます
それをダウンロードして標準出力に出力してもらうために 「xargs curl」 を使ってます
curl で URL をコマンドラインオプションじゃなくて 標準入力からにしたかったのですができるのかわからなかったのでとりあえず xargs にしました
rpm2cpio は 「-」 を指定することで標準入力から受け取ったファイルを対象にできます
あとは同じで cpio コマンドで解凍します
長いですが 1 行コピペで動かせるのはいいところです
昔は 現状の設定ファイルをバックアップした上で再インストールしたり ネットで公開されてるところ (Github とか 公式とか) を見つけてダウンロードしたりでした
dnf で取得できる rpm から 1 ファイル取り出したりできないのか調べてみると rpm を cpio 形式に変換してから extract する方法がありました
rpm といってもファイルをまとめた zip みたいなものの一種ですから できなくはなさそうです
もう少し調べていると 全部解凍するのではなく 1 ファイルだけ指定して標準入力に送るという機能がありました
これをリダイレクトすれば目的のことができそうです
rpm から 1 ファイル取り出す
まずは目的のパスのファイルがどの rpm に入ってるか調べます今回は前記事にそって 「/etc/php-fpm.d/www.conf」 を使います
インストールしたときは php と httpd しか入れてないのですが 依存関係で入ったパッケージの予感がしますね
dnf list /etc/php-fpm.d/www.conf
このコマンドでどのパッケージにあるかわかります
「php-fpm.x86_64」 というパッケージでした
まず rpm をダウンロードします
dnf download php-fpm
rpm2cpio コマンドで rpm を cpio 形式に変換できます
cpio コマンドで cpio ファイルの操作ができます
今回は 1 ファイルだけ解凍したいので -i で解凍 --to-stdout <path> で指定のパスのファイルだけを標準出力へ出力するようにします
rpm2cpio php-fpm-7.1.17-1.fc27.x86_64.rpm | cpio -i --to-stdout ./etc/php-fpm.d/www.conf > www.conf
ここのコマンドの php-fpm は今ダウンロードした物のバージョンです
バージョンによって名前は変わるので パッケージ名だけ入力してあとは自動補完でダウンロードしたバージョンのものを指定します
--to-stdout の指定は ./ から始まっていないとダメみたいです
解凍先が /etc/~ なので / から始めるとダメでした
これで rpm に入ってるデフォルトのファイルが www.conf という名前でできてるはずです
あとは diff を使って差分を見たり上書きしてしまうなど好きにできます
ローカルファイルを残さない
いったんダウンロードしてローカルに rpm を保存しましたが できればファイルを残さないほうが良いです直接 URL のものを解凍したいなと思ってあれこれやっていると これでできました
dnf repoquery --location php-fpm | head -n 1 | xargs curl | rpm2cpio - | cpio -iv --to-stdout ./etc/php-fpm.d/www.conf > www.conf2
「dnf repoquery --location php-fpm」 では php-fpm の場所 (URL) を取得します
候補となる URL がミラーを含めて複数返ってくるので 1 つだけにするために 「head -n 1」 を通してます
それをダウンロードして標準出力に出力してもらうために 「xargs curl」 を使ってます
curl で URL をコマンドラインオプションじゃなくて 標準入力からにしたかったのですができるのかわからなかったのでとりあえず xargs にしました
rpm2cpio は 「-」 を指定することで標準入力から受け取ったファイルを対象にできます
あとは同じで cpio コマンドで解凍します
長いですが 1 行コピペで動かせるのはいいところです