source: chapter07/network.xml@ 97c1e3ce

10.0 10.0-rc1 10.1 10.1-rc1 11.0 11.0-rc1 11.0-rc2 11.0-rc3 11.1 11.1-rc1 11.2 11.2-rc1 11.3 11.3-rc1 12.0 12.0-rc1 12.1 12.1-rc1 6.3 6.4 6.5 6.6 6.7 6.8 7.0 7.1 7.2 7.3 7.4 7.5 7.5-systemd 7.6 7.6-systemd 7.7 7.7-systemd 7.8 7.8-systemd 7.9 7.9-systemd 8.0 8.1 8.2 8.3 8.4 9.0 9.1 arm bdubbs/gcc13 ml-11.0 multilib renodr/libudev-from-systemd s6-init trunk xry111/arm64 xry111/arm64-12.0 xry111/clfs-ng xry111/lfs-next xry111/loongarch xry111/loongarch-12.0 xry111/loongarch-12.1 xry111/mips64el xry111/pip3 xry111/rust-wip-20221008 xry111/update-glibc
Last change on this file since 97c1e3ce was 97c1e3ce, checked in by Bryan Kadzban <bryan@…>, 17 years ago

Delete the persistent-net-generator rules file when using bus positions for network device name assignments. Fixes #1912.

git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@7853 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689

  • Property mode set to 100644
