... о главном. О граблях, то есть. Кто-то каждый новый год ходит в баню, а вот я столь же регулярно обновляю сервера на FreeBSD. Процесс, ей-ктулху, в своем роде не менее увлекательный, но как бы это сказать... несколько спесфисский.
Начнем с того, что 9.0 должна была выйти ДО нового года - но release announcement 'a не было. В то же время, CVS-тэг вполне себе наличествовал, а третьего января на оф. сайтах выложили дистрибутивы 9-ки. Странно, но ладно. Будем обновляться с 8.2 amd64.

Обновляем дерево исходных кодов системы, запускаем сборку мира. Упс. Custom make.conf ему не нравится - дескать, cputype должен быть дефолтовым =?. Ладно. Мне не жалко. Делаем. Собираем. Собирается. Собираем ядро по готовой конфиге. Без приключений. Ставим ядро. Ребутимся в single user, ставим мир. Нормально.
Перезагружаемся. Нормально. Делаем zpool upgrade -a. Нормально v28 в наличии. Делаем zfs upgrade. Поднимаем до 5ой версии. Норм. Не забываем (Вааааау! Нам даже напоминают!) обновить gptzfsboot. Перезагружаемся.
pmbr отрабатывает. gptzfboot отрабатывает... вроде. Только не правильно. Can't work out which disk we are booting from. Упс. Жужль говорит, что такая фиганда была с 9.0 RC2 amd64. Не решено. Впрочем... говорят, что gptzfsboot с i386 работает нормально. Проверяем - врут! При сравнении самосборки с релизом i386 diff говорит, что 'files differ', но установка не помогает. Пичаль...
Ладно, по проторенной дорожке идем в сорцы и ищем где же находится это сообщение об ошибке. Сюрприииз! Относится оно не к gptzfsboot'у а к zfsloader'у - его и меняем "с эталонного носителя" - алиллуйя! Пошла загрузка. Тыр-пыр-пыр... не могу примонтировать root. WTF?! А! МогЁт быть, в кастомном kernel'е выпилено все, кроме ATA_CAM и винт не определяется? Ладно, грузанемся с generic'ом, ну или подгрузим недостающее модулями ядра из loader prompt'а. Ребут... авотфиг.
Грузимся с эталонного носителя, импортируем zfs pool. С -f нормально. Хм. Может, zpool.cache не проапдейтился? Маунтим livecd в rw, экспортируем пул, импортируем еще раз, копируем zpool.cache куданадо. Ребут. Та же фигня. Хм. bootfs выставлен правильно? С одной стороны, в wiki сказано, что и фиг на него (В 8-ке, кстати, и впрямь фиг) - а с другой, кто их знает, что там в девятке произошло? Грузимся, импортируем, смотрим. Нет, bootfs стоит и стоит правильно. Грузимся таки с syspool'а. Чтож за фигня-то, а?
Лезем в гугль. И еще раз. И еще. Наконец видим в списках рассылки по freebsd 9-current от ажно 10-го года описание "неведомых грабель" - мол, legacy-mountpoint+vfs.root.mountfrom нонеча не true, и / надо задавать явным образом. Хм. Грузимся с livecd, импортируем пул с -o altroot=/mnt, меняем mountpoint с legacy на /, перезагружаемся и а-лилуйя! алилуйя! алиллуйя!!! Оно стартует. Уффф
Правда при загрузке оно ругается на unrecognized command 'volinit' - но это, в общем-то фигня - где-то в rc,d/zfs что-то накосячено, но жить (Тьфу-тьфу-тьфу!) оно вроде не мешает.
В общем, opensource такой опенсорц, что просто "ой!"