RPM-Bau spec.files
![](https://seccdn.libravatar.org/avatar/14612494cd9215b0df1324a7c9c333fd.jpg?s=120&d=mm&r=g)
Hallo RPM-Bauer, mir macht das Erstellen der spec.files noch ein Verständnis-Problem. Es geht um die Sektion %files. Ich finde in der einen Doku, dass rpm automatisch Verzeichnisse komplett in das Paket aufnimmt. In der nächsten heisst es wieder, nimm "%dir" und "%docdir". Mein Vorgehen war so: Erst an Programmen mit mitgeliefertem spec.file geübt, OK. Super! Jetzt habe ich mich an Mutt versucht. Vom SuSE 8.2 geliefertem 1.4 auf 1.4.1. 1. Mit Dreisatz und --prefix nach /home/user/test als User installiert. 2. Mir mit Dateimanager und ls -R angeschaut, was da installiert wird. 3. Übertragen und so nach einigen tests eingetragen: %files %dir /usr/local/bin %docdir /usr/local/doc %dir /usr/local/etc/ %dir /usr/local/man/ %dir /usr/local/share Fragen: Ist %docdir notwendig? Ohne hat rpm -bl gemeckert. In http://www.linux-user.de/ausgabe/2003/07/074-rpm/ steht, dass Verzeichnisse erkannt werden, hat bei mir nicht geklappt. Musste das %dir voranstellen. Hm? Oder ist es am sinnvollsten, jede einzelne Datei mit komplettem Pfad anzugeben? Das kann dann aber heiter werden. ;-) Nun gut, dann bleibt eigentlich nur noch, warum mich die Kompilation von Mutt anmeckert, ich würde Regeln bei alias verletzen. Habe es vor lauter Eifer nicht in eine Datei umgeleitet. Mein Versuch ./configure | tee Datei ging auch /dev/null. Falls mir jemand in dem einen oder anderen Punkt freundlich auf den Hinterkopf klopfen könnte... :-) Gruss Sven
![](https://seccdn.libravatar.org/avatar/7b33cb1e776e35b87edb8ef09f0c888f.jpg?s=120&d=mm&r=g)
Hallo, Am Mon, 27 Oct 2003, Sven Rodenbeck schrieb:
mir macht das Erstellen der spec.files noch ein Verständnis-Problem.
Du willst das "Maximum RPM-Book" lesen. Siehe www.rpm.org.
Es geht um die Sektion %files. Ich finde in der einen Doku, dass rpm automatisch Verzeichnisse komplett in das Paket aufnimmt. In der nächsten heisst es wieder, nimm "%dir" und "%docdir".
Siehe in o.g. Buch.
3. Übertragen und so nach einigen tests eingetragen: %files %dir /usr/local/bin %docdir /usr/local/doc %dir /usr/local/etc/ %dir /usr/local/man/ %dir /usr/local/share
*UAARRGHHH* Du willst _NICHT_ %dir verwenden, denn die Verzeichnisse sind nicht spezifisch fuer z.B. mutt. %files %defattr(-,root,root) %doc Liste_der_doc_dateien %{_bindir}/* %{_confdir}/* %{_mandir}/man1/*.1* %{_datadir}/locale/*/*/%{name}.mo Merken: globbing in %files ist nicht das gleiche, wie die Angabe von %dir. Konkret: wenn du %dir verwendest will rpm beim deinstallieren eben dieses Verzeichnis loeschen, was fuer %{_datadir}/%{name} richtig waere, aber bei %{_bindir} eben nicht. -dnh -- Died. Woke up in Hell. Punched in PIN, logged on. Just another day. -- David Gerard
![](https://seccdn.libravatar.org/avatar/14612494cd9215b0df1324a7c9c333fd.jpg?s=120&d=mm&r=g)
Hallo David, David Haller schrieb:
Am Mon, 27 Oct 2003, Sven Rodenbeck schrieb:
mir macht das Erstellen der spec.files noch ein Verständnis-Problem.
Du willst das "Maximum RPM-Book" lesen. Siehe www.rpm.org.
Ja, natürlich will ich. :-) Im Ernst, klar kenne ich das, nur ist mein Englisch nicht so gut, so dass ich hier nur sehr mühsam vorwärts komme. Bei einem englischen Text, der mein Fachgebiet [1]betrifft, geht das besser, weil ich weiss, wovon die Rede ist und die Zusammenhänge besser erkenne. Hier ist es für mich Neuland, was mich aber interessiert. Ich habe mir einiges an verfügbarer deutscher Doku angesehen. Leider habe ich hier auch was missverstanden. Siehe unten.
Es geht um die Sektion %files. 3. Übertragen und so nach einigen tests eingetragen: %files %dir /usr/local/bin %docdir /usr/local/doc %dir /usr/local/etc/ %dir /usr/local/man/ %dir /usr/local/share
*UAARRGHHH*
Du willst _NICHT_ %dir verwenden, denn die Verzeichnisse sind nicht spezifisch fuer z.B. mutt.
Nein, will ich jetzt bestimmt nicht mehr. Siehe unten.
%files %defattr(-,root,root) %doc Liste_der_doc_dateien %{_bindir}/* %{_confdir}/* %{_mandir}/man1/*.1* %{_datadir}/locale/*/*/%{name}.mo
Merken: globbing in %files ist nicht das gleiche, wie die Angabe von %dir. Konkret: wenn du %dir verwendest will rpm beim deinstallieren eben dieses Verzeichnis loeschen, was fuer %{_datadir}/%{name} richtig waere, aber bei %{_bindir} eben nicht.
Da lag ich ziemlich daneben. Auweiah! Da würde mir also ein rpm -e mutt mal soeben /usr/local/bin löschen, wenn ich es jetzt richtig verstehe?! OK. Dein Merken ist gespeichert! Hilft mir weiter, Danke! Gruss Sven [1] Beruf: Musiker Hobby: u.a. Linux
![](https://seccdn.libravatar.org/avatar/7b33cb1e776e35b87edb8ef09f0c888f.jpg?s=120&d=mm&r=g)
Hallo, Am Wed, 29 Oct 2003, Sven Rodenbeck schrieb:
David Haller schrieb:
Am Mon, 27 Oct 2003, Sven Rodenbeck schrieb:
mir macht das Erstellen der spec.files noch ein Verständnis-Problem.
Du willst das "Maximum RPM-Book" lesen. Siehe www.rpm.org.
Ja, natürlich will ich. :-) Im Ernst, klar kenne ich das, nur ist mein Englisch nicht so gut, so dass ich hier nur sehr mühsam vorwärts komme.
Such mal im Archiv -- IIRC haben wir da schon einiges erklaert (Manfred, Ralf und ich IIRC). Und ansonsten: nur keine Hemmungen bei spezifischen Sachen / Saetzen nachzufragen. [..]
Merken: globbing in %files ist nicht das gleiche, wie die Angabe von %dir. Konkret: wenn du %dir verwendest will rpm beim deinstallieren eben dieses Verzeichnis loeschen, was fuer %{_datadir}/%{name} richtig waere, aber bei %{_bindir} eben nicht.
Da lag ich ziemlich daneben. Auweiah! Da würde mir also ein rpm -e mutt mal soeben /usr/local/bin löschen, wenn ich es jetzt richtig verstehe?!
Es wuerde versucht werden, aber wg. "directory not empty" scheitern. Du kannst uebrigens auch die Dateiliste generieren, nur muss man die eben i.d.R. nacharbeiten. Ich habe sicher irgendwo noch in nem .spec nen fuer die meisten Faelle passenden Befehl (IIRC von Manfred) ;) Generell solltest du IMO in %files mit (eindeutigem) globbing arbeiten. -dnh -- Postings sind nichts weiter als Kondensationskerne. Mit etwas Glück schlägt sich eine Diskussion an ihnen nieder die sich schon seit Tagen zusammen- geballt hat. Oder aber wir haben trockenes Wetter und nix passiert. -- Cornell Binder in dafu-l
![](https://seccdn.libravatar.org/avatar/e576df6fe8d62f2bbc03fac790accedb.jpg?s=120&d=mm&r=g)
Am Dienstag, 28. Oktober 2003 03:53 schrieb David Haller:
[...]
Du willst _NICHT_ %dir verwenden, denn die Verzeichnisse sind nicht spezifisch fuer z.B. mutt.
Sorry, dem muss ich widersprechen. Es ist genau umgekehrt. Verzeichnisse, die mit %dir gekennzeichnet sind werden beim installieren erstellt, falls nötig, beim deinstallieren aber *nicht* gelöscht und erzeugen so auch keine Fehlermeldungen. Verzeichnisse, wie z. B. /bin ,/usr, /usr/lib oder /usr/share sollten also mit %dir gekennzeichnet werden. Solche wie /usr/share/mutt dagegen nicht.
[...]
Herbert
![](https://seccdn.libravatar.org/avatar/7b33cb1e776e35b87edb8ef09f0c888f.jpg?s=120&d=mm&r=g)
Hallo, Am Wed, 29 Oct 2003, Herbert Graeber schrieb:
Am Dienstag, 28. Oktober 2003 03:53 schrieb David Haller:
[...]
Du willst _NICHT_ %dir verwenden, denn die Verzeichnisse sind nicht spezifisch fuer z.B. mutt.
Sorry, dem muss ich widersprechen. Es ist genau umgekehrt. Verzeichnisse, die mit %dir gekennzeichnet sind werden beim installieren erstellt, falls nötig, beim deinstallieren aber *nicht* gelöscht und erzeugen so auch keine Fehlermeldungen.
Du hast %dir nicht verstanden.
Verzeichnisse, wie z. B. /bin ,/usr, /usr/lib oder /usr/share sollten also mit %dir gekennzeichnet werden. Solche wie /usr/share/mutt dagegen nicht.
FALSCH! Wie du leicht selber ausprobieren kannst: ==== /usr/src/packages/SPECS/test_dir.spec ==== %define _prefix /tmp/test_dir Summary: testing %dir Name: test_dir Version: 0.1 Release: 0 Autoreqprov: on Group: unsorted Copyright: GPL BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot %description Test spec %install install -d -m 755 ${RPM_BUILD_ROOT}%{_bindir} echo "echo test" > ${RPM_BUILD_ROOT}%{_bindir}/test_dir.sh chmod 755 ${RPM_BUILD_ROOT}%{_bindir}/test_dir.sh %files %dir %{_bindir} %{_bindir}/test_dir.sh ==== $ cd /usr/src/packages/SPECS $ rpm -bb test_dir.spec $ su - # rpm -qpl /usr/src/packages/RPMS/i386/test_dir-0.1-0.i386.rpm /tmp/test_dir/bin /tmp/test_dir/bin/test_dir.sh # rpm -i /usr/src/packages/RPMS/i386/test_dir-0.1-0.i386.rpm # touch /tmp/test_dir/bin/foo.sh # rpm -e test_dir cannot remove /tmp/test_dir/bin - directory not empty # ls /tmp/test_dir/bin/ . .. foo.sh Come again? -dnh -- 55: Fachhändler Student, 24 Jahre, Geologie (vormals Informatik), Gewerbeschein (15 DM), wohnt bei den Eltern (Kristian Köhntopp)
![](https://seccdn.libravatar.org/avatar/e576df6fe8d62f2bbc03fac790accedb.jpg?s=120&d=mm&r=g)
Hallo, Am Donnerstag, 30. Oktober 2003 00:31 schrieb David Haller:
[...]
Du hast %dir nicht verstanden.
Mein erster Gedanke war: "Kann nicht sein ich baue nun RPMs seit über zwei Jahren..." Doch: Es stimmt. Aber anders als du denkst...
[...]
FALSCH! Wie du leicht selber ausprobieren kannst:
==== /usr/src/packages/SPECS/test_dir.spec ==== %define _prefix /tmp/test_dir
Summary: testing %dir Name: test_dir Version: 0.1 Release: 0 Autoreqprov: on Group: unsorted Copyright: GPL BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot
%description Test spec
%install install -d -m 755 ${RPM_BUILD_ROOT}%{_bindir} echo "echo test" > ${RPM_BUILD_ROOT}%{_bindir}/test_dir.sh chmod 755 ${RPM_BUILD_ROOT}%{_bindir}/test_dir.sh
%files %dir %{_bindir} %{_bindir}/test_dir.sh ====
Das habe ich genauso ausprobiert (cut & paste)
$ cd /usr/src/packages/SPECS $ rpm -bb test_dir.spec $ su - # rpm -qpl /usr/src/packages/RPMS/i386/test_dir-0.1-0.i386.rpm /tmp/test_dir/bin /tmp/test_dir/bin/test_dir.sh # rpm -i /usr/src/packages/RPMS/i386/test_dir-0.1-0.i386.rpm # touch /tmp/test_dir/bin/foo.sh # rpm -e test_dir cannot remove /tmp/test_dir/bin - directory not empty
Diese Meldung bekomme ich nicht! Tatsächlich ist die Zeile mit dem % dir in diesem Fall sogar redundant.
# ls /tmp/test_dir/bin/ . .. foo.sh
Schreibt man dagen die %dir-Zeile und lässt die mit dem test_dir.sh weg, bekommt man nach der Installation dieseben Verzeichnisse und Dateien, beim Deinstallieren aber auch die Fehlermeldung, weil RPM nun das Verzeichnis samt Inhalt löschen will und das wegen foo.sh nicht kann. Scheint so, als ob ich nun 99% meiner %dir-Zeilen aus meinen Spec-Files löschen kann und %dir nur noch für leere Verzeichnisse brauche, die nach einer Deinstallation erhalten bleiben sollen, weil sie Dateien enthalten könnten, die nicht zu meinem Paket gehören. Man lernt nie aus... Herbert
participants (3)
-
David Haller
-
Herbert Graeber
-
Sven Rodenbeck