Jak powszechnie wiadomo od jakiegoś czasu, prowadzę nieoficjalne archiwum pakietów dla Debiana. Aby móc prowadzić je dla dwóch architektur, musiałem nauczyć się tworzyć pakiety dla i386 (jako że sam używam amd64).1 Z początku było to dla mnie nieco skomplikowane, ale w późniejszym czasie opanowałem pbuildera na tyle, że szło to całkiem sprawnie. A później natrafiłem na tekst, w którym dowiedziałem się o cowbuilderze, dzięki któremu tworzenie pakietów dla obu architektur jest jeszcze szybsze.
Tekst jest luźnym tłumaczeniem Build i386 packages on amd64 i został opublikowany za pisemną zgodą autora — Julien Valroff.
Oto jak buduję pakiety Debiana dla architektur i386 oraz amd64 na moim
systemie x86_64 używając cowbuildera
. Istnieje możliwość wykorzystania
samego pbuildera
, ale preferuję cowbuildera
, bo jest szybszy.
Wpierw należy stworzyć obrazy bazowe (ten krok należy wykonać z konta superużytkownika). Domyślnie docelową dystrybucją jest gałąź unstable (Sid).
cowbuilder --create --architecture amd64 --basepath /var/cache/pbuilder/base-unstable_amd64.cow
cowbuilder --create --architecture i386 --basepath /var/cache/pbuilder/base-unstable_i386.cow
Aby zaktualizować chroota, do komendy będzie trzeba dodać opcję
--basepath
. Np.:
cowbuilder --update --basepath /var/cache/pbuilder/base-unstable_amd64.cow
cowbuilder --update --basepath /var/cache/pbuilder/base-unstable_i386.cow
Oto mój plik ~/.pbuilderrc
, który, rzecz jasna, powinien zostać
zmieniony odpowiednio do Twoich potrzeb:
# do not specify variables when running cowbuilder --create or --update
if [ -f debian/changelog ]; then
[ -z "$ARCH" ] && ARCH=$(dpkg --print-architecture)
[ -z "$DIST" ] && DIST=$(dpkg-parsechangelog | sed -n 's/^Distribution: //p')
fi
PDEBUILD_PBUILDER="cowbuilder --build --basepath /var/cache/pbuilder/base-${DIST}_${ARCH}.cow"
DEBBUILDOPTS="-d ${OPTS}"
ARCHITECTURE=${ARCH}
BUILDRESULT=~/build-area
MIRRORSITE=http://ftp.fr.debian.org/debian
EXTRAPACKAGES="$EXTRAPACKAGES lintian"
AUTO_DEBSIGN=yes
HOOKDIR=${HOME}/.pbuilder/hooks/
PKGNAME_LOGFILE_EXTENTION="_${ARCH}.build"
Do automatycznego wywoływania lintiana po zbudowaniu pakietów w
chroocie, używam hooka, który powinien zostać zapisany w ścieżce
~/.pbuilder/hooks/B91_lintian
. Treść pliku:
#!/bin/sh
# run lintian
echo "I: running lintian on the package"
echo ""
echo "========================== LINTIAN RESULTS =========================="
echo ""
tput "smso"
lintian --allow-root -I /tmp/buildd/*.changes
tput "rmso"
echo ""
echo "====================================================================="
echo ""
Aby zbudować pakiety, używam następujących kroków:
1. Buduję pakiety dla architektury i386:
ARCH=i386 pdebuild --debbuildopts -b
2. Buduję pakiety dla architektury amd64:
pdebuild
3. Łączę i podpisuję changelogi:
cd ~/build-area
mergechanges -f package_0.1-1_i386.changes packages_0.1-1_amd64.changes
debsign package_0.1-1_multi.changes
Pakiety mogą być wtedy zuploadowane wykorzystując plik *_multi.changes
z użyciem standardowego narzędzia (dupload
czy dput
).
Jak można zauważyć, czasem zdarza mi się budować pakiety dla stabilnej
dystrybucji
(backporty).
Domyślnie moja konfiguracja pbuildera pobiera informację o docelowej
dystrybucji z pliku debian/changelog. Obrazy bazowe powinny być
zbudowane z opcją --distribution
(zobacz
cowbuilder(8)
po więcej informacji).
Jeśli chcesz to obejść, możesz określić zmienną $DIST
przy budowaniu
pakietu:
DIST=stable pdebuild
Wygodnie mi jest dodać symlinki, dzięki czemu mam możliwość używania nazwy gałęzi lub nazwy kodowej dystrybucji.
ln -s /var/cache/pbuilder/base-unstable_amd64.cow /var/cache/pbuilder/base-sid_amd64.cow
ln -s /var/cache/pbuilder/base-unstable_i386.cow /var/cache/pbuilder/base-sid_i386.cow
Możesz również wykorzystać taki układ wespół z git-buildpackage.
Aby zbudować pakiet:
ARCH=i386 git-buildpackage --git-builder="pdebuild --debbuildopts -b"
ARCH=amd64 git-buildpackage --git-builder="pdebuild"
Domyślnego buildera można zdefiniować w pliku ~/.gbp.conf
, ale trzeba
odpowiednio zmodyfikować wpis, żeby podać prawidłowe opcje budowania.
Warto też zauważyć, że pakiet git-buildpackage >=0.5.6
przychodzi wraz
ze skryptem git-pbuilder
, który znacznie ułatwia współpracę
git-buildpackage
z pbuilderem
/cowbuilderem
. Więcej informacji:
http://honk.sigxcpu.org/con/Git_buildpackage_0_5_6.html.
Tekst jest luźnym tłumaczeniem Build i386 packages on amd64 i został opublikowany za pisemną zgodą autora — Julien Valroff.
-
Oczywistym jest, że w drugą stroną się nie da — na architekturze i386 nie stworzysz pakietów amd64. ↩︎