Vyhledávání na webu

Jak vytvořit GNU Hello World RPM balíček ve Fedoře


RPM (rekurzivní zkratka pro RPM Package Manager) je bezplatný a open-source systém pro správu balíčků pro Linux. Ačkoli byl původně vytvořen pro použití v Red Hat Linux, nyní se používá v mnoha distribucích Linuxu, jako jsou CentOS, Fedora a OpenSuse. Důležité je, že název RPM odkazuje na program správce balíčků a .rpm je formát souboru.

V tomto článku vysvětlíme psaní souborů RPM a ukážeme, jak snadno vytvořit jednoduchý zdrojový a binární softwarový balík, například GNU “Hello World” balíček RPM v Fedora Linux silná> distribuce. Předpokládáme, že máte nějaké základní znalosti o předem připravených balíčcích RPM a procesu vytváření bezplatného softwaru s otevřeným zdrojovým kódem.

Nainstalujte vývojové nástroje ve Fedoře

Začněme nastavením vývojového prostředí v Fedora Linux spuštěním následujícího příkazu k instalaci nezbytných nástrojů pro vytváření RPM.

sudo dnf install fedora-packager @development-tools

Dále přidejte svůj neprivilegovaný účet do skupiny „mock“ následovně (nahraďte tecmint svým skutečným uživatelským jménem). To vám umožní otestovat proceduru sestavení v čistém chrootu.

sudo usermod -a -G mock tecmint

Nyní vytvořte sestavení RPM v adresáři ~/rpmbuild a ověřte sestavení pomocí následujících příkazů. Zobrazí se seznam podadresářů, který obsahuje zdrojový kód projektu, konfigurační soubory RPM a binární balíčky.

rpmdev-setuptree
tree ~/rpmbuild/

K čemu jsou jednotlivé adresáře určeny:

  1. BUILD – ukládá různé adresáře %buildroot při sestavování balíčků.
  2. RPMS – bude obsahovat binární RPM v podadresářích Architecture.
  3. ZDROJE – ukládá komprimované zdrojové archivy a případné záplaty, zde je bude hledat příkaz rpmbuild.
  4. SPECS – ukládá soubory SPEC.
  5. SRPMS – ukládá zdrojové RPM místo binárních RPM.

Budování RPM „Ahoj světe“.

V tomto kroku si musíte stáhnout zdrojový kód (známý také jako "upstream" zdroj) projektu Hello World, který balíme, do ~/rpmbuild/SOURCE adresář s následujícím příkazem wget.

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

Dále nakonfigurujeme balíček RPM pomocí souboru .spec (v tomto případě jej pojmenujme hello.spec) v souboru ~/rpmbuild/SPECS pomocí programu rpmdev-newspec.

cd ~/rpmbuild/SPECS
rpmdev-newspec hello
ls

Poté pomocí svého oblíbeného editoru otevřete soubor hello.spec.

vim hello.spec

Výchozí šablona by měla vypadat takto:

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

Pojďme si stručně vysvětlit výchozí parametry v souboru .spec:

  • Název – slouží k nastavení názvu balíčku.
  • Verze – měla by zrcadlit upstream.
  • Release – čísla, se kterými pracujete v rámci Fedory.
  • Shrnutí – je stručný jednořádkový popis balíčku, první písmeno by mělo být velké, aby se předešlo stížnostem na rpmlint.
  • Licence – zkontrolujte stav licence softwaru kontrolou zdrojových souborů a/nebo jejich LICENČNÍCH souborů a/nebo rozhovorem s autory.
  • URL – určuje domovskou stránku softwarového balíčku.
  • Source0 – určuje zdrojové soubory. Může to být přímá adresa URL nebo cesta ke komprimovanému zdrojovému kódu softwaru.
  • BuildRequires – určuje závislosti potřebné k sestavení softwaru.
  • Vyžaduje – určuje závislosti potřebné ke spuštění softwaru.
  • %prep – používá se k vytvoření prostředí pro sestavení rpm balíčku.
  • %build – používá se ke kompilaci a sestavení zdrojových kódů.
  • %install – používá se k instalaci programů. Obsahuje seznam příkazů potřebných ke zkopírování výsledného souboru z procesu sestavení do adresáře BUILDROOT.
  • %files – tato sekce obsahuje seznam souborů poskytovaných balíčkem, který bude nainstalován do systému.
  • %changelog – měl by ukládat práci na přípravě RPM, zvláště pokud jsou nad základním upstreamovým zdrojem zahrnuty opravy zabezpečení a chyb. Generuje se automaticky při vytváření souboru hello.spec. Data protokolu změn se obvykle zobrazují pomocí rpm --changelog -q .

Nyní upravte svůj soubor .spec a proveďte změny podle obrázku.

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

Všimnete si, že jsme ve výše uvedeném souboru použili některé nové parametry, které nebyly vysvětleny. Tyto se nazývají makra a používají se k vytváření systémových volání definovaných pomocí RPM k nastavení instalačních cest pro balíčky. Proto je obvykle vhodnější tyto cesty nekódovat napevno ani v souborech specifikací, ale pro konzistenci použít stejná makra.

Následují makra sestavení RPM a adresáře spolu s jejich definicemi a výchozími hodnotami:

  • %{make_build} – používá se v sekci %build souboru spec, spouští příkaz make.
  • %{name} – definuje název balíčku nebo adresáře.
  • %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, stejné jako $BUILDROOT
  • %{_infodir} – %{_datarootdir}/info, výchozí: /usr/share/info
  • %{_mandir} – %{_datarootdir}/man, výchozí: /usr/share/man
  • %{_bindir} – %{_exec_prefix}/bin, výchozí: /usr/bin

Všimněte si, že hodnoty pro tato makra můžete najít v /usr/lib/rpm/platform/*/macros nebo si je prostudujte v Packaging Guidelines:RPM Macros.

Sestavení balíčku RPM

Chcete-li sestavit zdrojové, binární a ladicí balíčky, spusťte následující příkaz rpmbuild.

rpmbuild -ba hello.spec

Po procesu sestavení budou zdrojové RPM a binární RPM vytvořeny v adresářích ../SRPMS/ a ../RPMS/. Pomocí programu rpmlint můžete zkontrolovat a zajistit, že vytvořený soubor spec a soubory RPM odpovídají pravidlům návrhu RPM:

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

Pokud se vyskytnou nějaké chyby, jak je znázorněno na výše uvedeném snímku obrazovky, opravte je, než budete moci pokračovat.

V neposlední řadě použijte mock program k ověření, že sestavení balíčku bude úspěšné v prostředí omezeného sestavení Fedory.

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

Další informace najdete v dokumentaci Fedory: Vytváření RPM balíčků.

To je vše! V tomto článku jsme vysvětlili, jak vylepšit váš systém Fedora, abyste vytvořili jednoduchý zdrojový a binární softwarový balík. Také jsme si ukázali, jak vytvořit balíček GUN Hello Word RPM. Pokud máte nějaké dotazy nebo připomínky, použijte níže uvedený formulář zpětné vazby.