• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] rpm erstellung - Name des Bau - Rechners

oddikurt

Hacker
Hi zusammen,

beschäftige mich gerade mit dem Bau von rpm Paketen. Habe nun mein erstes rpm Paket gebaut und installiert. (nicht mit checkinstall! - um Missverständnissen vorzubeugen) Es handelt sich um den Editor nano in der Version 1.25 Stable Branch.
In yast2 ist mir bei der Installation (keine Fehlermeldung) aufgefallen dass, als Baurechner
Code:
ofen.site
angegeben wird. Klar meine Kiste heisst ofen. Aber woher kommt das ".site"? Habe in den Anleitungen und Artikel die ich bisher als Material herangezogen habe keinen Hinweis finden können. Die "SuFu" hier hat ebenfalls nichts ausgespuckt. Falsche Suche von mir ist nat. nicht auszuschliessen. Nun folgt meine nano-1.2.5.spec:

Code:
Summary: GNU nano - an enhanced clone of the Pico text editor. (Version 1.2.5)
Summary(de): GNU nano - Ein Texteditor (Version 1.2.5)
Name: nano
Version: 1.2.5
Release: 0.1.oddikurt
License: GPL
Group: Applications/Editors
Source0: nano-1.2.5.tar.gz
URL: http://www.nano-editor.org/
Distribution: SUSE 9.3
Vendor: none
Packager: oddikurt <oddikurt@yahoo.de>
Provides: GNU nano
BuildRoot: %{_tmppath}/%{name}-%{version}
Requires: /sbin/ldconfig

%description
GNU nano - an enhanced clone of the Pico text editor. Version 1.2.5 stable branch


%description -l de
GNU nano - ein verbesserter Pico text editor. Version 1.2.5 Stabiler Entwicklungszweig


%prep
%setup -q -n %{name}-%{version}


%build
%configure
%{__make} %{?_smp_mflags}

%install
rm -rf %{buildroot}
%makeinstall
%find_lang %{name}

%clean
rm -rf %{buildroot}


%post -p /sbin/SuSEconfig

%postun -p /sbin/SuSEconfig

%files -f %{name}.lang
%defattr(-, root, root)
#%doc
#%{_bindir}/*
#%{_libdir}/*.so.*
#%{_datadir}/%{name}
#%{_mandir}/man8/*
/usr/bin/nano
/usr/share/info/nano.info.gz
/usr/share/man/man1/nano.1.gz
/usr/share/man/man5/nanorc.5.gz


%changelog
* Mon Jul 18 2005 oddikurt <oddikurt@yahoo.de>
- Initial RPM release.
Es sind bestimmt noch andere ungereimtheiten in diesem Specfile. Ich bitte diese sofort anzukreiden! - Ich möchte ja schliesslich was dazulernen!
Achja, zus. Information: Baue in meinem Home, nicht als root und benutze eine
Code:
.rpmrc
mit entsprechenden Anpassungen der Pfade.
Falls noch zusätzliche Infos nötig sind bzw. helfen würden, werde ich versuchen diese schnellstmöglich zu liefern. (z.B. Sozialvers. Nr. :mrgreen: )
Ich hoffe jemand kann mir helfen.
 
Zum Hostnamen-Problem weiß ich nichts, aber hier mal ein paar Anmerkungen zur SPEC-Datei:

Code:
Summary: GNU nano - an enhanced clone of the Pico text editor. (Version 1.2.5)
Summary(de): GNU nano - Ein Texteditor (Version 1.2.5)
Die Versionsnummer gehört nicht in den Summary-Tag, weil sie schon im Version-Tag steht
Code:
Group: Applications/Editors
Gibt es nicht bei SuSE! Passend wäre Productivity/Editors/Other
Code:
Vendor: none
Lass den Tag ganz weg, wenn Du ihn nicht definieren willst
Code:
Provides: GNU nano
Wieso das? Was Du da schreibst, bedeutet, dass Dein Paket die Pakete "GNU" und "nano" liefert, also sich selbst und "GNU". Wozu? Das Paket heißt nicht "GNU" und auch nicht "GNU nano", sondern "nano". Lass es weg
Code:
BuildRoot: %{_tmppath}/%{name}-%{version}
Das ist OK so, weil es nur Vorgänge auf Deinem Rechner betrifft, trotzdem als Hinweis: SuSE verwendet %{_tmppath}/%{name}-%{version}-build
Code:
%description
GNU nano - an enhanced clone of the Pico text editor. Version 1.2.5 stable branch

%description -l de
GNU nano - ein verbesserter Pico text editor. Version 1.2.5 Stabiler Entwicklungszweig
Siehe oben. Lass die Versionsnummer weg und schreib nur "stable branch"/"Stabiler Entwicklungszweig"
Code:
%setup -q -n %{name}-%{version}
Das ist in Ordnung, aber überflüssig. Ein einfaches %setup hätte es auch getan. %setup ist gleich %setup -n %{name}-%{version} und der Parameter -q ist entbehrlich, er bedeutet "quiet" und unterdrückt nur die Ausgabe beim Entpacken
Code:
%post -p /sbin/SuSEconfig

