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:
- BUILD – pohranjuje različite %buildroot direktorije kada su paketi napravljeni.
- RPMS – sadržavat će binarne RPM-ove u poddirektorijumima arhitekture.
- SOURCES – pohranjuje komprimirane izvorne arhive i sve zakrpe, ovdje će ih tražiti komanda rpmbuild.
- SPECS – pohranjuje SPEC fajlove.
- 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.