アンインストール後、RPMコンテンツをファイルシステムに保持することは可能ですか?
基本的に、誰かがrpm -eを実行したときに、RPMによって生成されたファイルを消去したくありませんが、インストールされているRPMのリストからパッケージを削除します。サーバーからアプリケーションを手動でアンインストールしたいのですが、その方法が見つかりません。
前もって感謝します。
パッケージ作成者としてのこの観点から、ファイルに構成としてフラグを付けることができます。Cambridge Uniの John Warbrick が、RPM 仕様ファイルで使用できるさまざまなファイル マーキングと、アップグレード中のそれらの動作の概要を説明しています。
のマークが付いたファイルが%config
変更された場合は、次のとおりです。
.rpmsave
拡張子で名前が変更されました.rpmnew
拡張機能付きでインストールされますWarbrick は単純なパッケージの削除には対応していません: マークされたファイル%config
が変更されていない場合、パッケージを消去するとファイルが削除されます。( RPM スクリプトレットの順序に従って、RPMの更新または再インストールは、新しいファイルが配置される前に、古いパッケージの消去から始まることに注意してください。つまり、変更されていない古い構成が新しい構成に置き換えられます。)
%config
実際には構成ではない何かをマークするのは、RPM ファイル分類の悪用になります。システム管理者はパッケージのペイロードを信頼できる必要があるため、これは重要です。さらに、おそらく、そのようなファイルに拡張子を付けて名前を変更したくないでしょう。
RPM %post 中にファイルを作成することをお勧めします。でファイルシステムにコピーされたファイル%install
はリストと照合%files
され、RPM データベースに保存されますが、で作成されたファイルはそうで%post
はありません。繰り返しますが、これは RPM 仕様ファイル形式の乱用ですが、およびその他のドキュメントで言及すると%description
、特にパッケージのコンテキストで論理的に予想される動作である場合は、共感を得るかもしれません。
ペイロードを削除せずにパッケージを削除したいシステム管理者の場合は、rpm --justdb
. まず、ファイル リストを確認します。
# rpm -ql $PACKAGE | tee $PACKAGE.payload
[rpm returns list of files, tee saves it in the file $PACKAGE.payload]
# rpm -e --justdb $PACKAGE
(この段階で、deps について苦情を受ける可能性があるため、必要に--nodeps
応じて を繰り返します。)
最後に、パッケージがなくなっていることを確認しますが、ペイロードはまだそこにあります。
# rpm -q $PACKAGE
package $PACKAGE is not installed
# ls -l $(<$PACKAGE.payload)
[ls queries list of files saved in $PACKAGE.payload]
ls
(または、ファイル名にスペースが含まれている場合の信頼性を高めるため、 RPM では不合理です。)
# cat $PACKAGE.payload|xargs -d '\n' ls -l
私の回答の冒頭で概説した方法を使用して作成されたパッケージの場合、それが所有するファイルをリストしようとしても、rpm -ql $PACKAGE
それらの永続ファイルは表示されないことに注意してください。途中でファイルをスローする%post
と、それらのファイルを「所有」する別のパッケージが予期せず上書きする可能性があります。それらは RPM データベースにリストされていないため、保護されていません。
私が概説した 2 つの方法は、RPM パッケージの作成とシステム管理の両方のベスト プラクティスを破ります。この危険な「ちょっとした知識」の使い方には十分注意してください。望ましい状況を作り出すために他にできることがあるかもしれません。
(最後に、これが 4 年前の質問であることはわかっています。回答がありませんでした。回答が必要でした。乾杯。)
RPMS の利点の 1 つは、すべてのファイルを簡単にアンインストール (削除) できることです。RPM によって提供されるファイルを手動でインストールする場合は、RPM をルートとして次のように解凍します。
cd / && rpm2cpio *.rpm | cpio-idmv
これは良い考えではありませんが、そのような RPMS を別の場所 (例えば ${HOME} の下) に解凍することができ、非常に便利です。ただし、いくつかの環境変数を調整する必要がある場合があります。RPM データベースを汚染することはありませんが、それでも RPM の内容を使用します。もちろん、アプリケーションは依存関係によって保護されていないため、システムの更新によって壊れる可能性があります。とにかく、これは root でない場合の "インストール" と RPM の方法です。取り外しも簡単です (インストール パスが適切に選択されている場合)。
rpm -e --repackage package_name
は、再インストール可能なコピーを にドロップします/var/spool/repackage
。rpm2cpio
これらのファイルを個別に戻す必要がある場合は、を使用してその rpm から抽出できます。