
He creado un paquete rpm. La parte del archivo .spec se encuentra a continuación
%install
mkdir -p ${RPM_BUILD_ROOT}/etc/xyz
cp -rf %{BDIR}/console ${RPM_BUILD_ROOT}/etc/xyz
%files
/etc/xyz/console
Entonces el paquete XYZ copia el directorio de la consola al /etc/xyz
directorio. El directorio de la consola también contiene algún otro directorio.
La instalación funciona perfectamente bien, pero cuando elimino el paquete rpm no elimina los archivos ni el directorio del directorio /etc/xyz/console
.
Entonces, al reinstalar el paquete rpm, dice que los archivos están entrando en conflicto.
¿Cómo limpiamos todos los archivos del directorio?
Actualizaciones:
Estructura de directorios:
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
archivo de especificaciones:
%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*
Errores:
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
Salida más detallada para eliminar el paquete
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
Si nota que el administrador de paquetes rpm está omitiendo algunos archivos, la pregunta es ¿por qué?
Respuesta1
RPM solo eliminará los archivos especificados bajo "%files"
la directiva, pero solo si no hay archivos en ese directorio. Si desea "rpm -e"
eliminar todos los archivos que aparecen a continuación, "/etc/xyz/console"
deberá especificarlos explícitamente en "%files"
la directiva.
RPM no elimina nada que no reconozca a propósito ya que no es seguro, por lo que no pierde datos simplemente eliminando el paquete; piense en los archivos de configuración en la actualización, por ejemplo. Siempre hay una manera fácil de ver con qué se entrega el RPM al sistema operativo. "rpm -qpl your_package.rpm"
En su caso, hay 2 formas de eliminar los archivos:
1) Especifíquelos explícitamente en"%files"
2) O ejecute "%postun"
un script donde elimine los archivos y directorios que desee.
Espero que esto ayude.
Respuesta2
%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
EDITAR después del chat
rpm -qa --último | cabeza
mostró un paquete viejo y crujiente
rpm -e viejo_crufty
ganar.