#!/bin/bash

PKGVERSION="${VERSION//-/'~'}"
# if we have a "-dev" suffix or have change in Git, let's make this package version more complex so it works better
if [[ "$VERSION" == *-dev ]] || [ -n "$(git status --porcelain)" ]; then
	GIT_UNIX="$(git log -1 --pretty='%at')"
	GIT_DATE="$(date --date "@$GIT_UNIX" +'%Y%m%d.%H%M%S')"
	GIT_COMMIT="$(git log -1 --pretty='%h')"
	GIT_VERSION="git${GIT_DATE}.0.${GIT_COMMIT}"
	# GIT_VERSION is now something like 'git20150128.112847.0.17e840a'
	PKGVERSION="$PKGVERSION~$GIT_VERSION"
fi

# $ dpkg --compare-versions 1.5.0 gt 1.5.0~rc1 && echo true || echo false
# true
# $ dpkg --compare-versions 1.5.0~rc1 gt 1.5.0~git20150128.112847.17e840a && echo true || echo false
# true
# $ dpkg --compare-versions 1.5.0~git20150128.112847.17e840a gt 1.5.0~dev~git20150128.112847.17e840a && echo true || echo false
# true

# ie, 1.5.0 > 1.5.0~rc1 > 1.5.0~git20150128.112847.17e840a > 1.5.0~dev~git20150128.112847.17e840a

PACKAGE_ARCHITECTURE="$(dpkg-architecture -qDEB_HOST_ARCH)"
PACKAGE_URL="https://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="$ABS_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 man pages
	make manpages
	manRoot="$DIR/usr/share/man"
	mkdir -p "$manRoot"
	for manDir in 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 "$ABS_DEST/postinst" \
			--before-remove "$ABS_DEST/prerm" \
			--after-remove "$ABS_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' \
			--deb-suggests apparmor \
			--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
