GNU/Linux >> Znalost Linux >  >> Linux

7 kroků k vytvoření balíčku RPM ze zdroje na CentOS / RedHat

Někdy můžete mít přístup ke zdrojovému kódu aplikace s otevřeným zdrojovým kódem, ale nemusíte mít k dispozici soubor RPM pro její instalaci do systému.

V takové situaci můžete buď zkompilovat zdrojový kód a nainstalovat aplikaci ze zdrojového kódu, nebo sami vytvořit soubor RPM ze zdrojového kódu a použít soubor RPM k instalaci aplikace.

Může také nastat situace, kdy budete chtít vytvořit vlastní balíček RPM pro aplikaci, kterou jste vyvinuli.

Tento tutoriál vysvětluje, jak sestavit balíček RPM ze zdrojového kódu.

Abyste mohli sestavit RPM, budete potřebovat zdrojový kód, což obvykle znamená komprimovaný soubor tar, který také obsahuje soubor SPEC.

Soubor SPEC obvykle obsahuje pokyny, jak sestavit RPM, jaké soubory jsou součástí balíčku a kam by měl být nainstalován.

RPM provádí během procesu sestavování následující úkoly.

  1. Provádí příkazy a makra uvedená v přípravné části souboru spec.
  2. Zkontroluje obsah seznamu souborů
  3. Provádí příkazy a makra v sekci sestavení souboru spec. V tomto kroku se také spouštějí makra ze seznamu souborů.
  4. Vytvoří binární soubor balíčku
  5. Vytvoří zdrojový soubor balíčku

Jakmile RPM provede výše uvedené kroky, vytvoří soubor binárního balíčku a soubor zdrojového balíčku.

Binární soubor balíčku obsahuje všechny zdrojové soubory spolu s dalšími informacemi pro instalaci nebo odinstalaci balíčku.

Obvykle je povolen se všemi možnostmi instalace balíčku, které jsou specifické pro platformu. Soubor binárního balíčku obsahuje kompletní aplikace nebo knihovny funkcí zkompilované pro konkrétní architekturu. Zdrojový balíček se obvykle skládá z původního komprimovaného souboru tar, souboru spec a záplat, které jsou nutné k vytvoření souboru binárního balíčku.

Podívejme se, jak vytvořit jednoduchý zdrojový balíček a balíčky BIN RPM pomocí souboru tar.

Pokud s balíčkem rpm začínáte, možná budete chtít nejprve porozumět tomu, jak používat příkaz rpm k instalaci, upgradu a odstranění balíčků na CentOS nebo RedHat.

1. Nainstalujte balíček rpm-build

Chcete-li sestavit soubor rpm na základě souboru spec, který jsme právě vytvořili, musíme použít příkaz rpmbuild.

Příkaz rpmbuild je součástí balíčku rpm-build. Nainstalujte jej podle obrázku níže.

# yum install rpm-build

rpm-build závisí na následujícím balíčku. Pokud je ještě nemáte nainstalované, yum za vás tyto závislosti automaticky nainstaluje.

elfutils-libelf
rpm
rpm-libs
rpm-python

2. RPM Build Directories

rpm-build automaticky vytvoří následující adresářové struktury, které budou použity během sestavení RPM.

# ls -lF /root/rpmbuild/
drwxr-xr-x. 2 root root 4096 Feb  4 12:21 BUILD/
drwxr-xr-x. 2 root root 4096 Feb  4 12:21 BUILDROOT/
drwxr-xr-x. 2 root root 4096 Feb  4 12:21 RPMS/
drwxr-xr-x. 2 root root 4096 Feb  4 12:21 SOURCES/
drwxr-xr-x. 2 root root 4096 Feb  4 12:21 SPECS/
drwxr-xr-x. 2 root root 4096 Feb  4 12:21 SRPMS/

Poznámka:Výše ​​uvedená adresářová struktura platí pro CentOS i RedHat při použití balíčku rpmbuild. Můžete také použít adresář /usr/src/redhat, ale během sestavování rpm musíte odpovídajícím způsobem změnit parametr topdir. Pokud to děláte na SuSE Enterprise Linux, použijte adresář /usr/src/packages.

