#!/bin/sh export PATH=/bin:/sbin:/usr/bin:/usr/sbin mount proc for p in $(cat /proc/cmdline); do case $p in docker-root.switch_root) SWITCH_ROOT=true ;; docker-root.debug) DEBUG=true ;; esac done umount proc if [ -n "${SWITCH_ROOT}" -a -z "$ROOT_SWITCHED" ]; then if mount -t tmpfs -o size=90% tmpfs /mnt; then if tar -C / --exclude=mnt -cf - . | tar -C /mnt/ -xf - ; then mkdir /mnt/mnt export ROOT_SWITCHED=true exec switch_root /mnt /init fi fi fi [ -z "${DEBUG}" ] && set -e mount -t devtmpfs devtmpfs /dev mkdir -p /var/log syslogd sleep 1 logger -s -p user.info -t "init[$$]" "Start init" trap 'logger -s -p user.info -t "init[$$]" "trapped at line $LINENO"' ERR mkdir -p /dev/pts logger -s -p user.info -t "init[$$]" "Mounting system" mount -t devpts devpts /dev/pts mount -t proc proc /proc mount -t tmpfs tmpfs /run mount -t sysfs sysfs /sys mount -t tmpfs cgroup /sys/fs/cgroup for i in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); do mkdir -p /sys/fs/cgroup/$i mount -t cgroup -o $i cgroup /sys/fs/cgroup/$i done # Lock the root account passwd -l root # Setup consistent volumes mkdir -p /var/lib/docker mkdir -p /var/lib/docker-root DEVICE=$(blkid | grep -e 'LABEL="DOCKERROOT-DATA"' | head -n 1 | sed 's/:.*//') if [ -n "$DEVICE" ]; then PARTNAME=$(echo "$DEVICE" | sed 's/.*\///') logger -s -p user.info -t "init[$$]" "Mounting HDD /dev/$PARTNAME" mkdir -p /mnt/$PARTNAME if (! e2fsck -p /dev/$PARTNAME) || (! mount -t ext4 /dev/$PARTNAME /mnt/$PARTNAME); then logger -s -p user.info -t "init[$$]" "Running from memory, this won't be good..." else rm -rf /var/lib/docker mkdir -p /mnt/$PARTNAME/var/lib/docker ln -s /mnt/$PARTNAME/var/lib/docker /var/lib/docker rm -rf /var/lib/docker-root mkdir -p /mnt/$PARTNAME/var/lib/docker-root ln -s /mnt/$PARTNAME/var/lib/docker-root /var/lib/docker-root if [ ! -d /mnt/$PARTNAME/home ]; then mv /home /mnt/$PARTNAME/home else rm -rf /home fi ln -s /mnt/$PARTNAME/home /home rm -rf /opt mkdir -p /mnt/$PARTNAME/opt ln -s /mnt/$PARTNAME/opt /opt mkdir -p /mnt/$PARTNAME/etc mkdir -p /mnt/$PARTNAME/work/etc mount -t overlay overlay -o lowerdir=/etc,upperdir=/mnt/$PARTNAME/etc,workdir=/mnt/$PARTNAME/work/etc /etc fi fi DEVICE=$(blkid | grep -e 'LABEL="DOCKERROOT-SWAP"' | head -n 1 | sed 's/:.*//') if [ -n "$DEVICE" ]; then logger -s -p user.info -t "init[$$]" "Enabling SWAP $DEVICE" if ! swapon $DEVICE; then logger -s -p user.info -t "init[$$]" "Could not make swap on $DEVICE" fi fi if [ -x /var/lib/docker-root/init.sh ]; then logger -s -p user.info -t "init[$$]" "Executing custom configuration in init.sh" /var/lib/docker-root/init.sh || true fi logger -s -p user.info -t "init[$$]" "Set hostname with /etc/hostname" /bin/hostname -F /etc/hostname logger -s -p user.info -t "init[$$]" "Executing ACPId" /usr/sbin/acpid logger -s -p user.info -t "init[$$]" "Executing startup scripts in /etc/init.d" /etc/init.d/rcS if [ -x /var/lib/docker-root/start.sh ]; then logger -s -p user.info -t "init[$$]" "Starting custom script start.sh" /var/lib/docker-root/start.sh & fi sync logger -s -p user.info -t "init[$$]" "Starting console" respawn /sbin/getty 38400 tty0 & respawn /sbin/getty 38400 tty1 & if dmesg | grep 'ttyS0 at I/O'; then respawn /sbin/getty -L 9600 ttyS0 vt100 & fi chvt 2 logger -s -p user.info -t "init[$$]" "Configuring sysctl" sysctl -p /etc/sysctl.conf logger -s -p user.info -t "init[$$]" "Starting Docker daemon" /etc/init.d/docker start set -mb trap '' SIGCHLD read