Kaip sukurti GNU Hello World RPM paketą „Fedora“.


RPM (rekursyvus RPM Package Manager akronimas) yra nemokama atvirojo kodo paketų valdymo sistema, skirta Linux. Nors iš pradžių jis buvo sukurtas naudoti Red Hat Linux, dabar jis naudojamas daugelyje Linux platinimų, pvz., CentOS, Fedora ir >OpenSuse. Svarbu tai, kad pavadinimas RPM reiškia paketų tvarkyklės programą, o .rpm yra failo formatas.

Šiame straipsnyje paaiškinsime, kaip rašyti RPM failus, parodydami, kaip lengvai sukurti paprastą šaltinį ir dvejetainius programinės įrangos paketus, pvz., GNU „Hello World“ RPM paketą Fedora Linux paskirstymas. Manome, kad turite šiek tiek pagrindinio supratimo apie iš anksto paruoštus RPM paketus ir nemokamos atvirojo kodo programinės įrangos kūrimo procesą.

Įdiekite kūrimo įrankius „Fedora“.

Pradėkime nuo kūrimo aplinkos nustatymo Fedora Linux, paleisdami šią komandą, kad įdiegtumėte būtinus įrankius RPM kurti.

sudo dnf install fedora-packager @development-tools

Tada pridėkite neprivilegijuotą paskyrą prie grupės „tyčiojimas“, kaip nurodyta toliau (pakeiskite tecmint tikruoju naudotojo vardu). Tai leis jums išbandyti kūrimo procedūrą švarioje chroot sistemoje.

sudo usermod -a -G mock tecmint

Dabar sukurkite RPM versiją savo ~/rpmbuild kataloge ir patikrinkite kūrimą naudodami šias komandas. Bus rodomas pakatalogių sąrašas, kuriame yra projekto šaltinio kodas, RPM konfigūracijos failai ir dvejetainiai paketai.

rpmdev-setuptree
tree ~/rpmbuild/

Štai kam skirtas kiekvienas katalogas:

  1. BUILD – kai kuriami paketai, saugomi įvairūs %buildroot katalogai.
  2. RPMS – Architektūros pakatalogiuose bus dvejetainiai RPM.
  3. ŠALTINIAI – saugo suglaudintus šaltinio archyvus ir visus pataisymus, čia jų ieškos komanda rpmbuild.
  4. SPECS – saugo SPEC failus.
  5. SRPMS – išsaugo šaltinio PTP vietoj dvejetainių RPM.

„Hello World“ RPM kūrimas

Atlikdami šį veiksmą, turite atsisiųsti projekto „Hello World“, kurį pakuojame, šaltinio kodą (taip pat žinomą kaip prieš srovę) į ~/rpmbuild/SOURCE. > katalogą su šia wget komanda.

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

Tada sukonfigūruokime RPM paketą naudodami failą .spec (šiuo atveju pavadinkime jį hello.spec) ~/rpmbuild/SPECS > kataloge, naudodami programą rpmdev-newspec.

cd ~/rpmbuild/SPECS
rpmdev-newspec hello
ls

Tada atidarykite failą hello.spec naudodami mėgstamą redaktorių.

vim hello.spec

Numatytasis šablonas turėtų atrodyti taip:

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

