Hogyan hozzunk létre egy GNU Hello World RPM csomagot a Fedorában
Az RPM (az RPM Package Manager rekurzív mozaikszója) egy ingyenes és nyílt forráskódú csomagkezelő rendszer Linuxhoz. Bár eredetileg a Red Hat Linux rendszerben való használatra készült, ma már számos Linux-disztribúcióban használják, mint például a CentOS, a Fedora és a >OpenSuse. Fontos, hogy az RPM név a csomagkezelő programra utal, az .rpm
pedig egy fájlformátum.
Ebben a cikkben elmagyarázzuk az RPM-fájlok írását, bemutatva, hogyan lehet egyszerűen létrehozni egy egyszerű forrás- és bináris szoftvercsomagot, például GNU „Hello World” RPM-csomagot Fedora Linuxban. eloszlás. Feltételezzük, hogy rendelkezik bizonyos alapvető ismeretekkel az előre elkészített RPM-csomagokról és az ingyenes nyílt forráskódú szoftverek építési folyamatáról.
Telepítse a Fedora fejlesztői eszközöket
Kezdjük a fejlesztői környezet beállításával a Fedora Linuxban a következő parancs futtatásával az RPM-ek létrehozásához szükséges eszközök telepítéséhez.
sudo dnf install fedora-packager @development-tools
Ezután adja hozzá nem privilegizált fiókját a „mock” csoporthoz az alábbiak szerint (cserélje ki a tecmint szót a tényleges felhasználónevére). Ez lehetővé teszi az összeállítási eljárás tesztelését tiszta chrootban.
sudo usermod -a -G mock tecmint
Most hozzon létre egy RPM buildet a ~/rpmbuild
könyvtárában, és ellenőrizze a buildet a következő parancsokkal. Megjelenik az alkönyvtárak listája, amely tartalmazza a projekt forráskódját, az RPM konfigurációs fájlokat és a bináris csomagokat.
rpmdev-setuptree
tree ~/rpmbuild/
Íme, mire valók az egyes könyvtárak:
- BUILD – különféle %buildroot könyvtárakat tárol a csomagok összeállításakor.
- RPMS – bináris RPM-eket tartalmaz az Architecture alkönyvtáraiban.
- FORRÁSOK – a tömörített forrásarchívumokat és az esetleges javításokat tárolja, az rpmbuild parancs itt fogja megkeresni őket.
- SPECS – a SPEC fájlokat tárolja.
- SRPMS – a bináris RPM helyett a forrás RPM-et tárolja.
„Hello World” RPM felépítése
Ebben a lépésben le kell töltenie az általunk csomagolt Hello World projekt forráskódját (más néven „upstream” forrás) a ~/rpmbuild/SOURCE mappába. > könyvtárba a következő wget paranccsal.
cd ~/rpmbuild/SOURCES
wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz -P ~/rpmbuild/SOURCES
Ezután állítsuk be az RPM-csomagot egy .spec
fájl segítségével (ebben az esetben nevezzük el hello.spec
-nak) a ~/rpmbuild/SPECS fájlban. > könyvtárat az rpmdev-newspec programmal.
cd ~/rpmbuild/SPECS
rpmdev-newspec hello
ls
Ezután nyissa meg a hello.spec
fájlt kedvenc szerkesztője segítségével.
vim hello.spec
Az alapértelmezett sablonnak így kell kinéznie:
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
Röviden magyarázzuk el az alapértelmezett paramétereket egy .spec
fájlban:
- Név – a csomag nevének beállítására szolgál.
- Verzió – tükröznie kell az áramlás irányát.
- Kiadás – a Fedorán belül használt számok.
- Összefoglaló – a csomag rövid, egysoros leírása, az első betű legyen nagy, hogy elkerüljük az rpmlint panaszokat.
- Licenc – ellenőrizze a szoftver Licenc állapotát a forrásfájlok és/vagy azok LICENCfájljainak megtekintésével és/vagy a szerzőkkel való beszélgetéssel.
- URL – a szoftvercsomag kezdőlapját adja meg.
- Source0 – a forrásfájlokat határozza meg. Ez lehet egy közvetlen URL vagy a szoftver tömörített forráskódjának elérési útja.
- BuildRequires – a szoftver felépítéséhez szükséges függőségek meghatározása.
- Szükséges – a szoftver futtatásához szükséges függőségek meghatározása.
- %prep – az rpm csomag létrehozásához szükséges környezet létrehozására szolgál.
- %build – a forráskódok fordítására és összeállítására szolgál.
- %install – ez a programok telepítésére szolgál. Felsorolja azokat a parancsokat, amelyek szükségesek ahhoz, hogy az eredményül kapott fájlt a build folyamatból a BUILDROOT könyvtárba másolják.
- %files – ez a szakasz felsorolja a csomag által biztosított fájlokat, amelyek telepítve lesznek a rendszerre.
- %changelog – tárolja az RPM előkészítésével kapcsolatos munkát, különösen akkor, ha az alap upstream forrás tetején vannak biztonsági és hibajavítások. A rendszer automatikusan generálja a hello.spec fájl létrehozásakor. A változásnapló adatait általában a
rpm --changelog -q
jelzi.
Most szerkessze a .spec
fájlt, és végezze el a módosításokat az ábra szerint.
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
Észre fogja venni, hogy néhány új paramétert használtunk a fenti fájlban, amelyeket nem magyaráztunk meg. Ezeket makróknak nevezzük, amelyek az RPM által meghatározott rendszerhívások létrehozására szolgálnak a csomagok telepítési útvonalának beállításához. Ezért általában jobb, ha ezeket az útvonalakat sem kódoljuk be a specifikációs fájlokban, hanem ugyanazokat a makrókat használjuk a konzisztencia érdekében.
A következők az RPM-felépítési és könyvtármakrók, valamint azok definíciói és alapértelmezett értékei:
- %{make_build} – a specifikációs fájl %build szakaszában használatos, a make parancsot futtatja.
- %{name} – a csomag vagy a könyvtár nevét határozza meg.
- %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, ugyanaz, mint a $BUILDROOT
- %{_infodir} – %{_datarootdir}/info, alapértelmezett: /usr/share/info
- %{_mandir} – %{_datarootdir}/man, alapértelmezett: /usr/share/man
- %{_bindir} – %{_exec_prefix}/bin, alapértelmezett: /usr/bin
Ne feledje, hogy ezeknek a makróknak az értékeit megtalálhatja a /usr/lib/rpm/platform/*/macros helyen, vagy tekintse meg a Packaging Guidelines: RPM Makrók című részt.
Az RPM-csomag felépítése
A forrás-, bináris és hibakereső csomagok összeállításához futtassa a következő rpmbuild parancsot.
rpmbuild -ba hello.spec
Az összeállítási folyamat után a forrás RPM-ek és a bináris RPM-ek létrejönnek a ../SRPMS/
és a ../RPMS/
könyvtárban. Az rpmlint programmal ellenőrizheti és megbizonyosodhat arról, hogy a létrehozott specifikációs fájl és RPM fájlok megfelelnek az RPM tervezési szabályainak:
rpmlint hello.spec ../SRPMS/hello* ../RPMS/*/hello*
Ha a fenti képernyőképen látható hibák vannak, javítsa ki azokat, mielőtt folytatná.
Végül, de nem utolsósorban, használja a álprogramot annak ellenőrzésére, hogy a csomagösszeállítás sikeres lesz-e a Fedora korlátozott összeállítási környezetben.
mock --verbose ../SRPMS/hello-2.10-1.fc29.src.rpm
További információkért tekintse meg a Fedora dokumentációt: RPM-csomagok létrehozása.
Ez minden! Ebben a cikkben elmagyaráztuk, hogyan fejlesztheti Fedora rendszerét egy egyszerű forrás- és bináris szoftvercsomag létrehozásához. Azt is megmutattuk, hogyan lehet létrehozni egy GUN Hello Word RPM csomagot. Használja az alábbi visszajelzési űrlapot, ha kérdése vagy megjegyzése van, forduljon hozzánk.