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, you will need to remove the network
symlinks from all run-level directories
(/etc/rc.d/rc*.d
) after the bootscripts
are installed in Section 7.6,
“LFS-Bootscripts-20130821”.
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.
The rules were pre-generated in the build instructions for
udev (systemd) in the last
chapter. 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
In some cases such as when MAC addresess have been assigned to a network card manually or in a virtual environment such as Xen, the network rules file may not have been generated because addresses are not consistently assigned. In these cases, just continue to the next section.
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.
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:
cd /etc/sysconfig/
cat > ifconfig.eth0 << "EOF"
ONBOOT=yes
IFACE=eth0
SERVICE=ipv4-static
IP=192.168.1.1
GATEWAY=192.168.1.2
PREFIX=24
BROADCAST=192.168.1.255
EOF
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 contains 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.
If omitted, the PREFIX defaults to 24.
For more information see the ifup man page.
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:
cat > /etc/resolv.conf << "EOF"
# Begin /etc/resolv.conf
domain <Your Domain Name>
nameserver <IP address of your primary nameserver>
nameserver <IP address of your secondary nameserver>
# End /etc/resolv.conf
EOF
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.
The Google Public IPv4 DNS addresses are 8.8.8.8 and 8.8.4.4.