Trumpai paaiškinkime numatytuosius parametrus .spec faile:

  • Pavadinimas – naudojamas paketo pavadinimui nustatyti.
  • Versija – turėtų atspindėti prieš srovę.
  • Išleidimas – numeriai, kuriuos naudojate „Fedora“.
  • Santrauka – trumpas vienos eilutės aprašymas, pirmoji raidė turi būti didžioji, kad nebūtų skundų dėl rpmlinto.
  • Licencija – patikrinkite programinės įrangos licencijos būseną, peržiūrėdami šaltinio failus ir (arba) jų LICENCIJOS failus ir (arba) kalbėdami su autoriais.
  • URL – nurodo pagrindinį programinės įrangos paketo puslapį.
  • Šaltinis0 – nurodo šaltinio failus. Tai gali būti tiesioginis URL arba programinės įrangos suglaudinto šaltinio kodo kelias.
  • BuildRequires – nurodo priklausomybes, reikalingas kuriant programinę įrangą.
  • Reikalaujama – nurodomos priklausomybės, reikalingos programinei įrangai paleisti.
  • %prep – naudojamas kuriant aplinką rpm paketui kurti.
  • %build – naudojamas šaltinio kodams kompiliuoti ir kurti.
  • %install – naudojama programoms įdiegti. Jame pateikiamos komandos (-os), kurių reikia norint nukopijuoti gautą failą iš kūrimo proceso į BUILDROOT katalogą.
  • %failai – šioje skiltyje pateikiami paketo pateikti failai, kurie bus įdiegti sistemoje.
  • %changelog – turėtų saugoti RPM paruošimo darbą, ypač jei yra saugos ir klaidų pataisų, įtrauktų į pagrindinį šaltinį. Jis automatiškai sugeneruojamas kuriant hello.spec failą. Pakeitimų žurnalo duomenys paprastai rodomi rpm --changelog -q .

Dabar redaguokite .spec failą ir atlikite pakeitimus, kaip parodyta.

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

Pastebėsite, kad aukščiau esančiame faile panaudojome kai kuriuos naujus parametrus, kurie nebuvo paaiškinti. Jos vadinamos makrokomandomis, naudojamos kuriant sistemos iškvietimus, apibrėžtus RPM, siekiant nustatyti paketų diegimo kelius. Todėl paprastai geriau neužkoduoti šių kelių specifikacijų failuose, o naudoti tas pačias makrokomandas, kad būtų nuoseklus.

Toliau pateikiamos RPM kūrimo ir katalogų makrokomandos kartu su jų apibrėžimais ir numatytosiomis reikšmėmis:

  • %{make_build} – naudojamas specifikacinio failo skiltyje %build, jis vykdo komandą make.
  • %{name} – apibrėžia paketo arba katalogo pavadinimą.
  • %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, tas pats kaip $BUILDROOT
  • %{_infodir} – %{_datarootdir}/info, numatytasis: /usr/share/info
  • %{_mandir} – %{_datarootdir}/man, numatytoji: /usr/share/man
  • %{_bindir} – %{_exec_prefix}/bin, numatytasis: /usr/bin

Atminkite, kad šių makrokomandų reikšmes galite rasti /usr/lib/rpm/platform/*/macros arba žr. Pakavimo gaires: RPM makrokomandos.

RPM paketo kūrimas

Norėdami sukurti šaltinio, dvejetainius ir derinimo paketus, paleiskite šią rpmbuild komandą.

rpmbuild -ba hello.spec

Po kūrimo proceso šaltinio RPM ir dvejetainiai RPM bus sukurti atitinkamai kataloguose ../SRPMS/ ir ../RPMS/. Galite naudoti rpmlint programą, kad patikrintumėte ir įsitikintumėte, ar sukurti specifikacijų failai ir RPM failai atitinka RPM projektavimo taisykles:

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

Jei yra klaidų, kaip parodyta aukščiau esančioje ekrano kopijoje, prieš tęsdami ištaisykite jas.

Paskutinis, bet ne mažiau svarbus dalykas – naudokite pavyzdinę programą, kad patikrintumėte, ar paketo kūrimas bus sėkmingas Fedora apribotoje kūrimo aplinkoje.

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

Daugiau informacijos rasite Fedora dokumentacijoje: RPM paketų kūrimas.

Tai viskas! Šiame straipsnyje paaiškinome, kaip patobulinti „Fedora“ sistemą, kad būtų sukurtas paprastas šaltinio ir dvejetainės programinės įrangos paketas. Taip pat parodėme, kaip sukurti GUN Hello Word RPM paketą. Jei turite klausimų ar komentarų, naudokite toliau pateiktą atsiliepimų formą.