Udev/Upgrade Guide

udev 171 to 204
The following special attention is required:


 * CONFIG_DEVTMPFS=y must be set in the kernel, for which you need at least Linux kernel 2.6.32.


 * If there is a line in /etc/fstab, it must have the devtmpfs filesystem type or it will conflict with the above options.


 * Remove udev-postmount from any runlevels, it is not necessary. Exception: Note that sys-fs/eudev still has the udev-postmount init script in use with USE="rule-generator"

otherwise delete it together with as both are from the now deleted rule_generator that doesn't exist anymore.
 * If you are using, read Predictable Network Interface Names,


 * The new Predictable Network Interface Names will be used by default, unless the kernel commandline contains net.ifnames=0. (If you had earlier used the method of masking out, it will not work in v209 and newer releases.)


 * If you use Linux 3.8 or higher you should be able to disable USE="firmware-loader" and let kernel do the loading instead. However, you can still use USE="firmware-loader" on newer kernels too.


 * is no longer necessary if you use the Predictable Network Interface Names.


 * Any file you haven't created or edited yourself in should be backupped and removed as it's likely an relic from old udev installation.

For more details, read the full news article and the post install output of emerging udev.

udev 204 to 208
The following special attention is required:


 * Since this version, kernel with accept4 function support is mandatory. It's supported for amd64, ia64, mips, sparc and x86 in 2.6.32.61. All others, like ARM, will need a newer kernel like 3.0 for the function.
 * It's no longer the job of the /dev manager, like udev, to create /dev nodes for static kernel modules such as /dev/fuse or /dev/snd/seq. Instead they are now created by the kmod-static-nodes init script which is part of sys-apps/kmod since version 15. Make sure you add the init script to the "sysinit" runlevel.

udev 208 to 210

 * Since this version, kernel settings CONFIG_FHANDLE=y and CONFIG_NET=y are mandatory. Kernel setting CONFIG_DMIID=y is recommended for amd64/ia64/x86, for example, keyboard rules.
 * File /lib/udev/rules.d/80-net-name-slot.rules was replaced with /lib/udev/rules.d/80-net-setup-link.rules, so if you're currently overriding 80-net-name-slot.rules to disable predicable network interface names, you should now use 80-net-setup-link.rules. However, 80-net-setup-link.rules is only an trigger for the actual configuration file 99-default.link at /lib/systemd/network/ which you can override at /etc/systemd/network/

Example interface IDs
The default naming precedence rules are these:


 * 1) Names incorporating Firmware/BIOS provided index numbers for on-board devices (ID_NET_NAME_ONBOARD, example: eno1)
 * 2) Names incorporating Firmware/BIOS provided PCI Express hotplug slot index numbers (ID_NET_NAME_SLOT, example: ens1)
 * 3) Names incorporating physical/geographical location of the connector of the hardware (ID_NET_NAME_PATH, example: enp2s0)
 * 4) Names incorporating the interfaces's MAC address (ID_NET_NAME_MAC, example: enx78e7d1ea46da)
 * 5) Classic, unpredictable kernel-native ethX naming (example: eth0)

(Rule 4 is disabled by default.) So, if your output is like this:

The interface will be named eno1, because ID_NET_NAME_ONBOARD takes precedence over ID_NET_NAME_PATH.

Things to think of

 * /etc/conf.d/net
 * Renaming init scripts
 * Replacing init scripts in runlevels (via rc-update)
 * iptables configuration
 * vnstat configuration
 * samba configuration

A quick way to get a list of files that will need to be updated can be found using the following:

Fixing network interfaces
This shows how you can fix your network-interfaces, if they don't work anymore (or before they stop working, if you didn't switch to the new udev yet). It is only applicable to simple setups, like one ethernet and one wifi interface. If you have a more complicated setup (like more ethernet adapters) I assume you already know what to do.

Renaming init scripts
If you are still running the old udev and are up to enabling the new one, execute

Take the ID_NET_NAME_PATH-item (here enp1s0f1) and execute

If you have a wifi-interface do this for this interface,too!

If you are already running the new udev and the network is down, execute

Look which link points to a pci-device (here enp1s0f1) and execute

If you have a wifi-interface do this for this interface,too!

Replacing init scripts in runlevels (via rc-update)
Same for the wifi-interface again, if necessary.