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:
- BUILD – ukládá různé adresáře %buildroot při sestavování balíčků.
- RPMS – bude obsahovat binární RPM v podadresářích Architecture.
- ZDROJE – ukládá komprimované zdrojové archivy a případné záplaty, zde je bude hledat příkaz rpmbuild.
- SPECS – ukládá soubory SPEC.
- 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.