| #!/bin/bash |
| set -e |
| |
| # This script creates the apt repos for the .deb files generated by hack/make/build-deb |
| # |
| # The following can then be used as apt sources: |
| # deb http://apt.dockerproject.org/repo $distro-$release $version |
| # |
| # For example: |
| # deb http://apt.dockerproject.org/repo ubuntu-trusty main |
| # deb http://apt.dockerproject.org/repo ubuntu-trusty testing |
| # deb http://apt.dockerproject.org/repo debian-wheezy experimental |
| # deb http://apt.dockerproject.org/repo debian-jessie main |
| # |
| # ... and so on and so forth for the builds created by hack/make/build-deb |
| |
| : ${DOCKER_RELEASE_DIR:=$DEST} |
| : ${GPG_KEYID:=releasedocker} |
| APTDIR=$DOCKER_RELEASE_DIR/apt/repo |
| |
| # setup the apt repo (if it does not exist) |
| mkdir -p "$APTDIR/conf" "$APTDIR/db" |
| |
| # supported arches/sections |
| arches=( amd64 i386 ) |
| |
| # Preserve existing components but don't add any non-existing ones |
| for component in main testing experimental ; do |
| if ls "$APTDIR/dists/*/$component" >/dev/null 2>&1 ; then |
| components+=( $component ) |
| fi |
| done |
| |
| # set the component for the version being released |
| component="main" |
| |
| if [[ "$VERSION" == *-rc* ]]; then |
| component="testing" |
| fi |
| |
| if [ "$DOCKER_EXPERIMENTAL" ] || [[ "$VERSION" == *-dev ]] || [ -n "$(git status --porcelain)" ]; then |
| component="experimental" |
| fi |
| |
| # Make sure our component is in the list of components |
| if [[ ! "${components[*]}" =~ $component ]] ; then |
| components+=( $component ) |
| fi |
| |
| # create/update apt-ftparchive file |
| if [ ! -f "$APTDIR/conf/apt-ftparchive.conf" ]; then |
| cat <<-EOF > "$APTDIR/conf/apt-ftparchive.conf" |
| Dir { |
| ArchiveDir "${APTDIR}"; |
| CacheDir "${APTDIR}/db"; |
| }; |
| |
| Default { |
| Packages::Compress ". gzip bzip2"; |
| Sources::Compress ". gzip bzip2"; |
| Contents::Compress ". gzip bzip2"; |
| }; |
| |
| TreeDefault { |
| BinCacheDB "packages-\$(SECTION)-\$(ARCH).db"; |
| Directory "pool/\$(SECTION)"; |
| Packages "\$(DIST)/\$(SECTION)/binary-\$(ARCH)/Packages"; |
| SrcDirectory "pool/\$(SECTION)"; |
| Sources "\$(DIST)/\$(SECTION)/source/Sources"; |
| Contents "\$(DIST)/\$(SECTION)/Contents-\$(ARCH)"; |
| FileList "$APTDIR/\$(DIST)/\$(SECTION)/filelist"; |
| }; |
| EOF |
| |
| for suite in $(exec contrib/reprepro/suites.sh); do |
| cat <<-EOF |
| Tree "dists/${suite}" { |
| Sections "${components[*]}"; |
| Architectures "${arches[*]}"; |
| } |
| |
| EOF |
| done >> "$APTDIR/conf/apt-ftparchive.conf" |
| fi |
| |
| if [ ! -f "$APTDIR/conf/docker-engine-release.conf" ]; then |
| cat <<-EOF > "$APTDIR/conf/docker-engine-release.conf" |
| APT::FTPArchive::Release::Origin "Docker"; |
| APT::FTPArchive::Release::Components "${components[*]}"; |
| APT::FTPArchive::Release::Label "Docker APT Repository"; |
| APT::FTPArchive::Release::Architectures "${arches[*]}"; |
| EOF |
| fi |
| |
| # release the debs |
| for dir in contrib/builder/deb/*/; do |
| version="$(basename "$dir")" |
| codename="${version//debootstrap-}" |
| |
| DEBFILE=( "bundles/$VERSION/build-deb/$version/docker-engine"*.deb ) |
| |
| # if we have a $GPG_PASSPHRASE we may as well |
| # dpkg-sign before copying the deb into the pool |
| if [ ! -z "$GPG_PASSPHRASE" ]; then |
| dpkg-sig -g "--no-tty --passphrase '$GPG_PASSPHRASE'" \ |
| -k "$GPG_KEYID" --sign builder "${DEBFILE[@]}" |
| fi |
| |
| # add the deb for each component for the distro version into the pool |
| mkdir -p "$APTDIR/pool/$component/d/docker-engine/" |
| cp "${DEBFILE[@]}" "$APTDIR/pool/$component/d/docker-engine/" |
| |
| # update the filelist for this codename/component |
| mkdir -p "$APTDIR/dists/$codename/$component" |
| find "$APTDIR/pool/$component" \ |
| -name *~${codename#*-}*.deb > "$APTDIR/dists/$codename/$component/filelist" |
| done |
| |
| # clean the databases |
| apt-ftparchive clean "$APTDIR/conf/apt-ftparchive.conf" |
| |
| # run the apt-ftparchive commands so we can have pinning |
| apt-ftparchive generate "$APTDIR/conf/apt-ftparchive.conf" |
| |
| for dir in contrib/builder/deb/*/; do |
| version="$(basename "$dir")" |
| codename="${version//debootstrap-}" |
| |
| apt-ftparchive \ |
| -o "APT::FTPArchive::Release::Codename=$codename" \ |
| -o "APT::FTPArchive::Release::Suite=$codename" \ |
| -c "$APTDIR/conf/docker-engine-release.conf" \ |
| release \ |
| "$APTDIR/dists/$codename" > "$APTDIR/dists/$codename/Release" |
| |
| for arch in "${arches[@]}"; do |
| mkdir -p "$APTDIR/dists/$codename/$component/binary-$arch" |
| apt-ftparchive \ |
| -o "APT::FTPArchive::Release::Codename=$codename" \ |
| -o "APT::FTPArchive::Release::Suite=$codename" \ |
| -o "APT::FTPArchive::Release::Component=$component" \ |
| -o "APT::FTPArchive::Release::Architecture=$arch" \ |
| -c "$APTDIR/conf/docker-engine-release.conf" \ |
| release \ |
| "$APTDIR/dists/$codename/$component/binary-$arch" > "$APTDIR/dists/$codename/$component/binary-$arch/Release" |
| done |
| done |