Jak buildovat RPM balíčky (1)

RPM je zkratka pro Red Hat Package Manager, což je systém pro práci se softwarovými balíčky. Díky těmto softwarovým balíčkům a díky nástroji, který je spravuje (obvykle má každá distribuce používající RPM balíčky svůj vlastní nástroj pro obsluhu těchto balíčků) můžeme v sytému (Linuxové distribuci) udržet poměrně velký pořádek.

Je dobré se naučit zásadu systém (Linuxovou distribuci používající RPM balíčky) takzvaně "nešpinit" jiným typem balíčků než jsou právě RPM balíčky a navíc určené právě a pouze pro naši distribuci, protože RPM balíčkovacích distribucí dnes existuje poměrně velké množství.

I přesto, že existuje pro každou distribuci (používající RPM balíčky) několik tisíc RPM balíčků, stále se najde software/program, který máme v oblibě a pro něhož nemůžeme najít adekvátní RPM balíček. Následující návod je určen právě pro tyto situace. Ano, rychlá kompilace pomocí ./configure && make && make install nebo použití programu checkinstall je také řešením, ale ne zrovna tím nejsystémovějším.

K čemu je dobré si buildovat vlastní balíčky?

  • při správě více počítačů si tímto zcela jistě ušetříme spoustu času
  • updaty na novější verze programů budou poměrně snadné
  • námi vybuildované balíčky můžeme nabídnout dalším lidem a ušetřit jim práci
  • při buildování balíčků se něco naučíme a lépe pochopíme některé souvislosti :-)

Výroba RPM balíčku

Pokud chceme ze zdrojových kódů vybuildovat RPM balíček, tak budeme pořebovat tzv. spec soubor ve kterém je (kromě dalších informativních částí) uvedeno jak dané zdrojové kódy programu přeložit do binární podoby (tedy obvykle pomocí již výše zmiňované trojkombinace ./configure && make && make install) a samozřejmě budeme ještě potřebovat překladač a potřebné knihovny (devel balíčky) a hlavičkové soubory pro kompilaci daného programu.

Nastavení buildovacího prostředí

Je dobrým zvykem buildovat balíčky jako normální uživatel a nikoliv jako uživatel root. Proto si nejdříve budeme muset vytvořit pár adresářů ve kterých budeme naši výrobu balíčků provádět.

~/.rpmmacros:

%packager      Ondrej 'o.k' Krejcik
%_topdir       /home/ondra/rpm

RPM bude při buildování hledat minimálně tyto adresáře:

%{_topdir}/BUILD
%{_topdir}/RPMS
%{_topdir}/RPMS/i386
%{_topdir}/SOURCES
%{_topdir}/SPECS
%{_topdir}/SRPMS

a proto je musíme vytvořit:

mkdir -p /home/ondra/rpm/{BUILD,RPMS/i386,SOURCES,SPECS,SRPMS}

Případně vytvoříme v adresáři RPMS i další podadresáře pro dané architektury pro které budeme buildovat balíčky (například x86_64).

Spec soubor

Jako příklad pro vytvoření RPM balíčku použiji program, který se jmenuje conky (protože jsem pro něj nikde nenašel balíček pro distribuci CentOS) a jehož zdrojové kódy lze stáhnout z adresy http://conky.sourceforge.net/.

Spec soubor pro program conky by mohl vypadat následovně:

Summary: A lightweight system monitor
Name: conky
Version: 1.4.2
Release: 1
License: X11/MIT
Group: Applications/System
Source0: http://heanet.dl.sourceforge.net/sourceforge/conky/%{name}-%{version}.tar.gz
URL: http://conky.sf.net 
Vendor: The conky development team
BuildRoot:   %{_tmppath}/%{name}-%{version}-build

%description
Conky is an advanced, highly configurable system monitor for X.

###############################################################

%prep
%setup -q

%build
./configure
make

%install
%makeinstall

%clean
rm -rf %{buildroot}

%files
%defattr(-,root,root)
%{_prefix}
%doc COPYING AUTHORS README NEWS TODO ChangeLog INSTALL 

%changelog -n %{name}
* Wed Sep  6 2006 - o.k.
- Initial RPM release for CentOS 4.4

Tento soubor uložíme do adresáře /home/ondra/rpm/SPECS a nazveme jej conky.spec.

Do adresáře /home/ondra/rpm/SOURCES uložíme zdrojové kódy námi překládaného programu, tedy například soubor conky-1.4.2.tar.gz. Tímto máme vše připraveno a můžeme přejít k vlastnímu vytvoření balíčku.

Vlastní buildování

Vytvoření balíčku (jak binárního, tak zdrojového) se provádí pomocí příkazu rpmbuild (je součástí balíčku rpm-build) s následujícími parametry:

rpmbuild -ba ~/rpm/SPECS/conky.spec

Výsledek

Zdrojový balíček nalezneme v adresáři /home/ondra/rpm/SRPMS/conky-1.4.2-1.src.rpm a vlastní binární balíček nalezneme v adresáři /home/ondra/rpm/RPMS/i386/conky-1.4.2-1.i386.rpm.

Daný balíček poté již můžeme nainstalovat (jako root) klasicky pomocí příkazu:

rpm -Uvh /home/ondra/rpm/RPMS/i386/conky-1.4.2-1.i386.rpm

Závěr

Toto byl jen základní příklad buildování balíčku, v dalších částech si rozebereme některé důležité věci jako jsou GPG podpisy balíčků, rozebereme si podrobněji spec soubor, patche, pre a postinstalační skripty a další věci.

Naposledy změněno: 29.9.2006 9:55