Pokud chcete místo /root/rpmbuild použít svou vlastní adresářovou strukturu, můžete použít jednu z následujících možností:

  • Použijte možnost –buildroot a zadejte vlastní adresář během rpmbuild
  • Zadejte parametr topdir v souboru rpmrc nebo rpmmacros.

3. Stáhněte si zdrojový soubor Tar

Dále si stáhněte zdrojový soubor tar pro balíček, který chcete sestavit, a uložte jej do adresáře SOURCES.

Pro tento příklad jsem použil zdrojový kód open source aplikace icecase, což je serverový software pro streamování multimédií. Ale kroky jsou úplně stejné pro vytváření RPM pro jakoukoli jinou aplikaci. Stačí si stáhnout odpovídající zdrojový kód RPM, který se pokoušíte sestavit.

# cd /root/rpmbuild/SOURCES/

# wget http://downloads.xiph.org/releases/icecast/icecast-2.3.3.tar.gz

# ls -l
-rw-r--r--. 1 root root 1161774 Jun 11  2012 icecast-2.3.3.tar.gz

4. Vytvořte soubor SPEC

V tomto kroku nasměrujeme RPM do procesu sestavení vytvořením souboru spec. Soubor spec se obvykle skládá z následujících osmi různých částí:

  1. Preambule – Sekce preambule obsahuje informace o sestavovaném balíčku a definuje případné závislosti na balíčku. Obecně se preambule skládá z položek, po jedné na řádek, které začínají značkou následovanou dvojtečkou, a poté z některých informací.
  2. %prep – V této sekci připravujeme software pro proces budování. Všechna předchozí sestavení jsou během tohoto procesu odstraněna a zdrojový soubor (.tar) je rozbalen atd.
  3. Další klíčovou věcí je pochopit, že jsou k dispozici předdefinovaná makra pro provádění různých možností zkratek pro vytváření otáček za minutu. Tato makra možná používáte, když se pokoušíte vytvořit nějaké složité balíčky. V níže uvedeném příkladu jsem použil makro s názvem %setup, které odstraní všechna předchozí sestavení, rozbalí zdrojové soubory a změní vlastnictví souborů. K provedení této akce můžete také použít skripty sh v části %prep, ale makro %setup proces zjednodušuje použitím předdefinovaných skriptů sh.
  4. %description – část popisu obvykle obsahuje popis balíčku.
  5. %build – Toto je sekce, která je zodpovědná za provedení sestavení. Sekce %build je obvykle skript sh.
  6. %install – sekce % install se také spustí jako skript sh stejně jako %prep a %build. Toto je krok, který se používá pro instalaci.
  7. %files – Tato sekce obsahuje seznam souborů, které jsou součástí balíčku. Pokud soubory nejsou součástí sekce %files, pak nebudou v balíčku dostupné. Jsou vyžadovány úplné cesty a v této části můžete nastavit atributy a vlastnictví souborů.
  8. %clean – Tato část dává pokyn RPM k vyčištění všech souborů, které nejsou součástí běžné oblasti sestavení aplikace. Řekněme například:Pokud aplikace vytvoří dočasnou adresářovou strukturu v /tmp/ jako součást svého sestavení, nebude odstraněna. Přidáním skriptu sh do sekce %clean lze adresář po dokončení procesu sestavování odstranit.

Zde je soubor SPEC, který jsem vytvořil pro aplikaci icecast pro vytvoření souboru RPM.

# cat /root/rpmbuild/SPECS/icecast.spec
Name:           icecast
Version:        2.3.3
Release:        0
Summary:        Xiph Streaming media server that supports multiple formats.
Group:          Applications/Multimedia
License:        GPL
URL:            http://www.icecast.org/
Vendor:         Xiph.org Foundation [email protected]
Source:         http://downloads.us.xiph.org/releases/icecast/%{name}-%{version}.tar.gz
Prefix:         %{_prefix}
Packager: 	Karthik
BuildRoot:      %{_tmppath}/%{name}-root