File size: 11.5 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
3 "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../general.ent">
5 %general-entities;
6]>
7
8<sect1 id="ch-scripts-network">
9 <?dbhtml filename="network.html"?>
10
11 <title>Configuring the network Script</title>
12
13 <indexterm zone="ch-scripts-network">
14 <primary sortas="d-network">network</primary>
15 <secondary>configuring</secondary></indexterm>
16
17 <para>This section only applies if a network card is to be
18 configured.</para>
19
20 <para>If a network card will not be used, there is likely no need to
21 create any configuration files relating to network cards. If that is
22 the case, remove the <filename class="symlink">network</filename>
23 symlinks from all run-level directories (<filename
24 class="directory">/etc/rc.d/rc*.d</filename>).</para>
25
26 <sect2>
27 <title>Creating stable names for network interfaces</title>
28
29 <para>Instructions in this section are optional if you have only one
30 network card.</para>
31
32 <para>With Udev and modular network drivers, the network interface numbering
33 is not persistent across reboots by default, because the drivers are loaded
34 in parallel and, thus, in random order. For example, on a computer having
35 two network cards made by Intel and Realtek, the network card manufactured
36 by Intel may become <filename class="devicefile">eth0</filename> and the
37 Realtek card becomes <filename class="devicefile">eth1</filename>. In some
38 cases, after a reboot the cards get renumbered the other way around. To
39 avoid this, create Udev rules that assign stable names to network cards
40 based on their MAC addresses or bus positions.</para>
41
42 <para>If you are going to use MAC addresses to identify your network
43 cards, find the addresses with the following command:</para>
44
45<screen role="nodump"><userinput>grep -H . /sys/class/net/*/address</userinput></screen>
46
47 <para>For each network card (but not for the loopback interface),
48 invent a descriptive name, such as <quote>realtek</quote>, and create
49 Udev rules similar to the following:</para>
50
51<screen role="nodump"><userinput>cat &gt; /etc/udev/rules.d/26-network.rules &lt;&lt; EOF
52<literal>ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="<replaceable>00:e0:4c:12:34:56</replaceable>", \
53 NAME="<replaceable>realtek</replaceable>"
54ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="<replaceable>00:a0:c9:78:9a:bc</replaceable>", \
55 NAME="<replaceable>intel</replaceable>"</literal>
56EOF</userinput></screen>
57
58<!-- Yes, I know that VLANs are beyond BLFS. This is not the reason to get them
59 incorrect by default when every distro does this right. -->
60
61 <note>
62 <para>Be aware that Udev does not recognize the backslash for line
63 continuation. The examples in this book work properly because both
64 the backslash and newline are ignored by the shell. This makes the
65 shell send each rule to cat on only one line. (The shell ignores
66 this sequence because the EOF string used in the here-document
67 redirection is not enclosed in either double or single quotes. For
68 more details, see the bash(1) manpage, and search it for "Here
69 Documents".)</para>
70 <para>If modifying Udev rules with an editor, be sure to leave each
71 rule on one physical line.</para>
72 </note>
73
74 <para>If you are going to use the bus position as the key, find the
75 position of each card with the following commands:</para>
76
77<screen role="nodump"><userinput>for dir in /sys/class/net/* ; do
78 [ -e $dir/device ] &amp;&amp; {
79 basename $dir ; readlink -f $dir/device
80 }
81done</userinput></screen>
82
83 <para>This will yield output similar to:</para>
84
85<screen role="nodump"><userinput><replaceable>eth0</replaceable>
86/sys/devices/pci0000:00/<replaceable>0000:00:0c.0</replaceable>
87<replaceable>eth1</replaceable>
88/sys/devices/pci0000:00/<replaceable>0000:00:0d.0</replaceable></userinput></screen>
89
90 <para>In this example, <replaceable>eth0</replaceable> has PCI bus position
91 <replaceable>0000:00:0c.0</replaceable> (domain 0000, bus 00, device 0c,
92 function 0), and <replaceable>eth1</replaceable> has PCI bus position
93 <replaceable>0000:00:0d.0</replaceable> (domain 0000, bus 00, device 0d,
94 function 0).</para>
95
96 <para>Now create Udev rules similar to the following:</para>
97
98<screen role="nodump"><userinput>cat &gt; /etc/udev/rules.d/26-network.rules &lt;&lt; EOF
99<literal>ACTION=="add", SUBSYSTEM=="net", BUS=="<replaceable>pci</replaceable>", KERNELS=="<replaceable>0000:00:0c.0</replaceable>", \
100 NAME="<replaceable>realtek</replaceable>"
101ACTION=="add", SUBSYSTEM=="net", BUS=="<replaceable>pci</replaceable>", KERNELS=="<replaceable>0000:00:0d.0</replaceable>", \
102 NAME="<replaceable>intel</replaceable>"</literal>
103EOF</userinput></screen>
104
105 <para>Udev has installed a rule_generator rules file that uses MAC
106 addresses, not bus positions. Rules generated by this file will conflict
107 with the rules you just created, so delete the file:</para>
108
109<screen role="nodump"><userinput>rm /etc/udev/rules.d/75-persistent-net-generator.rules</userinput></screen>
110
111 <note>
112 <para>You will also have to remember to create a new bus-position-based
113 rule each time you plug in an additional network card. In a MAC address
114 based persistence scheme, the rule_generator rules file would do this
115 automatically.</para>
116 </note>
117
118 <para>Regardless of which method you use, these rules will always rename
119 the network cards to <quote>realtek</quote> and <quote>intel</quote>,
120 independently of the original numbering provided by the kernel (i.e.: the
121 original <quote>eth0</quote> and <quote>eth1</quote> interfaces will no
122 longer exist, unless you put such <quote>descriptive</quote> names in the
123 NAME key). Use the descriptive names from the Udev rules instead of
124 <quote>eth0</quote> in the network interface configuration files
125 below.</para>
126
127 <para>Note that the rules above don't work for every setup. For example,
128 MAC-based rules break when bridges or VLANs are used, because bridges and
129 VLANs have the same MAC address as the network card. One wants to rename
130 only the network card interface, not the bridge or VLAN interface, but the
131 example rule matches both. If you use such virtual interfaces, you have two
132 potential solutions. One is to add the DRIVER=="?*" key after
133 SUBSYSTEM=="net" in MAC-based rules which will stop matching the virtual
134 interfaces. This is known to fail with some older Ethernet cards because
135 they don't have the DRIVER variable in the uevent and thus the rule does
136 not match with such cards. Another solution is to switch to rules that use
137 the bus position as a key.</para>
138
139 <para>The second known non-working case is with wireless cards using the
140 MadWifi or HostAP drivers, because they create at least two interfaces with
141 the same MAC address and bus position. For example, the Madwifi driver
142 creates both an athX and a wifiX interface where X is a digit. To
143 differentiate these interfaces, add an appropriate KERNEL parameter such as
144 KERNEL=="ath*" after SUBSYSTEM=="net".</para>
145
146 <para>There may be other cases where the rules above don't work. Currently,
147 bugs on this topic are still being reported to Linux distributions, and no
148 solution that covers every case is available.</para>
149
150 </sect2>
151
152 <sect2>
153 <title>Creating Network Interface Configuration Files</title>
154
155 <para>Which interfaces are brought up and down by the network script
156 depends on the files and directories in the <filename
157 class="directory">/etc/sysconfig/network-devices</filename> hierarchy.
158 This directory should contain a sub-directory for each interface to be
159 configured, such as <filename>ifconfig.xyz</filename>, where
160 <quote>xyz</quote> is a network interface name. Inside this directory
161 would be files defining the attributes to this interface, such as its IP
162 address(es), subnet masks, and so forth.</para>
163
164 <para>The following command creates a sample <filename>ipv4</filename>
165 file for the <emphasis>eth0</emphasis> device:</para>
166
167<screen><userinput>cd /etc/sysconfig/network-devices &amp;&amp;
168mkdir -v ifconfig.eth0 &amp;&amp;
169cat &gt; ifconfig.eth0/ipv4 &lt;&lt; "EOF"
170<literal>ONBOOT=yes
171SERVICE=ipv4-static
172IP=192.168.1.1
173GATEWAY=192.168.1.2
174PREFIX=24
175BROADCAST=192.168.1.255</literal>
176EOF</userinput></screen>
177
178 <para>The values of these variables must be changed in every file to match
179 the proper setup. If the <envar>ONBOOT</envar> variable is set to
180 <quote>yes</quote> the network script will bring up the Network Interface
181 Card (NIC) during booting of the system. If set to anything but
182 <quote>yes</quote> the NIC will be ignored by the network script and not
183 be brought up.</para>
184
185 <para>The <envar>SERVICE</envar> variable defines the method used for
186 obtaining the IP address. The LFS-Bootscripts package has a modular IP
187 assignment format, and creating additional files in the <filename
188 class="directory">/etc/sysconfig/network-devices/services</filename>
189 directory allows other IP assignment methods. This is commonly used for
190 Dynamic Host Configuration Protocol (DHCP), which is addressed in the
191 BLFS book.</para>
192
193 <para>The <envar>GATEWAY</envar> variable should contain the default
194 gateway IP address, if one is present. If not, then comment out the
195 variable entirely.</para>
196
197 <para>The <envar>PREFIX</envar> variable needs to contain the number of
198 bits used in the subnet. Each octet in an IP address is 8 bits. If the
199 subnet's netmask is 255.255.255.0, then it is using the first three octets
200 (24 bits) to specify the network number. If the netmask is 255.255.255.240,
201 it would be using the first 28 bits. Prefixes longer than 24 bits are
202 commonly used by DSL and cable-based Internet Service Providers (ISPs).
203 In this example (PREFIX=24), the netmask is 255.255.255.0. Adjust the
204 <envar>PREFIX</envar> variable according to your specific subnet.</para>
205
206 </sect2>
207
208 <sect2 id="resolv.conf">
209 <title>Creating the /etc/resolv.conf File</title>
210
211 <indexterm zone="resolv.conf">
212 <primary sortas="e-/etc/resolv.conf">/etc/resolv.conf</primary>
213 </indexterm>
214
215 <para>If the system is going to be connected to the Internet, it will
216 need some means of Domain Name Service (DNS) name resolution to
217 resolve Internet domain names to IP addresses, and vice versa. This is
218 best achieved by placing the IP address of the DNS server, available
219 from the ISP or network administrator, into
220 <filename>/etc/resolv.conf</filename>. Create the file by running the
221 following:</para>
222
223<screen><userinput>cat &gt; /etc/resolv.conf &lt;&lt; "EOF"
224<literal># Begin /etc/resolv.conf
225
226domain <replaceable>&lt;Your Domain Name&gt;</replaceable>
227nameserver <replaceable>&lt;IP address of your primary nameserver&gt;</replaceable>
228nameserver <replaceable>&lt;IP address of your secondary nameserver&gt;</replaceable>
229
230# End /etc/resolv.conf</literal>
231EOF</userinput></screen>
232
233 <para>Replace <replaceable>&lt;IP address of the nameserver&gt;</replaceable>
234 with the IP address of the DNS most appropriate for the setup. There will
235 often be more than one entry (requirements demand secondary servers for
236 fallback capability). If you only need or want one DNS server, remove the
237 second <emphasis>nameserver</emphasis> line from the file. The IP address
238 may also be a router on the local network.</para>
239
240 </sect2>
241
242</sect1>
Note: See TracBrowser for help on using the repository browser.