Как принудительно обновить локальные пакеты с помощью pbuilder?
У меня две посылки (cainteoir-engine
а также cainteoir-gtk
) что я строю с помощью pbuilder, где cainteoir-gtk
зависит от cainteoir-engine
,
я имею pdebuild
подбирая местные зависимости. Однако, если я внесу изменения в сценарии сборки (например, изменился с неподписанной на подписанную сборку через pdebuild --auto-debsign
), он не забирает изменения после pbuilder --update
,
Есть ли способ обновить локальные файлы debian, используемые chroot pbuilder, без изменения номера версии (так как это локальные тестовые сборки для тестирования / разработки пакетов)?
Я использую --bindmounts
а также --othermirror
варианты с pbuilder --update --override-config
обновить базовые изображения chroot. я использую dpkg-scanpackages
генерировать местный Packages.gz
файл.
Это скрипт вспомогательной функции, который я использую (из https://raw.github.com/rhdunn/cainteoir-engine/debian/build.sh):
doscanpackages() {
pushd $1
dpkg-scanpackages . /dev/null | gzip -9 > Packages.gz
popd
}
dopbuild() {
COMMAND=$1
ARCH=$3
case "$2" in
stable|wheezy)
DIST=debian
RELEASE=wheezy
;;
testing|jessie)
DIST=debian
RELEASE=jessie
;;
unstable|sid)
DIST=debian
RELEASE=sid
;;
precise|quantal|raring|saucy|trusty)
DIST=ubuntu
RELEASE=$2
;;
*)
echo "Unknown distribution release : $1"
exit 1
;;
esac
case "${DIST}" in
debian)
MIRROR=ftp://mirror.ox.ac.uk/debian/
KEYRING=/usr/share/keyrings/debian-archive-keyring.gpg
;;
ubuntu)
MIRROR=ftp://archive.ubuntu.com/ubuntu/
KEYRING=/usr/share/keyrings/ubuntu-archive-keyring.gpg
;;
esac
REF=${DIST}-${RELEASE}-${ARCH}
BASETGZ=${PBUILD_DIR}/${REF}.tgz
OUTPUT=${PBUILD_DIR}/${REF}
shift
shift
shift
case "${COMMAND}" in
create|update)
if [[ -e ${BASETGZ} ]] ; then
sudo pbuilder --update --override-config --distribution ${RELEASE} --mirror ${MIRROR} --basetgz ${BASETGZ} --debootstrapopts "--keyring=${KEYRING}" --bindmounts "${OUTPUT}" --othermirror "deb file:${OUTPUT} ./"
else
mkdir -pv ${PBUILD_IMGDIR}
sudo pbuilder --create --distribution ${RELEASE} --mirror ${MIRROR} --basetgz ${BASETGZ} --debootstrapopts "--keyring=${KEYRING}" --bindmounts "${OUTPUT}" --othermirror "deb file:${OUTPUT} ./"
fi
;;
build)
mkdir -pv ${OUTPUT}
dopredebbuild ${RELEASE}
if [[ ! -e builddeb.failed ]] ; then
(pdebuild --buildresult ${OUTPUT} $@ -- --basetgz ${BASETGZ} --debootstrapopts "--keyring=${KEYRING}" --bindmounts "${OUTPUT}" || touch builddeb.failed) 2>&1 | tee build.log
fi
if [[ ! -e builddeb.failed ]] ; then
doscanpackages ${OUTPUT}
fi
dopostdebbuild ${RELEASE}
;;
esac
}
1 ответ
После расследования pbuilder, кажется, всегда добавляет -us -uc
в сборку, поэтому он не подписывает файлы debian.
Подход, который я выбрал:
- Используйте sbuild вместо pbuilder, создавая неподписанные файлы Debian.
- Добавьте файлы Debian в подписанный репозиторий РепроП (размещен в / home, чтобы они могли быть доступны для sbuild).
- Использовать
--chroot-setup-commands
Хук, чтобы добавить хранилище и подписывающий ключ перед сборкой.
Это должно быть выполнимо без использования sbuild, просто:
- Укажите
--othermirror
в репозиторий репропро. - Добавьте ключ подписи в chroot pbuilder (не уверен, как это сделать).