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