Predictable Network Interface Names

Predictable Network Interface Names

Starting with v197 systemd/udev will automatically assign predictable, stable network interface names for all local Ethernet, WLAN and WWAN interfaces. This is a departure from the traditional interface naming scheme (“eth0”, “eth1”, “wlan0”, …), but should fix real problems.

Why?

The classic naming scheme for network interfaces applied by the kernel is to simply assign names beginning with “eth0”, “eth1”, … to all interfaces as they are probed by the drivers. As the driver probing is generally not predictable for modern technology this means that as soon as multiple network interfaces are available the assignment of the names “eth0”, “eth1” and so on is generally not fixed anymore and it might very well happen that “eth0” on one boot ends up being “eth1” on the next. This can have serious security implications, for example in firewall rules which are coded for certain naming schemes, and which are hence very sensitive to unpredictable changing names.

To fix this problem multiple solutions have been proposed and implemented. For a longer time udev shipped support for assigning permanent “ethX” names to certain interfaces based on their MAC addresses. This turned out to have a multitude of problems, among them: this required a writable root directory which is generally not available; the statelessness of the system is lost as booting an OS image on a system will result in changed configuration of the image; on many systems MAC addresses are not actually fixed, such as on a lot of embedded hardware and particularly on all kinds of virtualization solutions. The biggest of all however is that the userspace components trying to assign the interface name raced against the kernel assigning new names from the same “ethX” namespace, a race condition with all kinds of weird effects, among them that assignment of names sometimes failed. As a result support for this has been removed from systemd/udev a while back.

