Aug 152014
 

This post is likely to change frequently after it first appears as experiments/research/etc. occurs to me.

To get to grips with it, let’s first define the software that is in control of your PC when it first starts as the system firmware rather than the BIOS, as system firmware is a generic term which can refer to BIOS, EFI, UEFI, OpenFirmware, or anything else that someone comes up with.

UEFI (and the older EFI) is a replacement for the legacy BIOS that we’ve been stuck with for decades. Despite advances in almost every aspect of the “PC standard”, the BIOS has hardly advanced at all. To be fair, the user interface has gotten a bit less 1980s, and it of course deals with hardware devices that weren’t even imagined decades ago. But there are still some rather nasty limitations, which UEFI is supposed to resolve.

Of course there are those who claim that UEFI is a complete mess with no redeeming qualities, but the truth is probably somewhere between it being that and the neatest bit of system firmware ever invented.

This posting are my working notes (with the addition of a bit of pointless waffling) on UEFI, given that I’m likely to be found staring at a UEFI shell on a broken server at some point in the future. All experiments (so far) have been carried out with a VirtualBox-powered virtual machine (with UEFI turned on) running Ubuntu server.

Installation

The boot process looks a little different … unsurprisingly. And there’s an error in relation to missing UEFI stuff from the hard disk. But once the CD is booted the process looks the same …

Partitioning: Initially “Guided – use entire disk and set up LVM”

Doesn’t give an opportunity to review the partitioning, but :-

  1. EFISystem (/boot/efi) is roughly 512Mbytes
  2. /boot is roughly 256Mbytes
  3. LVM Volume Group

The Ubuntu installation uses grub as the boot loader, although it’s hardly the only option and there are hints that grub has been known to have issues with EFI. Although this could be “early adopters pain”, and not applicable currently.

GPT Partitions

See the Wikipedia article, but basically GPT replaced the old Master Boot Record partitions. The main advantage is that there are fewer dumb limits with GPT – there is no limit of 4 primary partitions (and no hacks to support extended partitions), but instead a minimum maximum of 128 partitions, which basically translates as the required minimum size of a partition table allows for up to 128 partitions but the partition table can be bigger.  More than you’re likely to need anyway.

Cleverly (if you want to put it that way), GPT can live alongside the old MBR partitions as the GPT starts at block 1 rather than block 0. This has been used by Apple to keep two partition tables so that OSX can use GPT whilst Windows still uses MBR.

Keeping two partition tables in sync is perhaps not the best idea for stability and given the need for backwards compatibility has only a limited useful lifetime, I’d rather live without it. In fact it would be nice if I could fill up the old MBR with stuff that told all MBR tools not to mess around with the partition tables.

In theory, (U)EFI and GPT are independent of each other, but in practice, GPT implies booting from UEFI and MBR implies booting from BIOS (some UEFI implementation switch to a BIOS-compatibility mode when they see an MBR).

The EFI System Partition

(U)EFI requires that to boot, a disk must have an EFI System Partition formatted as FAT. This is used as effectively a replacement for the BIOS boot method of loading code from block 0. This file system is usually mounted under Linux as /boot/efi and contains various files that allow Linux to be booted (more details to be added).

It is perhaps a shame that the EFI standards people didn’t suggest making the EFI system partition part of the on-board firmware. It wouldn’t be impossible (or very expensive) to incorporate a small writeable FAT file system into the motherboard to avoid the need for the EFI partition on one of the storage disks. It is not as if the EFI system partition needs to be very big – Ubuntu configured one as 512Mbytes in size which is vastly larger than required for what is actually installed which adds up to less than 4Mbytes.

EFIBOOTMGR

The tool efibootmgr is for interacting with the EFI boot manager and the EFI variables that control what gets booted in which order :-

# efibootmgr
BootCurrent: 0003
BootOrder: 0003,0000,0001,0002
Boot0000* EFI DVD/CDROM
Boot0001* EFI Hard Drive
Boot0002* EFI Internal Shell
Boot0003* ubuntu

The command has plenty of other options …

You can set the boot order with: efibootmgr -o 0002,0003,0001,0000. So I’ve set the preferred boot order to include the internal shell first … the purpose here is to look into EFI after all.

I also somehow managed to erase the “ubuntu” so re-created that with: efibootmgr -c -L UbuntuServer -l “\EFI\ubuntu\shimx64.efi” (yes unfortunately they use the wrong path separator).

