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

dateien per zu erzeugendem rpm verteilen

thoryss

Newbie
hallo zusammen,

ich hoffe ich bin mit meiner frage hier richtig? als "linux-normalo" habe ich folgendes problem:

ich muss eine ganze liste von dateien auf andere server (sles 9) verteilen. diese dateien liegen in einem, unter /opt/ befindlichen userverzeichnis! genauer gesagt müssen die dateien im ordner /opt/irgendeinuser/install/ verteilt werden. das ganze spielt sich ebenfalls auf einem sles 9 server ab.

am optimalsten und auch so gewollt wäre eine verteilung nach dem rpm-mechanismus. bei den zu verteilenden dateien handelt sich jedoch nicht um zu compilierende quelltexte, sondern lediglich um skripte, steuerdateien und diverse datenpakete. dies wäre sicherlich mit einem tar.gz-file leichter zu bewerkstelligen, aber es muss unbedingt ein rpm sein!!!

letztendlich muss ich an dieser stelle gestehen ein dau zu sein! das was ich via google zum thema rpmbuild gefungen habe, hat mir leider auch nicht so recht weitergeholfen! aber vielleicht kann mir ja jemand von euch im bezug auf die erstellung einer (vermeindlich simplen) rpm-datei weiter helfen.

wenn ich etwas an infos vergessen habe, werde ich diese natürlich nachreichen...

tausend dank,
thomas
 

oc2pus

Ultimate Guru
die Lösung besteht in dem "richtigen" spec-file, dem Bauplan für RPMs.

es ist durchaus möglich Software so zu verteilen.

Typischerweise besteht ein Spec-File aus den folgenden Komponenten:
Name: <name>
Summary: <kurze Beschreibung>
Version: <versionsnummer>
Release: <releasenummer>
License: GPL
Group: <Gruppe>
URL: <download-URL>
Source: <name des source-tar.gz>
BuildRoot: <temporäres Verzeichnis>
Requires: <was braucht dieses RPM an anderen RPMs>
Packager: <wer hat das RPM gebaut>
BuildArch: noarch

%description
<Beschreibung>

%prep
%setup

%install
<shell Befehle zum kopieren>

%clean
[ -d %{buildroot} -a "%{buildroot}" != "" ] && rm -rf %{buildroot}

%files
%defattr(-,root,root)
/opt/*

%changelog
<Historie>

In der %prep Anweisung wird deine Quelle entpackt nach /usr/src/packages/SOURCES. Das Spec-File steht in /usr/src/packages/SPECS.

In deinem Fall werden keine %build Anweisungen ausgeführt, nur die %install Befehle, diese kopieren deine Dateien in ein temporäres Verzeichnis, die buildroot. In der buildroot wird sozusagen ein Spiegelbild deiner Verzeichnisstruktur angegeben.
Die Verzeichnisse die du brauchst legst du mit mkdir -p %{buildroot}/opt/pfad an
dort steht dann z.Bsp cp datei %{buildroot}/opt/pfad/datei

In der %files Anweisung lässt du dann alle Dateien bearbeiten und in das RPM packen.

Das fertige RPM steht dann in /usr/src/packages/RPMS/noarch.

Beschreibungen zu dem spec-file findest du z.Bsp. hier:
http://www.rpm.org/max-rpm/index.html
http://www.linuxhaven.de/dlhp/HOWTO/DE-RPM-HOWTO-7.html
 
OP
T

thoryss

Newbie
danke, das hat mich in der tat etwas weitergebracht. ich habe allerdings den fehler "rpmbuild error: No source number 1" erhalten. was ich falsch gemacht habe ist mir noch nicht so ganz klar. bei der fehlersuche habe ich jedoch einen noch einfacheren weg gefunden per rpm dateien zu kopieren:

wenn man punkte wie %prep, %setup, %patch, %build und %install entfernt und lediglich unter %files nachfolgendes einträgt, funktioniert das wirklich auf banale weise!


%defattr(-,root,root)
/opt/irgendeinuser/install/skript.sh
/opt/irgendeinuser/install/datei.conf


man kann der einfachhalt halber auch /opt/irgendeinuser/install/* verwenden!

nebenwirkungen habe ich bis jetzt noch nicht entdecken können!
also nochmals viele grüsse und vielen dank für die schnelle hilfe

thomas
 

oc2pus

Ultimate Guru
thoryss schrieb:
... ich habe allerdings den fehler "rpmbuild error: No source number 1" erhalten. was ich falsch gemacht habe ist mir noch nicht so ganz klar.

SOURCE: <name des source-tar.gz>
enthält typischerweise eine Angabe bestehend aus <name>-<version>-<release>.tar.gz oder <name>-<version>-<release>.tar.bz2
evtl entsprach dein Archiv nicht dieser Namensgenerik.

Ansonsten sollte deine Lösung auch so gut funktionieren, ABER durch die Anweisung %defattr(-,root,root) werden alle Dateien mit root:root installiert. Die Defaultrechte ergeben sich aus der aktuell für root gesetzen umask. Hier wäre eine Verbesserung denkbar durch die Angabe einer anderen umask in der %defattr Anweisung. Diese Anweisung kann auch pro Datei(-gruppe) separat angegeben werden.
 
Oben