Table of Contents

Upgrading to =sys-fs/udev-200

After upgrading the other day (eix-sync && emerge -uDN @world) I noticed there was a news item to be read (eselect news list then eselect news read # replacing # with the news item you wish to read). Seems a bit of work is required after updating to =sys-fs/udev-200.

I strongly recommend you read the news item yourself and the other sources I cite, I take no responsibility if the following results in a broken system.

Kernel

Make sure that your kernel has CONFID_DEVTMPFS=y enabled, to check simply grep your /usr/src/linux/.config

 grep DEVTMPFS /usr/src/linux/.config 
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y

…if not add it, recompile your kernel as you normally wold.

/etc/fstab

Next you're instructed to ensure that if you have a /dev entry in /etc/fstab to ensure that this has the devtmpfs file system (that you have just checked is enabled in your kernel). I found this a little cryptic as I've lots of /dev entires in my /etc/fsab every hard drive I mount is a dev after all! What it actually means is if you have an entry for a mountpoint for /dev (i.e. the second column). I don't, but the news item indicates that its not actually needed as devtmpfs is mounted automatically, and lo and behold when I checked the output of df to see what I have mounted it is indeed there…

 df -h | grep 'devtmpfs'
devtmpfs              3.0G     0  3.0G   0% /dev

Interface Naming Rules

I rarely tinker deeply with interface naming rules so this was what worried me. I noted under item 4 of the news item that I do not having anything but comments in /etc/udev/rules.d/80-net-name-slot.rules so that meant that new names would be disabled and kernel will do all the interface naming. However under item 3 it indicated that because I have /etc/udev/rules.d/70-persistent-[cd|net].rules (i.e. one for CD-drives and one for my network interfaces) that they need to be modified or removed. Rather than modify them I opted to hide them (rather than remove just in case I needed them!). After reading the comments in /etc/udev/rules.d/80-net-name-slot.rules I also opted to hide that too…

mv /etc/udev/rules.d/70-persistent-cd.rules /etc/udev/rules.d/.70-persistent-cd.rules 
mv /etc/udev/rules.d/70-persistent-net.rules /etc/udev/rules.d/.70-persistent-net.rules 
mv /etc/udev/rules.d/80-net-name-slot.rules /etc/udev/rules.d/.80-net-name-slot.rules 

…essentially making them hidden files.

Preparing for Reboot

This was the last step and involves first removing udev-postmount scripts from runlevels. This caused me some confusion as I've only two udev init scripts…

 ls -l /etc/init.d/udev*
-rwxr-xr-x 1 root root 4271 Mar 22 08:13 /etc/init.d/udev
-rwxr-xr-x 1 root root 2046 Mar 22 08:13 /etc/init.d/udev-mount

A bit of poking around on my system revealed that there were some very old archived config udev-postmount files almost a year old so I was happy that I'd removed udev-postmount as it wasn't in any of my current run-levels…

 ls -l /etc/config-archive/etc/init.d/udev-postmount*
-rwxr-xr-x 1 root root 1358 Mar 21  2012 /etc/config-archive/etc/init.d/udev-postmount
-rwxr-xr-x 1 root root 1335 Dec 11  2011 /etc/config-archive/etc/init.d/udev-postmount.1
-rwxr-xr-x 1 root root 1279 Dec  6  2011 /etc/config-archive/etc/init.d/udev-postmount.2
-rwxr-xr-x 1 root root  837 Oct 12  2010 /etc/config-archive/etc/init.d/udev-postmount.3
-rwxr-xr-x 1 root root  838 Jul 13  2010 /etc/config-archive/etc/init.d/udev-postmount.4
-rwxr-xr-x 1 root root  808 May 18  2010 /etc/config-archive/etc/init.d/udev-postmount.5
-rwxr-xr-x 1 root root  805 May  4  2010 /etc/config-archive/etc/init.d/udev-postmount.6
-rwxr-xr-x 1 root root  805 Jan 20  2010 /etc/config-archive/etc/init.d/udev-postmount.7
-rwxr-xr-x 1 root root  685 Oct 30  2009 /etc/config-archive/etc/init.d/udev-postmount.8
-rwxr-xr-x 1 root root 1350 Mar 22  2012 /etc/config-archive/etc/init.d/udev-postmount.dist
 rc-update show | grep postmount

The final thing was to ensure there was an initscript for the new name my network card would receive which is the output from…

udevadm test-builtin net_id /sys/class/net/eth0 2> /dev/null
ID_NET_NAME_MAC=enx001fd0207979
ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
ID_NET_NAME_PATH=enp5s0

…so I created a symlink and added it to the default run-level…

ln -s /etc/init.d/net.lo /etc/init.d/net.enp5s0
ls -l /etc/init.d/net.*
lrwxrwxrwx 1 root root    18 Apr  2 19:31 /etc/init.d/net.enp5s0 -> /etc/init.d/net.lo
lrwxrwxrwx 1 root root     6 Oct  1  2009 /etc/init.d/net.eth0 -> /etc/init.d/net.lo
-rwxr-xr-x 1 root root 16919 Dec  9 15:18 /etc/init.d/net.lo
rc-update add net.enp5s0 default
 * service net.enp5s0 added to runlevel default

I purposefully left the old init script for net.eth0 in the default run-level just in case.

Network Manager

On my laptop I tend to use the WiFi card to connect to networks and as such I DON'T explicitly bring up the wlan0 interface by adding a symbolic link to the loopback device (ln -s /etc/init.d/net.lo /etc/init.d/net.wlan0) and then adding it to the default run level (rc-update add net.wlan0 default). Instead I have NetworkManager (rc-update add NetworkManager default) in the default run-level and it would seem that it is smart enough to detect the new name of the wireless card on re-booting (after removing /etc/udev/rules.d/80-net-name-slot.rules which only had comments in it anyway). I'm yet to test it with a wired connection as the adapter isn't at home but suspect that since NetworkManager handled that too everything will be fine.