-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathlinux-init
executable file
·81 lines (61 loc) · 1.6 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
#!/bin/bash
# Exit on first error
set -e
# Debug
# echo "Env: $(env)"
# echo "Cmdline: $(cat /proc/cmdline)"
rm -f ${WORKDIR}/.exit_code
save_and_shutdown() {
# Default exit code
if [ ! -f ${WORKDIR}/.exit_code ]; then
echo 42 > ${WORKDIR}/.exit_code
fi
# save built for host result
# force clean shutdown
echo KILLING
kill -9 $(jobs -p)
halt -f
}
# 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 /var/lib/docker with a tmpfs
mount -t tmpfs none /var/lib/docker
# 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
docker -d &
sleep 5
# Call command
command=$(cat ${WORKDIR}/.command)
set +e
/bin/bash -ce "${command}"
echo $? > ${WORKDIR}/.exit_code