Portál AbcLinuxu, 4. června 2024 09:53

pbuilder – balíčkování pro Debian a Ubuntu

18. 8. 2009 | Daniel Kolesa
Články - pbuilder – balíčkování pro Debian a Ubuntu  

Pbuilder (Personal Builder) je sada skriptů určená pro balíčkování. Umožňuje balíčkovat pro různé distribuce a architektury bez nutnosti instalace jiného systému, využívá tzv. chrooty. Hodí se třeba pro backporty do starších verzí distribuce, balíčkování pro repozitáře (sestavení balíků v chrootu je vždy stejné), sám si instaluje všechny závislosti. Pro ušetření místa se ke kompresi chrootu používá formát tar.gz.

Obsah

Co budeme potřebovat?

link
  1. PC/Mac/cokoliv_kde_běží_Linux s Debianem nebo Ubuntu.
  2. Znalost Bash.
  3. Pokud nechcete, aby kompilace trvala věky, dostatečně výkonný CPU.

Začínáme

link

Nejdříve si budeme muset pbuilder nainstalovat, udělejte to jakýmkoliv způsobem; apt-get, Aptitude, Synaptic, …

Doporučuji nainstalovat také balíky dpkg-dev, devscripts, fakeroot, cdebootstrap a je-li to možné, také sudo, pokud chybí.

Po instalaci se vám v /usr/bin objeví pár binárek, v /usr/lib/pbuilder několik scriptů (není třeba je upravovat) a také výchozí konfigurační soubor /etc/pbuilderrc. Ten obsahuje pouze jeden řádek, a to mirror Debianu. Většinou se pro normální využití nehodí, a proto si za chvíli vytvoříme vlastní konfigurační soubor.

Konfigurujeme

link

Váš uživatelský konfigurační soubor pbuilderu se nachází ve vaší domovské složce, jmenuje se .pbuilderrc a vypadá třeba takhle.

#!/bin/bash

# Kódová jména větví Debianu
UNSTABLE_CODENAME="sid"
TESTING_CODENAME="squeeze"
STABLE_CODENAME="lenny"

# Dostupná vydání Debianu
DEBIAN_SUITES=($UNSTABLE_CODENAME $TESTING_CODENAME $STABLE_CODENAME
    "unstable" "testing" "stable")

# Dostupná vydání Ubuntu
UBUNTU_SUITES=("jaunty" "intrepid" "hardy")

# Servery, ze kterých stahovat
DEBIAN_MIRROR="ftp.debian.org"
UBUNTU_MIRROR="archive.ubuntu.com"
UBUNTU_PORTS_MIRROR="ports.ubuntu.com"

# Nastavit architekturu, pokud nezadána
: ${ARCH:="$(dpkg --print-architecture)"}

NAME="$DIST"
# pokud je architektura nastavena, použít jiný název tarballu
if [ -n "${ARCH}" ]; then
    NAME="$DIST-$ARCH"
    DEBOOTSTRAPOPTS=("--arch" "$ARCH" "${DEBOOTSTRAPOPTS[@]}")
fi

DISTRIBUTION="$DIST"
BASETGZ="/var/cache/pbuilder/$NAME-base.tgz"
BUILDRESULT="/var/cache/pbuilder/$NAME/result/"
APTCACHE="/var/cache/pbuilder/$NAME/aptcache/"
BUILDPLACE="/var/cache/pbuilder/build/"

if $(echo ${DEBIAN_SUITES[@]} | grep -q "$DIST"); then
    # Debian
    MIRRORSITE="http://$DEBIAN_MIRROR/debian/"
    COMPONENTS="main contrib non-free"
elif $(echo ${UBUNTU_SUITES[@]} | grep -q "$DIST"); then
    # Ubuntu
    MIRRORSITE="http://$UBUNTU_MIRROR/ubuntu/"
    COMPONENTS="main restricted universe multiverse"
else
    echo "Neznámá distribuce: $DIST"
    exit 1
fi

# pro architektury armel a lpia použít ubuntu-ports, když se kompiluje pro ubuntu
case $ARCH in
    armel|lpia)
        if $(echo ${UBUNTU_SUITES[@]} | grep -q "$DIST"); then
                MIRRORSITE="http://$UBUNTU_PORTS_MIRROR/ubuntu-ports/"
        fi
    ;;
esac

# když se kompiluje více věcí, které na sobě závisí, je dobré mít kompilační skript,
# který po každé kompilaci vytvoří lokální repozitář, a ten pak nastavit jako OTHERMIRROR
# (a také ve skriptu pohlídat, aby se rozbalovalo jen jednou
#  a komprimovalo také jednou, před a po kompilaci všeho)
OTHERMIRROR="deb file:///var/cache/pbuilder/$NAME/result/ /"

