Kako ustvariti paket RPM Hello World RPM v Fedori


sistem za upravljanje paketov za Linux. Čeprav je bil prvotno ustvarjen za uporabo v Red Hat Linux, se zdaj uporablja v številnih distribucijah Linuxa, kot so CentOS, Fedora in OpenSuse. Pomembno je, da se ime RPM nanaša na program za upravljanje paketov, .rpm pa je oblika datoteke.

V tem članku bomo razložili pisanje datotek RPM in pokazali, kako enostavno ustvariti preprost izvorni in binarni programski paket, na primer paket RPM GNU "Hello World" v distribuciji Fedora Linux. Predvidevamo, da dobro poznate vnaprej pripravljene pakete RPM in postopek gradnje brezplačne odprtokodne programske opreme.

Namestite razvojna orodja v Fedoro

Začnimo z nastavitvijo razvojnega okolja v Fedora Linuxu z zagonom naslednjega ukaza za namestitev potrebnih orodij za izdelavo RPM-jev.

$ sudo dnf install fedora-packager @development-tools

Nato dodajte svoj neprivilegirani račun v "lažno" skupino, kot sledi (tecmint zamenjajte z dejanskim uporabniškim imenom). Tako boste lahko preizkusili postopek gradnje v čistem chrootu.

$ sudo usermod -a -G mock tecmint

Zdaj v imeniku ~/rpmbuild ustvarite zgradbo RPM in z naslednjimi ukazi preverite zgradbo. Prikazal bo seznam podimenikov, ki vsebuje izvorno kodo projekta, konfiguracijske datoteke RPM in binarne pakete.

$ rpmdev-setuptree
$ tree ~/rpmbuild/

Tukaj je, čemu je namenjen vsak imenik:

  1. BUILD - pri izdelavi paketov shranjuje različne% imenike buildroot.
  2. RPMS - vsebuje binarne RPM-je v podimenikih Arhitekture.
  3. VIRI - shranjuje stisnjene izvorne arhive in morebitne popravke, tu jih bo iskal ukaz rpmbuild.
  4. SPECS - shrani datoteke SPEC.
  5. SRPMS - shrani izvorni RPM namesto binarnega RPM.

Izdelava RPM "Hello World"

V tem koraku morate v imenik ~/rpmbuild/SOURCE z naslednjim ukazom wget prenesti izvorno kodo (znano tudi kot »gorvodni« vir) projekta Hello World, ki ga pakiramo.

$ cd ~/rpmbuild/SOURCES
$ wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz -P ~/rpmbuild/SOURCES

Nato nastavimo paket RPM z datoteko .spec (v tem primeru jo poimenujmo hello.spec ) v imeniku ~/rpmbuild/SPECS z uporabo rpmdev- nov specifikacijski program.

$ cd ~/rpmbuild/SPECS
$ rpmdev-newspec hello
$ ls

Nato z najljubšim urejevalnikom odprite datoteko hello.spec .

$ vim hello.spec

Privzeta predloga mora biti videti tako:

Name:           hello
Version:
Release:        1%{?dist}
Summary:

License:
URL:
Source0:

BuildRequires:
Requires:

%description

%prep
%autosetup

%build
%configure
%make_build

%install
rm -rf $RPM_BUILD_ROOT
%make_install

%files
%license add-license-file-here
%doc add-docs-here

%changelog
* Tue May 28 2019 Aaron Kili

