Rpm Paket erstellen: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(5 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
−
* Ein '''RPM-Paket''' ist ein Paketformat, das in Red Hat-basierten Linux-Distributionen wie Fedora und SUSE verwendet wird.
+
*[[rpm Paket Basis]] (x)
−
* Um ein RPM-Paket zu erstellen, benötigen Sie die folgenden Komponenten:
+
*[[rpm Paket erstellen Hello World]] (x)
−
* '''sudo -i'''
+
*[[RPM Paket erstellen aus einem Git Repository]]
−
* '''dnf install fedora-packager rpmdevtools gcc'''
+
*[[rpm Paket erstellen Apache2]]
−
 
 
−
= Anlegen der Entwicklungsumgebung =
 
−
* '''rpmdev-setuptree'''
 
−
* Dieser Befehl ist ein Shell-Skript, welches eine Ordnerstruktur im Homeverzeichnis des Benutzers anlegt
 
−
 
 
−
rpmbuild/
 
−
├── BUILD
 
−
├── BUILDROOT
 
−
├── RPMS
 
−
├── SOURCES
 
−
├── SPECS
 
−
└── SRPMS
 
−
 
 
−
* Unter ''SOURCES'' liegt der Source-Code in der Form ''<paket-name>-<versions-nummer>.tar.gz''
 
−
* In ''SPECS'' gibt man zusätzliche Paketinformationen wie Paketname, Versionsnummer, Beschreibung, etc. in einer ''.spec''-Datei an.
 
−
* Der Name des komprimierten Programm-Codes sollte mit denen in der ''.spec''-Datei übereinstimmen.
 
−
* Nach dem Erstellen des Pakets liegt das ''.rpm''-Paket unter ''RPMS''
 
−
 
 
−
= Herunterladen des Probe-Quellcodes =
 
−
 
 
−
* '''cd SOURCES'''
 
−
* Wir laden ein Testprogramm, welches "Hello, world!" auf die Kommandozeile schreibt
 
−
* '''wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz'''
 
−
 
 
−
= Paketspezifikationen =
 
−
* '''cd ../SPECS'''
 
−
* Eine Vorlage für die ''.spec''-Datei, kann man sich mit dem folgenden Befehl generieren:
 
−
* '''rpmdev-newspec --macros hello.spec'''
 
−
* Diese sollte man noch manuell anpassen
 
−
* '''vim hello.spec'''
 
−
 
 
−
Name:    hello
 
−
Version:  2.10
 
−
Release:  1%{?dist}
 
−
Summary:  The "Hello World" program from GNU
 
−
License:  GPLv3+
 
−
URL:      http://ftp.gnu.org/gnu/hello
 
−
Source0: https://ftp.gnu.org/gnu/hello/hello-%{version}.tar.gz
 
−
 
−
BuildRequires: gettext
 
−
 
−
Requires(post): info
 
−
Requires(preun): info
 
−
 
−
%description
 
−
The "Hello World" program, done with all bells and whistles of a proper FOSS
 
−
project, including configuration, build, internationalization, help files, etc.
 
−
 
−
%prep
 
−
%autosetup
 
−
 
−
%build
 
−
%configure
 
−
%make_build
 
−
 
−
%install
 
−
%make_install
 
−
%find_lang %{name}
 
−
rm -f %{buildroot}/%{_infodir}/dir
 
−
 
−
%post
 
−
/sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || :
 
−
 
−
%preun
 
−
if [ $1 = 0 ] ; then
 
−
/sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || :
 
−
fi
 
−
 
−
%files -f %{name}.lang
 
−
%{_mandir}/man1/hello.1.*
 
−
%{_infodir}/hello.info.*
 
−
%{_bindir}/hello
 
−
 
−
%doc AUTHORS ChangeLog NEWS README THANKS TODO
 
−
%license COPYING
 
−
 
−
%changelog
 
−
* Tue Sep 06 2011 The Coon of Ty <Ty@coon.org> - 2.8-1
 
−
- Initial version of the package
 
−
 
 
−
= Bauen des Paketes =
 
−
 
 
−
* Aus dem ''SPEC''-Verzeichnis aus kann man nun das ''.rpm''-Paket erstellen
 
−
* '''rpmbuild -ba hello.spec'''
 
−
* '''ls ../RPMS/x86_64/'''
 
−
 
 
−
'''hello-2.10-1.fc36.x86_64.rpm'''  hello-debuginfo-2.10-1.fc36.x86_64.rpm  hello-debugsource-2.10-1.fc36.x86_64.rp
 
−
 
 
−
= Testen =
 
−
 
 
−
* '''rpmlint hello-2.10-1.fc36.x86_64.rpm'''
 
−
========================================================================= rpmlint session starts =========================================================================
 
−
rpmlint: 2.4.0
 
−
configuration:
 
−
    /usr/lib/python3.10/site-packages/rpmlint/configdefaults.toml
 
−
    /etc/xdg/rpmlint/fedora-legacy-licenses.toml
 
−
    /etc/xdg/rpmlint/fedora-spdx-licenses.toml
 
−
    /etc/xdg/rpmlint/fedora.toml
 
−
    /etc/xdg/rpmlint/scoring.toml
 
−
    /etc/xdg/rpmlint/users-groups.toml
 
−
    /etc/xdg/rpmlint/warn-on-functions.toml
 
−
checks: 31, packages: 1
 
−
 
−
hello.x86_64: W: incoherent-version-in-changelog 2.8-1 ['2.10-1.fc36', '2.10-1']
 
−
hello.x86_64: W: file-not-utf8 /usr/share/doc/hello/THANKS
 
−
========================================== 1 packages and 0 specfiles checked; 0 errors, 2 warnings, 0 badness; has taken 0.3 s ==========================================
 
−
 
 
−
* '''dnf install ./hello-2.10-1.fc36.x86_64.rpm'''
 
−
* '''hello'''
 
−
 
 
−
Hello, world!
 
−
 
 
−
=Erstellen der SPEC-Datei=
 
−
*Eine SPEC-Datei enthält die Build-Anweisungen und Metadaten für das RPM-Paket.
 
−
;Erstellen Sie eine neue SPEC-Datei im Verzeichnis SPECS mit einem Texteditor Ihrer Wahl (z. B. nano oder *nano SPECS/meinprojekt.spec
 
−
;Füllen Sie die SPEC-Datei mit den entsprechenden Informationen aus. Hier ist ein Beispiel für den Inhalt einer SPEC-Datei:
 
−
<pre>
 
−
Name: meinprojekt
 
−
Version: 1.0
 
−
Release: 1%{?dist}
 
−
Summary: Eine kurze Beschreibung des Projekts
 
−
License: GPLv3+
 
−
URL: https://example.com
 
−
Source0: %{name}-%{version}.tar.gz
 
−
 
 
−
BuildRequires: dependencies
 
−
 
 
−
%description
 
−
Hier können Sie eine ausführliche Beschreibung Ihres Projekts angeben.
 
−
 
 
−
%prep
 
−
%autosetup
 
−
 
 
−
%build
 
−
Hier geben Sie die Build-Anweisungen an, z. B. das Kompilieren des Quellcodes.
 
−
 
 
−
%install
 
−
Hier geben Sie die Installationsanweisungen an, um die Dateien in das richtige Verzeichnis zu kopieren.
 
−
 
 
−
%files
 
−
Hier listen Sie alle Dateien auf, die in das RPM-Paket aufgenommen werden sollen.
 
−
 
 
−
%changelog
 
−
Hier können Sie Änderungen und Aktualisierungen für verschiedene Versionen des Pakets verfolgen.
 
−
Passen Sie die Werte für Name, Version, Release, Summary, License, URL, Source0, BuildRequires, Description und Files entsprechend an.
 
−
</pre>
 
−
=Erstellen des RPM-Pakets=
 
−
*Nachdem Sie die SPEC-Datei erstellt haben, können Sie das RPM-Paket erstellen.
 
−
;Wechseln Sie dazu in das Verzeichnis rpmbuild:
 
−
*cd ~/rpmbuild
 
−
;Führen Sie den Befehl rpmbuild mit dem -ba-Flag gefolgt von der Pfadangabe zur SPEC-Datei aus:
 
−
*rpmbuild -ba SPECS/meinprojekt.spec
 
−
 
 
−
Dieser Befehl erstellt sowohl das Source-Paket als auch das Binary-Paket. Das erstellte RPM-Paket wird im Verzeichnis RPMS oder SRPMS abgelegt, je nachdem, ob es sich um ein Binär- oder Source-Paket handelt.
 
−
 
 
−
=Überprüfung des RPM-Pakets=
 
−
;Sie können das erstellte RPM-Paket mit dem Befehl rpmlint überprüfen, um potenzielle Probleme zu identifizieren:
 
−
*rpmlint RPMS/ARCH/meinprojekt-1.0-1.ARCH.rpm
 
−
;Ersetzen Sie ARCH durch die entsprechende Architektur Ihres Systems (z. B. x86_64).
 
−
*Die Ausgabe von rpmlint hilft Ihnen dabei, eventuelle Fehler oder Warnungen zu beheben.
 

Aktuelle Version vom 18. Oktober 2023, 14:25 Uhr