
rpmパッケージを作成しました。.specファイルの一部は以下の通りです。
%install
mkdir -p ${RPM_BUILD_ROOT}/etc/xyz
cp -rf %{BDIR}/console ${RPM_BUILD_ROOT}/etc/xyz
%files
/etc/xyz/console
したがって、XYZ パッケージはコンソール ディレクトリを/etc/xyz
ディレクトリにコピーします。コンソール ディレクトリには他のディレクトリも含まれています。
インストールは完全に正常に動作しますが、パッケージを削除しても、rpm は dir の下のファイルとディレクトリを削除しません/etc/xyz/console
。
そのため、rpm パッケージを再インストールすると、ファイルが競合しているというメッセージが表示されます。
dir の下にあるすべてのファイルを消去するにはどうすればよいですか?
アップデート:
ディレクトリ構造:
console-
-dashboard.html
-index.html
-login.html
-logout.html
-cgi-bin
-cgi-bin/authenticate.py
-cgi-bin/login.py
-cgi-bin/logout.py
-media
-media/script/application.js
-media/script/bootstrap.js
-media/script/jquery.min.js960.css
-media/script/jquery.flot.js
-media/css/bootstrap.css
-media/css/style.css
-media/css/jquery-ui-1.10.0.custom.css
-media/image/logo.png
-media/image/banner.png
仕様ファイル:
%install
[ "$(cd "${RPM_BUILD_ROOT}" && pwd)" != "/" ] && rm -rf ${RPM_BUILD_ROOT}
mkdir -p ${RPM_BUILD_ROOT}/etc/application/console/cgi-bin
mkdir -p ${RPM_BUILD_ROOT}/etc/application/console/media/css
mkdir -p ${RPM_BUILD_ROOT}/etc/application/console/media/css/images
mkdir -p ${RPM_BUILD_ROOT}/etc/application/console/media/script
cp %{BDIR}/console/dashboard.html ${RPM_BUILD_ROOT}/etc/application/console/dashboard.html
cp %{BDIR}/console/index.html ${RPM_BUILD_ROOT}/etc/application/console/index.html
cp %{BDIR}/console/login.html ${RPM_BUILD_ROOT}/etc/application/console/login.html
cp %{BDIR}/console/logout.html ${RPM_BUILD_ROOT}/etc/application/console/logout.html
cp %{BDIR}/console/cgi-bin/authenticate.py ${RPM_BUILD_ROOT}/etc/application/console/cgi-bin/authenticate.py
cp %{BDIR}/console/cgi-bin/login.py ${RPM_BUILD_ROOT}/etc/application/console/cgi-bin/login.py
cp %{BDIR}/console/cgi-bin/logout.py ${RPM_BUILD_ROOT}/etc/application/console/cgi-bin/logout.py
cp %{BDIR}/console/media/css/boostrap.css ${RPM_BUILD_ROOT}/etc/application/console/media/css/boostrap.css
cp %{BDIR}/console/media/css/style.css ${RPM_BUILD_ROOT}/etc/application/console/media/css/style.css
cp %{BDIR}/console/media/css/jquery-ui-1.10.0.custom.css ${RPM_BUILD_ROOT}/etc/application/console/media/css/jquery-ui-1.10.0.custom.css
cp %{BDIR}/console/media/css/images/logo.png ${RPM_BUILD_ROOT}/etc/application/console/media/css/images/logo.png
cp %{BDIR}/console/media/css/images/banner.png ${RPM_BUILD_ROOT}/etc/application/console/media/css/images/banner.png
%files
%defattr(0700, root, root)
/etc/application/console/dashboard.html
/etc/application/console/index.html
/etc/application/console/login.html
/etc/application/console/logout.html
/etc/application/console/cgi-bin/authenticate.py
/etc/application/console/cgi-bin/authenticate.pyc
/etc/application/console/cgi-bin/authenticate.pyo
/etc/application/console/cgi-bin/login.py
/etc/application/console/cgi-bin/login.pyc
/etc/application/console/cgi-bin/login.pyo
/etc/application/console/cgi-bin/logout.py
/etc/application/console/cgi-bin/logout.pyc
/etc/application/console/cgi-bin/logout.pyo
/etc/application/console/media/css/boostrap.css
/etc/application/console/media/css/style.css
/etc/application/console/media/css/jquery-ui-1.10.0.custom.css
/etc/application/console/media/css/images/logo.png
/etc/application/console/media/css/images/banner.png
%post
echo "post install executing"
%preun
%postun
echo "post remove executing"
rm -rf /etc/application/console/cgi-bin/authenticate.py*
rm -rf /etc/application/console/cgi-bin/login.py*
rm -rf /etc/application/console/cgi-bin/logout.py*
エラー:
file /etc/application/console/cgi-bin/login.py from install of applicationconsole-1.0-1.x86_64 conflicts with file from package application_console-1.0-1.x86_64
file /etc/application/console/cgi-bin/logout.py from install of applicationconsole-1.0-1.x86_64 conflicts with file from package application_console-1.0-1.x86_64
file /etc/application/console/cgi-bin/authenticate.py from install of applicationconsole-1.0-1.x86_64 conflicts with file from package application_console-1.0-1.x86_64
より詳細なパッケージ削除出力
D: erase: waitpid(31098) rc 31098 status 0 secs 0.179
D: fini 100700 1 ( 0, 0) 4827 /etc/application/console/cgi-bin/login.py skip
D: fini 100700 1 ( 0, 0) 1195 /etc/application/console/cgi-bin/logout.py
skip
D: fini 100700 1 ( 0, 0) 7227 /etc/application/console/cgi-bin/authenticate.py skip
D: fini 100700 1 ( 0, 0) 33550 /etc/cachebox/console/application.html
D: fini 100700 1 ( 0, 0) 33550 /etc/cachebox/console/login.html
D: fini 100700 1 ( 0, 0) 33550 /etc/cachebox/console/logout.html
rpm パッケージ マネージャーがいくつかのファイルをスキップしていることに気付いた場合、その理由は何か?
答え1
RPM は、"%files"
ディレクティブで指定されたファイルのみを削除しますが、そのディレクトリの下にファイルがない場合に限ります。"rpm -e"
その下にあるすべてのファイルを削除する場合は、ディレクティブ"/etc/xyz/console"
で明示的に指定する必要があります"%files"
。
RPM は、安全ではないため、認識できないものを意図的に削除することはありません。そのため、パッケージを削除するだけでデータが失われることはありません。たとえば、更新時の構成ファイルについて考えてみてください。RPM が OS に配信される内容を確認する簡単な方法は常にあります。"rpm -qpl your_package.rpm"
この場合、ファイルを削除するには 2 つの方法があります。
1) 明示的に指定する"%files"
2) または、"%postun"
意図したファイルとディレクトリを削除するスクリプトを実行します。
お役に立てれば。
答え2
%files
/etc/xyz/console
%preun
if [ "$1" = 0 ] ; then
rm -rf /etc/xyz/console/*
fi
exit 0
http://www.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html
チャット後に編集
rpm -qa --last | ヘッド
古くて汚いパッケージを見せた
rpm -e 古い_crufty
勝つ。