2014-02-09 46 views
0

我有两个包(cainteoir-enginecainteoir-gtk),我正在使用pbuilder,其中cainteoir-gtk取决于cainteoir-engine如何强制使用pbuilder更新本地软件包?

我有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} [email protected] -- --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 
} 

回答

0

经调查,pbuilder似乎总是添加-us -uc到构建,所以它不签字debian的文件。

,我采取的方法是:

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

这应该是可行的,而无需使用sbuild,只是:

  1. --othermirror到reprepro库。
  2. 将签名密钥添加到pbuilder chroot(不知道如何执行此操作)。