ubuntu 5.2 KB

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