Frage

Ich möchte nur eine RPM-Datei erstellen, um meine Linux-Binärdatei „foobar“ mit nur ein paar Abhängigkeiten zu verteilen.Es verfügt über eine Konfigurationsdatei, /etc/foobar.conf, und sollte in /usr/bin/foobar installiert werden.

Leider ist das Dokumentation für RPM ist 27 Kapitel lang und ich habe wirklich keinen Tag Zeit, mich hinzusetzen und dies zu lesen, weil 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 ein RPM zu erstellen?Gehen Sie davon aus, dass sich die Binärdatei „foobar“ und „foobar.conf“ im aktuellen Arbeitsverzeichnis befinden.

War es hilfreich?

Lösung

ich oft binäre rpm proprietäre Anwendungen pro Verpackung - auch Moster als websphere - auf Linux. So konnte meine Erfahrung nützlich sein, auch Sie, außer, dass es besser wäre eine TRUE RPM zu tun, wenn Sie können. Aber ich schweife ab.

So das ein grundlegender Schritt für die Verpackung von Ihrem (binär) Programm ist wie folgt - in denen nehme ich die Programm toybinprog mit Version 1.0, eine conf in /etc/toybinprog/toybinprog.conf installiert werden und haben ein Behälter in / usr / bin genannt tobinprog installiert werden:

1. Erstellen Sie Ihre 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 das Archiv 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 zu den Quellen dir

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 <devzero2000@rpm5.org> 1.0-1
- First Build

EOF

4. baut die Quelle und die binäre rpm

rpmbuild -ba SPECS/toybinprog.spec

Und das ist alles.

Hope this help

Andere Tipps

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

Für eine schnelle RPM Gebäude Besuche Togo:

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

Das Projekt hat einen Quick-Start Guide und ich konnte einen Grund RPM in weniger als 3 Minuten erstellen.

Beispiel der Daten in der ursprünglichen Frage zur Verfügung gestellt mit:

1) Erstellen Sie das Projektverzeichnis mit dem Skript:

$ togo project create foobar; cd foobar

2) Stellen Sie die gewünschte Verzeichnisstruktur unter ./root 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) Ausschließen systemeigenen Verzeichnisse von Ihrem RPMs Eigentümer:

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

4) (optional) die erzeugte spec ändern, um Ihre Paketbeschreibung / Abhängigkeiten / version / was auch immer, etc.

$ vi spec/header

5) Erstellen Sie das RPM:

$ togo build package

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

Und ich brauchte einen rpm mit nur wenigen Dateien zu erstellen. Da diese Dateien waren gesteuerte Quelle, und weil es albern vorkam, wollte ich nicht durch gehen, um sie nur rpm untar sie haben Tarierung auf. Ich kam mit dem folgenden:

  1. Richten Sie Ihre Umgebung:

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

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

  2. Erstellen Spec-Datei, 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. Erstellen Sie Ihre rpm: rpmbuild -bb foobar.spec

Es gibt ein kleines hackery dort unter Angabe die ‚Quelle‘ als Ihr aktuelles Verzeichnis, aber es schien viel eleganter dann die Alternative, die in meinem Fall war es, ein separates Skript schreibt einen Tarball zu erstellen, etc, etc.

Hinweis: In meiner besonderen Situation, meine Dateien in Ordnern verwaltet wurden je nachdem, wo sie gebraucht zu gehen, wie folgt aus:

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

und so der prep Abschnitt wurde:

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

Welche etwas sauberer ist.

Auch ich zufällig auf einem RHEL5.6 mit rpm Versionen 4.4.2.3 sein, so dass die Leistung kann variieren.

Wenn make config für Ihr Programm funktioniert, oder Sie haben ein Shell-Skript, das kopiert Ihre zwei Dateien an die entsprechende Stelle Sie check . Gehen Sie einfach auf das Verzeichnis, in dem Ihre Make-Datei ist in und nennen Sie es mit dem Parameter -R (für RPM ) und gegebenenfalls mit dem Installationsskript.

Einfache Möglichkeit rpm-Paket von binären zu bauen (diese Schritte mit Fedora getestet wurden 18):

1) Zuerst müssen Sie rpmdevtools installieren, so führen Sie diese Befehle (Achtung: laufen als normaler Benutzer)