Na kratko razložimo privzete parametre v datoteki .spec :

  • Ime - uporablja se za nastavitev imena paketa.
  • Različica - zrcali se navzgor.
  • Sprostitev - številke, ki jih uporabljate v Fedori.
  • Povzetek - je kratek opis paketa v eni vrstici, prva črka mora biti velika, da se izognemo pritožbam rpmlint.
  • Licenca - preverite stanje licence programske opreme tako, da pregledate izvorne datoteke in/ali njihove datoteke LICENCE in/ali se pogovorite z avtorji.
  • URL - določa domačo stran programskega paketa.
  • Source0 - določa izvorne datoteke. Lahko je neposredni URL ali pot stisnjene izvorne kode programske opreme.
  • BuildRequires - določa odvisnosti, potrebne za izdelavo programske opreme.
  • Zahteva - določa odvisnosti, potrebne za zagon programske opreme.
  • % prep - uporablja se za ustvarjanje okolja za izdelavo paketa rpm.
  • % build - uporablja se za prevajanje in izdelavo izvornih kod.
  • % namestitev - uporablja se za namestitev programov. V njem so navedeni ukazi, potrebni za kopiranje nastale datoteke iz postopka gradnje v imenik BUILDROOT.
  • % datotek - v tem razdelku so navedene datoteke, ki jih ponuja paket, ki bo nameščen v sistem.
  • % sprememb sprememb - mora shraniti delo pri pripravi RPM, še posebej, če so na vrhu osnovnega vira navzgor vključeni popravki za zaščito in napake. Med ustvarjanjem datoteke hello.spec se samodejno ustvari. Podatki dnevnika sprememb so običajno prikazani z rpm --changelog -q .

Zdaj uredite datoteko .spec in izvedite spremembe, kot je prikazano.

Name:           hello
Version:        2.10
Release:        1%{?dist}
Summary:        The "Hello World" program from GNU

License:        GPLv3+
URL:            http://ftp.gnu.org/gnu/%{name}
Source0:        http://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.gz

BuildRequires: gettext
      
Requires(post): info
Requires(preun): info

%description 
The "Hello World" program package 

%prep
%autosetup

%build
%configure
make %{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 May 28 2019 Aaron Kili

Opazili boste, da smo v zgornji datoteki uporabili nekaj novih parametrov, ki niso pojasnjeni. Ti se imenujejo makri, ki se uporabljajo za izdelavo sistemskih klicev, ki jih definira RPM za nastavitev namestitvenih poti za pakete. Zato je običajno zaželeno, da teh poti ne kodirate tudi v datotekah s specifikacijami, ampak za doslednost uporabite iste makre.

Sledijo makri za gradnjo in imenik RPM skupaj z njihovimi definicijami in privzetimi vrednostmi:

  • % {make_build} - uporablja se v razdelku% build datoteke s specifikacijami, izvaja ukaz make.
  • % {name} - definira ime paketa ali imenika.
  • % {buildroot} -% {_ buildrootdir} /% {name} -% {version} -% {release}.% {_ arch}, enako kot $BUILDROOT
  • % {_ infodir} -% {_ datarootdir}/info, privzeto:/usr/share/info
  • % {_ mandir} -% {_ datarootdir}/man, privzeto:/usr/share/man
  • % {_ bindir} -% {_ exec_prefix}/bin, privzeto:/usr/bin

Upoštevajte, da lahko vrednosti za te makre najdete v/usr/lib/rpm/platform/*/makroh ali si oglejte smernice za pakiranje: RPM Macros.

Izdelava paketa RPM

Če želite zgraditi izvorne, binarne in pakete za odpravljanje napak, zaženite naslednji ukaz rpmbuild.

$ rpmbuild -ba hello.spec

Po končanem postopku izdelave se v imenikih ../SRPMS/ in ../RPMS/ ustvarijo izvorni RPM-ji in binarni RPM-ji. S programom rpmlint lahko preverite in zagotovite, da so ustvarjene datoteke s specifikacijami in datoteke RPM skladne s pravili oblikovanja RPM:

$ rpmlint hello.spec ../SRPMS/hello* ../RPMS/*/hello*

Če pride do napak, kot je prikazano na zgornjem posnetku zaslona, jih odpravite, preden lahko nadaljujete.

Nenazadnje pa z lažnim programom preverite, ali bo izdelava paketa uspela v okolju z omejeno gradnjo Fedora.

$ mock --verbose ../SRPMS/hello-2.10-1.fc29.src.rpm

Za več informacij glejte Fedorino dokumentacijo: Ustvarjanje paketov RPM.

To je vse! V tem članku smo razložili, kako pospešiti sistem Fedora in ustvariti preprost izvorni in binarni programski paket. Pokazali smo tudi, kako ustvariti GUN Hello Word RPM paket. Uporabite spodnji obrazec za povratne informacije in nas kontaktirajte za kakršna koli vprašanja ali komentarje.