if $(echo ${UBUNTU_SUITES[@]} | grep -q "$DIST"); then
    case $ARCH in
        armel|lpia)
            if [ -z "$OTHERMIRROR" ]; then
                OTHERMIRROR="deb http://$UBUNTU_PORTS_MIRROR/ubuntu-ports/ $DIST-security $COMPONENTS | deb http://$UBUNTU_PORTS_MIRROR/ubuntu-ports/ $DIST-updates $COMPONENTS"
            else
                OTHERMIRROR="$OTHERMIRROR | deb http://$UBUNTU_PORTS_MIRROR/ubuntu-ports/ $DIST-security $COMPONENTS | deb http://$UBUNTU_PORTS_MIRROR/ubuntu-ports/ $DIST-updates $COMPONENTS"
            fi
        ;;
        *)
            if [ -z "$OTHERMIRROR" ]; then
                OTHERMIRROR="deb http://$UBUNTU_MIRROR/ubuntu/ $DIST-security $COMPONENTS | deb http://$UBUNTU_MIRROR/ubuntu/ $DIST-updates $COMPONENTS"
            else
                OTHERMIRROR="$OTHERMIRROR | deb http://$UBUNTU_MIRROR/ubuntu/ $DIST-security $COMPONENTS | deb http://$UBUNTU_MIRROR/ubuntu/ $DIST-updates $COMPONENTS"
            fi
        ;;
    esac
fi

# použít ccache pro rychlejší opakované kompilace
sudo mkdir -p $PBUILDERPLACE/ccache
sudo chmod a+w $PBUILDERPLACE/ccache
export CCACHE_DIR="$PBUILDERPLACE/ccache"
export PATH="/usr/lib/ccache:${PATH}"
BINDMOUNTS="${CCACHE_DIR} $PBUILDERPLACE/$NAME/result"

# extra balíky v chrootu
EXTRAPACKAGES="ccache"

Jak vidíte, je to vcelku obyčejný bashovský script. Všechny proměnné můžete ovlivnit při spouštění pbuilderu – např.:

sudo DIST=hardy pbuilder create

Nyní vám popíšu proměnné, které pbuilder využívá (všechny se dají nahradit parametry pbuilderu), ostatní už si snad napíšete sami, když byla v úvodu požadována znalost bashe ;-)

DISTRIBUTION
Název distribuce, pro kterou se bude kompilovat.
MIRRORSITE
Mirror distribuce, který se zapíše do chrootového sources.list a ze kterého se bude chroot stahovat.
COMPONENTS
Komponenty hlavního repozitáře distribuce použité v chrootovém sources.list.
OTHERMIRROR
Ostatní repozitáře, které chcete v chrootu v sources.list; většinou se používá váš lokální repozitář. Můžete je oddělit znakem | (viz .pbuilderrc).
BINDMOUNTS
Cesty ze základního systému, které se připojí pomocí parametru --bind do chrootu po rozbalení.
BASETGZ
Cesta k chroot tarballu (při tvorbě a rozbalování).
BUILDRESULT
Cesta, kam přesouvat binární balíky a zdrojové balíky.
APTCACHE
Cesta, kam ukládat stažené balíčky pro chroot.
BUILDPLACE
Adresář s rozbalenými chrooty.

Vytváříme chrooty

link

Když už máme hotový konfigurační soubor, můžeme si vytvořit první chroot. Spusťte tedy:

sudo DIST=squeeze pbuilder create

Pak čekejte, v závislosti na vašem internetovém připojení to bude chvilka, nebo věčnost. Pokud je nutné chroot aktualizovat, nahraďte create slovem update.

Kompilujeme

link

Teď už můžeme balíček zkompilovat. Pokud máte zdrojový balík, spusťte prostě:

sudo DIST=squeeze pbuilder build
*.dsc

a pokud ne, můžete použít pdebuild v adresáři se zdrojáky – musí obsahovat adresář debian.

sudo DIST=squeeze pdebuild

Užitečné parametry pbuilderu

link

Programu můžete zadat různé parametry, ty se zadávají na konec příkazu, ale při parametru build před název dsc souboru. Zde uvedu pár základních, o dalších se můžete dočíst v manuálové stránce.

Akce

link
--create | create
Vytvořit chroot.
--update | update
Aktualizovat chroot.
--build | build
Zkompilovat balíček.
--clean | clean
Vyčistí BUILDPLACE a APTCACHE
--login | login
Zachrootuje se do BASETGZ.
--execute | execute
Spustí něco v BASETGZ.
--dumpconfig | dumpconfig
Zaznamená konfigurační informace, pro debugging.
--debuild | debuild
Stejné jako pdebuild.

Parametry