EFI Shell

Is surprisingly limited. And rather too DOS-like for me.

Command Description
help Displays a list of the commands available … which very unhelpfully doesn’t pause at the end of the screen. Can also display additional details of a command if you try help command.
mode Displays a list of the available screen mode commands.
mode x y Sets the screen mode to the size specified (as listed with mode).
cls Clears the screen.
cls ${n} Clears the screen and sets the colours to a set specified by the number (0-7). Don’t bother; most of the choices are nasty.
map Displays teh mapping table showing the block devices (BLK${n}) and the recognised file systems (FS${n}). If you don’t have fs0 you’ve got problems!
fs0: Sets the specified file system as the current file system. This will change the prompt appropriately.
cd ${directory} Changes to the specified directory. Remember that the path separator is the DOS preferred character (\).
ls Lists files in the current directory.
edit ${filename} Edits the specified file (^S saves, ^Q quits), but don’t try editing files ending in .efi!
${filename}.efi Runs the EFI binary from the current directory, and yes that does mean you can boot Ubuntu Server by browsing to the \EFI\ubuntu directory and entering shimx64.efi (as I discovered after breaking the ubuntu boot option).
Aug 072014
 

There’s a bit of an anti-social media buzz around at the moment – apparently we’re not communicating properly if we’re not doing it in person, via phone, or by letter. There’s even a fairly popular video going around Facebook moaning about how we don’t communicate properly which I unfortunately cannot find a link to right now.

But what’s so bad about using technology to communicate?

Let’s get a few things settled to begin with :-

  1. Letters are just 19th century emails.
  2. Telegrams are just 19th century texts or instant messages.
  3. Phone calls are just 19th century (stretching a point here) voice chats.

Just because a technology is old doesn’t make it right; just because a technology is old doesn’t make it wrong.

There’s no arguing with the fact that communicating in the flesh as it were, is a much more complete form of communication than anything else. Take moving into a new place for example, someone who helps you move in by helping move the furniture is going to get a much better grasp of what your new home is like than someone who just sees a few snaps that you’ve tweeted.

But not everyone can be there helping you move in :-

  1. They could be stuck at work and unable to take the day off.
  2. They could be living on the other side of the planet – are you going to pay their travel costs?
  3. They could be physically limited and unable to handle the moving furniture bit.

But tweet a pic, and they’ll be able to share some part of the experience.

Now let’s assume you’re obsessed with physical keyboards (or any other unusual interest). Do the people around you share your obsession? Or do you have to visit specialist forums/groups/etc. to communicate with your fellow enthusiasts?

And not everyone finds it easy to communicate in a physical context :-

  • People who are house-bound find it difficult to make new physical acquaintances – should they stick a sign outside their front door saying “Lonely person fancies a chat.”, and would you respond to that?
  • There’s a whole bunch of “differently normal” people (specifically those with ASD) who may find physical communication impossible, difficult, or just rather boring who will gain a great deal more by communicating electronically.
  • Most of us have old acquaintances that we’re too busy to communicate “fully” with, but we’re definitely interested to see that they’re still alive and getting up to fun stuff.

Using technology enhances our communication options. We can choose to use those options, or not. Just as we can choose to emphasise physical presence or not.

 

Aug 022014
 

One of the questions I always ask myself when setting up a resilient server, is just how well will it cope with a disk failure? Ultimately you cannot answer that without trying it out.

But as practice (and to determine whether it mostly works), it’s perfectly sensible to try it out on a virtual machine.

Debian Installation

If you are looking for full instructions on installing Debian, this is not the place to look. I configured the virtual machine with 2GBytes of memory, an LsiLogic SAS controller with two attached disks each of 64GBytes.

The installation process was much as per normal (I unselected “Desktop” to save time), but the storage was somewhat different :-

  • Manual partitioning method
  • Create an empty partition on both disks
  • Select Software RAID
  • Create an MD device
  • RAID1
  • And put both disks into the RAID
  • Configure LVM
  • Create a Volume Group (“sys”)
  • Select md0 for the volume group device
  • Create logical volumes (boot: 512MB, root: 16GB, var: 8GB, home: 512M (it’s a server))
  • In the partitioning manager select each Logical Volume in turn and specify the file system parameters.

