-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathinit
More file actions
executable file
·136 lines (110 loc) · 3.58 KB
/
init
File metadata and controls
executable file
·136 lines (110 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/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