Prepare master for new framework integration
[AGL/meta-agl.git] / meta-netboot / recipes-core / initramfs-netboot / files / init.sh
index 7b8fbb5..92927df 100644 (file)
@@ -21,7 +21,6 @@ EOF
 
 # global variables
 
-SMACK=n
 NBD_SERVER=
 NBD_PORT=10809
 NBD_DEV=/dev/nbd0
@@ -57,6 +56,29 @@ check_debug() {
        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
@@ -86,23 +108,12 @@ check_debug "Debug point 1. Exit to continue initrd script (mount NBD device)."
 
 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; }
@@ -131,17 +142,19 @@ 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
-chsmack -A /etc/resolv.conf
 
-# unmount tmp and run to let systemd remount them with correct smack labels (SPEC-2596)
+# unmount tmp and run to let systemd remount them
 log_info "Unmounting /tmp and /run"
 umount /tmp
 umount /run