Renommer les interfaces réseaux en ethX

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

1 Introduction

Vous l'avez certainement remarqué, la grande mode dans les dernières versions de certaines distributions linux est le nommage de la carte réseau, non plus par ethX, mais par le chipset. On se retrouve donc avec des em0,em1 ou que sais-je...

Bref, cette idée est certainement venue de Solaris, mais personnellement, je ne vois pas l'intérêt, surtout que c'est plus handicapant qu'autre chose lorsque l'on souhaite normaliser un parc informatique. Le but de cet article est de montrer comment on reviens au bonnes vielles interfaces ethX. Je vous conseil le lire l'article sur Udev avant de commencer celui ci, histoire de comprendre mieux certains aspects.

2 Mise en place

2.1 Grub

Nous allons ajouter cet argument (biosdevname=0) à la ligne de grub classique pour indiquer au boot que nous ne souhaitons pas que le renommage d'interface prenne effet. Voici un exemple :

Configuration File /etc/grub.conf
[...]
title Red Hat Enterprise Linux (2.6.32-220.el6.x86_64)
	root (hd0,0)
	kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/mapper/vgos-root rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=fr LANG=en_US.UTF-8 rd_LVM_LV=vgos/root rd_NO_MD rd_LVM_LV=vgos/swap SYSFONT=latarcyrheb-sun16 crashkernel=128M biosdevname=0 rd_NO_DM intel_idle.max_cstate=0	initrd /initramfs-2.6.32-220.el6.x86_64.img
[...]

2.2 Udev

Vous avez soit le choix de refaire une configuration au propre en modifiant le nom des interfaces dans les règles réseaux d'udev (NAME="xxxx") :

Configuration File /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.
 
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="d4:ae:52:9b:5a:85", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Soit la suppression simple du fichier (j'ai rencontré des cas ou ça ne fonctionnais pas).

2.3 Les fichiers de configuration

Vous allez ensuite devoir modifier vos configuration réseaux et mettre les bonnes interfaces.

2.3.1 Debian

Par exemple sous Debian, il vous faudra adapter la configuration /etc/network/interfaces avec les bonnes interfaces (ethX).

2.3.2 Red Hat

Sous Red Hat, il vous faudra renommer les interfaces /etc/sysconfig/network-scripts/ifcfg-* et entrer dans chacune d'elles pour mettre les bonnes devices associées. Pour cette partie Red Hat, je trouve ça tellement pénible à faire que j'ai fais un script qui va modifier le udev et les interfaces automatiquement. Je vous le laisse également :

Command rename_net_interfaces.sh
#!/bin/bash
# Made by Pierre Mavro / Deimos
# This script rename interfaces to get ethX instead of chipset name
 
# Backup existing file
if [ -e /etc/udev/rules.d/70-persistent-net.rules ] ; then
	cp /etc/udev/rules.d/70-persistent-net.rules{,.bak}
fi
 
# Generate 70-persistent-net.rules file
echo "# Generated by Kickstart/Puppet
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.
 
" > /etc/udev/rules.d/70-persistent-net.rules
i=0
 
for m in `ip link show | grep "^\s*link" | grep -v loopback | uniq | sort | awk '{ print $2 '}` ; do
	# Change sysconfig file
	myifname=$(grep -li "$m" /etc/sysconfig/network-scripts/ifcfg-* | awk -F'ifcfg-' '{ print $2 }' | grep -v bond)
	perl -pi -e "s/^DEVICE=.*/DEVICE=\"eth$i\"/" /etc/sysconfig/network-scripts/ifcfg-$myifname
	mv /etc/sysconfig/network-scripts/ifcfg-{$myifname,eth$i}
	# Change udev rule
	echo 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="'$m'", ATTR{type}=="1", KERNEL=="eth*", NAME="eth'$i'"' >> /etc/udev/rules.d/70-persistent-net.rules
	echo '' >> /etc/udev/rules.d/70-persistent-net.rules
	let i++
done

Il ne vous restep lus qu'à rebooter :-)

3 References

http://www.sysarchitects.com/em1_to_eth0