Cobbler解决网卡名字问题

存储架构 陈沙克日志 (源链)

CentOS7,网卡名字,采用consistent network device naming,简单的说,网络的名字,已经不是以前的eth0,eth1,你装系统前,你根本就不知道他叫啥名字。

这样的命名,好处就是你机器重启,增加pci设备,不会导致原来的设备名称发生改变。如果我们通过grub,修改内核的方式,改变回到以前的网卡命名,这种方式在新的设备里,会出现很多问题,你会发现每次重启机器,网卡名字都是会改变,一直都是在不停的变化,让你疯掉。

所以最佳的办法,就是还是使用装系统的时候默认网卡是啥名字就是什么名字。那么对于cobbler来说,

cobbler system  add 
--name=vm1 
--hostname=vm1 
--profile=CentOS7-x86_64 
--interface=eth0 
--mac=00:50:56:35:61:5C 
--ip-address=192.168.27.100 
--subnet=255.255.255.0 
--gateway=192.168.27.0 
--static=1

你是必须指定网卡名字的。

我们可以考虑通过cobbler提供的snippet来解决这个问题。

目前cobbler提供 pre_install_network_config,还不能很好解决这个问题。

cd /var/lib/cobbler/snippets
mv pre_install_network_config pre_install_network_config.save

我们创建一个新的 pre_install_network_config

#if $getVar("system_name","") != ""
# Start pre_install_network_config generated code
#raw
# generic functions to be used later for discovering NICs
mac_exists() {
  [ -z "$1" ] && return 1

  if which ip 2>/dev/null >/dev/null; then
    ip -o link | grep -i "$1" 2>/dev/null >/dev/null
    return $?
  elif which esxcfg-nics 2>/dev/null >/dev/null; then
    esxcfg-nics -l | grep -i "$1" 2>/dev/null >/dev/null
    return $?
  else
    ifconfig -a | grep -i "$1" 2>/dev/null >/dev/null
    return $?
  fi
}
get_ifname() {
  if which ip 2>/dev/null >/dev/null; then
    IFNAME=$(ip -o link | grep -i "$1" | sed -e 's/^[0-9]*: //' -e 's/:.*//')
  elif which esxcfg-nics 2>/dev/null >/dev/null; then
    IFNAME=$(esxcfg-nics -l | grep -i "$1" | cut -d " " -f 1)
  else
    IFNAME=$(ifconfig -a | grep -i "$1" | cut -d " " -f 1)
    if [ -z $IFNAME ]; then
      IFNAME=$(ifconfig -a | grep -i -B 2 "$1" | sed -n '/flags/s/:.*$//p')
    fi
  fi
}
#end raw
    #set ikeys = $interfaces.keys()
    #import re
    #set $vlanpattern = $re.compile("[a-zA-Z0-9]+[.][0-9]+")
    #set $routepattern = $re.compile("[0-9/.]+:[0-9.]+")
    ##
    ## Determine if we should use the MAC address to configure the interfaces first
    ## Only physical interfaces are required to have a MAC address
    #set $configbymac = True
    #for $iname in $ikeys
        #set $idata = $interfaces[$iname]
        #if $idata["mac_address"] == "" and not $vlanpattern.match($iname) and not $idata["interface_type"].lower() in ("master","bond","bridge","bonded_bridge_slave")
            #set $configbymac = False
        #end if
    #end for
    #set $i = 0

    #if $configbymac
        ## Output diagnostic message
# Start of code to match cobbler system interfaces to physical interfaces by their mac addresses
    #end if
    #for $iname in $ikeys
#  Start $iname
        #set $idata         = $interfaces[$iname]
        #set $mac           = $idata["mac_address"]
        #set $static        = $idata["static"]
        #set $ip            = $idata["ip_address"]
        #set $netmask       = $idata["netmask"]
        #set $iface_type    = $idata["interface_type"]
        #set $iface_master  = $idata["interface_master"]
        #set $if_gateway    = $idata["if_gateway"]
        #set $static_routes = $idata["static_routes"]
        #set $devfile       = "/etc/sysconfig/network-scripts/ifcfg-" + $iname
        #if $vlanpattern.match($iname)
            ## If this is a VLAN interface, skip it, anaconda doesn't know
            ## about VLANs.
            #set $is_vlan = "true"
        #else
            #set $is_vlan = "false"
        #end if
        #if ($configbymac and $is_vlan == "false" and $iface_type.lower() not in ("slave","bond_slave","bridge_slave","bonded_bridge_slave")) or $iface_type.lower() in ("master","bond","bridge")
            ## This is a physical interface, hand it to anaconda. Do not
            ## process slave interface here.
            #if $iface_type.lower() in ("master","bond","bridge","bonded_bridge_slave")
                ## Find a slave for this interface
                #for $tiname in $ikeys
                    #set $tidata = $interfaces[$tiname]
                    #if $tidata["interface_type"].lower() in ("slave","bond_slave","bridge_slave") and $tidata["interface_master"].lower() == $iname
                        #if $tidata["mac_address"] != '':
                            #set $mac = $tidata["mac_address"]
#  Found a slave for this interface: $tiname ($mac)
                            #break
                        #end if
                    #else if $tidata["interface_type"].lower() == "bonded_bridge_slave" and $tidata["interface_master"].lower() == $iname
                        ## find a slave for this slave interface...
                        #for $stiname in $ikeys
                            #set $stidata = $interfaces[$stiname]
                            #if $stidata["interface_type"].lower() in ("slave","bond_slave","bridge_slave") and $stidata["interface_master"].lower() == $tiname
                                #if $stidata["mac_address"] != '':
                                    #set $mac = $stidata["mac_address"]
#  Found a slave for this interface: $tiname -> $stiname ($mac)
                                    #break
                                #end if
                            #end if
                        #end for
                    #end if
                #end for
            #end if
            #if $static and $ip != ""
                #if $netmask == ""
                    ## Netmask not provided, default to /24.
                    #set $netmask = "255.255.255.0"
                #end if
                #set $netinfo = "--bootproto=static --ip=%s --netmask=%s" % ($ip, $netmask)
                #if $if_gateway != ""
	            #set $netinfo = "%s --gateway=%s" % ($netinfo, $if_gateway)
                #else
                    #set $netinfo = "%s --gateway=0.0.0.0" % ($netinfo)
                #end if
    	        #if $len($name_servers) > 0
    	            #set $netinfo = "%s --nameserver=%s" % ($netinfo, $name_servers[0])
                #end if
            #else if not $static
                #set $netinfo = "--bootproto=dhcp"
            #else
                ## Skip this interface, it's set as static, but without
                ## networking info.
#  Skipping (no configuration)...
                #continue
            #end if
            #if $hostname != ""
                #set $netinfo = "%s --hostname=%s" % ($netinfo, $hostname)
            #end if
# Configuring $iname ($mac)
if mac_exists $mac
then
  get_ifname $mac
  echo "network --device=$IFNAME $netinfo " >> /tmp/pre_install_network_config
            #for $route in $static_routes
                #if $routepattern.match($route)
                    #set $routebits = $route.split(":")
                    #set [$network, $router] = $route.split(":")
  ip route add $network via $router dev $IFNAME
                #else
  # Warning: invalid route "$route"
                #end if
            #end for
fi
        #else
            #if $iface_type.lower() in ("slave","bond_slave","bridge_slave","bonded_bridge_slave")
#  Skipping (slave-interface)
            #else
#  Skipping (not a physical interface)...
            #end if
        #end if
    #end for
# End pre_install_network_config generated code
#end if

这样cobbler默认使用的sample.ks来安装centos 7.x,那么网卡名字,就会和系统默认是一致的。

上面的snippet是我同事 http://zhanguo1110.blog.51cto.com/5750817/1671442
写的。

参考文档

https://access.redhat.com/discussions/916973

您可能感兴趣的

Download iOS 11 Beta 3, MacOS 10.13 Beta 3 Now Ava... Apple has released the third beta versions of iOS 11, macOS 10.13 High Sierra, and tvOS 11 for users participating in the beta testing programs. ...
网络数据帧与 MTU github 原文地址 以太帧(Ethernet Frame) 以太帧的发展历史得从以太网说起: 1973 年, Bob Metcalfe 在 Xerox 和同事一起发明了以太网, 具体过程可以参考 以太网的发展历史 . 1979 年...
How to install Chevereto Image Hosting on Ubuntu 1... Chevereto is a free, open source and easy to use image hosting script written in PHP language that allows you to create your own image hosting website...
New High Sierra bug lets you change App Store pref... A new bug has been discovered on devices running macOS High Sierra that allows anyone to access your App Store system preferences. The bug was sp...
A Veritable Hiring Frenzy Posted By Paul Kafasis on August 26th, 2016 If you follow us on Twitter , you may have seen a recent tweet announcing that we had not o...
陈沙克日志责编内容来自:陈沙克日志 (源链) | 更多关于

阅读提示:酷辣虫无法对本内容的真实性提供任何保证,请自行验证并承担相关的风险与后果!
本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » Cobbler解决网卡名字问题



专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录