Hvordan lage en GNU Hello World RPM-pakke i Fedora


RPM (et rekursivt akronym for RPM Package Manager) er et gratis og åpen kildekode-administrasjonssystem for Linux. Selv om det opprinnelig ble laget for bruk i Red Hat Linux, brukes det nå i mange Linux-distribusjoner som CentOS, Fedora og >OpenSuse. Viktigere er at navnet RPM refererer til pakkebehandlingsprogrammet og .rpm er et filformat.

I denne artikkelen vil vi forklare hvordan du skriver RPM-filer, og viser hvordan du enkelt kan lage en enkel kilde og binære programvarepakker, for eksempel GNU “Hello World” RPM-pakke i Fedora Linux sterk> fordeling. Vi antar at du har en viss grunnleggende forståelse av forhåndslagde RPM-pakker, og med byggeprosessen for gratis åpen kildekode-programvare.

Installer utviklingsverktøy i Fedora

La oss starte med å sette opp utviklingsmiljøet i Fedora Linux ved å kjøre følgende kommando for å installere de nødvendige verktøyene for å bygge RPM-er.

sudo dnf install fedora-packager @development-tools

Deretter legger du til den ikke-privilegerte kontoen din i «mock»-gruppen som følger (erstatt tecmint med ditt faktiske brukernavn). Dette vil gjøre deg i stand til å teste byggeprosedyren i en ren chroot.

sudo usermod -a -G mock tecmint

Lag nå en RPM-build i ~/rpmbuild-katalogen din og verifiser bygget ved å bruke følgende kommandoer. Den vil vise en liste over underkataloger, som inneholder prosjektkildekode, RPM-konfigurasjonsfiler og binære pakker.

rpmdev-setuptree
tree ~/rpmbuild/

Her er hva hver katalog er ment for:

  1. BUILD – lagrer ulike %buildroot-kataloger når pakker bygges.
  2. RPMS – vil inneholde binære RPM-er i underkataloger til Architecture.
  3. KILDER – lagrer komprimerte kildearkiver og eventuelle patcher, det er her rpmbuild-kommandoen vil lete etter dem.
  4. SPECS – lagrer SPEC-filene.
  5. SRPMS – lagrer kilde-RPM i stedet for en binær RPM.

Bygge en "Hello World" RPM

I dette trinnet må du laste ned kildekoden (også kjent som “oppstrøms”-kilden) til Hello World-prosjektet vi pakker inn i ~/rpmbuild/SOURCE katalog med følgende wget-kommando.

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

La oss deretter konfigurere RPM-pakken ved å bruke en .spec-fil (la oss gi den navnet hello.spec i dette tilfellet) i ~/rpmbuild/SPECS katalog ved å bruke rpmdev-newspec-programmet.

cd ~/rpmbuild/SPECS
rpmdev-newspec hello
ls

Åpne deretter hello.spec-filen ved å bruke din favorittredigerer.

vim hello.spec

Standardmalen skal se slik ut:

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

La oss kort forklare standardparametrene i en .spec-fil:

  • Navn – brukes til å angi et navn for pakken.
  • Versjon – bør speile oppstrøms.
  • Utgivelse – tall du jobber i Fedora.
  • Sammendrag – er en kort beskrivelse av pakken på én linje, den første bokstaven bør være stor for å unngå rpmlint-klager.
  • Lisens – sjekk lisensstatusen til programvaren ved å inspisere kildefilene og/eller deres LISENS-filer, og/eller ved å snakke med forfatterne.
  • URL – spesifiserer hjemmesiden til programvarepakken.
  • Kilde0 – spesifiserer kildefilene. Det kan være en direkte URL eller en bane til programvarens komprimerte kildekode.
  • BuildRequires – spesifiserer avhengighetene som trengs for å bygge programvaren.
  • Krever – spesifiserer avhengighetene som trengs for å kjøre programvaren.
  • %prep – brukes til å lage miljøet for å bygge rpm-pakken.
  • %build – brukes til å kompilere og bygge kildekodene.
  • %install – dette brukes til å installere programmene. Den viser kommando(er) som trengs for å kopiere den resulterende filen fra byggeprosessen til BUILDROOT-katalogen.
  • %filer – denne delen viser filene levert av pakken, som vil bli installert på systemet.
  • %changelog – bør lagre arbeidet med å klargjøre RPM, spesielt hvis det er sikkerhets- og feilrettinger inkludert på toppen av basisoppstrømskilden. Den genereres automatisk mens du oppretter hello.spec-filen. Endringsloggdataene vises vanligvis med rpm --changelog -q .

Rediger nå .spec-filen og gjør endringer som vist.

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

Du vil legge merke til at vi har brukt noen nye parametere i filen ovenfor som ikke er forklart. Disse kalles makroer, som brukes til å bygge systemanrop definert av RPM for å angi installasjonsbaner for pakker. Derfor er det vanligvis å foretrekke å ikke hardkode disse banene i spesifikasjonsfiler heller, men bruke de samme makroene for konsistens.

Følgende er RPM-bygge- og katalogmakroer sammen med deres definisjoner og standardverdier:

  • %{make_build} – brukes i %build-delen av spesifikasjonsfilen, den kjører make-kommandoen.
  • %{name} – definerer pakke- eller katalognavn.
  • %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, samme som $BUILDROOT
  • %{_infodir} – %{_datarootdir}/info, standard: /usr/share/info
  • %{_mandir} – %{_datarootdir}/mann, standard: /usr/share/man
  • %{_bindir} – %{_exec_prefix}/bin, standard: /usr/bin

Vær oppmerksom på at du kan finne verdiene for disse makroene i /usr/lib/rpm/platform/*/makroene eller se Pakkeretningslinjer: RPM-makroer.

Bygge RPM-pakken

For å bygge kilde-, binær- og feilsøkingspakkene, kjør følgende rpmbuild-kommando.

rpmbuild -ba hello.spec

Etter byggeprosessen vil kilde-RPM-ene og binære RPM-ene bli opprettet i henholdsvis ../SRPMS/ og ../RPMS/-katalogene. Du kan bruke rpmlint-programmet til å sjekke og sikre at spesifikasjonsfilen og RPM-filene som er opprettet, samsvarer med RPM-designregler:

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

Hvis det er noen feil som vist i skjermbildet ovenfor, fiks dem før du kan fortsette.

Sist men ikke minst, bruk mock-programmet for å sjekke at pakkebyggingen vil lykkes i Fedora-begrensede byggemiljø.

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

For mer informasjon, se Fedora-dokumentasjonen: Opprette RPM-pakker.

Det er alt! I denne artikkelen har vi forklart hvordan du kan trappe opp Fedora-systemet ditt for å lage en enkel kilde- og binær programvarepakke. Vi viste også hvordan du lager en GUN Hello Word RPM-pakke. Bruk tilbakemeldingsskjemaet nedenfor for å nå oss for spørsmål eller kommentarer.