Upgrading udev to version >=200

Title: Upgrading udev to version >=200
Author: Samuli Suominen <ssuominen@gentoo.org>
Content-Type: text/plain
Posted: 2013-03-29
Revision: 2
News-Item-Format: 1.0
Display-If-Installed: <sys-fs/udev-201

This replaces the earlier news item about the udev 197 upgrade and
describes the predictable network interface names in more detail.

If you skip anything in this news item, your system will not be
bootable, or your networking will be down, or both.

Pay attention also to every message printed by emerge of sys-fs/udev
and sys-fs/udev-init-scripts as this news item may not be complete.

1. udev-postmount init script:

Remove the udev-postmount init script from your runlevels.

2. devtmpfs support:

You need at least version 2.6.32 of the kernel for devtmpfs
functionality. Once you have this, make sure CONFIG_DEVTMPFS=y is set
in the kernel configuration. See the gentoo udev guide for the option in
make menuconfig [1].

If you have a line for /dev in /etc/fstab, make sure it is configured
for file system type devtmpfs (not tmpfs or any other type). Also, you
can remove this line if you prefer, since devtmpfs is mounted
automatically.

3. Old interface naming rules:

If the system still has old network interface renaming rules in
/etc/udev/rules.d, like 70-persistent-net.rules, those will need
to be either modified or removed.

If you choose to modify them, you must use free namespace (like net*
or internet*) instead of kernel namespace (like eth* or wlan*)
because in-place renaming has been deprecated, see small
documentation of it if you like[2].

The file 70-persistent-net.rules, like the 70-persistent-cd.rules
should be removed, so if you modify, rename the file also to something
else like 70-my-network.rules to silence the deprecation warning coming
from the end of the sys-fs/udev emerge.

This is the old format with reserved namespace:

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="xx:xx:xx:xx:xx:xx", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="yy:yy:yy:yy:yy:yy", NAME="eth1"

This is the new format with free namespace:

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="xx:xx:xx:xx:xx:xx", NAME="net0"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="yy:yy:yy:yy:yy:yy", NAME="net1"

4. predictable network interface names:

If /etc/udev/rules.d/80-net-name-slot.rules is an empty file or a
symlink to /dev/null, the new names will be disabled and the kernel will
do all the interface naming, and the resulting names may vary by kernel
configuration, hardware configuration and kernel version.

Also, the forementioned old 70-persistent-net.rules might interfere with
the new predictable interface names.

You can get attributes of your network interfaces using a command like
the following (replace eth0 with the name of the appropriate interface):

# udevadm test-builtin net_id /sys/class/net/eth0 2> /dev/null

You can copy /lib/udev/rules.d/80-net-name-slot.rules to
/etc/udev/rules.d and specify the attributes and in which order
they will be used for naming. See upstream wiki[3] for detailed list
of options.

You can prepare the system for the new names before booting for example
by renaming /etc/init.d/net.* symlinks, editing /etc/conf.d/net, etc.

The feature can also be completely disabled using net.ifnames=0 on the
kernel command line.

If you only have one interface card, you don't necessarily have much
use for this feature as the name almost always stays at eth0, you can
easily disable it using forementioned methods.

This feature can also replace the functionality of sys-apps/biosdevname,
but you can still keep using it if you want.

In a normal new installation there are no files in /etc/udev/rules.d
and if you haven't edited any files you have in there, you should most
likely backup and delete them all if they don't belong to any packages.

The official wiki has a dedicated page for udev upgrade notes[4].

[1] http://www.gentoo.org/doc/en/udev-guide.xml
[2] http://www.kernel.org/doc/htmldocs/device-drivers/API-device-rename.html
[3] http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames
[4] http://wiki.gentoo.org/wiki/Udev/upgrade