systemd es un conjunto de
demonios o daemons de administración de sistema,
bibliotecas y herramientas diseñados como una plataforma de administración y configuración central para interactuar con el
núcleo del
Sistema operativoGNU/Linux. Descrito por sus autores como un "bloque de construcción básico" para un sistema operativo,
4 systemd se puede utilizar como un sistema de inicio de Linux (el proceso
init llamado por el
núcleo o kernel de Linux para inicializar el espacio de usuario durante el proceso de arranque de Linux y gestionar posteriormente todos los demás procesos). El nombre systemd se adhiere a la convención Unix de distinguir los demonios fácilmente por tener la letra d como la última letra del nombre de archivo.
5
(Fuente Wikipedia)
(Fuente freedesktop.org)
¿Y que tiene que ver todo esto con que ahora mi interfaz de red se llame enp2s0 o enx78e7d1ea46da en vez de eth0? Pues bien, todo esto es a causa de la nueva versión de systemd. Una modificación en este gestor de demonios que afecta a partir de la versión 197. A partir de dicha versión, systemd/udev asigna automáticamente los nombres de interfaz de red para Ethernet, WLAN y WWAN. Desde esta modificación se ha optado por una nomenclatura segun las características físicas (hardware):
1. Nombres que incorporan información del Firmware o BIOS del hardware (ejemplo:ENO1).
2. Nombres que incorporan información del Firmware o BIOS que proporciona el slot PCI Express (ejemplo: ens1)
3. Nombres que incorporan ubicación física del conector (ejemplo: enp2s0)
4. Nombres que incorporan la dirección MAC de las interfaces (ejemplo:enx78f8d1ea46da)
5. El estilo clásico del kernel (ejemplo: eth1)
(Fuente detrás del pingüíno y freedesktop.org)
Sabiendo esta información, vamos a dejar de quejarnos del cambio de nombre (porque despues de tantos años es un cambio al que seguro somos algo reacios) y vamos a empezar a 'jugar'. Vamos a averiguar que entiende udev de nuestro dispositivo de red (por ejemplo, eth0):
eithel@inside:~$ udevadm info -e | grep -A 9 ^P.*eth0
P: /devices/pci0000:00/0000:00:1c.2/0000:04:00.0/net/eth0
E: DEVPATH=/devices/pci0000:00/0000:00:1c.2/0000:04:00.0/net/eth0
E: ID_BUS=pci
E: ID_MM_CANDIDATE=1
E: ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (P8P67 and other motherboards)
E: ID_MODEL_ID=0x8168
E: ID_NET_DRIVER=r8169
E: ID_NET_LINK_FILE=/lib/systemd/network/99-default.link
E: ID_NET_NAME=enp4s0
E: ID_NET_NAME_MAC=enxf46d04ae330e
Segun esta lectura, mi eth0 con la nueva nomenclatura se llamaría enp4s0.
Vale.... pero esto de que es predictivo.... ¿Por que? . Bueno, porque ahora tenemos que entender que significa el nombre que le ha dado. Esto lo podemos ver en las fuentes
src/udev/udev-builtin-net_id.c
en donde veremos que significa cada cosa:
/*
* Predictable network interface device names based on:
* - firmware/bios-provided index numbers for on-board devices
* - firmware-provided pci-express hotplug slot index number
* - physical/geographical location of the hardware
* - the interface's MAC address
*
* http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames
*
* Two character prefixes based on the type of interface:
* en -- ethernet
* sl -- serial line IP (slip)
* wl -- wlan
* ww -- wwan
*
* Type of names:
* b -- BCMA bus core number
* ccw -- CCW bus group name
* o[d] -- on-board device index number
* s[f][d] -- hotplug slot index number
* x -- MAC address
* [P]ps[f][d]
* -- PCI geographical location
* [P]ps[f][u][..][c][i]
* -- USB port number chain
Entonces ahora sabemos que si mi eth0 se llama ahora enp4s0 es porque es un ethernet, en el bus 4 y slot 0.
Podemos comprobar mediante lspci que efectivamente alli tengo una tarjeta de red:
lspci -s 04:00
04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 06)
*He buscado 04:00 ya que la salida de udevadm de más arriba, en la linea que empezaba por P: así me indicaba donde encontrarlo.
Bueeeno, pues ahora ya esta. Ya se como funciona. Pero puedo decidir no usar la nueva nomenclatura. ¿Puedo cambiarlo? . La respuesta es, como casi todo en GNU/Linux, que si. Vamos a ver como :
1.- Deshabilitando el enlace de asignaciones a nombres fijos:
ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
2.- Crearse tu propio esquema de nombrado. Esto lo haremos un archivo .link en /etc/systemd/network . Para ello mirad
systemd.link(5)
3.- Decirle al kernel que no lo use mediante el parámetro net.ifnames=0 en /etc/default/grub:
GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0"
y luego actualizar grub mediante
sudo update-grub
Espero que os haya ayudado a entender el porqué del cambio, como aprovecharse de las nuevas funcionabilidades y, en caso de que no estemos agusto o por compatibilidades de scripts, etc no podamos usarlo, como deshabilitarlo.
Enlaces de interes
- https://www.freedesktop.org/wiki/Software/systemd/
- https://es.wikipedia.org/wiki/Freedesktop.org
Algunos ejemplos (en ingles)
emN
- Ethernet interface on the motherboard, where
N is the number of the interface starting from 1.
pSpP
- Network interface on a PCI card, where
S is the slot number and P is the port number.
pSpP_V
- Virtual interface, where
S is the slot number, P is the port number, and V is the virtual interface number.
If biosdevname is set to 0 (the default), systemd naming assigns the prefixes, en, wl, and ww to Ethernet, wireless LAN, and wireless WAN interfaces respectively. The prefix is followed by a suffix based on the hardware configuration, system bus configuration, or MAC address of the device:
oN
- Onboard device with index number
N.
pBsS[fF][dD]
- PCI device with bus number
B, slot number S, function number F, and device ID D.
pBsS[fF][uP]...[cC][iI]
- USB device with bus number
B, slot number S, function number F, port number P, configuration number C, and interface number I.
sS[fF][dD]
- Hot-plug device with slot number
S, function number F, and device ID D.
xM
- Device with MAC address
M.