blob: 24681123cdb2a6f3f73a6a507e8ddce8267588a9 (
plain)
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
|
#!/bin/sh
# set -e
Live ()
{ if [ -x /scripts/local-top/mdadm ]; then
/scripts/local-top/mdadm
fi
if [ -x /scripts/local-top/cryptroot ]
then
/scripts/local-top/cryptroot
fi
exec 6>&1
exec 7>&2
exec > boot.log
exec 2>&1
tail -f boot.log >&7 &
tailpid="${!}"
LIVE_BOOT_CMDLINE="${LIVE_BOOT_CMDLINE:-$(cat /proc/cmdline)}"
Cmdline_old
Debug
Read_only
Select_eth_device
if [ -e /conf/param.conf ]
then
. /conf/param.conf
fi
# Needed here too because some things (*cough* udev *cough*)
# changes the timeout
if [ ! -z "${NETBOOT}" ] || [ ! -z "${FETCH}" ] || [ ! -z "${HTTPFS}" ] || [ ! -z "${FTPFS}" ]
then
if do_netmount
then
livefs_root="${mountpoint}"
else
panic "Unable to find a live file system on the network"
fi
else
if [ -n "${ISCSI_PORTAL}" ]
then
do_iscsi && livefs_root="${mountpoint}"
elif [ -n "${PLAIN_ROOT}" ] && [ -n "${ROOT}" ]
then
# Do a local boot from hd
livefs_root=${ROOT}
else
if [ -x /usr/bin/memdiskfind ]
then
MEMDISK=$(/usr/bin/memdiskfind)
if [ $? -eq 0 ]
then
# We found a memdisk, set up phram
modprobe phram phram=memdisk,${MEMDISK}
# Load mtdblock, the memdisk will be /dev/mtdblock0
modprobe mtdblock
fi
fi
# Scan local devices for the image
i=0
while [ "$i" -lt 60 ]
do
livefs_root=$(find_livefs ${i})
if [ -n "${livefs_root}" ]
then
break
fi
sleep 1
i="$(($i + 1))"
done
fi
fi
if [ -z "${livefs_root}" ]
then
panic "Unable to find a medium containing a live file system"
fi
Verify_checksums "${livefs_root}"
if [ "${TORAM}" ]
then
live_dest="ram"
elif [ "${TODISK}" ]
then
live_dest="${TODISK}"
fi
if [ "${live_dest}" ]
then
log_begin_msg "Copying live media to ${live_dest}"
copy_live_to "${livefs_root}" "${live_dest}"
log_end_msg
fi
# if we do not unmount the ISO we can't run "fsck /dev/ice" later on
# because the mountpoint is left behind in /proc/mounts, so let's get
# rid of it when running from RAM
if [ -n "$FROMISO" ] && [ "${TORAM}" ]
then
losetup -d /dev/loop0
if is_mountpoint /live/fromiso
then
umount /live/fromiso
rmdir --ignore-fail-on-non-empty /live/fromiso \
>/dev/null 2>&1 || true
fi
fi
if [ -n "${MODULETORAMFILE}" ] || [ -n "${PLAIN_ROOT}" ]
then
setup_unionfs "${livefs_root}" "${rootmnt}"
else
mac="$(get_mac)"
mac="$(echo ${mac} | sed 's/-//g')"
mount_images_in_directory "${livefs_root}" "${rootmnt}" "${mac}"
fi
# At this point /root should contain the final root filesystem.
# Move all mountpoints below /live into /root/lib/live/mount.
# This has to be done after mounting the root filesystem to /
# otherwise these mount points won't be accessible from the running system.
for _MOUNT in $(cat /proc/mounts | cut -f 2 -d " " | grep -e "^/live/")
do
local newmount
newmount="${rootmnt}/lib/live/mount/${_MOUNT#/live/}"
mkdir -p "${newmount}"
mount -o move "${_MOUNT}" "${newmount}" > /dev/null 2>&1 || \
mount -o bind "${_MOUNT}" "${newmount}" > /dev/null || \
log_warning_msg "W: failed to move or bindmount ${_MOUNT} to ${newmount}"
done
if [ -n "${ROOT_PID}" ]
then
echo "${ROOT_PID}" > "${rootmnt}"/lib/live/root.pid
fi
log_end_msg
# aufs2 in kernel versions around 2.6.33 has a regression:
# directories can't be accessed when read for the first the time,
# causing a failure for example when accessing /var/lib/fai
# when booting FAI, this simple workaround solves it
ls /root/* >/dev/null 2>&1
# if we do not unmount the ISO we can't run "fsck /dev/ice" later on
# because the mountpoint is left behind in /proc/mounts, so let's get
# rid of it when running from RAM
if [ -n "$FINDISO" ] && [ "${TORAM}" ]
then
losetup -d /dev/loop0
if is_mountpoint /root/lib/live/mount/findiso
then
umount /root/lib/live/mount/findiso
rmdir --ignore-fail-on-non-empty /root/lib/live/mount/findiso \
>/dev/null 2>&1 || true
fi
fi
if [ -L /root/etc/resolv.conf ] ; then
# assume we have resolvconf
DNSFILE="${rootmnt}/etc/resolvconf/resolv.conf.d/base"
else
DNSFILE="${rootmnt}/etc/resolv.conf"
fi
if [ -f /etc/resolv.conf ] && [ ! -s ${DNSFILE} ]
then
log_begin_msg "Copying /etc/resolv.conf to ${DNSFILE}"
cp -v /etc/resolv.conf ${DNSFILE}
log_end_msg
fi
if ! [ -d "/lib/live/boot" ]
then
panic "A wrong rootfs was mounted."
fi
Fstab
Netbase
Swap
Vyos
exec 1>&6 6>&-
exec 2>&7 7>&-
kill ${tailpid}
[ -w "${rootmnt}/var/log/" ] && mkdir -p "${rootmnt}/var/log/live" && cp boot.log "${rootmnt}/var/log/live" 2>/dev/null
}
|