2016-07-15 20 views
1

Auf der Suche nach jemandem, nur um die %install Makro zu klären, wenn es darum geht, nur Dateien zu platzieren. Ich habe ein RPM ohne Fehler erstellt, das nur Dateien aus dem buildroot und cp nach/usr/lib nehmen soll. Was ich in der SPEC-Datei für% install habe, ist das folgende und basiert auf this post. Ich würde das für die rpm ausreichen, um die Dateien vom buildroot zum/usr/lib Speicherort zu kopieren. Dieserpmbuild einfache Kopie der Dateien

ist, was ich versucht und es baut:

%install 
mkdir -p %{buildroot}/usr/lib 
install -d %{buildroot}/usr/lib/ 

Rethinking, ich Figur, lässt auch die Drehzahl sagen, wo ich die Dateien kopieren möchten. Ich habe versucht, so ist dies:

%install 
mkdir -p %{buildroot}/usr/lib 
cp %{buildroot}/usr/lib/ /usr/lib/ 

gut, die über das Verzeichnis/usr/lib/Lage beschwert sich nicht für den Benutzer beschreibbar sein ich die Drehzahl als auf dem Build-Maschine erschaffe. Mein Eindruck ist, dass %install Abschnitt der Spezifikationsdatei Anweisungen sein sollte, wohin die Dateien kopiert werden sollen, wenn die RPM auf dem Zielserver installiert ist. Ich möchte nicht, dass ich das lokale Dateisystem für den RPM-Build-Server ansehe. Mein aber dahinter ist, dass das RPM bauen sollte, aber es sollte nicht bis zur RPM-Installation fehlschlagen, wenn ich versuche, die rpm als nicht-privilegierter Benutzer zu installieren. Es sollte nicht während des Builds kümmern. Ich versuche nur, einige lib-Dateien in die/usr/lib auf dem Server zu cp/extrahieren, auf dem ich die rpm installiere.

Meine Annahme ist, die RPM würde den BUILDROOT-Speicherort auf dem Server, auf dem ich die RPM installiere, erstellen und dann den Inhalt vom Buildroot-Speicherort an den angegebenen Zielspeicherort senden.

+1

Hinweis: '% install' ist ein Specfile-Abschnitt. 'install' ist eine ausführbare Datei auf Ihrem System, die ähnlich wie' cp' ist, aber die Berechtigungen usw. behält. –

Antwort

5

%install Abschnitt wird auf Ihrem Computer während der Aufbauzeit Ihres Pakets ausgeführt. In diesem Abschnitt sollten Sie die Dateistruktur in %{buildroot} erstellen. Es ist nicht Ihre Aufgabe, das endgültige Ziel auf dem Client-Rechner zu kopieren.

So sollten Sie so etwas wie:

%install 
mkdir -p %{buildroot}/usr/lib 
cp -a some-your-file-from-extracted-targz %{buildroot}/usr/lib/ 

und dann in% Abschnitt Dateien:

%files 
/usr/lib/foobar.bin 
/usr/lib/somedir/ 

Rpm wird dann nimmt alle Dateien, die in %files Abschnitt aus% buildroot und wird es ausdrückte in Paket.

+0

Was ist, wenn es eine sehr lange Liste einer Perl-Distribution ist? Muss ich all diese Dateien auflisten? Im Grunde habe ich PerlBrew verwendet, um eine Perl-Version von dem Standard-Betriebssystem an einem benutzerdefinierten Ort zu installieren. Dann habe ich die Datei geteert. d. h. perl-5.10.1.tgz und möchte es einfach in/opt/custom/location/das entpacken. Entpacken Sie einfach eine tgz-Datei an einem bestimmten Ort. –

+1

Wenn Sie Verzeichnis in% Dateien angeben, dann enthält rpmbuild dieses Verzeichnis und alles darin. Im obigen Beispiel wird sogar die Datei/usr/lib/somedir/foo/bar enthalten sein. Oder Sie können diese Liste generieren (aber vermeiden Sie das bitte, wenn möglich). Zum Beispiel https://github.com/rpm-software-management/mock/blob/devel/mock.spec.in#L138 https://github.com/rpm-software-management/mock/blob/devel/ mock.spec.in # L191 – msuchy

+0

Danke für alle Informationen. Aus irgendeinem Grund scheint es, wenn ich das Erstellen der rpm ausführe, Perl-Abhängigkeiten zu suchen. Wiederum habe ich nur eine Perl-Distribution mit perbrew an einem benutzerdefinierten Ort kompiliert und nach der Installation aller gewünschten Perl-Module mit cpanm. Ich tarierte den Ordner (d. H. Tar -xzvf) und legte diese Datei in den SOURCES-Ordner. Führen Sie den Befehl rpmbuild -bb SPEC_FILE aus, und die RPM wird erstellt. Wenn man das RPM installiert, klagt es über fehlende Perl-Abhängigkeiten. Außerdem habe ich in der Spezifikationsdatei nicht "require" angegeben. –