Weboldal keresés

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:

  1. BUILD – különféle %buildroot könyvtárakat tárol a csomagok összeállításakor.
  2. RPMS – bináris RPM-eket tartalmaz az Architecture alkönyvtáraiban.
  3. 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.
  4. SPECS – a SPEC fájlokat tárolja.
  5. 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.