簡體   English   中英

如何使用pbuilder強制更新本地軟件包?

[英]How do I force update local packages using pbuilder?

我有兩個使用pbuilder構建的軟件包( cainteoir-enginecainteoir-gtk ),其中cainteoir-gtk取決於cainteoir-engine

我有pdebuild拿起本地依賴項。 但是,如果我對構建腳本進行了更改(例如,通過pdebuild --auto-debsign簽名的構建更改為已簽名的構建),則在pbuilder --update之后,它不會進行更改。

有沒有一種方法可以更新pbuilder chroot使用的本地debian文件而不更改版本號(因為這些是用於測試/開發軟件包的本地測試版本)?


我在pbuilder --update --override-config使用--bindmounts--othermirror選項來更新基本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似乎總是在構建中添加-us -uc ,因此它不會對debian文件進行簽名。

我采用的方法是:

  1. 使用sbuild而不是pbuilder來創建未簽名的Debian文件。
  2. 將Debian文件添加到已簽名的reprepro存儲庫(位於/ home上,因此sbuild可以訪問它們)。
  3. 使用--chroot-setup-commands掛鈎在構建之前添加存儲庫和簽名密鑰。

這應該是可行的,而無需使用sbuild,只是:

  1. --othermirror指向reprepro存儲庫。
  2. 將簽名密鑰添加到pbuilder chroot(不確定如何執行此操作)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM