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:
- BUILD – lagrer ulike %buildroot-kataloger når pakker bygges.
- RPMS – vil inneholde binære RPM-er i underkataloger til Architecture.
- KILDER – lagrer komprimerte kildearkiver og eventuelle patcher, det er her rpmbuild-kommandoen vil lete etter dem.
- SPECS – lagrer SPEC-filene.
- 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.