Kuinka luoda GNU Hello World RPM-paketti Fedorassa


RPM (rekursiivinen lyhenne sanoista RPM Package Manager) on ilmainen ja avoimen lähdekoodin paketinhallintajärjestelmä Linuxille. Vaikka se luotiin alun perin Red Hat Linuxissa, sitä käytetään nyt monissa Linux-jakeluissa, kuten CentOS, Fedora ja >OpenSuse. Tärkeää on, että nimi RPM viittaa paketinhallintaohjelmaan ja .rpm on tiedostomuoto.

Tässä artikkelissa kerromme RPM-tiedostojen kirjoittamisesta ja osoitamme, kuinka helposti luodaan yksinkertainen lähde- ja binääriohjelmistopaketti, esimerkiksi GNU “Hello World” RPM-paketti Fedora Linuxissa. vahva> jakelu. Oletamme, että sinulla on perustiedot valmiista RPM-paketeista ja ilmaisen avoimen lähdekoodin ohjelmistojen rakennusprosessista.

Asenna kehitystyökalut Fedoraan

Aloitetaan määrittämällä kehitysympäristö Fedora Linuxissa suorittamalla seuraava komento asentaaksesi tarvittavat työkalut RPM:iden rakentamiseen.

sudo dnf install fedora-packager @development-tools

Lisää seuraavaksi tilisi, jolla ei ole etuoikeuksia, vale-ryhmään seuraavasti (korvaa tecmint todellisella käyttäjänimelläsi). Tämän avulla voit testata rakennusprosessia puhtaalla chrootilla.

sudo usermod -a -G mock tecmint

Luo nyt RPM-koonnos ~/rpmbuild-hakemistoosi ja tarkista koontiversio seuraavilla komennoilla. Se näyttää luettelon alihakemistoista, jotka sisältävät projektin lähdekoodin, RPM-määritystiedostot ja binaaripaketit.

rpmdev-setuptree
tree ~/rpmbuild/

Tässä on mitä kukin hakemisto on tarkoitettu:

  1. BUILD – tallentaa erilaisia %buildroot-hakemistoja, kun paketteja rakennetaan.
  2. RPMS – sisältää binaariset RPM:t arkkitehtuurin alihakemistoissa.
  3. LÄHTEET – tallentaa pakatut lähdearkistot ja mahdolliset korjaustiedostot, täältä rpmbuild-komento etsii ne.
  4. SPECS – tallentaa SPEC-tiedostot.
  5. SRPMS – tallentaa lähteen RPM:n binaarisen RPM:n sijaan.

"Hello World" RPM:n rakentaminen

Tässä vaiheessa sinun on ladattava pakkaamamme Hello World -projektin lähdekoodi (tunnetaan myös nimellä "ylävirtalähde") hakemistoon ~/rpmbuild/SOURCE. > hakemistoon seuraavalla wget-komennolla.

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

Määritetään seuraavaksi RPM-paketti käyttämällä .spec-tiedostoa (nimetään sille tässä tapauksessa hello.spec) tiedostossa ~/rpmbuild/SPECS > hakemistosta rpmdev-newspec-ohjelman avulla.

cd ~/rpmbuild/SPECS
rpmdev-newspec hello
ls

Avaa sitten hello.spec-tiedosto suosikkieditorillasi.

vim hello.spec

Oletusmallin pitäisi näyttää tältä:

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

