Uživatelské nástroje

Nástroje pro tento web


packaging

Toto je starší verze dokumentu!


Tvorba RPM/DEB balíčků

RPM

  • je potřeba vytvořit .spec soubor
  • je potřeba spustit rpmbuild a mít připravené prostředí
  • úplně základní informace zde
  • rpmbuild potřebuje buildovací prostředí (většinou v cestě /usr/src/redhat, nebo nekdy ~/rpmbuild)
    • SPECS - obsahuje spec-soubory, které řídí vlastní sestavování RPM balíku.
    • SOURCES - zde jsou zdrojové soubory, ze kterých se balík vytváří (zpravidla tar.gz)
    • BUILD - do tohoto adresáře se rozbalí zdrojové soubory a probíhá zde kompilace.
    • RPMS/architektura - sem se uloží výsledné RPM soubory.
    • SRPMS - zde budou výsledné zdrojové RPM soubory.
  • prostředí lze předefinovat pomocí proměných například v konfiguračním souboru
$ cat ~/.rpmmacros
%_topdir /home/jamatos/
%_tmppath /tmp/rpmbuild
%_builddir %{_tmppath}

%_rpmtopdir %{_topdir}/build/%{name}
%_sourcedir %{_rpmtopdir}
%_specdir %{_rpmtopdir}
%_rpmdir %{_rpmtopdir}
%_srcrpmdir %{_rpmtopdir}

Příklad "rychle na prasáka"

  • mám složku se zdrojáky s fungujícím ./configure + make
  • chci udělat jednou jeden binární balíček
  • jako uživatel mám omezené oprávnění, nemůžu zapisovat do /usr/src/redhat
  • vytvořím .spec soubor
Summary: Balicek na rychlo
Name: balicek-prvni
Version: 1.0
Release: 0
Source: none
Copyright: GPL
Group: Utilities/System

%description
Tohle je muj balicek

%prep

%build
%configure
make OPTIM="$RPM_OPT_FLAGS"

%install
%makeinstall PREFIX=$RPM_BUILD_ROOT install

%files
%{_bindir}
%{_datadir}
  • do sekce files je potřeba vypsat všechny soubory, které se přidaly voláním make install. Lze použít uvedená makra
  • spuštění tvorby baličku
BASEDIR=`pwd`

mkdir -p build/{root,BUILD}
cp -ra projekt/* build/BUILD/
chmod +x build/BUILD/configure
rpmbuild --buildroot=$(BASEDIR)/build/root --define="_builddir $(BASEDIR)/build/BUILD" --define="_rpmdir $(BASEDIR)/build/" -bb balicek-prvni.spec
  • výsledné rpm najdu ve složce build

Příklad "na slušňačku"

  • příklad jednoduchého spec
Summary: Bblablablabla
Name: balicek-prvni
Version: 1.0
Release: 0
Source: projekt-src.tar.gz
Copyright: GPL
Group: Utilities/System

%description
Tohle je muj balicek

%prep
%setup

%build
make OPTIM="$RPM_OPT_FLAGS"

%install
make PREFIX=$RPM_BUILD_ROOT install

%files
%{_bindir}
%{_datadir}
  • zapojení do Makefile
# pripravi adresarovy strom a nastaveni pro RPM
rpmbuildenv:
	mkdir -p ~/rpmbuild/{BUILD,RPMS/x86_64,SOURCES,SPECS,SRPMS}
	(echo "%_topdir ~/rpmbuild";echo "%_prefix /usr/local/") >> ~/.rpmmacros 

rpm:
	cp -ra zdrojaky zdrojaky-tmp
	chmod +x zdrojaky-tmp/configure
# odstraneni info o svn, pokud tam je
	find zdrojaky-tmp -name '.svn'|xargs rm -rf
	tar czf zdrojaky-tmp.tgz zdrojaky-tmp
# pokud je lokalni RPM build prostredi tak do nej supnu balicky a spec file (dodelat)
	[ -d ~/rpmbuild/SOURCES ] && cp -f zdrojaky-tmp.tgz ~/rpmbuild/SOURCES

all: rpmbuildenv rpm

jak probiha upgrade

Hence, the order of operations during an upgrade is:

  • Run the %pre section of the RPM being installed.
  • Install the files that the RPM provides.
  • Run the %post section of the RPM.
  • Run the %preun of the old package.
  • Delete any old files not overwritten by the newer version. (This step deletes files that the new package does not require.)
  • Run the %postun hook of the old package.

A taky pozor na instalaci vice balicku najednou, chova se to trochu jinak. Hromadny upgrade (rpm -Uvh *) nejspis funguje takto:

  • a) u vsech balicku spusti pre-install
  • b) u vsech balicku provede install
  • c) u vsech balicku spusti post-install
  • *) pak se teprve dela pre/post uinstall

Pořadí, ve kterém se bude spouštět pre-install není asi dopředu známo. Pokud jsou balíčky závislé na sobě, je dobré využít trigger skripty (%triggerin, %triggerun, %triggerpostun)

malé velké rady

  • post skripty nesmí failovat!! balíček je už totiž nainstalovaný. Pokud balíček přeci jen skončí s fail, zůstavají v systému dvě verze balíčku. Musí se to opravit ručně.
  • navratová hodnota posledního příkazu v post/pre skriptech se bere jako návratová hodnota celého skriptu. Nejlepší je tam psát exit 0 jako pojistku

distribuce dočasných install souborů

  • Narazil jsem na problém. Mám rpm balíček pro aplikaci, která potřebuje v databázi určitá schémata. Mám skript a soubor s sql importem. Jak to správně zabalíčkovat? Skript i sql soubory potřebuji jen pro instalaci, pak už ne.
  • RPM na tento problém nemá ideální řešení. Možnosti jsou:
    1. vložit skript a sql přímo do .spec souboru (třeba do %pre). Velikost spec souboru je limitovaná!! Navíc se ukládá do rpm databáze, takže to u větších skriptů/sql není ideální
    2. při buildu balíčku naimportovat sql do databáze a distribuovat pak binární soubor databáze. Tohle řešení lze ale použít jen pro čistý install. Upgrade se pak řeší komplikovaně.
    3. dedikovat na cílovém stroji adresář pro skripty/sql. Soubory tam normálně nahrát přes %files. Soubory se nesmí smazat, aby nevzniknul problém. Tohle je asi nejlepší varianta.
    4. označit dočasné soubory ve %files jako %config(missingok). Po použití je lze smazat. Není to ale úplně správné řešení, protože se config se správně používá jen pro konfigurační soubory

zdroje:

packaging.1484648249.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki