SUSE Conversations


AutoYaST: Network Auto Configuration Script

cseader

By: cseader

April 20, 2007 7:18 pm

Reads:157

Comments:0

Rating:0

Application:

If you have an environment where you want to use one single Autoinst.xml for setting up your systems, and you want them all to have different static IP addresses for one Active Ethernet interface, then the following should help you accomplish this goal.

Explanation:

There are two assumptions made before using this script.

  1. Your DNS is defined for each host that is getting setup with this script/Autoinst.xml.
  2. Your DHCP is setup so that each host that is getting setup with this script/Autoinst.xml has a static host definition defined in the dhcpd.conf.

Here is an example of a static host definition:

group test{
# Hosts List.
host test-host1 { fixed-address 172.18.0.100; hardware ethernet 00:11:22:33:44:55; }
host test-host2 { fixed-address 172.18.0.101; hardware ethernet 00:22:99:88:77:66; }
}

This script takes the dynamic address information received and makes it into a static configuration. Keeping that in mind we need to execute this script at a point during the installation that it won’t interfere with the rest of the install. One such point that stands out to me is during the Init Scripts element of the AutoYaST xml. You can find reference to the syntax of this element in the following locations.

Script:

Copy the text below and paste it into the Init Scripts element of your Autoinst.xml.

#!/bin/bash
#network_setup.sh

### Disable IPV6 - comment this line out if you don't want to disable IPV6
echo 'install ipv6 /bin/true' >> /etc/modprobe.conf.local

### Variables to Calculate Network Configuration Settings for a static configuration 
ACTIVE_INTERFACE=`/sbin/ifconfig | grep eth | awk '{print $1}'`
IP_ADDRESS=`/sbin/ifconfig $ACTIVE_INTERFACE | grep 'inet addr' | awk '{print $2}' | sed 's/addr://'`
NETMASK=`/sbin/ifconfig $ACTIVE_INTERFACE | grep 'inet addr' | awk '{print $4}' | sed 's/Mask://'`
BROADCAST=`/sbin/ifconfig $ACTIVE_INTERFACE | grep Bcast: | awk '{ print $3 }' | sed 's/Bcast://'`
NETWORK=`/sbin/ip route list | grep $IP_ADDRESS | awk '{ print $1 }' | sed 's/\/[1-9][1-9]//'`
GATEWAY=`/sbin/route | grep default | awk '{print $2}'`
HOSTNAME=`/usr/bin/host $IP_ADDRESS | awk '{print $5}' | sed '$s/.$//'`

### Setup HOSTNAME
echo "$HOSTNAME" > /etc/HOSTNAME

### Setup Gateway Address
echo "default $GATEWAY - -" > /etc/sysconfig/network/routes

### Setup /etc/hosts with correct host information
HOST=`/usr/bin/host $IP_ADDRESS | awk '{print $5}' | sed '$s/.$//' | cut -d "." -f 1`
echo "$IP_ADDRESS   $HOSTNAME $HOST" >> /etc/hosts

### Network configuration file rewrite for static configuration

INT_CONF_FILE=/etc/sysconfig/network/ifcfg-eth-id-`ifconfig eth0 | grep HWaddr | awk '{ print $5 }' | perl -ne '$var=$_; print lc($var)'`

echo 'DEVICE=eth0' > $INT_CONF_FILE
echo 'BOOTPROTO=static' >> $INT_CONF_FILE
echo "IPADDR=$IP_ADDRESS" >> $INT_CONF_FILE
echo "NETMASK=$NETMASK" >> $INT_CONF_FILE
echo "BROADCAST=$BROADCAST" >> $INT_CONF_FILE
echo "NETWORK=$NETWORK" >> $INT_CONF_FILE
echo 'STARTMODE=onboot' >> $INT_CONF_FILE
echo 'TYPE=Ethernet' >> $INT_CONF_FILE

### Restart Network
/etc/init.d/network restart

