Vermeiden Sie Dateikonflikte im RPM-Paket

Vermeiden Sie Dateikonflikte im RPM-Paket

Ich habe ein RPM-Paket erstellt. Der Teil der .spec-Datei ist unten

%install    
mkdir -p ${RPM_BUILD_ROOT}/etc/xyz    
cp -rf %{BDIR}/console ${RPM_BUILD_ROOT}/etc/xyz

%files    
/etc/xyz/console

Also kopiert das XYZ-Paket das Konsolenverzeichnis in /etc/xyzdas Verzeichnis. Das Konsolenverzeichnis enthält auch ein anderes Verzeichnis.

Die Installation funktioniert einwandfrei, aber wenn ich das Paket entferne, entfernt RPM weder die Dateien noch das Verzeichnis unter /etc/xyz/consoledir.

Bei der Neuinstallation des RPM-Pakets wird angezeigt, dass es zu Dateikonflikten kommt.

Wie bereinigen wir alle Dateien unter „Dir“?

Aktualisierung:

Verzeichnisaufbau:

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

Spezifikationsdatei:

%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*

Fehler:

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

Ausführlichere Ausgabe zum Entfernen von Paketen

    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

Wenn Sie bemerken, dass der RPM-Paketmanager einige Dateien überspringt, stellt sich die Frage, warum?

Antwort1

RPM entfernt nur die in der "%files"Direktive angegebenen Dateien, aber nur, wenn sich in diesem Verzeichnis keine Dateien befinden. Wenn Sie "rpm -e"alle Dateien entfernen möchten "/etc/xyz/console", müssen Sie sie in der "%files"Direktive explizit angeben.

RPM löscht nichts, was es nicht erkennt, da dies nicht sicher ist. Sie verlieren also keine Daten, wenn Sie das Paket entfernen. Denken Sie beispielsweise an Konfigurationsdateien beim Update. Es gibt immer eine einfache Möglichkeit, zu sehen, was das RPM in das Betriebssystem einbringt. "rpm -qpl your_package.rpm" In Ihrem Fall gibt es zwei Möglichkeiten, die Dateien entfernen zu lassen:

1) Geben Sie sie explizit an unter"%files"

2) Oder führen Sie "%postun"ein Skript aus, in dem Sie die gewünschten Dateien und Verzeichnisse entfernen.

Hoffe das hilft.

Antwort2

%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

BEARBEITEN nach dem Chat

rpm -qa --last | Kopf

zeigte einige alte, veraltete Pakete

rpm -e alt_crufty

gewinnen.

verwandte Informationen