Kako kreirati GNU Hello World RPM paket u Fedori


RPM (rekurzivni akronim za RPM Package Manager) je besplatan sistem za upravljanje paketima otvorenog koda za Linux. Iako je prvobitno kreiran za upotrebu u Red Hat Linuxu, sada se koristi u mnogim Linux distribucijama kao što su CentOS, Fedora i OpenSuse. Važno je da se naziv RPM odnosi na program za upravljanje paketima, a .rpm je format datoteke.

U ovom članku ćemo objasniti pisanje RPM datoteka, pokazujući kako lako kreirati jednostavan izvorni i binarni softverski paket, na primjer, GNU “Hello World” RPM paket u Fedora Linux jaka> distribucija. Pretpostavljamo da imate neko osnovno razumijevanje unaprijed napravljenih RPM paketa i procesa izgradnje besplatnog softvera otvorenog koda.

Instalirajte razvojne alate u Fedori

Počnimo postavljanjem razvojnog okruženja u Fedora Linux tako što ćemo pokrenuti sljedeću naredbu za instaliranje potrebnih alata za pravljenje RPM-ova.

sudo dnf install fedora-packager @development-tools

Zatim dodajte svoj neprivilegirani račun u grupu „mock“ na sljedeći način (zamijenite tecmint svojim stvarnim korisničkim imenom). Ovo će vam omogućiti da testirate proceduru izgradnje u čistom chroot-u.

sudo usermod -a -G mock tecmint

Sada kreirajte RPM build u vašem ~/rpmbuild direktoriju i provjerite izgradnju koristeći sljedeće naredbe. Prikazat će se lista poddirektorija, koja sadrži izvorni kod projekta, RPM konfiguracijske datoteke i binarne pakete.

rpmdev-setuptree
tree ~/rpmbuild/

Evo čemu je svaki direktorij namijenjen:

  1. BUILD – pohranjuje različite %buildroot direktorije kada su paketi napravljeni.
  2. RPMS – sadržavat će binarne RPM-ove u poddirektorijumima arhitekture.
  3. SOURCES – pohranjuje komprimirane izvorne arhive i sve zakrpe, ovdje će ih tražiti komanda rpmbuild.
  4. SPECS – pohranjuje SPEC fajlove.
  5. SRPMS – pohranjuje izvorni RPM umjesto binarnog RPM.

Izgradnja “Hello World” RPM

U ovom koraku morate preuzeti izvorni kod (također poznat kao “upstream” izvor) Hello World projekta koji pakujemo, u ~/rpmbuild/SOURCE direktorijum sa sljedećom naredbom wget.

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

Zatim, konfigurirajmo RPM paket koristeći datoteku .spec (nazovimo je hello.spec u ovom slučaju) u ~/rpmbuild/SPECS direktorij, koristeći program rpmdev-newspec.

cd ~/rpmbuild/SPECS
rpmdev-newspec hello
ls

Zatim otvorite datoteku hello.spec koristeći svoj omiljeni uređivač.

vim hello.spec

Zadani predložak bi trebao izgledati ovako:

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

Hajde da ukratko objasnimo zadane parametre u datoteci .spec:

  • Naziv – koristi se za postavljanje imena za paket.
  • Verzija – treba da se ogleda uzvodno.
  • Izdanje – brojevi na kojima radite u Fedori.
  • Sažetak – kratak je opis paketa u jednom redu, prvo slovo treba biti veliko da bi se izbjegle žalbe na rpmlint.
  • Licenca – provjerite status licence softvera tako što ćete pregledati izvorne datoteke i/ili njihove datoteke LICENCE, i/ili razgovarati s autorima.
  • URL – određuje početnu stranicu softverskog paketa.
  • Izvor0 – specificira izvorne datoteke. To može biti direktan URL ili putanja kompresovanog izvornog koda softvera.
  • BuildRequires – specificira zavisnosti potrebne za izgradnju softvera.
  • Zahtijeva – specificira zavisnosti potrebne za pokretanje softvera.
  • %prep – koristi se za kreiranje okruženja za pravljenje rpm paketa.
  • %build – koristi se za kompajliranje i izgradnju izvornih kodova.
  • %install – koristi se za instaliranje programa. On navodi naredbu(e) potrebne za kopiranje rezultirajuće datoteke iz procesa izgradnje u BUILDROOT direktorij.
  • %files – u ovom odeljku su navedene datoteke koje pruža paket, a koji će biti instalirani na sistemu.
  • %changelog – treba da pohranjuje rad na pripremi RPM-a, posebno ako postoje sigurnosne i zakrpe grešaka uključene na vrhu osnovnog uzvodnog izvora. Automatski se generiše prilikom kreiranja datoteke hello.spec. Podaci dnevnika promjena obično se prikazuju pomoću rpm --changelog -q .

Sada uredite datoteku .spec i izvršite promjene kao što 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

Primijetit ćete da smo koristili neke nove parametre u gornjoj datoteci koji nisu objašnjeni. Oni se zovu makroi, koriste se za izgradnju poziva sistema definisanih od strane RPM-a za postavljanje instalacijskih putanja za pakete. Stoga je obično bolje ne kodirati ove staze ni u spec datotekama, već koristiti iste makroe radi dosljednosti.

Slijede makroi RPM izgradnje i direktorija zajedno sa njihovim definicijama i zadanim vrijednostima:

  • %{make_build} – koristi se u %build odjeljku datoteke specifikacije, pokreće naredbu make.
  • %{name} – definira naziv paketa ili direktorija.
  • %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, isto kao i $BUILDROOT
  • %{_infodir} – %{_datarootdir}/info, zadano: /usr/share/info
  • %{_mandir} – %{_datarootdir}/man, zadano: /usr/share/man
  • %{_bindir} – %{_exec_prefix}/bin, zadano: /usr/bin

Imajte na umu da vrijednosti za ove makroe možete pronaći u /usr/lib/rpm/platform/*/macros ili pogledati Smjernice za pakovanje:RPM makroi.

Izgradnja RPM paketa

Da biste napravili izvorni, binarni i paket za otklanjanje grešaka, pokrenite sljedeću naredbu rpmbuild.

rpmbuild -ba hello.spec

Nakon procesa izgradnje, izvorni RPM-ovi i binarni RPM-ovi će biti kreirani u direktorijima ../SRPMS/ i ../RPMS/. Možete koristiti program rpmlint da provjerite i osigurate da su spec datoteka i RPM datoteke kreirane u skladu s pravilima RPM dizajna:

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

Ako postoje greške kao što je prikazano na gornjoj snimci ekrana, popravite ih prije nego što nastavite.

Na kraju, ali ne i najmanje važno, koristite mock program da provjerite da li će izgradnja paketa uspjeti u Fedora ograničenom okruženju gradnje.

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

Za više informacija pogledajte Fedora dokumentaciju: Kreiranje RPM paketa.

To je sve! U ovom članku smo objasnili kako da pojačate svoj Fedora sistem da biste kreirali jednostavan izvorni i binarni softverski paket. Takođe smo pokazali kako da kreirate GUN Hello Word RPM paket. Koristite obrazac za povratne informacije u nastavku da nas kontaktirate za sva pitanja ili komentare.