summaryrefslogtreecommitdiffstats
path: root/fuel-build/docker/mkimage/debootstrap
diff options
context:
space:
mode:
Diffstat (limited to 'fuel-build/docker/mkimage/debootstrap')
-rwxr-xr-xfuel-build/docker/mkimage/debootstrap126
1 files changed, 126 insertions, 0 deletions
diff --git a/fuel-build/docker/mkimage/debootstrap b/fuel-build/docker/mkimage/debootstrap
new file mode 100755
index 0000000..0862120
--- /dev/null
+++ b/fuel-build/docker/mkimage/debootstrap
@@ -0,0 +1,126 @@
+#!/usr/bin/env bash
+#
+set -e
+
+rootfsDir="$1"
+shift
+
+# we have to do a little fancy footwork to make sure "rootfsDir" becomes the second non-option argument to debootstrap
+
+before=()
+while [ $# -gt 0 ] && [[ "$1" == -* ]]; do
+ before+=( "$1" )
+ shift
+done
+
+suite="$1"
+shift
+
+(
+ set -x
+ debootstrap "${before[@]}" "$suite" "$rootfsDir" "$@"
+)
+
+# now for some Docker-specific tweaks
+
+# prevent init scripts from running during install/update
+echo >&2 "+ cat > '$rootfsDir/usr/sbin/policy-rc.d'"
+cat > "$rootfsDir/usr/sbin/policy-rc.d" <<'EOF'
+#!/bin/sh
+exit 101
+EOF
+chmod +x "$rootfsDir/usr/sbin/policy-rc.d"
+
+# prevent upstart scripts from running during install/update
+(
+ set -x
+ chroot "$rootfsDir" dpkg-divert --local --rename --add /sbin/initctl
+ ln -sf /bin/true "$rootfsDir/sbin/initctl"
+)
+
+# shrink the image, since apt makes us fat (wheezy: ~157.5MB vs ~120MB)
+( set -x; chroot "$rootfsDir" apt-get clean )
+
+# Ubuntu 10.04 sucks... :)
+if strings "$rootfsDir/usr/bin/dpkg" | grep -q unsafe-io; then
+ # force dpkg not to call sync() after package extraction (speeding up installs)
+ echo >&2 "+ echo force-unsafe-io > '$rootfsDir/etc/dpkg/dpkg.cfg.d/docker-apt-speedup'"
+ echo 'force-unsafe-io' > "$rootfsDir/etc/dpkg/dpkg.cfg.d/docker-apt-speedup"
+fi
+
+if [ -d "$rootfsDir/etc/apt/apt.conf.d" ]; then
+ # _keep_ us lean by effectively running "apt-get clean" after every install
+ aptGetClean='"rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true";'
+ echo >&2 "+ cat > '$rootfsDir/etc/apt/apt.conf.d/docker-clean'"
+ cat > "$rootfsDir/etc/apt/apt.conf.d/docker-clean" <<-EOF
+ DPkg::Post-Invoke { ${aptGetClean} };
+ APT::Update::Post-Invoke { ${aptGetClean} };
+
+ Dir::Cache::pkgcache "";
+ Dir::Cache::srcpkgcache "";
+ EOF
+
+ # remove apt-cache translations for fast "apt-get update"
+ echo >&2 "+ cat > '$rootfsDir/etc/apt/apt.conf.d/docker-no-languages'"
+ echo 'Acquire::Languages "none";' > "$rootfsDir/etc/apt/apt.conf.d/docker-no-languages"
+fi
+
+if [ -z "$DONT_TOUCH_SOURCES_LIST" ]; then
+ # tweak sources.list, where appropriate
+ lsbDist=
+ if [ -z "$lsbDist" -a -r "$rootfsDir/etc/os-release" ]; then
+ lsbDist="$(. "$rootfsDir/etc/os-release" && echo "$ID")"
+ fi
+ if [ -z "$lsbDist" -a -r "$rootfsDir/etc/lsb-release" ]; then
+ lsbDist="$(. "$rootfsDir/etc/lsb-release" && echo "$DISTRIB_ID")"
+ fi
+ if [ -z "$lsbDist" -a -r "$rootfsDir/etc/debian_version" ]; then
+ lsbDist='Debian'
+ fi
+ case "$lsbDist" in
+ debian|Debian)
+ # updates and security!
+ if [ "$suite" != 'sid' -a "$suite" != 'unstable' ]; then
+ (
+ set -x
+ sed -i "p; s/ $suite main$/ ${suite}-updates main/" "$rootfsDir/etc/apt/sources.list"
+ echo "deb http://security.debian.org $suite/updates main" >> "$rootfsDir/etc/apt/sources.list"
+ )
+ fi
+ ;;
+ ubuntu|Ubuntu)
+ # add the universe, updates, and security repositories
+ (
+ set -x
+ sed -i "
+ s/ $suite main$/ $suite main universe/; p;
+ s/ $suite main/ ${suite}-updates main/; p;
+ s/ $suite-updates main/ ${suite}-security main/
+ " "$rootfsDir/etc/apt/sources.list"
+ )
+ ;;
+ tanglu|Tanglu)
+ # add the updates repository
+ if [ "$suite" != 'devel' ]; then
+ (
+ set -x
+ sed -i "p; s/ $suite main$/ ${suite}-updates main/" "$rootfsDir/etc/apt/sources.list"
+ )
+ fi
+ ;;
+ steamos|SteamOS)
+ # add contrib and non-free
+ (
+ set -x
+ sed -i "s/ $suite main$/ $suite main contrib non-free/" "$rootfsDir/etc/apt/sources.list"
+ )
+ ;;
+ esac
+fi
+
+# make sure we're fully up-to-date, too
+(
+ set -x
+ chroot "$rootfsDir" apt-get update
+ chroot "$rootfsDir" apt-get dist-upgrade -y
+)