【问题标题】:How do I force update local packages using pbuilder?如何使用 pbuilder 强制更新本地软件包?
【发布时间】:2014-02-09 15:00:50
【问题描述】:

我正在使用 pbuilder 构建两个包(cainteoir-enginecainteoir-gtk),其中 cainteoir-gtk 依赖于 cainteoir-engine

我有pdebuild 获取本地依赖项。但是,如果我对构建脚本进行更改(例如,通过 pdebuild --auto-debsign 从未签名的构建更改为已签名的构建),它不会在 pbuilder --update 之后获取更改。

有没有办法在不更改版本号的情况下更新 pbuilder chroot 使用的本地 debian 文件(因为这些是用于测试/开发包的本地测试版本)?


我将--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
}

【问题讨论】:

    标签: pbuilder pdebuild


    【解决方案1】:

    经调查,pbuilder 似乎总是将-us -uc 添加到构建中,因此它不会对 debian 文件进行签名。

    我采取的方法是:

    1. 使用 sbuild 代替 pbuilder,创建未签名的 Debian 文件。
    2. 将 Debian 文件添加到签名的 reprepro 存储库(托管在 /home 上,以便 sbuild 可以访问它们)。
    3. 使用--chroot-setup-commands 挂钩在构建之前添加存储库和签名密钥。

    这在不使用 sbuild 的情况下应该是可行的,只是:

    1. --othermirror 指向reprepro 存储库。
    2. 将签名密钥添加到 pbuilder chroot(不确定如何执行此操作)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 2013-12-12
      • 2017-07-13
      • 1970-01-01
      • 2017-06-11
      • 2013-03-19
      • 2015-04-11
      相关资源
      最近更新 更多