Fixing Linux guests' ramdisk (incl. Ubuntu)

When you are unhappy with Ubuntu, why not put some pieces of Slackware in it? The custom kernel we have built does not fit? E.g. the dm_thin_pool module is not available? So let us use the fully prepared kernel from xenconfig with modules and shit.

On a Slackware dom0,

cp /boot/vmlinuz /data/kernels/vmlinuz.4.4.88.dom0
cd /lib/modules
tar czf 4.4.88.xen.tar.gz 4.4.88.xen
mount -o loop /data/guests/GUESTNAME/GUESTNAME.ext4 /data/guests/GUESTNAME/lala
tar xzf 4.4.88.xen.tar.gz -C /data/guests/GUESTNAME/lala

Prepare the initrd for the guest,

mkinitrd -c -k 4.4.88.xen -m ext4:xen-blkfront -f ext4 -r /dev/xvda1 -o /data/kernels/initrd.4.4.88.xen.gz

Adapt the guest configuration accordingly,

kernel = "/data/kernels/vmlinuz.4.4.88.dom0"
ramdisk = "/data/kernels/initrd.4.4.88.xen.gz"
root = "/dev/xvda1 ro"


Once the driver is up you get xvda1 from within the initrd. However, /sbin/init is required by Slackware and it is just a symlink to /lib/systemd/systemd on Ubuntu.

ERROR:  No /sbin/init found on rootdev (or not mounted).  Trouble ahead.
        You can try to fix it. Type 'exit' when things are done.

==> Temporary workaround, just exit the busybox/initramfs and it continues booting.


Nethence | Pub | Lab | Pbraun | SNE Russia | xhtml