$ sudo yum install rpmdevtools rpmlint
$ rpmdev-setuptree

2) In den ~ / rpmbuild / SPECS Ordnern erstellen neue Datei: package_name.spec

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

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) Stellen Sie ~ / rpmbuild / buildroot / package_name-Version-release.i386 und die Pfade reproduzieren, wo die Dateien gespeichert werden Also in diesem Fall zum Beispiel zu erstellen:

  • ~ / 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 in diesen Ordnern die Dateien Put), die Sie in das Paket eingefügt werden soll:

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

usr / share / pixmaps / package_name.png ist das Symbol von binären usr / share / applications / package_name.desktop sind die Regeln des Programms in den Menüeinträgen

einfügen

6) package_name.desktop muss so 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) Run $ rpmbuild -bb ~/rpmbuild/SPECS/package_name.spec

8) wurde Ihr Paket gebaut in ~ / rpmbuild / RPMS-Ordner

Wenn Sie dieses Paket installieren es installieren:

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

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

Für weitere Details rpm nehmen einen Blick auf diese Link zu bauen.

GUI Java-Software zu bauen rpm: https://sourceforge.net/projects/javarpmbuilder/

Wenn Sie mit Maven vertraut gibt es auch rpm-maven-plugin die RPMs machen vereinfacht: Sie pom.xml zu schreiben, die dann verwendet werden, wird RPM zu bauen. RPM Build-Umgebung erstellt werden implizit durch die Plug-In.

Prozess von RPM aus Quelldatei zu erzeugen:

  1. Download-Quelldatei with.gz extention.
  2. installieren rpm-build und rpmdevtools von yum installieren. (Rpmbuild Ordner generiert werden ... SPECS, QUELLEN, RPMS .. Ordner werden sollten innerhalb des rpmbuild Ordner erzeugt werden).
  3. Kopieren Sie die Quelle code.gz Quellen Ordner. (Rpmbuild / SOURCES)
  4. Entpacken Sie die tar Ball mit dem folgenden Befehl. gehen zu QUELLEN Ordner: rpmbuild / Quellen, wo TAR-Datei vorhanden ist. Befehl: z tar -xvzf httpd-2.22.tar.gz httpd-2.22-Ordner wird im selben Pfad erzeugt werden.
  5. extrahierten Ordner gehen und dann unter Befehl eingeben: configure prefix = / usr / local / apache2 --with Inklusions enable-Apr-Proxy-enable-proxy-Balancer --with-MPM = Arbeiter --enable- mods statisch = all (.Configure kann nach Quelle variieren, für die RPM muss Gebaut- ich habe für Apache durchgeführt, die April und apr-util Abhängigkeit Paket benötigt).
  6. unter Befehl ausführen, sobald das configure erfolgreich ist: machen
  7. nach erfolgreicher Ausführung od Befehl zum Laufen bringen: check in tha gleichen Ordner. (Wenn Sie nicht check Software haben Sie neueste Version von Website herunterladen) Auch Check Software hat Fehler, der durch folgende Art und Weise gelöst werden können ::::: checkinstallrc lokalisieren und ersetzen dann TRANSLATE = 1 = 0 unter Verwendung von Vim Befehl zu übersetzen. überprüfen Sie auch Paket ausschließen: exclude = "/ selinux"
  8. check wird für die Option (Typ R, wenn Sie rpm für Quelldatei tp aufbauen wollen) fragen
  9. Fertig .rpm-Datei wird in RPMS-Ordner innerhalb rpmbuild / RPMS-Datei erstellt werden ... Alles Gute ....

RPMs werden in der Regel von der Quelle gebaut, nicht die Binärdateien.

Sie müssen die Spec-Datei schreiben, das beschreibt, wie Ihre Anwendung konfigurieren und zu kompilieren; auch, welche Dateien in Ihrer RPM aufzunehmen.

Ein kurzer Blick in dem Handbuch zeigt, dass das meiste, was Sie brauchen, in Kapitel 8 abgedeckt ist -. Auch, da die meisten RPM-basierten Distributionen Quellen zur Verfügung haben, gibt es buchstäblich eine Unmenge von Beispielen verschiedenen Ansätze, die Sie betrachten könnten

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top