Once you have it copied into the Autoinst.xml in the Init Scripts element it will look like the example below. Feel free to copy this straight out of here and put it in your Autoinst.xml if you would like.

    <scripts>
      <init-scripts config:type="list">
        <listentry>
          <filename>network_setup</filename>
          <interpreter>shell</interpreter>
          <source><![CDATA[#!/bin/bash
### Disable ipv6
echo 'install ipv6 /bin/true' >> /etc/modprobe.conf.local

### Variables to Calculate Network Configuration Settings for a static configuration ###
ACTIVE_INTERFACE=`/sbin/ifconfig | grep eth | awk '{print $1}'`
IP_ADDRESS=`/sbin/ifconfig $ACTIVE_INTERFACE | grep 'inet addr' | awk '{print $2}' | sed 's/addr://'`
NETMASK=`/sbin/ifconfig $ACTIVE_INTERFACE | grep 'inet addr' | awk '{print $4}' | sed 's/Mask://'`
BROADCAST=`/sbin/ifconfig $ACTIVE_INTERFACE | grep Bcast: | awk '{ print $3 }' | sed 's/Bcast://'`
NETWORK=`/sbin/ip route list | grep $IP_ADDRESS | awk '{ print $1 }' | sed 's/\/[1-9][1-9]//'`
GATEWAY=`/sbin/route | grep default | awk '{print $2}'`
HOSTNAME=`/usr/bin/host $IP_ADDRESS | awk '{print $5}' | sed '$s/.$//'`

### Setup HOSTNAME
echo "$HOSTNAME" > /etc/HOSTNAME

### Setup Gateway Address
echo "default $GATEWAY - -" > /etc/sysconfig/network/routes

### Setup /etc/hosts with correct host information
HOST=`/usr/bin/host $IP_ADDRESS | awk '{print $5}' | sed '$s/.$//' | cut -d "." -f 1`
echo "$IP_ADDRESS   $HOSTNAME $HOST" >> /etc/hosts

### Network configuration file rewrite for static configuration

INT_CONF_FILE=/etc/sysconfig/network/ifcfg-eth-id-`ifconfig eth0 | grep HWaddr | awk '{ print $5 }' | perl -ne '$var=$_; print lc($var)'`

echo 'DEVICE=eth0' > $INT_CONF_FILE
echo 'BOOTPROTO=static' >> $INT_CONF_FILE
echo "IPADDR=$IP_ADDRESS" >> $INT_CONF_FILE
echo "NETMASK=$NETMASK" >> $INT_CONF_FILE
echo "BROADCAST=$BROADCAST" >> $INT_CONF_FILE
echo "NETWORK=$NETWORK" >> $INT_CONF_FILE
echo 'STARTMODE=onboot' >> $INT_CONF_FILE
echo 'TYPE=Ethernet' >> $INT_CONF_FILE

### Restart Network
/etc/init.d/network restart
]]></source>
        </listentry>
      </init-scripts>
    </scripts>

Now run through an AutoYaST installation and see how it works out. If you run into trouble you can look at the installation logs at /var/adm/YaST/.

You could in fact adapt this script to auto configure multiple Ethernet Interfaces if you had the need.

10/03/2007 – Note: With SLE10 you will need to modify the lines for Disabling ipv6, you can comment out the line that I include above and add in the follwing lines.

sed -e "s/^#//" /etc/modprobe.d/ipv6 > /etc/modprobe.d/ipv6.new
cp /etc/modprobe.d/ipv6 /etc/modprobe.d/ipv6.orig
cp /etc/modprobe.d/ipv6.new /etc/modprobe.d/ipv6 

Enjoy!!

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)

Categories: Uncategorized

Disclaimer: As with everything else at SUSE Conversations, this content is definitely not supported by SUSE (so don't even think of calling Support if you try something and it blows up).  It was contributed by a community member and is published "as is." It seems to have worked for at least one person, and might work for you. But please be sure to test, test, test before you do anything drastic with it.

Comment

RSS