我创建了一个 rpm 包。.spec 文件的部分在下面
%install
mkdir -p ${RPM_BUILD_ROOT}/etc/xyz
cp -rf %{BDIR}/console ${RPM_BUILD_ROOT}/etc/xyz
%files
/etc/xyz/console
Run Code Online (Sandbox Code Playgroud)
所以 XYZ 包将控制台目录复制到/etc/xyz
目录。控制台目录还包含一些其他目录。
安装工作正常,但是当我删除包时 rpm 不会删除/etc/xyz/console
dir下的文件和目录。
所以在重新安装 rpm 包时,它说文件发生冲突。
我们如何清理目录下的所有文件?
更新:
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
Run Code Online (Sandbox Code Playgroud)
规范文件:
%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*
Run Code Online (Sandbox Code Playgroud)
错误:
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
如果您注意到 rpm 包管理器正在跳过一些文件。问题是为什么?
RPM 只会删除"%files"
指令下指定的文件,但前提是该目录下没有文件。如果您想"rpm -e"
删除下面的所有文件,"/etc/xyz/console"
则必须在"%files"
指令下明确指定它们。
RPM 不会故意删除任何它无法识别的内容,因为它不安全,因此您不会因为删除软件包而丢失数据,例如考虑更新中的配置文件。总有一种简单的方法可以查看 RPM 随操作系统一起交付的内容"rpm -qpl your_package.rpm"
在您的情况下,有 2 种方法可以删除文件:
1) 在下面明确指定它们"%files"
2) 或者运行"%postun"
脚本来删除您想要删除的文件和目录。
希望这可以帮助。
归档时间: |
|
查看次数: |
7275 次 |
最近记录: |