Was muss ich mindestens tun, um eine RPM-Datei zu erstellen?

148

Ich möchte nur eine RPM-Datei erstellen, um meine Linux-Binärdatei "foobar" mit nur wenigen Abhängigkeiten zu verteilen. Es hat eine Konfigurationsdatei, /etc/foobar.conf und sollte in / usr / bin / foobar installiert werden.

Leider ist die Dokumentation für RPM 27 Kapitel lang und ich habe wirklich keinen Tag, um mich hinzusetzen und dies zu lesen, da ich auch damit beschäftigt bin, .deb- und EXE-Installationsprogramme für andere Plattformen zu erstellen.

Was ist das absolute Minimum, das ich tun muss, um eine Drehzahl zu erstellen? Angenommen, die foobar-Binärdatei und die foobar.conf befinden sich im aktuellen Arbeitsverzeichnis.

Steve Hanov
quelle
1
" So erstellen Sie ein RPM-Paket " ist eine gute Zusammenfassung der RPMs (Fedora-Dokumente)
Webwesen
6
Es als "Aufschreiben" zu bezeichnen, ist eine Untertreibung
kernelK

Antworten:

177

Ich mache oft binäre U / min pro Verpackung proprietärer Apps - auch meistens als Websphere - unter Linux. Meine Erfahrung könnte also auch für Sie nützlich sein, außerdem wäre es besser, eine WAHRE U / min zu machen, wenn Sie können. Aber ich schweife ab.

Der grundlegende Schritt zum Packen Ihres (binären) Programms ist also folgender: Ich nehme an, das Programm ist toybinprog mit Version 1.0, muss ein conf in /etc/toybinprog/toybinprog.conf installieren und muss ein bin installiert werden in / usr / bin heißt tobinprog:

1. Erstellen Sie Ihre RPM-Build-Umgebung für RPM <4.6.4.7

mkdir -p ~/rpmbuild/{RPMS,SRPMS,BUILD,SOURCES,SPECS,tmp}

cat <<EOF >~/.rpmmacros
%_topdir   %(echo $HOME)/rpmbuild
%_tmppath  %{_topdir}/tmp
EOF

cd ~/rpmbuild

2. Erstellen Sie den Tarball Ihres Projekts

mkdir toybinprog-1.0
mkdir -p toybinprog-1.0/usr/bin
mkdir -p toybinprog-1.0/etc/toybinprog
install -m 755 toybinprog toybinprog-1.0/usr/bin
install -m 644 toybinprog.conf toybinprog-1.0/etc/toybinprog/

tar -zcvf toybinprog-1.0.tar.gz toybinprog-1.0/

3. Kopieren Sie in das Quellenverzeichnis

cp toybinprog-1.0.tar.gz SOURCES/

cat <<EOF > SPECS/toybinprog.spec
# Don't try fancy stuff like debuginfo, which is useless on binary-only
# packages. Don't strip binary too
# Be sure buildpolicy set to do nothing
%define        __spec_install_post %{nil}
%define          debug_package %{nil}
%define        __os_install_post %{_dbpath}/brp-compress

Summary: A very simple toy bin rpm package
Name: toybinprog
Version: 1.0
Release: 1
License: GPL+
Group: Development/Tools
SOURCE0 : %{name}-%{version}.tar.gz
URL: http://toybinprog.company.com/

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root

%description
%{summary}

%prep
%setup -q

%build
# Empty section.

%install
rm -rf %{buildroot}
mkdir -p  %{buildroot}

# in builddir
cp -a * %{buildroot}


%clean
rm -rf %{buildroot}


