github.com/shiroyuki/docker@v1.9.0/hack/make/release-deb (about)

     1  #!/bin/bash
     2  set -e
     3  
     4  # This script creates the apt repos for the .deb files generated by hack/make/build-deb
     5  #
     6  # The following can then be used as apt sources:
     7  # 	deb http://apt.dockerproject.org/repo $distro-$release $version
     8  #
     9  # For example:
    10  #	deb http://apt.dockerproject.org/repo ubuntu-trusy main
    11  #	deb http://apt.dockerproject.org/repo ubuntu-vivid testing
    12  #	deb http://apt.dockerproject.org/repo debian-wheezy experimental
    13  #	deb http://apt.dockerproject.org/repo debian-jessie main
    14  #
    15  # ... and so on and so forth for the builds created by hack/make/build-deb
    16  
    17  : ${DOCKER_RELEASE_DIR:=$DEST}
    18  : ${GPG_KEYID:=releasedocker}
    19  APTDIR=$DOCKER_RELEASE_DIR/apt/repo
    20  
    21  # setup the apt repo (if it does not exist)
    22  mkdir -p "$APTDIR/conf" "$APTDIR/db"
    23  
    24  # supported arches/sections
    25  arches=( amd64 i386 )
    26  components=( main testing experimental )
    27  
    28  # create/update apt-ftparchive file
    29  if [ ! -f "$APTDIR/conf/apt-ftparchive.conf" ]; then
    30  	cat <<-EOF > "$APTDIR/conf/apt-ftparchive.conf"
    31  	Dir {
    32  		ArchiveDir "${APTDIR}";
    33  		CacheDir "${APTDIR}/db";
    34  	};
    35  
    36  	Default {
    37  		Packages::Compress ". gzip bzip2";
    38  		Sources::Compress ". gzip bzip2";
    39  		Contents::Compress ". gzip bzip2";
    40  	};
    41  
    42  	TreeDefault {
    43  		BinCacheDB "packages-\$(SECTION)-\$(ARCH).db";
    44  		Directory "pool/\$(SECTION)";
    45  		Packages "\$(DIST)/\$(SECTION)/binary-\$(ARCH)/Packages";
    46  		SrcDirectory "pool/\$(SECTION)";
    47  		Sources "\$(DIST)/\$(SECTION)/source/Sources";
    48  		Contents "\$(DIST)/\$(SECTION)/Contents-\$(ARCH)";
    49  		FileList "$APTDIR/\$(DIST)/\$(SECTION)/filelist";
    50  	};
    51  	EOF
    52  
    53  	for suite in $(exec contrib/reprepro/suites.sh); do
    54  		cat <<-EOF
    55  		Tree "dists/${suite}" {
    56  			Sections "main testing experimental";
    57  			Architectures "${arches[*]}";
    58  		}
    59  
    60  		EOF
    61  	done >> "$APTDIR/conf/apt-ftparchive.conf"
    62  fi
    63  
    64  if [ ! -f "$APTDIR/conf/docker-engine-release.conf" ]; then
    65  	cat <<-EOF > "$APTDIR/conf/docker-engine-release.conf"
    66  	APT::FTPArchive::Release::Origin "Docker";
    67  	APT::FTPArchive::Release::Components "${components[*]}";
    68  	APT::FTPArchive::Release::Label "Docker APT Repository";
    69  	APT::FTPArchive::Release::Architectures "${arches[*]}";
    70  	EOF
    71  fi
    72  
    73  # set the component for the version being released
    74  component="main"
    75  
    76  if [[ "$VERSION" == *-rc* ]]; then
    77  	component="testing"
    78  fi
    79  
    80  if [ $DOCKER_EXPERIMENTAL ] || [[ "$VERSION" == *-dev ]] || [ -n "$(git status --porcelain)" ]; then
    81  	component="experimental"
    82  fi
    83  
    84  # release the debs
    85  for dir in contrib/builder/deb/*/; do
    86  	version="$(basename "$dir")"
    87  	codename="${version//debootstrap-}"
    88  
    89  	DEBFILE=( "bundles/$VERSION/build-deb/$version/docker-engine"*.deb )
    90  
    91  	# if we have a $GPG_PASSPHRASE we may as well
    92  	# dpkg-sign before copying the deb into the pool
    93  	if [ ! -z "$GPG_PASSPHRASE" ]; then
    94  		dpkg-sig -g "--passphrase $GPG_PASSPHRASE" \
    95  			-k "$GPG_KEYID" --sign builder "${DEBFILE[@]}"
    96  	fi
    97  
    98  	# add the deb for each component for the distro version into the pool
    99  	mkdir -p "$APTDIR/pool/$component/d/docker-engine/"
   100  	cp "${DEBFILE[@]}" "$APTDIR/pool/$component/d/docker-engine/"
   101  
   102  	# update the filelist for this codename/component
   103  	find "$APTDIR/pool/$component" \
   104  		-name *~${codename#*-}*.deb > "$APTDIR/dists/$codename/$component/filelist"
   105  done
   106  
   107  
   108  # run the apt-ftparchive commands so we can have pinning
   109  apt-ftparchive generate "$APTDIR/conf/apt-ftparchive.conf"
   110  
   111  for dir in contrib/builder/deb/*/; do
   112  	version="$(basename "$dir")"
   113  	codename="${version//debootstrap-}"
   114  
   115  	apt-ftparchive \
   116  		-o "APT::FTPArchive::Release::Codename=$codename" \
   117  		-o "APT::FTPArchive::Release::Suite=$codename" \
   118  		-c "$APTDIR/conf/docker-engine-release.conf" \
   119  		release \
   120  		"$APTDIR/dists/$codename" > "$APTDIR/dists/$codename/Release"
   121  
   122  	for arch in "${arches[@]}"; do
   123  		apt-ftparchive \
   124  			-o "APT::FTPArchive::Release::Codename=$codename" \
   125  			-o "APT::FTPArchive::Release::Suite=$codename" \
   126  			-o "APT::FTPArchive::Release::Component=$component" \
   127  			-o "APT::FTPArchive::Release::Architecture=$arch" \
   128  			-c "$APTDIR/conf/docker-engine-release.conf" \
   129  			release \
   130  			"$APTDIR/dists/$codename/$component/binary-$arch" > "$APTDIR/dists/$codename/$component/binary-$arch/Release"
   131  	done
   132  done