Сборка ядра FreeBSD при загрузке с LiveCD

Возникла задача пересборки ядра на системе FreeBSD, перенесенной на виртуальную машину с другого сервера по аналогии с процедурой, описаной в http://nixadmin.ru/move_freebsd_filesystem. Особенностью перенесенной системы было изменение размера диска и использование одного диска вместо двух дисков с GMIRROR. Оказалось что после переноса часть нового (виртуального) железа не поддерживается ядром перенесенной системы, в том числе сетевой адаптер и клавиатура. Причина в том что в кастомном ядре на старом сервере отсутствуют требуемые опции и девайсы. Требовалась пересборка ядра.
Можно было, например, на исходном сервере собрать ядро с требуемыми опциями и заново перенести систему. Законнектиться по ssh на новый сервер для сборки ядра на нем не получится, т.к. не работает сетевй адаптер. Работать в консоли нельзя - нет поддержки клавиатуры. Решил воспроизвести ситуацию на виртуальном сервере под VirtualBox и попробовать собрать ядро, загрузившись с LiveCD, т.к. кроме интереса этот способ может быть полезен в различных нештатных ситуациях и вот что из этого вышло.
Итак, есть система FreeBSD 7.4 под VirtualBox.
Условие - должны быть в наличии исходные коды. Если их нет, то потребуется их установить. В моем случае они были. Приступаем.
Загружаемся с LiveCD FreeBSD 7.4 и попадаем в меню Country Selection, выбираем страну, затем Console Keymap, после чего попадаем в меню sysinstall. Тут выбираем пункт Fixit - 2 CDROM/DVD.
Затем выясняем как именуются разделы в системе. У меня это оказались ad4s1a ad4s1b ad4s1d ad4s1e ad4s1f.
Выполняем

mount /dev/ad4s1a /mnt
cat /mnt/etc/fstab
и смотрим что и куда монтировать дальше.
mount /dev/ad4s1e /mnt/tmp
mount /dev/ad4s1f /mnt/usr
mount /dev/ad4s1d /mnt/var
Затем выполняем chroot и монтируем /dev
chroot /mnt
mount -t devfs devfs /dev

Запускаем шелл внутри chroot
/bin/sh
Далее смотрим переменные окружения командой env и вносим изменения:
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export USERNAME=root
export GROUP=wheel
export HOME=/root
export PAGER=more
export EDITOR=ee
export SCSI_MODES=/usr/share/misc/scsi_modes
export GEOM_LIBRARY_PATH=/lib/geom
Возможно не все из перечисленных переменных следует изменять, не проверял.
Правим конфиг ядра и собираем.
rm -rf /usr/obj
make buildkernel KERNCONF=CUSTOM
make installkernel KERNCONF=CUSTOM
Перезагружаемся.
После перезагрузки проверяем
uname -a
FreeBSD local 7.4-RELEASE FreeBSD 7.4-RELEASE #0: Sat Sep 27 15:53:14 MSD 2014
root@:/usr/obj/usr/src/sys/CUSTOM  i386
Как видим, система благополучно загрузилась с новым ядром.
Другой вариант решения проблемы: после загрузки с livecd и монтирования разделов, скопировать ядро GENERIC с livecd ( /dist/boot/kernel ) в /mnt/boot/, предварительно переименовав имеющееся. Затем перезагрузится с этим ядром и собрать новое ядро если требуется уже на работающей системе.