link
--othermirror "deb something | deb somethingelse"
Viz OTHERMIRROR, ale měl by končit znakem |, pokud je specifikovaný jako parametr.
--override-config
Při upgradu chrootu dělá i apt-get update. Volby --distribution, --components, --mirror--othermirror jsou platné, jen když je --override-config povoleno.
--configfile SOUBOR
Vlastní cesta ke konfiguráku pbuilderu.
--debbuildopts "-volba -volba2"
Parametry předané dpkg-buildpackage programu.
--logfile SOUBOR
Pokud chcete zaznamenávat výstup do souboru.
--debootstrapopts --p1 --p2 --p3
Parametry debootstrapu.
--debootstrap debootstrap | cdebootstrap
Výběr, jaký debootstrap se bude používat.
--save-after-login | --save-after-exec
Při login nebo execute akcích zaznamenat stav chrootu.
--autocleanaptcache
Automaticky vyčistit apt cache.
--removepackages "balíky"
Balíčky k odstranění z chrootu při tvorbě.
--extrapackages "balíky"
Balíčky k instalaci do chrootu při tvorbě – funguje i při update, když je --override-config zapnuto.
--no-targz
Nebude se rozbalovat chroot a použije se --buildplace.

Závěr

link

Tento návod byl určen jen jako úvod do práce s pbuilderem. Dále doporučuji pročíst dokumenty uvedené pod článkem jako Odkazy a zdroje.

Související články

Seriál: Balíčky pro Debian
Na co se často ptáme: Balíčkovací systémy
Seriál: Instalace softwaru v Linuxu
Seriál: Gentoo ebuild
Seriál: Rukověť baliče RPM
Seriál: Balíčkovací systém Arch Linuxu
Smart Package Manager - instalujeme chytře
Zdroje balíčkov pre Ubuntu
Balíčkovací systém Mandrake Linuxu
Balíčkovací systém Gentoo Linuxu

Odkazy a zdroje

Ubuntu Wiki: PbuilderHowto
pbuilder User's Manual
Můj skript pro balení E17
Pbuilder konfigurační soubor určený ke spolupráci se skriptem

Další články z této rubriky

VDR a DVB-T2, část 2.
VDR a DVB-T2, část 1.
Šifrovaný Proxmox VE 6: ZFS, LUKS, systemd_boot a Dropbear
MapTiler – proměňte obrázek v zoomovatelnou mapu
Syncthing

Diskuse k tomuto článku

Jakub Lucký avatar 18.8.2009 00:25 Jakub Lucký | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: pbuilder – balíčkování pro Debian a Ubuntu
Odpovědět | Sbalit | Link | Blokovat | Admin
--debuild | debuild Stejné jako pdebuild.
Ale nikde není uvedené, co dělá pdebuild ;)

Jinak zajímavý článek
If you understand, things are just as they are; if you do not understand, things are just as they are.
18.8.2009 07:12 Bednič
Rozbalit Rozbalit vše Re: pbuilder – balíčkování pro Debian a Ubuntu
Odpovědět | Sbalit | Link | Blokovat | Admin

Čítaš niekedy čo napíšeš, tak toto je napísané pre toho kto to nepetrebuje čítať, kto nevie o čo ide aj tak nepochopí čo je čo, takže zas ďaľší zbytočný článok, celkom by ma to zaujímalo, takže sadni si k tomu znova a prepíš to s vysvetlením pojmov, lebo viac mi napovie "man", dík.

18.8.2009 07:26 MoB
Rozbalit Rozbalit vše Re: pbuilder – balíčkování pro Debian a Ubuntu

S lítostí se musím připojit k tomuto názoru... na základě tohoto stručného výtahu z man stránek se to nedá pochopit, je to spíš stručný seznam klíčových slov pro toho, kdo to všechno ví a zná a jenom se mu nechce si to pamatovat. (Jestli to tak ovšem bylo myšleno, pak je to napsáno dobře.)

18.8.2009 08:15 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Re: pbuilder – balíčkování pro Debian a Ubuntu
Vzhledem k tomu, že se jedná o poměrně pokročilé a zároveň úzkoprofilové téma, tak je to pochopitelné. Pokud se chce někdo vyhnout trablům při zabalení jednoho balíčku pro osobní potřebu, použije checkinstall. Ale pokud se chce opravdu naučit balit, podívá se nejprve na Seriál: Balíčky pro Debian a potom mu může tento článek posloužit jako rychlá reference, pokud se rozhodne zkoumat další možnosti, v tomto případě pbuilder.
18.8.2009 19:12 eoj
Rozbalit Rozbalit vše Re: pbuilder – balíčkování pro Debian a Ubuntu
Ano, článek na nic, už to zaznělo výše.
18.8.2009 08:18 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: pbuilder – balíčkování pro Debian a Ubuntu
+1, bohužel
Quando omni flunkus moritati
18.8.2009 11:25 Jan Včelák | skóre: 28 | blog: Fcelda
Rozbalit Rozbalit vše Re: pbuilder – balíčkování pro Debian a Ubuntu
Odpovědět | Sbalit | Link | Blokovat | Admin
Tohle podle mě patří spíše do blogu. Na článek je to slabý... :-(

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.