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:
- BUILD – pohranjuje različite %buildroot direktorije kada se paketi sastavljaju.
- RPMS – sadržavat će binarne RPM-ove u poddirektorijima Arhitekture.
- IZVORI – pohranjuje komprimirane izvorne arhive i sve zakrpe, ovdje će ih tražiti naredba rpmbuild.
- SPECS – pohranjuje SPEC datoteke.
- 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.