github.com/pritambaral/docker@v1.4.2-0.20150120174542-b2fe1b3dd952/project/make/ubuntu (about)

     1  #!/bin/bash
     2  
     3  DEST=$1
     4  
     5  PKGVERSION="$VERSION"
     6  if [ -n "$(git status --porcelain)" ]; then
     7  	PKGVERSION="$PKGVERSION-$(date +%Y%m%d%H%M%S)-$GITCOMMIT"
     8  fi
     9  
    10  PACKAGE_ARCHITECTURE="$(dpkg-architecture -qDEB_HOST_ARCH)"
    11  PACKAGE_URL="http://www.docker.com/"
    12  PACKAGE_MAINTAINER="support@docker.com"
    13  PACKAGE_DESCRIPTION="Linux container runtime
    14  Docker complements LXC with a high-level API which operates at the process
    15  level. It runs unix processes with strong guarantees of isolation and
    16  repeatability across servers.
    17  Docker is a great building block for automating distributed systems:
    18  large-scale web deployments, database clusters, continuous deployment systems,
    19  private PaaS, service-oriented architectures, etc."
    20  PACKAGE_LICENSE="Apache-2.0"
    21  
    22  # Build docker as an ubuntu package using FPM and REPREPRO (sue me).
    23  # bundle_binary must be called first.
    24  bundle_ubuntu() {
    25  	DIR=$DEST/build
    26  
    27  	# Include our udev rules
    28  	mkdir -p $DIR/etc/udev/rules.d
    29  	cp contrib/udev/80-docker.rules $DIR/etc/udev/rules.d/
    30  
    31  	# Include our init scripts
    32  	mkdir -p $DIR/etc/init
    33  	cp contrib/init/upstart/docker.conf $DIR/etc/init/
    34  	mkdir -p $DIR/etc/init.d
    35  	cp contrib/init/sysvinit-debian/docker $DIR/etc/init.d/
    36  	mkdir -p $DIR/etc/default
    37  	cp contrib/init/sysvinit-debian/docker.default $DIR/etc/default/docker
    38  	mkdir -p $DIR/lib/systemd/system
    39  	cp contrib/init/systemd/docker.{service,socket} $DIR/lib/systemd/system/
    40  
    41  	# Include contributed completions
    42  	mkdir -p $DIR/etc/bash_completion.d
    43  	cp contrib/completion/bash/docker $DIR/etc/bash_completion.d/
    44  	mkdir -p $DIR/usr/share/zsh/vendor-completions
    45  	cp contrib/completion/zsh/_docker $DIR/usr/share/zsh/vendor-completions/
    46  	mkdir -p $DIR/etc/fish/completions
    47  	cp contrib/completion/fish/docker.fish $DIR/etc/fish/completions/
    48  
    49  	# Include contributed man pages
    50  	docs/man/md2man-all.sh -q
    51  	manRoot="$DIR/usr/share/man"
    52  	mkdir -p "$manRoot"
    53  	for manDir in docs/man/man?; do
    54  		manBase="$(basename "$manDir")" # "man1"
    55  		for manFile in "$manDir"/*; do
    56  			manName="$(basename "$manFile")" # "docker-build.1"
    57  			mkdir -p "$manRoot/$manBase"
    58  			gzip -c "$manFile" > "$manRoot/$manBase/$manName.gz"
    59  		done
    60  	done
    61  
    62  	# Copy the binary
    63  	# This will fail if the binary bundle hasn't been built
    64  	mkdir -p $DIR/usr/bin
    65  	cp $DEST/../binary/docker-$VERSION $DIR/usr/bin/docker
    66  
    67  	# Generate postinst/prerm/postrm scripts
    68  	cat > $DEST/postinst <<'EOF'
    69  #!/bin/sh
    70  set -e
    71  set -u
    72  
    73  if [ "$1" = 'configure' ] && [ -z "$2" ]; then
    74  	if ! getent group docker > /dev/null; then
    75  		groupadd --system docker
    76  	fi
    77  fi
    78  
    79  if ! { [ -x /sbin/initctl ] && /sbin/initctl version 2>/dev/null | grep -q upstart; }; then
    80  	# we only need to do this if upstart isn't in charge
    81  	update-rc.d docker defaults > /dev/null || true
    82  fi
    83  if [ -n "$2" ]; then
    84  	_dh_action=restart
    85  else
    86  	_dh_action=start
    87  fi
    88  service docker $_dh_action 2>/dev/null || true
    89  
    90  #DEBHELPER#
    91  EOF
    92  	cat > $DEST/prerm <<'EOF'
    93  #!/bin/sh
    94  set -e
    95  set -u
    96  
    97  service docker stop 2>/dev/null || true
    98  
    99  #DEBHELPER#
   100  EOF
   101  	cat > $DEST/postrm <<'EOF'
   102  #!/bin/sh
   103  set -e
   104  set -u
   105  
   106  if [ "$1" = "purge" ] ; then
   107  	update-rc.d docker remove > /dev/null || true
   108  fi
   109  
   110  # In case this system is running systemd, we make systemd reload the unit files
   111  # to pick up changes.
   112  if [ -d /run/systemd/system ] ; then
   113  	systemctl --system daemon-reload > /dev/null || true
   114  fi
   115  
   116  #DEBHELPER#
   117  EOF
   118  	# 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
   119  	chmod +x $DEST/postinst $DEST/prerm $DEST/postrm
   120  
   121  	(
   122  		# switch directories so we create *.deb in the right folder
   123  		cd $DEST
   124  
   125  		# create lxc-docker-VERSION package
   126  		fpm -s dir -C $DIR \
   127  			--name lxc-docker-$VERSION --version $PKGVERSION \
   128  			--after-install $DEST/postinst \
   129  			--before-remove $DEST/prerm \
   130  			--after-remove $DEST/postrm \
   131  			--architecture "$PACKAGE_ARCHITECTURE" \
   132  			--prefix / \
   133  			--depends iptables \
   134  			--deb-recommends aufs-tools \
   135  			--deb-recommends ca-certificates \
   136  			--deb-recommends git \
   137  			--deb-recommends xz-utils \
   138  			--deb-recommends 'cgroupfs-mount | cgroup-lite' \
   139  			--description "$PACKAGE_DESCRIPTION" \
   140  			--maintainer "$PACKAGE_MAINTAINER" \
   141  			--conflicts docker \
   142  			--conflicts docker.io \
   143  			--conflicts lxc-docker-virtual-package \
   144  			--provides lxc-docker \
   145  			--provides lxc-docker-virtual-package \
   146  			--replaces lxc-docker \
   147  			--replaces lxc-docker-virtual-package \
   148  			--url "$PACKAGE_URL" \
   149  			--license "$PACKAGE_LICENSE" \
   150  			--config-files /etc/udev/rules.d/80-docker.rules \
   151  			--config-files /etc/init/docker.conf \
   152  			--config-files /etc/init.d/docker \
   153  			--config-files /etc/default/docker \
   154  			--deb-compression gz \
   155  			-t deb .
   156  		# TODO replace "Suggests: cgroup-lite" with "Recommends: cgroupfs-mount | cgroup-lite" once cgroupfs-mount is available
   157  
   158  		# create empty lxc-docker wrapper package
   159  		fpm -s empty \
   160  			--name lxc-docker --version $PKGVERSION \
   161  			--architecture "$PACKAGE_ARCHITECTURE" \
   162  			--depends lxc-docker-$VERSION \
   163  			--description "$PACKAGE_DESCRIPTION" \
   164  			--maintainer "$PACKAGE_MAINTAINER" \
   165  			--url "$PACKAGE_URL" \
   166  			--license "$PACKAGE_LICENSE" \
   167  			--deb-compression gz \
   168  			-t deb
   169  	)
   170  
   171  	# clean up after ourselves so we have a clean output directory
   172  	rm $DEST/postinst $DEST/prerm $DEST/postrm
   173  	rm -r $DIR
   174  }
   175  
   176  bundle_ubuntu