2015-06-01 20:21:09 -04:00
|
|
|
#!/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:
|
2015-12-20 10:00:53 -05:00
|
|
|
# deb http://apt.dockerproject.org/repo ubuntu-trusty main
|
|
|
|
# deb http://apt.dockerproject.org/repo ubuntu-trusty testing
|
2015-06-01 20:21:09 -04:00
|
|
|
# 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
|
|
|
|
|
2016-03-25 10:54:36 -04:00
|
|
|
source "$(dirname "$BASH_SOURCE")/.integration-daemon-start"
|
2016-02-08 13:57:04 -05:00
|
|
|
source "$(dirname "$BASH_SOURCE")/.detect-daemon-osarch"
|
|
|
|
|
2015-06-01 20:21:09 -04:00
|
|
|
: ${DOCKER_RELEASE_DIR:=$DEST}
|
2015-08-25 15:27:25 -04:00
|
|
|
: ${GPG_KEYID:=releasedocker}
|
2015-06-01 20:21:09 -04:00
|
|
|
APTDIR=$DOCKER_RELEASE_DIR/apt/repo
|
|
|
|
|
|
|
|
# setup the apt repo (if it does not exist)
|
|
|
|
mkdir -p "$APTDIR/conf" "$APTDIR/db"
|
|
|
|
|
2015-09-01 21:26:56 -04:00
|
|
|
# supported arches/sections
|
|
|
|
arches=( amd64 i386 )
|
2015-11-04 20:17:37 -05:00
|
|
|
|
|
|
|
# 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
|
2015-09-01 21:26:56 -04:00
|
|
|
|
2016-02-23 18:22:03 -05:00
|
|
|
# create apt-ftparchive file on every run. This is essential to avoid
|
|
|
|
# using stale versions of the config file that could cause unnecessary
|
|
|
|
# refreshing of bits for EOL-ed releases.
|
|
|
|
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
|
|
|
|
|
2016-03-08 14:08:00 -05:00
|
|
|
for dir in contrib/builder/deb/${PACKAGE_ARCH}/*/; do
|
|
|
|
version="$(basename "$dir")"
|
|
|
|
suite="${version//debootstrap-}"
|
|
|
|
|
2016-02-23 18:22:03 -05:00
|
|
|
cat <<-EOF
|
|
|
|
Tree "dists/${suite}" {
|
|
|
|
Sections "${components[*]}";
|
|
|
|
Architectures "${arches[*]}";
|
|
|
|
}
|
2015-09-01 21:26:56 -04:00
|
|
|
|
2016-02-23 18:22:03 -05:00
|
|
|
EOF
|
|
|
|
done >> "$APTDIR/conf/apt-ftparchive.conf"
|
2015-09-01 21:26:56 -04:00
|
|
|
|
|
|
|
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
|
|
|
|
|
2015-06-01 20:21:09 -04:00
|
|
|
# release the debs
|
2015-11-23 14:00:43 -05:00
|
|
|
for dir in contrib/builder/deb/${PACKAGE_ARCH}/*/; do
|
2015-06-01 20:21:09 -04:00
|
|
|
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
|
2015-09-03 16:17:21 -04:00
|
|
|
# dpkg-sign before copying the deb into the pool
|
2015-06-01 20:21:09 -04:00
|
|
|
if [ ! -z "$GPG_PASSPHRASE" ]; then
|
2015-11-04 20:17:37 -05:00
|
|
|
dpkg-sig -g "--no-tty --passphrase '$GPG_PASSPHRASE'" \
|
2015-08-25 15:27:25 -04:00
|
|
|
-k "$GPG_KEYID" --sign builder "${DEBFILE[@]}"
|
2015-06-01 20:21:09 -04:00
|
|
|
fi
|
|
|
|
|
2015-09-03 16:17:21 -04:00
|
|
|
# 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/"
|
2015-09-01 21:26:56 -04:00
|
|
|
|
2016-04-22 15:28:15 -04:00
|
|
|
# build the right directory structure, needed for apt-ftparchive
|
|
|
|
for arch in "${arches[@]}"; do
|
|
|
|
mkdir -p "$APTDIR/dists/$codename/$component/binary-$arch"
|
|
|
|
done
|
|
|
|
|
2015-09-01 21:26:56 -04:00
|
|
|
# update the filelist for this codename/component
|
|
|
|
find "$APTDIR/pool/$component" \
|
|
|
|
-name *~${codename#*-}*.deb > "$APTDIR/dists/$codename/$component/filelist"
|
|
|
|
done
|
|
|
|
|
|
|
|
# run the apt-ftparchive commands so we can have pinning
|
|
|
|
apt-ftparchive generate "$APTDIR/conf/apt-ftparchive.conf"
|
|
|
|
|
2015-11-23 14:00:43 -05:00
|
|
|
for dir in contrib/builder/deb/${PACKAGE_ARCH}/*/; do
|
2015-09-01 21:26:56 -04:00
|
|
|
version="$(basename "$dir")"
|
2015-10-13 18:34:43 -04:00
|
|
|
codename="${version//debootstrap-}"
|
2015-09-01 21:26:56 -04:00
|
|
|
|
|
|
|
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
|
|
|
|
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
|
2015-06-01 20:21:09 -04:00
|
|
|
done
|