Engineering and technology notes

Steps and skips

In music, a step, or conjunct motion,[1] is the difference in pitch between two consecutive notes of a musical scale. In other words, it is the interval between two consecutive scale degrees. Any larger interval is called a skip (also called a leap), or disjunct motion.

In the diatonic scale, a step is either a minor second (sometimes also called half step) or a major second (sometimes also called whole step), with all intervals of a minor third or larger being skips. For example, C to D (major second) is a step, whereas C to E (major third) is a skip.

More generally, a step is a smaller or narrower interval in a musical line, and a skip is a wider or larger interval with the categorization of intervals into steps and skips is determined by the tuning system and the pitch space used.

Melodic motion in which the interval between any two consecutive pitches is no more than a step, or, less strictly, where skips are rare, is called stepwise or conjunct melodic motion, as opposed to skipwise or disjunct melodic motion, characterized by frequent skips.

VirtualBox Cannot register the hard disk already exists – Stack Overflow

It’s possible to change the UUID on the VDI file using the command:

 VBoxManage internalcommands sethduuid <file.vdi>

It looks this command assigns a new “random” UUID to the file. No much documentation on it, though.

Note: The solution by ABC is a workaround that works only if you want to remove the already existing disk with the same UUID. If that one is bad, then yeah, remove it and problem solved. However, that was not my case since I needed to use both disks.

Source: VirtualBox Cannot register the hard disk already exists – Stack Overflow

VirtualBox Cannot register the hard disk already exists – Stack Overflow

1 – Open the files ‘.vbox’ and ‘.vbox-prev’ (if exist) files in any text editor and replace the first character of HardDisk uuid (take note to revert this change on step 6)

Example: nano /home/virtualbox/WindowsServer/WindowsServer.vbox

Change:

<HardDisks>
        <HardDisk uuid="{3ebaa9b6-8318-4b81-b853-8f30dd278bdc}" location="/home/virtualbox/WindowsServer/WindowsServer.vdi" format="VDI" type="Normal"/>

To:

<HardDisks>
        <HardDisk uuid="{2ebaa9b6-8318-4b81-b853-8f30dd278bdc}" location="/home/virtualbox/WindowsServer/WindowsServer.vdi" format="VDI" type="Normal"/>

2 – Reboot machine

Source: VirtualBox Cannot register the hard disk already exists – Stack Overflow

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