Selitetään lyhyesti .spec-tiedoston oletusparametrit:

  • Nimi – käytetään paketin nimen asettamiseen.
  • Versio – pitäisi peilata ylävirtaan.
  • Release – numerot, joita käytät Fedorassa.
  • Yhteenveto – on lyhyt yksirivinen kuvaus paketista, ensimmäisen kirjaimen tulee olla iso, jotta vältytään rpmlint-valituksista.
  • Lisenssi – tarkista ohjelmiston lisenssitila tarkastamalla lähdetiedostot ja/tai niiden LISENSSitiedostot ja/tai keskustelemalla tekijöiden kanssa.
  • URL – määrittää ohjelmistopaketin kotisivun.
  • Source0 – määrittää lähdetiedostot. Se voi olla suora URL-osoite tai ohjelmiston pakatun lähdekoodin polku.
  • BuildRequires – määrittää ohjelmiston rakentamiseen tarvittavat riippuvuudet.
  • Edellyttää – määrittää ohjelmiston suorittamiseen tarvittavat riippuvuudet.
  • %prep – käytetään ympäristön luomiseen rpm-paketin rakentamiseen.
  • %build – käytetään lähdekoodien kääntämiseen ja rakentamiseen.
  • %install – tätä käytetään ohjelmien asentamiseen. Siinä luetellaan komennot, joita tarvitaan tulostiedoston kopioimiseen rakennusprosessista BUILDROOT-hakemistoon.
  • %files – tässä osiossa luetellaan paketin toimittamat tiedostot, jotka asennetaan järjestelmään.
  • %changelog – pitäisi tallentaa RPM:n valmistelutyöt, varsinkin jos ylävirran peruslähteen päälle on sisällytetty tietoturva- ja virhekorjauksia. Se luodaan automaattisesti luotaessa hello.spec-tiedostoa. Muutoslokin tiedot näytetään yleensä muodossa rpm --changelog -q .

Muokkaa nyt .spec-tiedostoa ja tee muutokset kuvan mukaisesti.

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

Huomaat, että olemme käyttäneet joitain uusia parametreja yllä olevassa tiedostossa, joita ei ole selitetty. Näitä kutsutaan makroiksi, joita käytetään RPM:n määrittämien järjestelmäkutsujen luomiseen pakettien asennuspolkujen määrittämiseksi. Siksi on yleensä parempi olla myös koodaamatta näitä polkuja teknisissä tiedostoissa, vaan käyttää samoja makroja johdonmukaisuuden vuoksi.

Seuraavat ovat RPM-koonti- ja hakemistomakrot sekä niiden määritelmät ja oletusarvot:

  • %{make_build} – käytetään määritystiedoston %build-osiossa, se suorittaa make-komennon.
  • %{name} – määrittää paketin tai hakemiston nimen.
  • %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, sama kuin $BUILDROOT
  • %{_infodir} – %{_datarootdir}/info, oletus: /usr/share/info
  • %{_mandir} – %{_datarootdir}/mies, oletus: /usr/share/man
  • %{_bindir} – %{_exec_prefix}/bin, oletus: /usr/bin

Huomaa, että löydät arvot näille makroille osoitteesta /usr/lib/rpm/platform/*/macros tai katso Packaging Guidelines:RPM-makrot.

RPM-paketin rakentaminen

Luodaksesi lähde-, binaari- ja virheenkorjauspaketit, suorita seuraava rpmbuild-komento.

rpmbuild -ba hello.spec

Rakennusprosessin jälkeen lähde-RPM:t ja binaariset RPM:t luodaan hakemistoihin ../SRPMS/ ja ../RPMS/. Voit käyttää rpmlint-ohjelmaa tarkistaaksesi ja varmistaaksesi, että luodut spesifikaatiotiedostot ja RPM-tiedostot ovat RPM-suunnittelusääntöjen mukaisia:

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

Jos yllä olevassa kuvakaappauksessa on virheitä, korjaa ne ennen kuin voit jatkaa.

Viimeisenä mutta ei vähäisimpänä, käytä mock-ohjelmaa tarkistaaksesi, että paketin koontiversio onnistuu Fedoran rajoitetussa rakennusympäristössä.

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

Lisätietoja on Fedoran dokumentaatiossa: RPM-pakettien luominen.

Siinä kaikki! Tässä artikkelissa olemme selittäneet, kuinka voit tehostaa Fedora-järjestelmääsi yksinkertaisen lähde- ja binaariohjelmistopaketin luomiseksi. Näimme myös, kuinka luodaan GUN Hello Word RPM -paketti. Alla olevalla palautelomakkeella voit ottaa meihin yhteyttä, jos sinulla on kysyttävää tai kommentteja.