Hashed password should be saved as binary data.
Fix incorrect construction of salt string.

Splat operator on ranges creates arrays (which is what we want).
Main rakefile

Adds/changes various parts of the logic to
* build subcomponents
* build a (ubuntu) rootfs (a.k.a. image)
* copy subcomponents into a rootfs
* tweak rootfs bootup order
* build a disk based on the image
Change the triggerring mechanism for preflight-checks.

Rely on "stopped" and EXIT_STATUS instead of events.
Remove incorrect "emits" clause

from preflight-checks-stage-1 upstart script.
Fix up upstart scripts.

1. Networking script should rely on preflight-checks-stage-1 to have
   stopped (successfuly). (Fix typo in name)
2. Preflight stage 2 should not emit event (no use for it yet).
Add conf ext to preflight-failed (upstart) job.
Setup Logger after deamonization.

Since the daemonization lib closes all IO objects when daemonizing,
this would affect our ability to log after that point.
Make banner helper print in blue

So its different from the 'info' messages.
Fix bug in passwd file entry generation.

Incorrect indexing into the DEFAULT_GROUPS hash caused the
gid to always be empty. Fix the code, and add test.
Save dmesg logs ASAP.

Helps in debugging boot up issues. So save them when the filesystem
is ready to be written to.
Start the rc-sysinit job after commander.

Starts up remaining services (and changes runlevel to 2=userspace)
*after* commander is brought up.
Documentation for networking upstart script.
Add author to preflight-check-1 upstart file.

(Also remove some dead code)
Mock preflight-check-stage-2

Currently, there is no additional config we must generate after
networking is available. Eventually we might use this hook to
query remote servers for additional config (cloud-init style?)
Make both preflight-checks log to the same file.

Preflight checker scripts run early in the system bring up, so they
cannot log to syslog (its not up yet). These scripts are the ones
to come up before (r)syslog and write out its config so that it
can be brought up sanely. So these scripts log to their own file.
Use stdlib (Process.daemon) to daemonize.

We don't need all the fanciness from the Daemons gem (since
we want finer grained control over the daemonization process,
namely control when/where the std streams get redirected).

This is triggered due to the fact that in production (when upstart
brings up commander) we don't want to daemonize. After experimants
it seems like Daemons + Process.daemon cause daemonization using
>100 'clone' calls (upstart can handle up to a max of 2 fork/clone)

As a result, we'll run in the foreground with upstart, but continue
to provide the daemonization flag (because its easy for us to do so)
so that users can specify it on the cmdline if they wish.
Changes to Commander::Runner

0. Don't daemonize with default options. ever.
1. Change how we populate the default options hash
2. Add a "stream_dirs" option to server mode.

(also tests)
Commander::Server can redirect its std streams.

When asked to do so, via the :stream_dir option.
Tweak runner/server

1. Always setup logger before everything else. This allows us
   to log debug messages from the beginning.
2. Always setup signal handlers irrespective of mode. Be it test
   or production, we always need to respond to Ctrl+C/SIGINT.