it-swarm.com.de

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

Ich möchte nur eine RPM-Datei erstellen, um meine Linux-Binärdatei "foobar" mit nur ein paar 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-Installer für andere Plattformen zu erstellen.

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

144
Steve Hanov

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

Ein grundlegender Schritt zum Packen Ihres (Binär-) Programms ist also folgender: Ich nehme an, das Programm ist toybinprog mit Version 1.0, muss eine conf in /etc/toybinprog/toybinprog.conf installiert werden und muss eine bin installiert werden in/usr/bin namens tobinprog:

1. Erstelle deine rpm build env 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 Quellverzeichnis

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. Bauen Sie die Quelle und die binäre Drehzahl auf

rpmbuild -ba SPECS/toybinprog.spec

Und das ist alles.

Ich hoffe das hilft

173
devzero2000

Als Anwendungsverteiler fpm klingt perfekt für Ihre Bedürfnisse . Es gibt ein Beispiel hier , das zeigt, wie eine App aus dem Quellcode gepackt wird. FPM kann sowohl Deb- als auch RPM-Dateien erzeugen.

20
timmow

Schauen Sie sich Togo an, um eine schnelle RPM-Erstellung durchzuführen:

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

Das Projekt hat eine Kurzanleitung und ich konnte in weniger als 3 Minuten eine Grunddrehzahl 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) Stellen Sie Ihre gewünschte Verzeichnisstruktur unter ./root ein 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 aus dem 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 usw. zu ändern:

$ vi spec/header

5) Erstellen Sie die RPM:

$ togo build package

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

16
dadealeus

In ähnlicher Weise musste ich eine Drehzahl mit nur wenigen Dateien erstellen. Da diese Dateien von der Quelle gesteuert wurden und es albern schien, wollte ich sie nicht tarieren, nur um RPM für sie zu haben. 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 folgendem Inhalt:

    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. Erstelle deine Drehzahl: rpmbuild -bb foobar.spec

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

Hinweis: In meiner speziellen Situation waren meine Dateien in Ordnern so angeordnet, dass sie dem Speicherort entsprachen:

./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 Ihre Laufleistung variieren kann.

15
glickbot

Wenn make config Fü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 Auf (für [~ # ~] rpm [~ # ~] ) und optional mit dem Installationsskript.

4
js.

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, also führen Sie 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) Öffne es mit einem Editor (wie gedit) und schreibe dies:

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) Machen Sie ~/rpmbuild/BUILDROOT/package_name-version-release.i386 und reproduzieren Sie die Pfade, in denen die Dateien abgelegt werden.

  • ~/rpmbuild/BUILDROOT/paketname-version-release.i386/usr/bin /
  • ~/rpmbuild/BUILDROOT/paketname-version-release.i386/usr/share/applications /
  • ~/rpmbuild/BUILDROOT/paketname-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/paketname-version-release.i386/usr/bin/binärdatei.bin
  • ~/rpmbuild/BUILDROOT/paketname-version-release.i386/usr/share/applications/paketname.desktop
  • ~/rpmbuild/BUILDROOT/paketname-version-release.i386/usr/share/pixmaps/paketname.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;

Kategorien sind diese: standards.freedesktop.org/menu-spec/latest/apa.html

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

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

wenn Sie dieses Paket installieren, wird 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 Details zum Erstellen von rpm finden Sie unter link .

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

4
RobotMan