2014-02-09 5 views
0

나는 이 cainteoir-engine에 의존하는 pbuilder를 사용하여 빌드하는 두 개의 패키지 (cainteoir-enginecainteoir-gtk)를 가지고 있습니다.pbuilder를 사용하여 강제로 로컬 패키지를 업데이트하려면 어떻게합니까?

나는 로컬 종속성을 선택하는 pdebuild이 있습니다. 그러나 빌드 스크립트 (예 : pdebuild --auto-debsign을 통해 서명되지 않은 빌드에서 서명 된 빌드로 변경됨)를 변경하면 pbuilder --update 이후에 변경 사항을 적용하지 않습니다.

버전 번호를 변경하지 않고 pbuilder chroot에서 사용하는 로컬 debian 파일을 업데이트하는 방법이 있습니까? (패키지 테스트/개발을위한 로컬 테스트 빌드이므로)?


나는 기본 chroot를 이미지를 업데이트 할 pbuilder --update --override-config으로 --bindmounts--othermirror 옵션을 사용하고 있습니다. dpkg-scanpackages을 사용하여 로컬 Packages.gz 파일을 생성합니다. 그것이 데비안 파일에 서명하지 않도록 조사를

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를 추가 할 나타납니다

내가 ( https://raw.github.com/rhdunn/cainteoir-engine/debian/build.sh에서) 사용하고있는 도우미 함수 스크립트입니다. 내가 촬영 한

접근 방식은 다음과 같습니다

  1. 를 사용하여 서명되지 않은 데비안 파일을 만드는 대신는 pbuilder의 sbuild.
  2. 서명 한 reprepro 저장소 (sbuild가 액세스 할 수 있도록/home에서 호스팅 됨)에 데비안 파일을 추가하십시오.
  3. 빌드하기 전에 --chroot-setup-commands 후크를 사용하여 저장소 및 서명 키를 추가하십시오.

이 그냥 sbuild를 사용하지 않고 행할 수 있어야한다 :

  1. 가리키고 reprepro 저장소에 --othermirror.
  2. pbuilder chroot에 서명 키를 추가하십시오 (이를 수행하는 방법을 모르겠 음).