DragonFlyBSD - french keyboard in initrd

I did install DragonFlyBSD on my laptop using a Hammer2 filesystem on top of a dm-crypt device, following the instruction of the official documentation. The only problem is that I use an azerty keyboard and the uncrypting dialog when booting offers a qwerty layout. That can be a little annoying for people having special characters in their passwords.

This is how I managed to have an azerty layout to type my decrypting password at boot time. Commands are done as root.

cp /usr/src/share/syscons/keymaps/fr.iso.kbd /usr/src/initrd/etc/
echo << EOF > /usr/src/initrd/etc/rc.kbdfr
#!/bin/sh

echo "Setting the keyboard to french layout"
/bin/rescue kbdcontrol -l /etc/fr.iso.kbd
EOF

We have added new files that we want to be dealt with by the initrd building process, so now we need to modify it in order to do so. Modify /usr/src/initrd/etc/Makefile with the following additions.

ETC_SCRIPTS=   rc rc.lvm2 rc.kbdfr fr.iso.kbd rcmount_crypt rcmount_tcplay

# in usr.sbin section
        fstyp           \
+       kbdcontrol      \
        pw              \

# Add missing library required for kbdcontrol compilation
+CRUNCH_LIBS+= -ll # kbdcontrol

Once that this is done, we are able to build the new initrd.

cd /usr/src/initrd
make
make install

Before rebooting, we can check that the tools are in the initrd image. First let’s mount the initrd image on /mnt in order to list its content.

cp /boot/kernel/initrd.img.gz ~
gunzip initrd.img.gz
vnconfig vn0 initrd.img
mount /dev/vn0 /mnt
ls -l /mnt/etc/
total 216
-r-xr-xr-x  1 root  wheel   7752 Dec 15 11:36 fr.iso.kbd
-r--r--r--  1 root  wheel    540 Dec 15 11:36 group
-rw-------  1 root  wheel   1520 Dec 15 11:36 master.passwd
-r--r--r--  1 root  wheel    412 Dec 15 11:36 motd
-r--r--r--  1 root  wheel   6256 Dec 15 11:36 protocols
-rw-r--r--  1 root  wheel  40960 Dec 15 11:36 pwd.db
-r-xr-xr-x  1 root  wheel   1574 Dec 15 11:36 rc
-r-xr-xr-x  1 root  wheel     92 Dec 15 11:36 rc.kbdfr
-r-xr-xr-x  1 root  wheel    565 Dec 15 11:36 rc.lvm2
-r-xr-xr-x  1 root  wheel    237 Dec 15 11:36 rcmount_crypt
-r-xr-xr-x  1 root  wheel    189 Dec 15 11:36 rcmount_tcplay
-r--r--r--  1 root  wheel  53714 Dec 15 11:36 regdomain.xml
-rw-------  1 root  wheel  40960 Dec 15 11:36 spwd.db
-r--r--r--  1 root  wheel  50648 Dec 15 11:36 wpa_supplicant.conf

So we can check that the image contains our additional files : rc.kbdfr and fr.iso.kbd. We can also check that /mnt/bin/rescue kbdcontrol exists. Last test is to run /mnt/bin/rescue kbdcontrol, that should give the same output as running the regular kbdcontrol command.

Last, here are the step to unmount the initrd.

sudo umount /mnt
sudo vnconfig -u vn0

The last step is to reboot and check that the prompt is using the keyboard layout.