%description
Icecast is a streaming media server which currently supports Ogg Vorbis
and MP3 audio streams. It can be used to create an Internet radio
station or a privately running jukebox and many things in between.
It is very versatile in that new formats can be added relatively
easily and supports open standards for commuincation and interaction.

%prep
%setup -q -n %{name}-%{version}

%build
CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{_prefix} --mandir=%{_mandir} --sysconfdir=/etc

make

%install
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT

make DESTDIR=$RPM_BUILD_ROOT install
rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/%{name}

%clean
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
%doc README AUTHORS COPYING NEWS TODO ChangeLog
%doc doc/*.html
%doc doc/*.jpg
%doc doc/*.css
%config(noreplace) /etc/%{name}.xml
%{_bindir}/icecast
%{_prefix}/share/icecast/*

%changelog

In this file, under % prep section you may noticed the macro “%setup -q -n %{name}-%{version}”. This macro executes the following command in the background.

cd /usr/src/redhat/BUILD
rm -rf icecast
gzip -dc /usr/src/redhat/SOURCES/icecast-2.3.3.tar.gz | tar -xvvf -
if [ $? -ne 0 ]; then
  exit $?
fi
cd icecast
cd /usr/src/redhat/BUILD/icecast
chown -R root.root .
chmod -R a+rX,g-w,o-w .

V sekci %build uvidíte CFLAGS s konfiguračními volbami, které definují volby, které lze použít během instalace RPM, a volbu prefix , povinný adresář, který má být přítomen pro instalaci, a adresář sysconfig, do kterého je třeba zkopírovat systémové soubory .

Pod tímto řádkem uvidíte nástroj make, který určí seznam souborů, které je třeba zkompilovat, a vhodně je zkompiluje.

V sekci % install se řádek pod %install, který říká „make install“, používá k převzetí binárních souborů zkompilovaných z předchozího kroku a k jejich instalaci nebo zkopírování do příslušných umístění, aby k nim byl přístup.

5. Vytvořte soubor RPM pomocí rpmbuild

Jakmile je soubor SPEC připraven, můžete začít vytvářet své otáčky za minutu pomocí příkazu rpm –b. Volba –b se používá k provedení všech fází procesu sestavení. Pokud během této fáze uvidíte nějaké chyby, musíte je vyřešit, než se znovu pokusíte. Chyby budou obvykle v závislosti na knihovně a můžete si ji stáhnout a nainstalovat podle potřeby.

# cd /root/rpmbuild/SPECS

# rpmbuild -ba icecast.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.Kohe4t
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd /root/rpmbuild/BUILD
+ rm -rf icecast-2.3.3
+ /usr/bin/gzip -dc /root/rpmbuild/SOURCES/icecast-2.3.3.tar.gz
+ /bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd icecast-2.3.3
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ exit 0
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.ynm7H7
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd icecast-2.3.3
+ CFLAGS='-O2 -g'
+ ./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking for gcc... gcc
..
..
..
Wrote: /root/rpmbuild/SRPMS/icecast-2.3.3-0.src.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/icecast-2.3.3-0.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.dzahrv
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd icecast-2.3.3
+ '[' /root/rpmbuild/BUILDROOT/icecast-2.3.3-0.x86_64 '!=' / ']'
+ rm -rf /root/rpmbuild/BUILDROOT/icecast-2.3.3-0.x86_64
+ exit 0

Poznámka:Pokud používáte SuSE Linux a rpmbuild není k dispozici, zkuste použít „rpm -ba“ k sestavení balíčku rpm.

Během výše uvedené instalace rpmbuild si můžete všimnout následujících chybových zpráv:

Chyba 1:Konfigurace XSLT nebyla nalezena

checking for xslt-config... no
configure: error: XSLT configuration could not be found
error: Bad exit status from /var/tmp/rpm-tmp.8J0ynG (%build)
RPM build errors:
    Bad exit status from /var/tmp/rpm-tmp.8J0ynG (%build)

Řešení 1:Nainstalujte libxstl-devel

Pro xslt-config musíte nainstalovat balíček libxstl-devel, jak je ukázáno níže.

yum install libxstl-devel

Tím se také nainstalují následující závislosti:

  • libgcrypt
  • libgcrypt-devel
  • libgpg-error-devel

Chyba 2:Chyba libvorbis

checking for libvorbis... configure: error: must have Ogg Vorbis v1.0 or above installed
error: Bad exit status from /var/tmp/rpm-tmp.m4Gk3f (%build)

Řešení 2:Nainstalujte libvorbis-devel

Pro Ogg Vorbis v1.0 nainstalujte balíček libvorbis-devel, jak je ukázáno níže:

yum install libvorbis-devel

Tím se také nainstalují následující závislosti:

  • libogg
  • libogg-devel
  • libvorbis

6. Ověřte zdrojové a binární soubory RPM

Jakmile je rpmbuild dokončeno, můžete ověřit, že zdrojové rpm a binární rpm jsou vytvořeny v níže uvedených adresářích.

# ls -l /root/rpmbuild/SRPMS/
-rw-r--r-- 1 root root 1162483 Aug 25 15:46 icecast-2.3.3-0.src.rpm

# ls -l /root/rpmbuild/RPMS/x86_64/
-rw-r--r--. 1 root root 349181 Feb  4 12:54 icecast-2.3.3-0.x86_64.rpm

7. Nainstalujte soubor RPM k ověření

Jako poslední krok můžete nainstalovat binární rpm, abyste ověřili, že se úspěšně nainstaluje a všechny závislosti jsou vyřešeny.

# rpm -ivvh /root/rpmbuild/RPMS/x86_64/icecast-2.3.3-0.x86_64.rpm
D: ============== /root/rpmbuild/RPMS/x86_64/icecast-2.3.3-0.x86_64.rpm
D: loading keyring from pubkeys in /var/lib/rpm/pubkeys/*.key
D: couldn't find any keys in /var/lib/rpm/pubkeys/*.key
D: loading keyring from rpmdb
D: opening  db environment /var/lib/rpm cdb:mpool:joinenv
D: opening  db index       /var/lib/rpm/Packages rdonly mode=0x0
D:  read h#     210 Header sanity check: OK
D: added key gpg-pubkey-c105b9de-4e0fd3a3 to keyring
D: Using legacy gpg-pubkey(s) from rpmdb
D: Expected size:       349181 = lead(96)+sigs(180)+pad(4)+data(348901)
D:   Actual size:       349181
D: ========== relocations
D:      added binary package [0]
D: found 0 source and 1 binary packages
D: ========== +++ icecast-2.3.3-0 x86_64/linux 0x2
..
..

Po výše uvedené instalaci můžete ověřit, že váš vlastní vytvořený soubor rpm byl úspěšně nainstalován, jak je uvedeno níže.

# rpm -qa icecast
icecast-2.3.3-0.x86_64

Linux
  1. Jak zobrazit seznam souborů nainstalovaných z RPM nebo DEB balíčku v Linuxu

  2. Jak zkompilovat Brotli ze zdroje na CentOS 7

  3. Jak zjistit, ke kterému balíčku patří spustitelný soubor nebo soubor v RedHat/CentOS/Fedora?

  1. Kdy byste měli kompilovat a instalovat ze zdroje?

  2. Jak nainstalovat Apache 2.4.2 ze zdroje na CentOS 6.2 s SSL

  3. Jak zjistit, který balíček rpm poskytuje konkrétní soubor nebo knihovnu v RHEL / CentOS

  1. Jak sestavit balíčky ze zdroje pomocí CheckInstall

  2. 4 kroky k vytvoření uživatelů Linuxu ze souboru csv pomocí Ansible

  3. Použití Jenkins BUILD NUMBER v souboru specifikace RPM