Another solution that has been implemented is “biosdevname” which tries to find fixed slot topology information in certain firmware interfaces and uses them to assign fixed names to interfaces which incorporate their physical location on the mainboard. In a way this naming scheme is similar to what is already done natively in udev for various device nodes via /dev/*/by-path/ symlinks. In many cases, biosdevname departs from the low-level kernel device identification schemes that udev generally uses for these symlinks, and instead invents its own enumeration schemes.

Finally, many distributions support renaming interfaces to user-chosen names (think: “internet0”, “dmz0”, …) keyed off their MAC addresses or physical locations as part of their networking scripts. This is a very good choice but does have the problem that it implies that the user is willing and capable of choosing and assigning these names.

We believe it is a good default choice to generalize the scheme pioneered by “biosdevname”. Assigning fixed names based on firmware/topology/location information has the big advantage that the names are fully automatic, fully predictable, that they stay fixed even if hardware is added or removed (i.e. no reenumeration takes place) and that broken hardware can be replaced seamlessly. That said, they admittedly are sometimes harder to read than the “eth0” or “wlan0” everybody is used to. Example: “enp5s0”

What precisely has changed in v197?

With systemd 197 we have added native support for a number of different naming policies into systemd/udevd proper and made a scheme similar to biosdevname’s (but generally more powerful, and closer to kernel-internal device identification schemes) the default. The following different naming schemes for network interfaces are now supported by udev natively:

  1. Names incorporating Firmware/BIOS provided index numbers for on-board devices (example: eno1)
  2. Names incorporating Firmware/BIOS provided PCI Express hotplug slot index numbers (example: ens1)
  3. Names incorporating physical/geographical location of the connector of the hardware (example: enp2s0)
  4. Names incorporating the interfaces’s MAC address (example: enx78e7d1ea46da)
  5. Classic, unpredictable kernel-native ethX naming (example: eth0)

By default, systemd v197 will now name interfaces following policy 1) if that information from the firmware is applicable and available, falling back to 2) if that information from the firmware is applicable and available, falling back to 3) if applicable, falling back to 5) in all other cases. Policy 4) is not used by default, but is available if the user chooses so.

This combined policy is only applied as last resort. That means, if the system has biosdevname installed, it will take precedence. If the user has added udev rules which change the name of the kernel devices these will take precedence too. Also, any distribution specific naming schemes generally take precedence.

Come again, what good does this do?

With this new scheme you now get:

  • Stable interface names across reboots
  • Stable interface names even when hardware is added or removed, i.e. no re-enumeration takes place (to the level the firmware permits this)
  • Stable interface names when kernels or drivers are updated/changed
  • Stable interface names even if you have to replace broken ethernet cards by new ones
  • The names are automatically determined without user configuration, they just work
  • The interface names are fully predictable, i.e. just by looking at lspci you can figure out what the interface is going to be called
  • Fully stateless operation, changing the hardware configuration will not result in changes in /etc
  • Compatibility with read-only root
  • The network interface naming now follows more closely the scheme used for aliasing block device nodes and other device nodes in /dev via symlinks
  • Applicability to both x86 and non-x86 machines
  • The same on all distributions that adopted systemd/udev
  • It’s easy to opt out of the scheme (see below)

Does this have any drawbacks? Yes, it does. Previously it was practically guaranteed that hosts equipped with a single ethernet card only had a single “eth0” interface. With this new scheme in place, an administrator now has to check first what the local interface name is before he can invoke commands on it where previously he had a good chance that “eth0” was the right name.

I don’t like this, how do I disable this?

You basically have three options:

  1. You disable the assignment of fixed names, so that the unpredictable kernel names are used again. For this, simply mask udev’s .link file for the default policy: ln -s /dev/null /etc/systemd/network/99-default.link
  2. You create your own manual naming scheme, for example by naming your interfaces “internet0”, “dmz0” or “lan0”. For that create your own .link files in /etc/systemd/network/, that choose an explicit name or a better naming scheme for one, some, or all of your interfaces. See systemd.link(5) for more information.
  3. You pass the net.ifnames=0 on the kernel command line

How does the new naming scheme look like, precisely?

That’s documented in detail in a comment block the sources of the net_id built-in. Please refer to this in case you are wondering how to decode the new interface names.

Force PAE Issue with Upgrade from Lubuntu 14.04 to 16.04

Hi: I have an old, non-PAE Thinkpad that I installed Lubuntu 14.04 on using the forcePAE workaround. When I upgraded it to 16.04, it works well but won’t upgrade the kernel beyond 3.13.0.9 to the 4.4 series, which download but don’t install, because it’s non-PAE. Question: is there a way I can do a forcePAE install of a downloaded 4.4 kernel, say in synaptic, or am I stuck with having to do a complete reinstall of 16.04 with forcePAE, as I’ve been able to do with other non-PAE systems

———————————————————————————–

I suggest that you set the boot option forcepae in a persistent way. See the following link

Grub2/Setup

GRUB_CMDLINE_LINUX

Entries on this line are added to the end of the ‘linux’ command line (GRUB legacy’s “kernel” line) for both normal and recovery modes. It is used to pass options to the kernel.

So edit

Code:
GRUB_CMDLINE_LINUX=forcepae

into the file /etc/default/grub (and save it)

and run

Code:
sudo update-grub

and reboot. Then you will be able to install new kernels.

 

Source: Force PAE Issue with Upgrade from Lubuntu 14.04 to 16.04

 

Köchel catalogue

The Köchel-Verzeichnis or Köchelverzeichnis is a chronological catalogue of compositions by Wolfgang Amadeus Mozart, originally created by Ludwig von Köchel, in which the entries are abbreviated K.and KV. The numbers of the Köchel catalogue reflect the continuing establishment of a complete chronology of Mozart’s works, and provide a shorthand reference to the compositions.

According to Köchel’s counting, Requiem in D minor is the 626th piece Mozart composed, thus is designated either K. 626 or KV 626; however, his original catalogue (1862) of Mozart has been twice revised, and some works have had three KV. numbers, e.g. Mozart’s Horn Concerto No. 1, K. (412+514)/386b.

Source: Köchel catalogue – Wikipedia

Help:IPA/Standard German

Consonants
Germany Austria Switzerland Examples English approximation
DE AT CH
b bei[1] ball
ç ich, durchChina (DE) hue
d dann[1] done
f für, von, Phänomen fuss
ɡ gut[1] guest
h hat hut
j Jahr yard
k kann, Tag,[2] cremen, sechs cold
l Leben last
Mantel bottle
m Mann must
Atem rhythm
n Name not
beiden, küssen suddenly
ŋ lang long
p Person, ab[2] puck
pf Pfeffer roughly like cupful
ʁ r reden[3] DEFrench rouge
ATCHred (Scottish)
s lassenHausgroß fast
ʃ schon, Stadt, Champagner, Ski shall
t Tag, und, Stadt[2] tall
ts Zeit, Platz, Potsdam, Celle cats
Matsch match
v was,[1] VaseEtui vanish
x nach loch (no lock–loch merger)
z Siediese[1] zebra
ʔ beamtet[4]
([bəˈʔamtət])
the glottal stops in uh-oh!
Non-native consonants
CemDschungel[1][5] jungle
ʒ Genie[1][5] pleasure
Stress
ˈ Bahnhofstraße
([ˈbaːnhoːfˌʃtʁaːsə])
as in battleship /ˈbætəlˌʃɪp/
ˌ
Vowels
Germany Austria Switzerland Examples English approximation
DE AT CH
Monophthongs
a allesKalender father, but short
aber, sah, Staat father, but long
ɛ Ende, hätte bet
ɛː spät, wählen[6] RP hair
eben, Pferd, gehen, Meer mate
ɪ ist, bitte sit
liebe, Berlin, ihm seed
ɔ Osten, kommen off
oder, hohe, Boot RP law
œ öffnen somewhat like hurt
øː Österreich somewhat like heard
ʊ und push
Hut, Kuh food
ʏ müssen, Ypsilon somewhat like cute
über, Mühe somewhat like few
Diphthongs
ein, Kaiser, Haydn, Verleih high
auf, Haus vow
ɔʏ Euro, Häuser roughly like choice
Reduced vowels
ɐ ər immer[3] nut or sofa (but not balance)[7]
CHScottish butter
ə Name balance (but not sofa)[7]
Semivowels
ɐ̯ r Uhr[3] DEAT: sofa
CHScottish far
Studie yard
aktuell would
Non-native vowels
ãː Gourmand[8] French Provence
ɛ̃ː Pointe[8] French quinze
ɛɪ Mail[9] roughly like face
õː Garçon[8] French Le Monde
ɔʊ Code[9] American goat
œ̃ː Parfum[8] French emprunte
œːɐ̯ øːr O2 World[10] roughly like RP bird
Shortened vowels
ã engagieren[8] French chanson
ɛ̃ impair[8] French vingt-et-un
e Element[11] dress
i Italien[11] teach, but short
o originell[11] RP thought, but short
õ fon[8] French Mont Blanc
œ̃ Lundist[8] French vingt-et-un
ø Ökonom[11] somewhat like hurt
u Universität[11] truth, but short
y Psychologie[11] like meet, but short and with the lips rounded

Source: Help:IPA/Standard German – Wikipedia

Rudolf Clausius

Rudolf Julius Emanuel Clausius (2 January 1822 – 24 August 1888) was a German physicist and mathematician and is considered one of the central founders of the science of thermodynamics.[1] By his restatement of Sadi Carnot‘s principle known as the Carnot cycle, he gave the theory of heat a truer and sounder basis. His most important paper, “On the Moving Force of Heat”,[2] published in 1850, first stated the basic ideas of the second law of thermodynamics. In 1865 he introduced the concept of entropy. In 1870 he introduced the virial theorem which applied to heat.[3]