# global variables
-SMACK=n
NBD_SERVER=
NBD_PORT=10809
NBD_DEV=/dev/nbd0
esac
}
+find_active_interface() {
+ [[ ! -d /sys/class/net ]] && { log_error "find_active_interface: /sys/class/net doesn't exist"; return 2; }
+ local iface
+ for x in $(ls -d /sys/class/net/* 2>/dev/null); do
+ iface=$(basename $x)
+ # find interfaces with:
+ # - type == 1 (ethernet)
+ # - not wireless
+ # - with state up
+
+ [[ $(cat $x/type) != 1 ]] && continue
+ [[ -d $x/wireless ]] && continue
+ [[ $(cat $x/operstate) != "up" ]] && continue
+
+ log_info "find_active_interface: first active interface is $iface"
+ echo $iface
+ return 0
+ done
+
+ log_error "Unable to find any active network interface."
+ return 1
+}
+
# -------------------------------------------
export PATH=/sbin:/usr/sbin:/bin:/usr/bin
log_info "NBD parameters: device $NBD_DEV, server $NBD_SERVER:$NBD_PORT"
-# check if smack is active (and if so, mount smackfs)
-grep -q smackfs /proc/filesystems && {
- SMACK=y
-
- do_mount_fs smackfs /sys/fs/smackfs
-
- # adjust current label and network label
- echo System >/proc/self/attr/current
- echo System >/sys/fs/smackfs/ambient
-}
-
# start nbd client
try=5
while :;do
log_info "Starting NBD client"
if [ -z "${NBD_NAMEV3}" ]; then
- nbd-client $NBD_SERVER $NBD_PORT $NBD_DEV && { log_info "NBD client successfully started"; break; }
+ nbd-client -persist $NBD_SERVER $NBD_PORT $NBD_DEV && { log_info "NBD client successfully started"; break; }
log_info "NBD client failed"
else
nbd3-client $NBD_SERVER $NBD_DEV --name $NBD_NAMEV3 && { log_info "NBD3 client successfully started"; break; }
# switch to new rootfs
log_info "Switching to new rootfs"
-mkdir -p run/initramfs
-pivot_root . run/initramfs || bail_out "pivot_root failed."
+mkdir -p boot/initramfs
+pivot_root . boot/initramfs || bail_out "pivot_root failed."
# workaround for connman (avoid bringing down the network interface used for booting, disable DNS proxy)
if [[ -f /lib/systemd/system/connman.service ]]; then
- log_info "Adjusting Connman configuration"
- iface=$(ip -o link show up | tr ':' ' ' | awk '{print $2}' | grep -v -e "^lo$" | head -1)
- sed -i "s|connmand -n\$|connmand -r -n -I $iface|g" /lib/systemd/system/connman.service
+ newopts="-r -n"
+ iface=$(find_active_interface)
+ [[ -n "$iface" ]] && newopts="$newopts -I $iface"
+
+ log_info "Adjusting Connman command line. Will be: 'connmand $newopts'"
+ sed -i "s|connmand -n\$|connmand $newopts|g" /lib/systemd/system/connman.service
fi
# also use /proc/net/pnp to generate /etc/resolv.conf
+rm -f /etc/resolv.conf
grep -v bootserver /proc/net/pnp | sed 's/^domain/search/g' >/etc/resolv.conf
+# unmount tmp and run to let systemd remount them
+log_info "Unmounting /tmp and /run"
+umount /tmp
+umount /run
+
# finally, run systemd
check_debug "Debug point 2. Exit to continue initrd script (run systemd)."