Linux From Scratch - Version 7.0

Chapter 7. Setting Up System Bootscripts

7.2. General
Network Configuration

This section only applies if a network card is to be configured.

If a network card will not be used, there is likely no need to create
any configuration files relating to network cards. If that is the
case, remove the network symlinks from
all run-level directories (/etc/rc.d/rc*.d).

7.2.1. Creating stable names for network interfaces

If there is only one network interface in the system to be
configured, this section is optional, although it will never be
wrong to do it. In many cases (e.g. a laptop with a wireless and a
wired interface), accomplishing the configuration in this section
is necessary.

With Udev and modular network drivers, the network interface
numbering is not persistent across reboots by default, because the
drivers are loaded in parallel and, thus, in random order. For
example, on a computer having two network cards made by Intel and
Realtek, the network card manufactured by Intel may become
eth0 and the Realtek card becomes
eth1. In some cases, after a reboot
the cards get renumbered the other way around. To avoid this, Udev
comes with a script and some rules to assign stable names to
network cards based on their MAC address.

Pre-generate the rules to ensure the same names get assigned to the
same devices at every boot, including the first:

Now, inspect the /etc/udev/rules.d/70-persistent-net.rules file,
to find out which name was assigned to which network device:

cat /etc/udev/rules.d/70-persistent-net.rules

The file begins with a comment block followed by two lines for each
NIC. The first line for each NIC is a commented description showing
its hardware IDs (e.g. its PCI vendor and device IDs, if it's a PCI
card), along with its driver in parentheses, if the driver can be
found. Neither the hardware ID nor the driver is used to determine
which name to give an interface; this information is only for
reference. The second line is the Udev rule that matches this NIC
and actually assigns it a name.

All Udev rules are made up of several keys, separated by commas and
optional whitespace. This rule's keys and an explanation of each of
them are as follows:

SUBSYSTEM=="net" - This tells
Udev to ignore devices that are not network cards.

ACTION=="add" - This tells Udev
to ignore this rule for a uevent that isn't an add ("remove"
and "change" uevents also happen, but don't need to rename
network interfaces).

DRIVERS=="?*" - This exists so
that Udev will ignore VLAN or bridge sub-interfaces (because
these sub-interfaces do not have drivers). These
sub-interfaces are skipped because the name that would be
assigned would collide with their parent devices.

ATTR{address} - The value of
this key is the NIC's MAC address.

ATTR{type}=="1" - This ensures
the rule only matches the primary interface in the case of
certain wireless drivers, which create multiple virtual
interfaces. The secondary interfaces are skipped for the same
reason that VLAN and bridge sub-interfaces are skipped: there
would be a name collision otherwise.

KERNEL=="eth*" - This key was
added to the Udev rule generator to handle machines that have
multiple network interfaces, all with the same MAC address
(the PS3 is one such machine). If the independent interfaces
have different basenames, this key will allow Udev to tell
them apart. This is generally not necessary for most Linux
From Scratch users, but does not hurt.

NAME - The value of this key is
the name that Udev will assign to this interface.

The value of NAME is the important
part. Make sure you know which name has been assigned to each of
your network cards before proceeding, and be sure to use that
NAME value when creating your
configuration files below.

7.2.2. Creating Network Interface Configuration Files

Which interfaces are brought up and down by the network script
depends on the files in /etc/sysconfig/. This directory should contain a
file for each interface to be configured, such as ifconfig.xyz, where “xyz” is meaningful to the administrator such
as the device name (e.g. eth0). Inside this file are attributes to
this interface, such as its IP address(es), subnet masks, and so
forth. It is necessary that the stem of the filename be
ifconfig.

The following command creates a sample file for the eth0 device with a static IP address:

The values of these variables must be changed in every file to
match the proper setup.

If the ONBOOT variable is set to
“yes” the network script
will bring up the Network Interface Card (NIC) during booting of
the system. If set to anything but “yes” the NIC will be ignored by the network
script and not be automatically brought up. The interface can be
manually started or stopped with the ifup and ifdown commands.

The IFACE variable defines the interface
name, for example, eth0. It is required for all network device
configuration files.

The SERVICE variable defines the method
used for obtaining the IP address. The LFS-Bootscripts package has
a modular IP assignment format, and creating additional files in
the /lib/services/ directory allows
other IP assignment methods. This is commonly used for Dynamic Host
Configuration Protocol (DHCP), which is addressed in the BLFS book.

The GATEWAY variable should contain the
default gateway IP address, if one is present. If not, then comment
out the variable entirely.

The PREFIX variable needs to contain the
number of bits used in the subnet. Each octet in an IP address is 8
bits. If the subnet's netmask is 255.255.255.0, then it is using
the first three octets (24 bits) to specify the network number. If
the netmask is 255.255.255.240, it would be using the first 28
bits. Prefixes longer than 24 bits are commonly used by DSL and
cable-based Internet Service Providers (ISPs). In this example
(PREFIX=24), the netmask is 255.255.255.0. Adjust the PREFIX variable according to your specific subnet.

7.2.3. Creating the
/etc/resolv.conf File

If the system is going to be connected to the Internet, it will
need some means of Domain Name Service (DNS) name resolution to
resolve Internet domain names to IP addresses, and vice versa. This
is best achieved by placing the IP address of the DNS server,
available from the ISP or network administrator, into /etc/resolv.conf. Create the file by running the
following:

The domain statement can be omitted or
replaced with a search statement. See
the man page for resolv.conf for more details.

Replace <IP address of the
nameserver> with the IP address of the DNS most
appropriate for the setup. There will often be more than one entry
(requirements demand secondary servers for fallback capability). If
you only need or want one DNS server, remove the second
nameserver line from the
file. The IP address may also be a router on the local network.