Если что-то пошло не так
Существует пять категорий проблем, которые могут возникнуть при сборке собственного ядра. Вот они:
Не удаётся отработать команде config:
Если команда не может отработать, то, скорее всего, вы допустили где-нибудь маленькую ошибку. К счастью config(8) выведет номер проблемной строки, поэтому вы можете быстро найти строку, содержащую ошибку. Например, если вы видите:
config: line 17: syntax error
Убедитесь, что опция введена верно путём сравнения с файлом GENERIC или другим источником.
Не удаётся отработать команде make:
Если не удаётся отработать команде make, обычно это означает ошибку в описании конфигурации ядра, которая не достаточно тривиальна для того, чтобы config(8) мог обнаружить её. Опять-таки, просмотрите файл конфигурации и, если вы все еще не можете решить проблему, напишите письмо в Список рассылки, посвящённый вопросам и ответам пользователей FreeBSD включив в письмо файл конфигурации ядра. Скорее всего проблема будет решена быстро.
Не удаётся установить новое ядро:
Если ядро собралось без проблем, но не удалось его установить (команда make install или make installkernel
сообщила об ошибке), первое, что необходимо проверить, не запущена ли ваша система с уровнем безопасности 1 или выше (обратитесь к init(8)). Процедура установки пробует снять флаг неизменяемости с текущего ядра и установить этот флаг для нового ядра. Так как на уровне безопасности 1 и выше запрещено снятие флага неизменяемости для всех файлов в системе, установка должна производиться на уровне безопасности 0 и ниже.
Линия выше применима только к FreeBSD 4.X и более ранним версиям. FreeBSD 5.X, как и более поздние версии, не устанавливает этот флаг на ядро и ошибка при установке ядра возможно указывает на более фундаментальную проблему.
Если ваше новое ядро не загружается или ему не удаётся обнаружить ваши устройства - не паникуйте! К счастью, в FreeBSD существует отличный механизм для восстановления после установки несовместимого ядра. Просто выберите ядро, которое хотите загрузить в загрузчике FreeBSD.
К нему вы можете получить доступ, когда система делает обратный отсчёт от 10 в меню загрузки. Нажмите любую клавишу, кроме Enter, введите unload и наберите boot /boot/kernel.old/kernel, или используйте любое другое ядро, которое загрузится без проблем. Во время переконфигурирования ядра всегда полезно оставлять копию ядра, о котором известно, что оно рабочее.
После загрузки с рабочим ядром вы можете проверить ваш файл конфигурации и попробовать собрать ядро опять. Очень полезным в данном случае окажется файл /var/log/messages, в котором, среди других записей, имеются сообщения ядра от каждой успешной загрузки. Также, команда dmesg(8) выведет сообщения ядра от текущей загрузки.
Замечание: Если у вас возникли проблемы со сборкой ядра, убедитесь, что вы сохранили ядро GENERIC или другое рабочее ядро под другим именем, чтобы оно не было удалено при следующей сборке. Вы не можете использовать kernel.old, потому что при установке нового ядра kernel.old перезаписывается последним установленным ядром, которое может оказаться нерабочим. Также, как можно скорее переместите рабочее ядро в /boot/kernel, так как некоторые команды, такие как ps(1) будут работать некорректно. Для этого просто переместите каталог, содержащий работоспособное ядро:
# mv /boot/kernel /boot/kernel.bad
mv /boot/kernel.good /boot/kernel
В версиях FreeBSD до 5.X, для восстановления работоспособного ядра используйте команду:
# chflags noschg /kernel
Если вы обнаружите, что не можете этого сделать, скорее всего вы работаете на уровне безопасности (securelevel(8)) большем нуля. Отредактируйте переменную kern_securelevel в файле /etc/rc.conf, установите её в -1 и перезагрузитесь. Вы можете установить её в предыдущее состояние когда будете довольны своим новым ядром.
И, если вы захотите ``закрыть'' ваше новое ядро или любой другой файл, таким образом, что он не сможет быть перемещен или изменен, используйте следующую команду:
# chflags schg /kernel
Ядро работает, но ps(1) больше не работает:
Если вы установили версию ядра отличную от той, с которой были собраны ваши системные утилиты, например, ядро от 5.X на системе 4.X, большая часть системных команд, таких как и vmstat(8) не будут больше работать.Вам потребуется той же версии исходных текстов, что и ядро. Это одна из причин, по которой не следует использовать версию ядра, отличную от версии всей остальной системы.