123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- #!/bin/bash
- DEST=$1
- PKGVERSION="$VERSION"
- if [ -n "$(git status --porcelain)" ]; then
- PKGVERSION="$PKGVERSION-$(date +%Y%m%d%H%M%S)-$GITCOMMIT"
- fi
- PACKAGE_ARCHITECTURE="$(dpkg-architecture -qDEB_HOST_ARCH)"
- PACKAGE_URL="http://www.docker.com/"
- PACKAGE_MAINTAINER="support@docker.com"
- PACKAGE_DESCRIPTION="Linux container runtime
- Docker complements LXC with a high-level API which operates at the process
- level. It runs unix processes with strong guarantees of isolation and
- repeatability across servers.
- Docker is a great building block for automating distributed systems:
- large-scale web deployments, database clusters, continuous deployment systems,
- private PaaS, service-oriented architectures, etc."
- PACKAGE_LICENSE="Apache-2.0"
- # Build docker as an ubuntu package using FPM and REPREPRO (sue me).
- # bundle_binary must be called first.
- bundle_ubuntu() {
- DIR=$DEST/build
- # Include our udev rules
- mkdir -p $DIR/etc/udev/rules.d
- cp contrib/udev/80-docker.rules $DIR/etc/udev/rules.d/
- # Include our init scripts
- mkdir -p $DIR/etc/init
- cp contrib/init/upstart/docker.conf $DIR/etc/init/
- mkdir -p $DIR/etc/init.d
- cp contrib/init/sysvinit-debian/docker $DIR/etc/init.d/
- mkdir -p $DIR/etc/default
- cp contrib/init/sysvinit-debian/docker.default $DIR/etc/default/docker
- mkdir -p $DIR/lib/systemd/system
- cp contrib/init/systemd/docker.{service,socket} $DIR/lib/systemd/system/
- # Include contributed completions
- mkdir -p $DIR/etc/bash_completion.d
- cp contrib/completion/bash/docker $DIR/etc/bash_completion.d/
- mkdir -p $DIR/usr/share/zsh/vendor-completions
- cp contrib/completion/zsh/_docker $DIR/usr/share/zsh/vendor-completions/
- mkdir -p $DIR/etc/fish/completions
- cp contrib/completion/fish/docker.fish $DIR/etc/fish/completions/
- # Include contributed man pages
- docs/man/md2man-all.sh -q
- manRoot="$DIR/usr/share/man"
- mkdir -p "$manRoot"
- for manDir in docs/man/man?; do
- manBase="$(basename "$manDir")" # "man1"
- for manFile in "$manDir"/*; do
- manName="$(basename "$manFile")" # "docker-build.1"
- mkdir -p "$manRoot/$manBase"
- gzip -c "$manFile" > "$manRoot/$manBase/$manName.gz"
- done
- done
- # Copy the binary
- # This will fail if the binary bundle hasn't been built
- mkdir -p $DIR/usr/bin
- cp $DEST/../binary/docker-$VERSION $DIR/usr/bin/docker
- # Generate postinst/prerm/postrm scripts
- cat > $DEST/postinst <<'EOF'
- #!/bin/sh
- set -e
- set -u
- if [ "$1" = 'configure' ] && [ -z "$2" ]; then
- if ! getent group docker > /dev/null; then
- groupadd --system docker
- fi
- fi
- if ! { [ -x /sbin/initctl ] && /sbin/initctl version 2>/dev/null | grep -q upstart; }; then
- # we only need to do this if upstart isn't in charge
- update-rc.d docker defaults > /dev/null || true
- fi
- if [ -n "$2" ]; then
- _dh_action=restart
- else
- _dh_action=start
- fi
- service docker $_dh_action 2>/dev/null || true
- #DEBHELPER#
- EOF
- cat > $DEST/prerm <<'EOF'
- #!/bin/sh
- set -e
- set -u
- service docker stop 2>/dev/null || true
- #DEBHELPER#
- EOF
- cat > $DEST/postrm <<'EOF'
- #!/bin/sh
- set -e
- set -u
- if [ "$1" = "purge" ] ; then
- update-rc.d docker remove > /dev/null || true
- fi
- # In case this system is running systemd, we make systemd reload the unit files
- # to pick up changes.
- if [ -d /run/systemd/system ] ; then
- systemctl --system daemon-reload > /dev/null || true
- fi
- #DEBHELPER#
- EOF
- # TODO swaths of these were borrowed from debhelper's auto-inserted stuff, because we're still using fpm - we need to use debhelper instead, and somehow reconcile Ubuntu that way
- chmod +x $DEST/postinst $DEST/prerm $DEST/postrm
- (
- # switch directories so we create *.deb in the right folder
- cd $DEST
- # create lxc-docker-VERSION package
- fpm -s dir -C $DIR \
- --name lxc-docker-$VERSION --version $PKGVERSION \
- --after-install $DEST/postinst \
- --before-remove $DEST/prerm \
- --after-remove $DEST/postrm \
- --architecture "$PACKAGE_ARCHITECTURE" \
- --prefix / \
- --depends iptables \
- --deb-recommends aufs-tools \
- --deb-recommends ca-certificates \
- --deb-recommends git \
- --deb-recommends xz-utils \
- --deb-recommends 'cgroupfs-mount | cgroup-lite' \
- --description "$PACKAGE_DESCRIPTION" \
- --maintainer "$PACKAGE_MAINTAINER" \
- --conflicts docker \
- --conflicts docker.io \
- --conflicts lxc-docker-virtual-package \
- --provides lxc-docker \
- --provides lxc-docker-virtual-package \
- --replaces lxc-docker \
- --replaces lxc-docker-virtual-package \
- --url "$PACKAGE_URL" \
- --license "$PACKAGE_LICENSE" \
- --config-files /etc/udev/rules.d/80-docker.rules \
- --config-files /etc/init/docker.conf \
- --config-files /etc/init.d/docker \
- --config-files /etc/default/docker \
- --deb-compression gz \
- -t deb .
- # TODO replace "Suggests: cgroup-lite" with "Recommends: cgroupfs-mount | cgroup-lite" once cgroupfs-mount is available
- # create empty lxc-docker wrapper package
- fpm -s empty \
- --name lxc-docker --version $PKGVERSION \
- --architecture "$PACKAGE_ARCHITECTURE" \
- --depends lxc-docker-$VERSION \
- --description "$PACKAGE_DESCRIPTION" \
- --maintainer "$PACKAGE_MAINTAINER" \
- --url "$PACKAGE_URL" \
- --license "$PACKAGE_LICENSE" \
- --deb-compression gz \
- -t deb
- )
- # clean up after ourselves so we have a clean output directory
- rm $DEST/postinst $DEST/prerm $DEST/postrm
- rm -r $DIR
- }
- bundle_ubuntu
|