Presque constamment, j'utilise des noyaux provenant de le noyau Ubunt , ou des noyaux que j'ai moi-même compilés, à l'aide de la configuration du noyau Ubuntu.
Le problème, c’est que lorsque j’utilise le noyau standard, il semble utiliser par défaut des noms d’interface réseau prévisibles (par exemple, "p4p1"), mais lorsque j’utilise un autre noyau, il semble utiliser par défaut l’ancienne méthode (par exemple, "eth0").
Bien que cela ne soit pas vraiment pertinent pour cette question, j’ai eu une défaillance du disque dur sur mon ordinateur de test et j’effectue une nouvelle installation d’Ubuntu Server 14.04.2.
Je n'ai pas été en mesure de déterminer quelle est la différence entre les noyaux. Je soupçonne un paramètre de configuration du noyau, mais je n’ai pas pu identifier lequel.
Ma question: Comment puis-je faire en sorte que les noms d'interface réseau prévisibles fonctionnent de manière cohérente dans tous les noyaux?
Notes supplémentaires: Quelque part, j’ai vu comment désactiver les noms d’interface réseau prévisibles pour l’ajouter à grub:
GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0"
alors, j'ai pensé que le contraire pourrait aider:
GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1 biosdevname=1"
mais cela n'a fait aucune différence. En fait, je ne peux jamais obtenir que le noyau non-stock utilise biosdevname, quel que soit le réglage. Et je ne peux jamais obtenir du noyau stock pour générer un fichier /etc/udev/rules.d/70-persistent-net.rules
(même si, ce n'est pas ce que je veux), quel que soit le réglage de net.ifnames
. Si j'ai net.ifnames=1
, alors au moins le noyau non-stock ne génère pas un fichier /etc/udev/rules.d/70-persistent-net.rules
incorrect.
Extraits de /var/log/udev
:
noyau de stock:
KERNEL[9.216730] add /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1
IFINDEX=2
INTERFACE=p4p1
SEQNUM=1945
SUBSYSTEM=net
...
UDEV [9.241073] add /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1
ID_BUS=pci
ID_MODEL_FROM_DATABASE=P8P67 and other motherboards
ID_MODEL_ID=0x8168
ID_NET_NAME_MAC=enxf46d04652d8e
ID_NET_NAME_PATH=enp3s0
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
ID_PCI_CLASS_FROM_DATABASE=Network controller
ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
ID_VENDOR_ID=0x10ec
IFINDEX=2
INTERFACE=p4p1
À partir du noyau Ubuntu PPA 4.1RC5:
KERNEL[10.772566] add /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0
IFINDEX=2
INTERFACE=eth0
SEQNUM=1962
SUBSYSTEM=net
...
UDEV [11.185866] add /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0
ID_BUS=pci
ID_MODEL_FROM_DATABASE=P8P67 and other motherboards
ID_MODEL_ID=0x8168
ID_NET_NAME_MAC=enxf46d04652d8e
ID_NET_NAME_PATH=enp3s0
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
ID_PCI_CLASS_FROM_DATABASE=Network controller
ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
ID_VENDOR_ID=0x10ec
IFINDEX=2
INTERFACE=eth0
SEQNUM=1962
SUBSYSTEM=net
USEC_INITIALIZED=3227
Remarque: j'ai temporairement dépassé ce problème en permettant à un fichier /etc/udev/rules.d/70-persistent-net.rules
d'être créé, puis en le modifiant pour obtenir les noms de périphérique appropriés. En fin de compte, je voudrais me débarrasser du fichier.
Vous devez faire la distinction entre 3 choses:
Vous choisissez d'utiliser l'une de ces solutions mais vous n'utilisez pas 2 ou 3 en même temps. (En fait, vous ne pouvez qu’un seul prévaut et masque l’autre (s))
Une bonne introduction à la situation actuelle est le publier sur la liste de diffusion ubuntu dev
Noms d'interface prévisibles est une chose udevd depuis v197 générée dans /lib/udev/rules.d/80-net-setup-link.rules
systemd utilise par défaut le nouveau nom d'interface prévisible. Cependant , sauf en amont de systemd, sous Ubuntu, vous devez vous inscrire en utilisant net.ifnames=1
Peu importe la version du noyau que vous utilisez . Mais vous devez utiliser la ligne de commande du noyau pour le configurer en modifiant la configuration de grub /etc/default/grub
, comme suit:
GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1"
et courir
Sudo update-grub
En 14.04 ou 14.10, sans systemd, il devrait suffire d'enlever les règles 70-persitent-net.n, comme décrit ci-dessous dans la note.
biosdevname est une tentative de Dell pour résoudre un problème similaire à celui d'un nom d'interface prévisible dans systemd. C'est la valeur par défaut sur le serveur d'ubuntu . Vous pouvez l'avoir en installant le paquet biosdevname
Sudo apt-get install biosdevname
Vous pouvez le désactiver en utilisant la ligne de commande du noyau dans la configuration grub:
GRUB_CMDLINE_LINUX_DEFAULT="biosdevname=0"
et courir
Sudo update-grub
ou simplement désinstaller le paquet.
Sudo apt-get purge biosdevname
Sudo update-initramfs -u
Ceci est la valeur par défaut sur le bureau Ubuntu . La règle udev /lib/udev/rules.d/75-persistent-net-generator.rules
crée lors du premier démarrage une règle personnalisée /etc/udev/rules.d/70-persistent-net.rules
avec l'adresse MAC de votre interface pour obtenir un nom persistant pour celle-ci.
Si vous utilisez déjà des règles udev, vous devez supprimer /etc/udev/rules.d/70-persistent-net.rules
et pour éviter sa régénération à chaque démarrage, vous devez exécuter
Sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
Ensuite, si vous utilisez systemd , vous devez activer le nom d'interface prévisible, comme décrit ci-dessus.
Dans Ubuntu Server 16.04LTS, tout ce que je faisais était exécuté:
ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
Puis créez le fichier en utilisant
Sudo vi /etc/systemd/network/10-internet.link
et ajoutez ce qui suit
[Match]
Path=pci-0000:(your device mac address)
[Link]
Name=eth0 (or whatever you want to name it)
:wq
pour enregistrer le fichier
puis redémarrez et ajustez votre fichier /etc/network/interfaces
.. puis redémarrez à nouveau
J'espère que cela aide quelqu'un