Как принудительно обновить локальные пакеты с помощью 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.

Подход, который я выбрал:

  1. Используйте sbuild вместо pbuilder, создавая неподписанные файлы Debian.
  2. Добавьте файлы Debian в подписанный репозиторий РепроП (размещен в / home, чтобы они могли быть доступны для sbuild).
  3. Использовать --chroot-setup-commands Хук, чтобы добавить хранилище и подписывающий ключ перед сборкой.

Это должно быть выполнимо без использования sbuild, просто:

  1. Укажите --othermirror в репозиторий репропро.
  2. Добавьте ключ подписи в chroot pbuilder (не уверен, как это сделать).
Другие вопросы по тегам