The LFS instructions note that due to recent changes in udev the following kernel options need to be enabled
Device Drivers --->
Generic Driver Options --->
Maintain a devtmpfs filesystem to mount at /dev
**update**
Remember to compile in (or as module) your nic driver, doh!
As I am doing this in a virtual image I need to be careful I am specifying the right devices when it comes to installing and configuring grub.
Once the kernel has been compiled and the built kernel moved to /boot, grub needs to be installed in the MBR for this disk image. This is done with the command
grub-install <device>
As the disk image is mounted via nbd, the device is /dev/nbd0.
The first time I tried to do this it failed, grub-install is a script which calls grub-probe and this claimed that the location where /boot/grub is, would not be accessible to grub.
I realised that I had been mounting the filesystem wrong and if I pass the parameter max_part=16 when I load the nbd module, devices are created for my partitions and I can mount them without having to use kpartx or partx.
When I did this, grub-install ran successfully within a chroot from the filesystem on my disk image.
**update**
This did not produce a bootable image, which I did not discover until I tried to boot it in KVM.
During one of my failed attempts to resolve this problem, I had created a custom devicemap entry for grub and when trying to do grub-install I got an error about blocklists similar to
Attempting to install GRUB to a partition disk or to a partition. This is a BAD idea. Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged.
There was a suggestion in the grub manual that I could safely use the option --force in this case, however this was not needed once I remove the custom devicemap.