#!/bin/sh #---------------------------------------------------------------------------- # /var/install/bin/system-convert-eth-to-udevname - convert to udev # # Creation : 2016-12-18 hbfl # Last Update: $Id$ # # Copyright (c) 2016-@@YEAR@@ the eisfair team, team(at)eisfair(dot)org # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. #---------------------------------------------------------------------------- . /var/install/include/eislib # --------------------------------------------------------------------------- # remove menu entry # --------------------------------------------------------------------------- remove_menu_entry() { /var/install/bin/del-menu \ setup.system.menu \ system-convert-eth-to-udevname # rm -f /var/install/bin/system-convert-eth-to-udevname } # --------------------------------------------------------------------------- # list devices # --------------------------------------------------------------------------- list_devices() { # get eth devices to list local eth_device=$(find /sys/class/net -maxdepth 1 -type l -name 'eth*' -printf '%f\n') clrhome mecho --info 'Found eth devices' echo echo techo --begin '4 10 6 20' techo --row '' --info 'eth name' '' --info 'udev name' echo echo "${eth_device}" | while read line do # get udev name from eth device udev_name=$(udevadm test-builtin net_id \ /sys/class/net/${line} 2>/dev/null | awk -F'=' '/ID_NET_NAME_MAC/ {print $2}') # show eth device name --> udev device name techo --row '' "${line}" '-->' "${udev_name}" done techo --end echo _ask_tmpfile=$(/usr/bin/mktemp -t XXXXXXXXXXXXX) /var/install/bin/ask "Convert eth devices to new udev name?" >${_ask_tmpfile} rc=${?} read a < ${_ask_tmpfile} rm -f ${_ask_tmpfile} # if ask break, ask return 255 if [ ${rc} = 255 ] then a="no" fi case ${a} in yes) change_devices ;; *) return 0 ;; esac } # --------------------------------------------------------------------------- # change devices # --------------------------------------------------------------------------- change_devices() { # check first for bonding if [ "${START_BONDING}" = "yes" ] then idx=1 while [ ${idx} -le ${BONDING_N} ] do idy=1 eval incount='${BONDING_'${idx}'_DEV_N}' while [ "${idy}" -le "${incount}" ] do eval eth_name='${BONDING_'${idx}'_DEV_'${idy}'}' # check for virtuell network device eth_virt='' if echo "${eth_name}" | grep -q ':' then eth_virt=":$(echo ${eth_name} | cut -d ':' -f2)" eth_name=$(echo ${eth_name} | cut -d ':' -f1) fi # get udev device name udev_name=$(udevadm test-builtin net_id \ /sys/class/net/${eth_name} 2>/dev/null | awk -F'=' '/ID_NET_NAME_MAC/ {print $2}') # old_entry="BONDING_${idx}_DEV_${idy}='${eth_name}${eth_virt}'" # new_entry="BONDING_${idx}_DEV_${idy}='${udev_name}${eth_virt}'" # rewrite the name in base config # sed -i "s/${old_entry}/${new_entry}/" /etc/config.d/base old_entry="${eth_name}${eth_virt}" new_entry="${udev_name}${eth_virt}" sed -i "/BONDING_${idx}_DEV_${idy}/ s/${old_entry}/${new_entry}/" /etc/config.d/base idy=$((${idy} + 1)) done idx=$((${idx} + 1)) done fi # get number of eth controller con_n=$(lspci -nn | grep -c 'Ethernet controller') if [ ${con_n} -ge 2 ] || [ ${IP_ETH_N} -ge 2 ] then idx=1 while [ ${idx} -le ${IP_ETH_N:-0} ] do eval eth_name='${IP_ETH_'${idx}'_NAME}' # if name empty set default to eth if [ -z "${eth_name}" ] then idy=$((${idx} - 1)) eth_name=eth${idy} eth_empty=true fi # check for virtuell network device eth_virt='' if echo "${eth_name}" | grep -q ':' then eth_virt=":$(echo ${eth_name} | cut -d ':' -f2)" eth_name=$(echo ${eth_name} | cut -d ':' -f1) fi # get udev name udev_name=$(udevadm test-builtin net_id \ /sys/class/net/${eth_name} 2>/dev/null | awk -F'=' '/ID_NET_NAME_MAC/ {print $2}') # was device name empty, clear $name to rewrite if ${eth_empty:-false} then eth_name='' fi old_entry="IP_ETH_${idx}_NAME='${eth_name}${eth_virt}'" new_entry="IP_ETH_${idx}_NAME='${udev_name}${eth_virt}'" # rewrite the name in base config sed -i "s/${old_entry}/${new_entry}/" /etc/config.d/base idx=$((${idx} + 1)) done else # rewrite for one network device, if the name given eval eth_name='${IP_ETH_1_NAME}' if [ -n "${eth_name}" ] then eth_virt='' if echo "${eth_name}" | grep -q ':' then eth_virt=":$(echo ${eth_name} | cut -d ':' -f2)" eth_name=$(echo ${eth_name} | cut -d ':' -f1) fi # get udev name udev_name=$(udevadm test-builtin net_id \ /sys/class/net/${eth_name} 2>/dev/null | awk -F'=' '/ID_NET_NAME_MAC/ {print $2}') # old_entry="IP_ETH_${idx}_NAME='${eth_name}${eth_virt}'" # new_entry="IP_ETH_${idx}_NAME='${udev_name}${eth_virt}'" # rewrite the name in base config # sed -i "s/${old_entry}/${new_entry}/" /etc/config.d/base old_entry="${eth_name}${eth_virt}" new_entry="${udev_name}${eth_virt}" sed -i "/IP_ETH_1_NAME/ s/${old_entry}/${new_entry}/" /etc/config.d/base fi fi # delete udev rule rm -f /etc/udev/rules.d/70-persistent-net.rules # write check file echo 'DateTime' >/run/udev-names # check for existing net.ifnames entry in /etc/lilo.conf # and set the correct value based on existing networkdevices net_ifnames_entry=$(grep -c 'net.ifnames' /etc/lilo.conf) net_ifnames0=$(grep -c 'net.ifnames=0' /etc/lilo.conf) net_ifnames1=$(grep -c 'net.ifnames=1' /etc/lilo.conf) if [ ${net_ifnames_entry} -ne 0 ] then if [ ${net_ifnames1} -ne ${net_ifnames_entry} ] then sed -i 's#net.ifnames=0#net.ifnames=1#' /etc/lilo.conf lilo_require=true fi # rebuild bootloader, if the value has changed if ${lilo_require:-false} then /sbin/lilo fi fi # remove menu and file from system # remove_menu_entry mecho --warn 'Boot configuration has been changed; reboot recommended!' } # --------------------------------------------------------------------------- # main # --------------------------------------------------------------------------- main() { # check if eth devices exist local eth_devices=$(find /sys/class/net -maxdepth 1 -type l -name 'eth*') if [ -n "${eth_devices}" ] then # include base config . /etc/config.d/base if [ "${START_BONDING}" = "yes" ] then /etc/init.d/bonding stop fi list_devices if [ "${START_BONDING}" = "yes" ] then /etc/init.d/bonding start fi else mecho -n --info 'No ' mecho -n --std "'eth' " mecho --info 'devices found, is all OK' fi anykey exit 0 } # --------------------------------------------------------------------------- # call function main # --------------------------------------------------------------------------- main "${@}" # --------------------------------------------------------------------------- # end # ---------------------------------------------------------------------------