feat(dracut): get everything working

This gets everything working in a stubbed out way.
feat(dracut) add proper support for cgpt

This now looks at the partition, lowercases the name, mounts the
partition, and then kexecs the "real" kernel that should be run.
fix(dracut) mount boot filesystem as ro so it's not dirty when it boots
Merge pull request #1 from gregkh/master

feat(dracut) add proper support for cgpt
feat(pre-mount-gptprio): die if the kexec returns

kexec is like exec in that we should never return. If we do return then
something terrible happened. Lets stop everything and print an error.
feat(dracut): add debuggging output

logging is cheap, debugging this stuff is hard.

TODO: use INFO functions
Merge pull request #2 from philips/kexec-or-die

feat(pre-mount-gptprio): die if the kexec returns
Merge branch 'add-debug' of github.com:philips/bootengine into philips-add-debug
feat(tests): refactor and add tests

refactor the pre-mount-gptprio code into individual functions and then
add tests for a missing kernel, a bad kexec, a bad root mount and a
normal successful kexec -e. The tests aren't perfect but it adds some
confidence.

Tested manually with a broken kexec:

```
[    1.162512] dracut: bootengine: mount on /dev/disk/by-partuuid/7130c94a-213a-4e5a-8e26-6cce9662f132 returned 0
[    1.165585] dracut: bootengine: kexec -l returned 127
[    1.166515] dracut: //lib/dracut/hooks/pre-mount/80-pre-mount-gptprio.sh: 83: kexec: not found
[    1.168043] dracut: bootengine: kexec -e returned 127
[    1.168947] dracut: //lib/dracut/hooks/pre-mount/80-pre-mount-gptprio.sh: 83: kexec: not found
[    1.170444] dracut: ERROR: bootengine: kexec -e shouldn't return!
[    1.171483] dracut: cmd_line was root=gptprio: console=tty0 console=ttyS0
[    1.172620] dracut: root_upper was 7130C94A-213A-4E5A-8E26-6CCE9662F132
[    1.173728] dracut: bootengine: No kernel found or kexec failed, proceeding with root=block:/dev/disk/by-partuuid/7130c94a-213a-4e5a-8e26-6cce9662f132
[    1.186630] dracut: Mounted root filesystem /dev/sda3
[    1.197188] dracut: Switching root
switch_root: failed to unlink tmp: Directory not empty
[    1.217423] systemd[1]: systemd 204 running in system mode. (+PAM -LIBWRAP -AUDIT -SELINUX +IMA -SYSVINIT -LIBCRYPTSETUP -GCRYPT -ACL -XZ)
[    1.219507] systemd[1]: Detected virtualization 'kvm'.

Welcome to CoreOS Linux!

[    1.221343] systemd[1]: No hostname configured.
```
fix(dracut): umount the root fs

fixes this error:

```
switch_root: failed to unlink tmp: Directory not empty
```
Merge pull request #4 from philips/add-tests

Add tests
fix(dracut): use lower on PARTUUID

although the source code docs in the kernel shows only uppercase letters
in the uuids for root=PARTUUID arguments both are supported. However,
dracut only supports lower case. So, use lowercase.
Merge pull request #5 from philips/use-lowercase-always

fix(dracut): use lower on PARTUUID
Add(update-bootengine): Move code for running dracut out of ebuild.

Trying to do all this during install in a chroot is crazy enough, we
need to be able to actually make this semi-safe. The big new thing
from what was previously in the ebuild is that this script makes sure it
is in its own filesystem namespace and then mounts directories into the
chroot privately. That way we don't alter the view everything else has
of this tree and eliminates the need to cleanup afterwards.

After this the ebuild just needs to do this in post install:

    update-bootengine -m -c "${ROOT}"
Merge pull request #6 from marineam/update-bootengine

Add(update-bootengine): Move code for running dracut out of ebuild.
fix(module-setup): Use dracut_install which aborts on errors.

dracut_install is a wrapper around inst which aborts with error messages
when a source is missing while inst simply returns non-zero. inst let
us get away with building bootengine with missing deps and not noticing.
Merge pull request #7 from marineam/fixinst

fix(module-setup): Use dracut_install which aborts on errors.
License project under BSD-2 license
Merge pull request #8 from traviscross/master

License project under BSD-2 license
fix(update-bootengine): Compare namespaces via mountinfo.

The /proc/<pid>/ns/mnt link only exists in recent kernels. As-is this
causes update-bootengine to enter an endless exec loop because the if
statement only compares the readlink output, ignoring the exit value.
As an alternative we can read the contents of mountinfo, even though the
mounts are the same they will have different mount ids.