2014-02-09 77 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(不知道如何執行此操作)。