%postun -p /sbin/SuSEconfig
Bist Du sicher, dass das notwendig ist? Muss SuSEconfig wirklich komplett durchlaufen oder reichen auch einzelne Module? Wozu wird SuSEconfig gebraucht?
Code:
#%doc
Möchtest Du keine Dokumentation ins RPM packen? Das Programm hat doch bestimmt eine README-Datei, die für Benutzer von Interesse sein kann
Code:
#%{_bindir}/*
#%{_libdir}/*.so.*
#%{_datadir}/%{name}
#%{_mandir}/man8/*
/usr/bin/nano
/usr/share/info/nano.info.gz
/usr/share/man/man1/nano.1.gz
/usr/share/man/man5/nanorc.5.gz
Warum kommentierst Du die Makros aus und verwendest absolute Pfade? Die Markos haben ihren Sinn. Besonders nützlich sind sie, wenn sich der Prefix mal ändert. So wie Du es jetzt machst, müsstest Du die Dateiliste bei einer Prefix-Änderung komplett überarbeiten.

Das nehmen Dir die Makros ab und außerdem markieren sie die Man- und Infoseiten automatisch als Dokumentation, was nach Deiner SPEC-Datei gar nicht geschieht, d.h. würde ich Dein Paket mit --excludedocs installieren, hätte ich trotzdem die Man- und Info-Seiten.

So, genug gemotzt. ;)
 

}-Tux-{

Hacker
Hi

dein domainname lautet wahrscheinlich site, daher ofen.site

ein paar kleine tipps:
verwende
[ -d %{buildroot} -a "%{buildroot}" != "" ] && rm -rf %{buildroot}
statt
rm -R %{buildroot}
somit wird sichergestellt, dass nicht versehentlich / gelöscht wird.

verwende folgenden "Group:" tag:
Productivity/Editors/Others
statt
Applications/Editors

Entferne am besten noch den provides tag (überflüssig).
und dann wandle das *.tar.gz archiv in ein tar.bz2 archiv um, denn dann ist alles (was ich so auf dem ersten blick sehe) suse-konform :wink:
auch nachzulesen hier: http://forgeftp.novell.com//library/SUSE%20Package%20Conventions/spc.html

ps. der vollständigkeit halber füge noch "# norootforbuild" ganz oben in dein spec file ein.

cheers }-Tux-{

<<EDIT>>
achja, nochetwas :)
jede zeile die zum %description tag gehört sollte nicht mehr als 80 Zeichen enthalten.
 
Naja, ganz SuSE-konform ist es mit den Änderungen auch noch nicht:

- SuSE verwendet für "./configure", "make" und "make install" keine Markos, sondern setzt die Shell-Befehle direkt ab.
- "BuildRequires" fehlt ganz. Ich verschlucke das auch manchmal, aber ganz unwichtig ist es nicht, sonst zieht sich irgendwann jemand das Source-RPM, versucht es zu rebuilden und eröffnet dann im Linux-Club einen Thread mit der Überschrift "HILFÄÄÄ! Es geht nicht!".
- Wegen der Dokumentation würde ich wirklich aufpassen. Es wird schon keiner in den Knast kommen, aber offiziell muss jedem GPL-Programm eine Kopie der GPL beigelegt werden. Mindestens die Datei "COPYING" würde ich also mit %doc ins RPM packen.
- Laut SuSE-Konvention gehören keine Lokalisierungen in die SPEC-Datei, sondern werden von YaST extern verwaltet. Allerdings geht es nicht anders, wenn man nicht SuSE ist. ;)
- Vendor, Distribution, Packager usw. würde ich in der rpmrc definieren. Prinzipiell ist es egal, aber neulich habe ich mal eine Seite gesehen, auf der RPMs mit den Tags anderer Leute, also quasi unter deren Namen verbreitet wurden, weil derjenige zu faul war, die Tags umzudefinieren.
 
OP
oddikurt

oddikurt

Hacker
Hi zusammen,

ich freue mich über eure wirklich konstruktive Kritik! :D
@traffic: Das ist kein motzen! - Das ist klasse! Das bringt mich weiter.

@}-Tux-{: Hast recht das:
Code:
rm -R %{buildroot}
is wirklich danger! - stimmt! werde ich als erstes ändern.

Nun werde ich entsprechende Änderungen vornehmen und weitermachen. Habe fast vermutet dass, wenn ein Profi mein Specfile sieht ihm die Haare zu Berge stehen. :lol: bin halt noch rooky.

PS: Habt ihr ne Klingel oder so neben eurem Bett? Das ging ja.... :shock:
 
Noch etwas: Nach der auskommentierten Dateiliste enthält das Paket Bibliotheken, nach Deiner eigenen nicht. Wenn das Paket keine Bibliotheken enthält, wovon ich einfach mal ausgehe, wird /sbin/ldconfig nicht gebraucht. In dem Fall solltest Du den Requires-Tag dann auch ganz weglassen. Falls das Paket doch Bibliotheken enthalten sollte, wäre es sinnlos, /sbin/ldconfig vorauszusetzen und dann doch nicht zu benutzen. Richtig wäre bei Paketen, die Bibliotheken enthalten, folgendes:
Code:
%post
/sbin/ldconfig

%postun
/sbin/ldconfig
 
OP
oddikurt

oddikurt

Hacker
Hi zusammen,

abschliessend noch einmal ein Dankeschön an euch beide. Ich weiss ich habe noch sehr viel zu lernen und Ihr habt super geholfen dass ich einige Dinge besser verstehe.:idea: Extra Dank für den Link zu den SUSE-Specs! Die werde ich mir etwas reinziehen.:!:
Zu meiner Frage im Titel des Threads: Ist gelöst! :D Mein Rechner hiess tatsächlich unter anderem: 127.0.0.2 Hostname: ofen.site; hab ich inzwischen geändert, aber nie selbst angegeben..:roll: ... siehe Bild
suse-hostname-shot1.png
 
Oben