-
-
Notifications
You must be signed in to change notification settings - Fork 22
/
linux-init
executable file
·129 lines (98 loc) · 2.63 KB
/
linux-init
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
#!/bin/bash
# Exit on first error
set -e
set -x
# Debug
# echo "Env: $(env)"
# echo "Cmdline: $(cat /proc/cmdline)"
rm -f "${UMLDIR}/.exit_code"
save_and_shutdown() {
# Default exit code
if [ ! -f "${UMLDIR}/.exit_code" ]; then
echo 42 > "${UMLDIR}/.exit_code"
fi
# save built for host result
# force clean shutdown
set +e
kill -9 $(jobs -p) &>/dev/null
halt -f &>/dev/null
}
# Create /lib/modules to prevent repeated warnings
sudo mkdir -p /lib/modules/$(uname -r) && sudo depmod -a 2>/dev/null || true
# make sure we shut down cleanly
trap save_and_shutdown EXIT SIGINT SIGTERM
# go back to where we were invoked
cd "${WORKDIR}"
# configure path to include /usr/local
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# can't do much without proc!
mount -t proc none /proc
# pseudo-terminal devices
mkdir -p /dev/pts
mount -t devpts none /dev/pts
# shared memory a good idea
mkdir -p /dev/shm
mount -t tmpfs none /dev/shm
# sysfs a good idea
mount -t sysfs none /sys
# pidfiles and such like
mkdir -p /var/run
mount -t tmpfs none /var/run
# takes the pain out of cgroups
cgroups-mount
# mount backen[5~d
case ${DOCKER_BACKEND_FS} in
tmpfs)
mount -t tmpfs none /var/lib/docker
;;
host)
echo "Using host filesystem as backend"
;;
*)
echo "Unsupported backend filesystem"
exit 1
esac
# enable ipv4 forwarding for docker
echo 1 > /proc/sys/net/ipv4/ip_forward
# configure networking
ip addr add 127.0.0.1 dev lo
ip link set lo up
ip addr add 10.1.1.1/24 dev eth0
ip link set eth0 up
ip route add default via 10.1.1.254
# configure dns (google public)
mkdir -p /run/resolvconf
echo 'nameserver 8.8.8.8' > /run/resolvconf/resolv.conf
mount --bind /run/resolvconf/resolv.conf /etc/resolv.conf
# Start docker daemon
if [ "${QUIET}" -eq 0 ]; then
docker --storage-driver="${DOCKER_STORAGE_DRIVER}" -d -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 &
else
docker --storage-driver="${DOCKER_STORAGE_DRIVER}" -d -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 &>/dev/null &
fi
# Waiting for docker socket
n=0
until [ $n -ge 120 ]; do ((n++)) && sleep 0.1 && test -e /var/run/docker.sock && break; done
test -e /var/run/docker.sock || exit 1
# Print docker information
if [ "${QUIET}" -eq 0 ]; then
echo '+ docker info'
docker info
echo '+ docker version'
docker version
fi
# reset environment
. "${UMLDIR}/.envp"
# Call command
command=$(cat "${UMLDIR}/.command")
set +e
/bin/bash -xec "${command}"
echo $? > "${UMLDIR}/.exit_code"
(
set +e
mount
df -h
ls -la /dev/shm
ls -la /run/shm
ls -la /run/lock
)