[Eisfair] Update Base 2.7.8 online

Marcus Roeckrath marcus.roeckrath at gmx.de
So Dez 11 15:01:08 CET 2016


Hallo Tanne,

Hans-Georg Kiefer wrote:

> In meinem zweiten System spielt sich mit dem r8169 (r8168 ist
> blacklisted) das gleiche Drama ab.
> Wenn die Vergabe der if-Namen wider der Reihenfolge der BusID
> vorgenommen wird, ist es nach einem Boot nur Zufall, wer eth0 oder eth1
> ist. Dort ist es nur nicht aufgefallen, weil dort die Onboardkarte eine
> niedrigere BusID hat als die Zusätzliche. Somit war Onboard immer eth0.
> Erst jetzt nach dem Tausch der Namen, spinnt der Probierheini ebenfalls.

Es kann scheinbar jederzeit zur Race Condition kommen, insbesondere, wenn
ein Modul verschiedene Karten bedient.

Nehmen wir mal an, es gäbe zwei Karten (gleiches Modul) enp0s1 und enp0s2.

Nun wird zunächst die erste Karte (enp0s1) geladen und bekommt initial eth0.

1. Fall:

Die zweite Karte wird initialisiert, nachdem die erste nach enp0s1 umbenannt
wurde: die zweite Karte wird initial eth0.

2. Fall:

Die zweite Karte wird initialisiert, bevor die erste in den eindeutigen
Namen enp0s1 umbenannt wurde: die zweite Karte wird initial eth1.

Wenn udev nun die Karten in ihre eindeutigen Namen enp0sX umbenannt hat,
werden eth0/1 wieder frei.

Wenn dies geschieht, bevor die abschliessende Umbenennung (udev-Regel der
Base) greift, kann von der jeder Karte beliebig in ethX umbenannt werden,
also alles fein, wie gewollt.

Soll die erste Karte zu eth1 werden, wäre im obigen ersten Fall alles klar,
da eth1 frei ist, weil nie benutzt. Im zweiten Fall hängt es nun also davon
ab, ob sich die zweite Karte schon nach enp0s2 umbenannt, also eth1 frei
gemacht hat.

Zusammenfassend:

Mit udev ist die Verwendung von ethX als Devicenamen immer mit dem Risiko
behaftet, dass es zu einer Race Condition kommt. Dies umso mehr, wenn die
Netzwerkkarten zeitlich "nah" initialisiert werden, was insbesondere im
Fall eines Moduls für verschiedene Karten wahrscheinlich ist.

Mit udev sollte man dazu übergehen, nur noch eindeutige Devicenamen wie
enp0s1 usw. zu verwenden - die sind immer eindeutig!
 
> Da muss ja noch mehr im kernel oder der base anders sein. Im System mit
> mehr als einer Netzwerkkarte spielt net.ifnames=1 bei nur einer
> Netzwerkkarte erstmal keine Rolle.

Doch, es kommen hinten andere Devicenamen raus.

Da bei einer Netzwerkkarte keine udev-Regel erstellt wird, darf in diesem
Fall niemals net.ifnames=1 benutzt werden.

Beim Boot käme die Karte als enpXsY raus, das System erwartet in dem Fall
aber ethX, außer man setzt in der Base dann enpXsY als Device ein.

-- 
Gruss Marcus


Mehr Informationen über die Mailingliste Eisfair