Fix detection of predictable network interface names
[grml-debootstrap.git] / grml-debootstrap
index a87dbab..7953e0f 100755 (executable)
@@ -1730,12 +1730,28 @@ iface eth0 inet dhcp
 
   # add dhcp setting for Predictable Network Interface Names
   if [ -x /bin/udevadm ]; then
-    for interface in $(udevadm info -e | sed -n -e 's/E: ID_NET_NAME_PATH=\([^$*]\)/\1/p'); do
-      DEFAULT_INTERFACES="${DEFAULT_INTERFACES}
+    tmpfile=$(mktemp)
+    for interface in /sys/class/net/*; do
+      udevadm info --query=all --path="${interface}" > "${tmpfile}"
+      # skip virtual devices, like bridges, vboxnet,...
+      if grep -q 'P: /devices/virtual/net/' "${tmpfile}" ; then
+        continue
+      fi
+
+      # iterate over possible naming policies by precedence (see udev/net/link-config.c),
+      # use and stop on first match to have same behavior as udev's link_config_apply()
+      for property in ID_NET_NAME_FROM_DATABASE ID_NET_NAME_ONBOARD ID_NET_NAME_SLOT ID_NET_NAME_PATH ID_NET_NAME_MAC ; do
+        if grep -q "${property}" "${tmpfile}" ; then
+          interface=$(grep "${property}" "${tmpfile}" | sed -n -e "s/E: ${property}=\([^\$*]\)/\1/p")
+          DEFAULT_INTERFACES="${DEFAULT_INTERFACES}
 allow-hotplug ${interface}
 iface ${interface} inet dhcp
 "
+          break
+        fi
+      done
     done
+    rm -f "${tmpfile}"
   fi
 
   if [ -n "$NOINTERFACES" ] ; then
@@ -1764,16 +1780,21 @@ iface ${interface} inet dhcp
   fi
 
   if [ -n "${SSHCOPYID}" ] ; then
-    ssh-add -L > /dev/null 2>&1 ; RC=$?
-    if [ $RC -eq 0 ] ; then
+    if ssh-add -L >/dev/null 2>&1 ; then
       einfo "Use locally available public keys to authorise root login on the target system as requested via --sshcopyid option."
-      mkdir "${MNTPOINT}"/root/.ssh
+      mkdir -p "${MNTPOINT}"/root/.ssh
       chmod 0700 "${MNTPOINT}"/root/.ssh
-      ssh-add -L > "${MNTPOINT}"/root/.ssh/authorized_keys
-      eend 0
+      if ssh-add -L >> "${MNTPOINT}"/root/.ssh/authorized_keys ; then
+        eend 0
+      else
+        eerror "Error: executing 'ssh-add -L' failed."
+        eend 1
+        bailout 1
+      fi
     else
-      ewarn "Could not open a connection to your authentication agent or the agent has no identites."
-      eend $?
+      eerror "Could not open a connection to your authentication agent or the agent has no identites."
+      eend 1
+      bailout 1
     fi
   fi