Kako stvoriti GNU Hello World RPM paket u Fedori


RPM (rekurzivni akronim za RPM Package Manager) je besplatan sustav za upravljanje paketima otvorenog koda za Linux. Iako je izvorno stvoren za korištenje u Red Hat Linux, sada se koristi u mnogim distribucijama Linuxa 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 ćemo članku objasniti pisanje RPM datoteka, pokazujući kako jednostavno kreirati jednostavan izvor i binarne softverske pakete, na primjer, RPM paket GNU “Hello World” u Fedora Linuxu 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 s postavljanjem razvojnog okruženja u Fedora Linux pokretanjem sljedeće naredbe za instaliranje potrebnih alata za izradu RPM-ova.

sudo dnf install fedora-packager @development-tools

Zatim dodajte svoj račun bez privilegija u grupu ‘mock’ na sljedeći način (zamijenite tecmint svojim stvarnim korisničkim imenom). To će vam omogućiti da testirate postupak izgradnje u čistom chrootu.

sudo usermod -a -G mock tecmint

Sada kreirajte RPM međugradnju u svom direktoriju ~/rpmbuild i potvrdite međugradnju pomoću sljedećih naredbi. Prikazat će se popis poddirektorija koji sadrži izvorni kod projekta, RPM konfiguracijske datoteke i binarne pakete.

rpmdev-setuptree
tree ~/rpmbuild/

Evo za što je svaki imenik namijenjen:

  1. BUILD – pohranjuje različite %buildroot direktorije kada se paketi sastavljaju.
  2. RPMS – sadržavat će binarne RPM-ove u poddirektorijima Arhitekture.
  3. IZVORI – pohranjuje komprimirane izvorne arhive i sve zakrpe, ovdje će ih tražiti naredba rpmbuild.
  4. SPECS – pohranjuje SPEC datoteke.
  5. SRPMS – pohranjuje izvorni RPM umjesto binarnog RPM-a.

Izrada RPM-a "Hello World".

U ovom koraku trebate preuzeti izvorni kod (također poznat kao “upstream” izvor) projekta Hello World koji pakiramo, u ~/rpmbuild/SOURCE direktorij 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 pomoću .spec datoteke (nazovimo je hello.spec u ovom slučaju) u ~/rpmbuild/SPECS direktorij, pomoću programa rpmdev-newspec.

cd ~/rpmbuild/SPECS
rpmdev-newspec hello
ls

Zatim otvorite datoteku hello.spec koristeći svoj omiljeni editor.

vim hello.spec

Zadani predložak trebao bi 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

Ukratko objasnimo zadane parametre u datoteci .spec:

  • Naziv – koristi se za postavljanje naziva paketa.
  • Verzija – treba odražavati uzvodno.
  • Izdanje – brojevi s kojima radite unutar Fedore.
  • Sažetak – kratak je opis paketa u jednom retku, prvo slovo treba biti veliko kako bi se izbjegle pritužbe na rpmlint.
  • Licenca – provjerite status licence softvera tako da pregledate izvorne datoteke i/ili njihove LICENCE datoteke i/ili razgovarate s autorima.
  • URL – navodi početnu stranicu softverskog paketa.
  • Source0 – navodi izvorne datoteke. To može biti izravni URL ili put komprimiranog izvornog koda softvera.
  • BuildRequires – navodi ovisnosti potrebne za izgradnju softvera.
  • Zahtijeva – navodi ovisnosti potrebne za pokretanje softvera.
  • %prep – koristi se za stvaranje okruženja za izgradnju rpm paketa.
  • %build – koristi se za prevođenje i izgradnju izvornih kodova.
  • %install – ovo se koristi za instaliranje programa. Navodi naredbe koje su potrebne za kopiranje rezultirajuće datoteke iz procesa izgradnje u direktorij BUILDROOT.
  • %datoteke – ovaj odjeljak navodi datoteke koje pruža paket, a koje će biti instalirane na sustav.
  • %changelog – trebao bi pohraniti rad na pripremi RPM-a, posebno ako postoje sigurnosne zakrpe i zakrpe grešaka uključene povrh osnovnog uzvodnog izvora. Automatski se generira tijekom stvaranja datoteke hello.spec. Podaci iz dnevnika promjena obično se prikazuju pomoću rpm --changelog -q .

Sada uredite svoju datoteku .spec i napravite 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 upotrijebili neke nove parametre u gornjoj datoteci koji nisu objašnjeni. Oni se nazivaju makronaredbe, koriste se za izgradnju pozivanja sustava definiranih RPM-om za postavljanje instalacijskih staza za pakete. Stoga je obično poželjno ne kodirati ove staze niti u datotekama specifikacija, već koristiti iste makronaredbe radi dosljednosti.

Sljedeće su makronaredbe RPM izgradnje i direktorija zajedno s njihovim definicijama i zadanim vrijednostima:

  • %{make_build} – koristi se u odjeljku %build specifikacijske datoteke, pokreće naredbu make.
  • %{name} – definira naziv paketa ili imenika.
  • %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, isto kao $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 makronaredbe možete pronaći u /usr/lib/rpm/platform/*/makronaredbe ili pogledajte Smjernice za pakiranje: RPM makronaredbe.

Izrada RPM paketa

Za izgradnju izvornog, binarnog i paketa za otklanjanje pogrešaka, pokrenite sljedeću naredbu rpmbuild.

rpmbuild -ba hello.spec

Nakon procesa izrade, izvorni RPM-ovi i binarni RPM-ovi bit će kreirani u direktorijima ../SRPMS/ i ../RPMS/. Možete koristiti program rpmlint da provjerite i osigurate da su stvorene datoteke specifikacije i RPM datoteke u skladu s pravilima dizajna RPM-a:

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

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

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

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

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

To je sve! U ovom smo članku objasnili kako poboljšati svoj Fedora sustav za stvaranje jednostavnog izvornog i binarnog softverskog paketa. Također smo pokazali kako stvoriti GUN Hello Word RPM paket. Upotrijebite obrazac za povratne informacije u nastavku kako biste nam se obratili za sva pitanja ili komentare.