%files
%defattr(-,root,root,-)
%config(noreplace) %{_sysconfdir}/%{name}/%{name}.conf
%{_bindir}/*

%changelog
* Thu Apr 24 2009  Elia Pinto <[email protected]> 1.0-1
- First Build

EOF

4. Erstellen Sie die Quelle und die binäre Drehzahl

rpmbuild -ba SPECS/toybinprog.spec

Und das ist alles.

Ich hoffe das hilft

devzero2000
quelle
6
Nur für den Fall, dass Sie auf "rpmbuild: Befehl nicht gefunden" stoßen , lesen Sie wiki.centos.org/HowTos/SetupRpmBuildEnvironment . Aber dieser Leitfaden ist ein guter Anfang für mich, um das Innenleben von U / min zu
lernen
4
Was setzt in Ihrem Beispiel den _bindir? Ich versuche, Ihrer Lösung zu folgen, möchte aber meine Binärdateien auf / opt setzen. Ich habe die Targz-Datei entsprechend erstellt. Und rpmbuild schlägt bei "Datei nicht gefunden" in buildroot / usr / bin fehl.
Kuss Viktoria
sudo dnf install rpm-build- Fedora 23 Befehl für die Installation von rpmbuild v4.13 +
Ray Foss
1
@ devzero2000 Was meinst du mit TRUE RPM?
RubenLaguna
@ devzero2000 der rpmbuild Ordner sollte sich im Verzeichnis / root befinden oder könnte ich ihn woanders platzieren?
Diogo Calazans
20

Als Anwendungsverteiler klingt fpm perfekt für Ihre Anforderungen . Hier ist ein Beispiel, das zeigt, wie eine App aus dem Quellcode gepackt wird. FPM kann sowohl Deb-Dateien als auch RPM-Dateien erstellen.

timmow
quelle
2
FPM ist ein großartiges Tool.
Takashi
Wir verwenden dieses Tool ständig bei der Arbeit. Mit Abstand das praktischste Werkzeug, um den Anforderungen gerecht zu werden.
Djhaskin987
2
FPM hat das beste Grundprinzip, das man in Software bekommen kann: Wenn es nicht hilft, gibt es einen Fehler. Es ist die Art von Engagement, die ich schätze.
Ribamar
16

Informationen zum schnellen Erstellen von Drehzahlen finden Sie in Togo:

https://github.com/genereese/togo-rpm

Das Projekt verfügt über eine Kurzanleitung und ich konnte in weniger als 3 Minuten eine grundlegende Drehzahl erstellen.

Beispiel unter Verwendung der in der ursprünglichen Frage angegebenen Daten:

1) Erstellen Sie das Projektverzeichnis mit dem Skript:

$ togo project create foobar; cd foobar

2) Erstellen Sie unter ./root die gewünschte Verzeichnisstruktur und kopieren Sie Ihre Dateien hinein:

$ mkdir -p root/etc; cp /path/to/foobar.conf root/etc/
$ mkdir -p root/usr/bin; cp /path/to/foobar root/usr/bin/

3) Schließen Sie systemeigene Verzeichnisse vom Besitz Ihres RPM aus:

$ togo file exclude root/etc root/usr/bin

4) (OPTIONAL) Ändern Sie die generierte Spezifikation, um Ihre Paketbeschreibung / Abhängigkeiten / Version / was auch immer zu ändern usw.:

$ vi spec/header

5) Erstellen Sie die Drehzahl:

$ togo build package

-und Ihre RPM wird in das Verzeichnis ./rpms ausgespuckt.

dadealeus
quelle
Das Beispiel wurde aktualisiert, um dem in der ursprünglichen Frage angegebenen Szenario zu entsprechen.
Dadealeus
15

Ebenso musste ich mit nur wenigen Dateien eine Drehzahl erstellen. Da diese Dateien quellengesteuert waren und es albern schien, wollte ich sie nicht tarieren, nur um sie mit U / min zu entpacken. Ich habe mir Folgendes ausgedacht:

  1. Richten Sie Ihre Umgebung ein:

    mkdir -p ~/rpm/{BUILD,RPMS}

    echo '%_topdir %(echo "$HOME")/rpm' > ~/.rpmmacros

  2. Erstellen Sie Ihre Spezifikationsdatei foobar.spec mit den folgenden Inhalten:

    Summary: Foo to the Bar
    Name: foobar
    Version: 0.1
    Release: 1
    Group: Foo/Bar
    License: FooBarPL
    Source: %{expand:%%(pwd)}
    BuildRoot: %{_topdir}/BUILD/%{name}-%{version}-%{release}
    
    %description
    %{summary}
    
    %prep
    rm -rf $RPM_BUILD_ROOT
    mkdir -p $RPM_BUILD_ROOT/usr/bin
    mkdir -p $RPM_BUILD_ROOT/etc
    cd $RPM_BUILD_ROOT
    cp %{SOURCEURL0}/foobar ./usr/bin/
    cp %{SOURCEURL0}/foobar.conf ./etc/
    
    %clean
    rm -r -f "$RPM_BUILD_ROOT"
    
    %files
    %defattr(644,root,root)
    %config(noreplace) %{_sysconfdir}/foobar.conf
    %defattr(755,root,root)
    %{_bindir}/foobar
    
  3. Bauen Sie Ihre Drehzahl auf: rpmbuild -bb foobar.spec

Es gibt dort ein wenig Hackery, das die 'Quelle' als Ihr aktuelles Verzeichnis angibt, aber es schien weitaus eleganter als die Alternative, in meinem Fall ein separates Skript zu schreiben, um einen Tarball usw. usw. zu erstellen.

Hinweis: In meiner speziellen Situation wurden meine Dateien in Ordnern so angeordnet, wie sie benötigt wurden:

./etc/foobar.conf
./usr/bin/foobar

und so wurde der Vorbereitungsabschnitt:

%prep
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT
cd $RPM_BUILD_ROOT
tar -cC %{SOURCEURL0} --exclude 'foobar.spec' -f - ./ | tar xf -

Welches ist ein wenig sauberer.

Außerdem bin ich zufällig auf einem RHEL5.6 mit RPM-Versionen 4.4.2.3, sodass Ihr Kilometerstand variieren kann.

Glickbot
quelle
Ich musste alles $RPM_BUILD_ROOTtun %{buildroot}, damit es auf meinem "Red Hat Enterprise Linux Server Release 6.9" funktioniert. Außerdem mussten sich die beiden installierten Dateien im aktuellen Verzeichnis befinden, als ich rpmbuild ausführte. Ich habe es auf meinem anderen Computer installiert mit: sudo rpm -Uvh --nodeps foobar-0.1a-1.x86_64.rpm
user1683793
4

Wenn es make configfür Ihr Programm funktioniert oder Sie ein Shell-Skript haben, das Ihre beiden Dateien an den entsprechenden Ort kopiert, können Sie checkinstall verwenden . Gehen Sie einfach in das Verzeichnis, in dem sich Ihr Makefile befindet, und rufen Sie es mit dem Parameter -R(für RPM ) und optional mit dem Installationsskript auf.

js.
quelle
4

Einfache Möglichkeit, ein RPM-Paket aus einer Binärdatei zu erstellen (diese Schritte wurden mit Fedora 18 getestet):

1) Zuerst müssen Sie rpmdevtools installieren, führen Sie also diese Befehle aus (Achtung: Als normaler Benutzer ausführen)

$ sudo yum install rpmdevtools rpmlint
$ rpmdev-setuptree

2) Erstellen Sie im Ordner ~ / rpmbuild / SPECS eine neue Datei: package_name.spec

3) Öffnen Sie es mit einem Editor (wie gedit) und schreiben Sie Folgendes:

Name:           package_name
Version:        1.0
Release:        1
Summary:        Short description (first char has to be uppercase)

License:        GPL
URL:            www. your_website/

BuildRequires:  package_required >= (or ==, or <=) 1.0.3 (for example)

%description
Description with almost 79 characters (first char has to be uppercase)

#This is a comment (just as example)

%files
/usr/bin/binary_file.bin
/usr/share/applications/package_name.desktop
/usr/share/pixmaps/package_name.png

%changelog
* date Packager's Name <packager's_email> version-revision
- Summary of changes

#For more details see: docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/Packagers_Guide/sect-Packagers_Guide-Creating_a_Basic_Spec_File.html

4) Erstellen Sie ~ / rpmbuild / BUILDROOT / package_name-version-release.i386 und reproduzieren Sie die Pfade, in denen die Dateien abgelegt werden. In diesem Fall erstellen Sie beispielsweise:

  • ~ / rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / bin /
  • ~ / rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / share / applications /
  • ~ / rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / share / pixmaps /

5) Legen Sie in diesen Ordnern die Dateien ab, die Sie in das Paket einfügen möchten:

  • ~ / rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / bin / binary_file.bin
  • ~ / rpmbuild / BUILDROOT / Paketname-Versionsversion.i386 / usr / share / applications / Paketname.desktop
  • ~ / rpmbuild / BUILDROOT / package_name-version-release.i386 / usr / share / pixmaps / package_name.png

usr / share / pixmaps / package_name.png ist das Symbol der Binärdatei usr / share / applications / package_name.desktop sind die Regeln zum Einfügen des Programms in die Menüeinträge

6) package_name.desktop muss folgendermaßen aussehen:

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=example
GenericName=Short description
Comment=Comment of the application
Exec=package_name
Icon=package_name
Terminal=false
Categories=System;

Folgende Kategorien stehen zur Verfügung :standards.freedesktop.org/menu-spec/latest/apa.html

7) Ausführen $ rpmbuild -bb ~/rpmbuild/SPECS/package_name.spec

8) Ihr Paket wurde in den Ordner ~ / rpmbuild / RPMS integriert

Wenn Sie dieses Paket installieren, ist es installiert:

  • /usr/bin/binary_file.bin
  • /usr/share/applications/package_name.desktop
  • /usr/share/pixmaps/package_name.png

Vielen Dank an: losurs.org/docs/tips/redhat/binary-rpms

Weitere Informationen zum Erstellen der Drehzahl finden Sie unter diesem Link .

GUI-Java-Software zum Erstellen von RPM: https://sourceforge.net/projects/javarpmbuilder/

RobotMan
quelle
-1

Wenn Sie mit Maven dort auch vertraut rpm-maven-pluginsind, pom.xmlwas das Erstellen von RPMs vereinfacht: Sie müssen nur schreiben, welche dann zum Erstellen von RPMs verwendet werden. Die RPM-Build-Umgebung wird implizit vom Plugin erstellt.

prüfend
quelle
-3

Prozess zum Generieren von RPM aus der Quelldatei:

  1. Quelldatei mit.gz-Erweiterung herunterladen.
  2. Installieren Sie rpm-build und rpmdevtools von yum install. (Der Ordner "rpmbuild" wird generiert ... SPECS, SOURCES, RPMS .. Ordner sollten im Ordner "rpmbuild" generiert werden.)
  3. Kopieren Sie den Quellcode.gz in den Ordner SOURCES (rpmbuild / SOURCES).
  4. Entpacken Sie den Teerball mit dem folgenden Befehl. Gehen Sie zum Ordner SOURCES: rpmbuild / SOURCES, in dem die TAR-Datei vorhanden ist. Befehl: zB tar -xvzf httpd-2.22.tar.gz Der Ordner httpd-2.22 wird im selben Pfad generiert.
  5. Gehen Sie zum extrahierten Ordner und geben Sie den folgenden Befehl ein: ./configure --prefix = / usr / local / apache2 --with-include-apr --enable-proxy --enable-proxy-balancer --with-mpm = worker - -enable-mods-static = all (.configure kann je nach Quelle variieren, für die RPM erstellt werden muss - ich habe dies für Apache-HTTPD getan, das das Abhängigkeitspaket apr und apr-util benötigt).
  6. Führen Sie den folgenden Befehl aus, sobald die Konfiguration erfolgreich ist: make
  7. Nach erfolgreicher Ausführung oder Befehl ausführen: checkinstall im selben Ordner. (Wenn Sie keine Checkinstall-Software haben, laden Sie bitte die neueste Version von der Website herunter.) Außerdem hat die Checkinstall-Software einen Fehler, der auf folgende Weise behoben werden kann: ::::: checkinstallrc suchen und dann TRANSLATE = 1 durch TRANSLATE = 0 mit dem Befehl vim ersetzen. Überprüfen Sie auch, ob das Paket ausgeschlossen ist: EXCLUDE = "/ selinux"
  8. checkinstall fragt nach der Option (geben Sie R ein, wenn Sie RPM für die Quelldatei erstellen möchten).
  9. Fertig .rpm-Datei wird im RPMS-Ordner in der rpmbuild / RPMS-Datei erstellt ... ALLES BESTE ....
user3248738
quelle
-4

RPMs werden normalerweise aus der Quelle erstellt, nicht aus den Binärdateien.

Sie müssen die Spezifikationsdatei schreiben, in der beschrieben wird, wie Sie Ihre Anwendung konfigurieren und kompilieren. Außerdem, welche Dateien in Ihr RPM aufgenommen werden sollen.

Ein kurzer Blick auf das Handbuch zeigt, dass das meiste, was Sie benötigen, in Kapitel 8 behandelt wird. Da für die meisten RPM-basierten Distributionen Quellen verfügbar sind, gibt es buchstäblich eine Unmenge von Beispielen für verschiedene Ansätze, die Sie sich ansehen können.

andri
quelle