You will notice that no swap was created – this was a mistake that I’m in the unfortunate habit of making! However for a test, it wasn’t a problem and with LVM it is possible to create swap after the installation.

Post Installation

After the server has booted, it is possible to check the second hard disk for the presence of grub in the MBR (dd if=/dev/sdb of=/var/tmp/sdb.boot bs=1M count=1, and then run strings on the result). It turns out that nothing is installed in the MBR of the second disk by default. Which would make booting in a degraded environment an interesting challenge (i.e. you’ll have to find a rescue CD and boot off the relevant hard disk).

However this can be fixed by installing grub onto the second hard disk: grub-install /dev/sdb

Testing Resilience

But what happens when you lose a disk? Now is the time to test. Shut down the virtual machine and remove the second hard disk – leaving the first hard disk in place does not provide a full test.

If your first attempt at booting afterwards results in a failure to acquire a grub menu, then either you have failed to run grub-install as detailed above (guess what mistake I made?), or your BIOS settings don’t permit the computer to boot off anything other than the first hard disk.

However, in my second attempt, the server booted normally with the addition of a few messages that indicate that there is just one disk making up the mirrored pair.

Summary

  1. Yes, you can put /boot onto an LVM file system that sits on mirrored disks. That hasn’t always been the case.
  2. It is still necessary to run grub-install to put Grub onto the MBR of the second hard disk.
  3. It works.
Jul 202014
 

Last week we have seen two “incidents” where two rogue states attempted to pursue a political end via direct action, or action via a proxy. I’m going to concentrate on the deaths of children because then certain apologists won’t be able to say: “But they could have been terrorists” … or at least won’t have much in the way of credibility if they do.

In the first case, we have what appears to be a Russian-backed independence movement firing off a missile to bring down a commercial airliner (MH17) killing 80 children.

In the second case, we have the Israeli military trying to stomp on Hamas, and as a result of disproportionate military force and an inability to target accurately, have killed over 50 children.

It is interesting to compare the two to see what similarities and differences there are.

In terms of how accidental those deaths were, it’s fairly obvious that the downing of MH17 was an accident given that it appears that the Russian-backed separatists were boasting about shooting down a Ukrainian military transport plane at the time the airliner was downed. It’s also self-evidently not in the interests of Russia or the separatists to shoot down that plane.

In the case of Israel’s thugs (oops! I mean their military of course), it is probable that the children were not deliberately targeted, but you do have to wonder given Israel’s past and present behaviour (according to the Jewish Virtual Library, the total number of Israeli deaths since 1860 is 20,000 and the total number of Palestinian dead is nearly 100,000) whether Israelis regard Palestinians as sub-humans whose deaths don’t really count.

In terms of an individual, anyone who shoots at a legitimate target and misses, and “accidentally” kills a child instead is guilty of manslaughter. I see no reason why nation states, governments, and the military should not be held to the same standard.

If you cannot shoot without risking civilian casualties, then do not shoot.

The most interesting aspect of these two incidents has been the reactions to them. In the case of the deaths caused by the Israeli indiscriminate military action, it seems to be more or less: “Oh no, Not again!” whereas the reaction to the deaths of the aircraft passengers has been quite justified outrage at the actions of the Russian-backed separatists, and the denials from the Russian government.

Where is the condemnation of Israel’s military action? And where is the condemnation of the USA for backing a bunch of thugs?

It is true that Hamas are also a bunch of thugs who continue to target Israel with poorly targeted missiles, but these are in no way comparable to what Israel is doing – recall those earlier figures of 100,000 Palestinian dead and 20,000 Israeli dead. And yes, it is quite possible that Hamas is using human shields to “embarrass” Israel with civilian casualties.

Yet in all the time I’ve been watching this unending conflict I have yet to see Israel embarrassed by any Palestinian dead.

Even ignoring the morality of indiscriminate killing of civilians, it is about time Israel realised that this sort of thing doesn’t work as demonstrated by the fact that it is still happening today. Perhaps they could try something else more radical – like talking to Hamas.

Without any real expectation of something like this happen I would like to see :-

  • Israel admonished and sanctioned for indiscriminate killing of civilians.
  • USA admonished and sanctioned for it’s military support of a rogue nation state (yes that does mean Israel).
  • Russia admonished and sanctioned for thinking us foolish enough to believe it’s denial of involvement in the shooting down of MH17.