Jak vytvořit RPM z tar.gz nebo tar.bz2 ?

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Neděle Březen 17 15:32:48 CET 2002


On Fri, 15 Mar 2002 n_petr na seznam.cz wrote:

> Prosím, mohl byste mi někdo poradit, jak si vytvořím rpm balíček pro SuSE
> 7.2, pokud si stáhnu nějaký tar.gz nebo tar.bz2 soubor ?

Jak uz bylo receno, nejlepsi je asi zkusit nastudovat Maximum RPM a
podobnou literaturu, nicmene pro jakousi zakladni orientaci pridam par
vlastnich vysvetleni:

> Nepochopil jsem na co je ten "Patch:" a "BuildRoot:" v hlavičce a pak moc
> nerozumím (spíš vůbec) těmto řádkům

Radky Patch vyjmenovavaji popis patchu, ktere budou na zdrojove kody
aplikovany (viz %prep). Radek BuildRoot urcuje adresar, do ktereho budou
vysledne soubory ukladany (napr. s BuildRoot: /tmp/blah-root bude misto
/usr/bin/blah pracovat s /tmp/blah-root/usr/bin/blah, takze behem vyroby 
baliku nezasvini systemove adresare).

> %prep
> %setup -q
> %patch -p1 -b .buildroot

Faze %prep popisuje prikazy, ktere pripravuji zdrojaky ke kompilaci,
tj. predevsim, aby se rozbalily baliky obsahujici zdrojaky (%setup)
a aplikovaly se patche (%patch).

> %build
> make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"

Faze %build provadi kompilaci. V tomto pripade se pouze zavola make.
V $RPM_OPT_FLAGS jsou optimalizacni a jine parametry pro gcc ziskane
z konfigurace rpm a informace o tom, pro kterou architekturu se ma
kompilovat. Proc se to do make predava timto zpusobem, to nevim, mozna
aplikovany patch nejak upravi Makefile.

> %install
> rm -rf $RPM_BUILD_ROOT
> mkdir -p $RPM_BUILD_ROOT/usr/bin
> mkdir -p $RPM_BUILD_ROOT/usr/man/man1
> install -s -m 755 eject $RPM_BUILD_ROOT/usr/bin/eject
> install -m 644 eject.1 $RPM_BUILD_ROOT/usr/man/man1/eject.1

Faze %install pripravi hierarchii adresaru a souboru tak, jak bude ve
vyslednem baliku (balicich). Protoze je pouzit BuildRoot, tak se to necpe
rovnou do systemovych adresaru, ale pod $RPM_BUILD_ROOT (v soucasne dobe
je $RPM_BUILD_ROOT uz obsoletni ekvivalent makra %buildroot).

> %clean
> rm -rf $RPM_BUILD_ROOT

Faze %clean uklidi neporadek, ktery napachala faze %install.

> %files
> %defattr(-,root,root)
> %doc README TODO COPYING ChangeLog
> /usr/bin/eject
> /usr/man/man1/eject.1

Ve %files je seznam souboru obsazenych v baliku a jejich
atributy (napr. %doc oznacuje soubory s dokumentaci, ktere budou
v /usr/doc/jmeno-verze, %defattr() rika, ze vsechny soubory budou mit
vlastnika a skupinu root, ale ponechaji si vsechno ostatni, tak jak
to mely po %install).

> Jak si tedy vytvořím rpm balíček "alsa-driver-0.9.0beta12.rpm", abych ho
> mohl kdykoliv nainstalovat nebo odinstalovat pomocí Yast2 v KDE 2.1 ?

A ted prijde pointa: vzhledem k tomu, ze ALSA manipuluje s jadrem a ze
vyrobit z nej samostatny balik asi nebude trivialni, tak bych podobne
pokusy cloveku, co si neni moc jisty v kramflecich, nedoporucoval.
Prinejmensim by bylo lepsi, kdybyste misto psani spec z nuly zkusil najit
nejaky uz existujici (pokud mozno od nekoho, kdo veci opravdu rozumi).

--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux