• 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] datei zu rpm hinzu

ich habe ein rpm und würde in dieses gern eine datei hinzufügen.
ich kann das rpm über rpm2cpio und cpio -dui auspacken. aber wie packe ich es danach wieder?
 
* besorge dir das src.rpm dazu
* rpm -i abc.src.rpm
normalerweise steht das spec-file dann in /usr/src/packages/SPECS
* dann editiere das <spec-file> und füge deine Datei hinzu, erhöhe die release nummer, damit dein Paket "neuer" ist als die vorhandenen
(in der %files -Sektion wird die zusätzliche Datei eingefügt, in der install-Sektion kopierst du die neue Datei)
* erstelle das rpm neu mit rpmbuild -bb <spec-file>
* installiere das neue rpm
 
danke, erstmal.

irgendwie komme ich mir blöd vor, aber.. wo füge ich die datei dann eigentlich hinzu? also klar im spec file.. aber wo in den sourcen an sich? ich weiß wo ich die datei später sehen will.. nämlich in /etc/init.d, aber wo packe ich sie hin, dass das spec file sie findet?
 
"Einfach so" kann man rpms nicht wieder zusammenpacken (leider). Ein tar-ähnliches trpm oder cpio2rpm wenn du so willst, hat bisher noch niemand geschrieben und man muss immer den Umweg über rpmbuild nehmen :-(
 
Unschön, aber versuchen wir es über den Weg.

Also admine, es ist nicht mal so einfach die neue Datei als Quelle hinzuzufügen. Ich zeig dir mal den Inhalt: http://www.ubuntuusers.de/paste/8835/

Die Zeilen die ich neu hinzugefügt habe sind:
Code:
%install
%{__ln_s} puppet %{buildroot}%{_sysconfdir}/init.d/rc3.d/S90puppet
%{__install} -Dp -m0644 %{confdir}/client.sysconfig %{buildroot}%{_sysconfdir}/init.d/puppet

%files
%config(noreplace) %{_sysconfdir}/init.d/puppet
 
Du hast es, wie ich dir aber schon sagte, nicht als Source eingetragen:
Code:
Source: http://reductivelabs.com/downloads/puppet/%{name}-%{version}.tgz
Source1: hier-muss-dein-file-hin
 
hab ich auch gemacht. nur hier im forum falsch gepostet.
aber erkennt er denn was ich mit "puppet" meine.. also das ich die datei unter SOURCES meine?
Is mir irgendwie unbegreiflich. Bei dem install Befehl gebe ich ja init.d an.. woher weiss er denn welches "puppet" er in dieses Verzeichnis installieren soll?
 
also ich bin schon ein stueck weiter. wenn ich nur das install mache geht es. fuege ich das ln_s statement hinzu erscheint beim bauen des RPMs der folgende fehler:
Code:
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/puppet-0.22.3-1-root
error: Installed (but unpackaged) file(s) found:
   /etc/init.d/rc3.d/S90puppet


RPM build errors:
    Installed (but unpackaged) file(s) found:
   /etc/init.d/rc3.d/S90puppet

so sieht mein linken aus:
Code:
%{__install} -d -m0755 %{buildroot}%{_initrddir}/rc3.d
%{__ln_s} %{buildroot}%{_initrddir}/puppet %{buildroot}%{_initrddir}/rc3.d/S90puppet
macht das sinn?

meine zeile zum installieren der datei is auch nich so schoen. koennte ich die irgendwie abkuerzen?:
Code:
%{__install} -Dp -m0755 /usr/src/packages/SOURCES/puppet.init %{buildroot}%{_initrddir}/puppet
 
das mit dem link ist keine so gute Idee :)
hier mal ein Beispiel aus dem SPEC-File von keytouch

Code:
Source1:			keytouch-init
...
%install
# init-scripts
%__install -dm 755 %{buildroot}%{_sysconfdir}/init.d
%__install  -m 755 %{SOURCE1} \
	%{buildroot}%{_sysconfdir}/init.d
%__ln_s %{_sysconfdir}/init.d/keytouch-init %{buildroot}%{_sbindir}/rckeytouch-init

%post
%{fillup_and_insserv keytouch-init}

%preun
%stop_on_removal keytouchinit

%postun
%restart_on_update keytouch-init
%insserv_cleanup

%files
%{_sbindir}/rckeytouch-init
%config %{_sysconfdir}/init.d/keytouch-init

durch diese Macros wird das runlevel-script korrekt eingehängt. Natürlich muss das runlevel-script auch den SuSE-spezifischen Teil beinhalten:
Code:
### BEGIN INIT INFO
# Provides:          keytouch-init
# Required-Start:    $syslog
# Required-Stop:     $syslog
# Default-Start:     3 5
# Default-Stop:      0 1 2 6
# Short-Description: Configure the extra function keys of your keyboard
# Description:       KeyTouch is a program which allows you to easily configure
#	the extra function keys of your keyboard. This means that you can
#	define, for every individual function key, what to do if it is pressed.
### END INIT INFO

siehe dazu AUch den SuSE-Package-Guide:
http://developer.novell.com/wiki/index.php/Special:Downloads/spc/spc.html
 
ach, wenn das runlevel script diese kommentare enthaelt, weiss SuSE automatisch, wann es gestartet werden muss? das waere ja toll. danke fuer den link. beim download der webseite kam nur ein teil des dokuments.. das pdf ist allerdings vollstaendig.
 
endor schrieb:
ach, wenn das runlevel script diese kommentare enthaelt, weiss SuSE automatisch, wann es gestartet werden muss? das waere ja toll. danke fuer den link. beim download der webseite kam nur ein teil des dokuments.. das pdf ist allerdings vollstaendig.

zu deiner Frage, siehe auch im WIki:
http://www.linux-club.de/faq/Runlevel_scripte_-_Scripts_selber_erstellen

Durch die Angabe von Requied-Start wird festgelegt welche anderen Dienste vorher gestartet werden müssen
 
endor schrieb:
also ich bin schon ein stueck weiter. wenn ich nur das install mache geht es. fuege ich das ln_s statement hinzu erscheint beim bauen des RPMs der folgende fehler:
Code:
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/puppet-0.22.3-1-root
error: Installed (but unpackaged) file(s) found:
   /etc/init.d/rc3.d/S90puppet


RPM build errors:
    Installed (but unpackaged) file(s) found:
   /etc/init.d/rc3.d/S90puppet

Und hier wird dir übrigens "nur" gesagt, dass du deinen angelegten Link nicht mit ins RPM packst ... dass er also nicht in der file-Liste erscheint.

Aber verfolge auf jeden Fall oc2pus Weg ... das ist der bessere Plan ;)
 
http://wiki.njh.eu/Konfigurationsmanagement#Installation_3

Ich habe mal dokumentiert was ich jetzt gemacht habe. Vielleicht hilft es jemandem weiter. Solltet ihr noch unschöne Dinge finden, bitte mitteilen :)
 
Was mir auffiel:
Code:
Source1: /usr/src/packages/SOURCES/puppet.init
da wäre besser:
Code:
Source1: %{_sourcedir}puppet.init

Da man ja nicht unbedingt diese vordefinierten Verzeichnisse nutzen muss.
 
endor schrieb:
http://wiki.njh.eu/Konfigurationsmanagement#Installation_3

Ich habe mal dokumentiert was ich jetzt gemacht habe. Vielleicht hilft es jemandem weiter. Solltet ihr noch unschöne Dinge finden, bitte mitteilen :)

1.)
Source1: /usr/src/packages/SOURCES/puppet.init
ändern zu
Code:
Source1: puppet.init
nicht jeder "baut" in /usr/src/packages ... :)

2.) statt den server-Teil auszukommentieren:
%define _with_server 0

%if "%{_with_server}" == "1"
....
%endif

das spart Tipparbeit und ist einfacher zu warten, statt alles wieder auszukommentieren.

3.) du verwendest pre, post, postun etc ...
==> PreReq: <benötigte Pakete> um sicherzustellen, das diese Pakete vor einer Erstellung mit rpmbuild zur Verfügung stehen
gleiches gilt für die %defines wo du die ruby Verzeichnisse ermittelst ==> ruby wird "vor" dem eigentlichen build-prozess benötigt.

4:) Wenn das Paket puppet heisst, könntest du %{name} statt puppet verwenden

diese Anmerkungen sind teilweise eher akademischer Natur ! Also kein muss, aber damit wird dein "Howto" rund.

Ansonsten sehr schön dokumentiert :)

zum weiteren vertiefen:
http://www.xinux.de/docs/linux/rpm/
http://www.rpm.org/max-rpm/index.html
http://docs.fedoraproject.org/drafts/rpm-guide-en/ (Kapitel 8f)
 
Oben