Table of Contents

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"

Troubleshooting

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.

References