Удаленная сборка и установка ядра FreeBSD

Иногда процесс обновления, переконфигурирования, пересборки ядра может привести к печальным последствиям даже на локальной машине, но тут мы хотя-бы имеем физический доступ к консоли сервера и можем принять соответствующие меры по оживлению системы, в случае-же удаленного администрирования, все немного сложней. Поэтому постараюсь вкратце описать некоторые меры предосторожности при сборке нового ядра во FreeBSD, удаленно.

При удаленном администрировании ядра FreeBSD, нужно обязательно(!) иметь под рукой KVM доступ к серверу, мало-ли чего. Благо сейчас у каждого хостера это есть, правда за отдельную плату как правило).

Итак, если по каким-то причинам новое ядро не завелось, сервер не загрузился и нужно загрузить старую версию ядра, делаем следующее:
Подключаемся через KVM, перезагружаем сервер, на загрузочном экране консоли, выбираем 6-й пункт, Command prompt, появится приглашение командной строки.
Вводим:

OK unload  # Выгружаем все
OK boot kernel.old  # Грузимся со старым ядром

Для просмотра всех возможных команд загрузчика, используйте команду help.

Так-же при сборке ядра может произойти следующая ситуация:
Мы собираем новое ядро, но машина с ним не завелась. Загружаемся со старым ядром, правим конфиг ядра, пересобираем и снова устанавливаем, перезагружаемся, а машина и это новое ядро грузить не хочет. Но загрузиться со старого, заведомо рабочего ядра мы уже не можем, поскольку при последней сборке, ядро kerrnel.old было перезаписано предыдущим, не работающим ядром. В итоге имеем мертвую FreeBSD, с 2 ядрами и невозможностью загрузиться.

Что-бы избежать такой неприятной ситуации, можно подстраховаться, что я всегда и делаю, когда удаленно администрирую реальную машину.
Самое первое что нужно, до начала каких-либо манипуляций с ядром системы, скопировать заведомо рабочую версию ядра ( в идеале GENERIC ) в отдельную папку, например:

freebsd /# cp -Rp /boot/kernel /boot/kernel.good

Теперь, что-бы у нас там не произошло при сборке ядра, у нас всегда есть возможность загрузить kernel.good через системный загрузчик, как было описано выше.
Кроме того, опять-же для подстраховки, можно использовать следующую схему:
Устанавливаем ядро в отдельную папку, это можно задать переменной DESTDIR= при установке ядра:

freebsd /# make -s installkernel KERNCONF=GARROTTE-TEST DESTDIR=/boot/testkernels

в результате ядро будет установлено в папку /boot/testkernels/boot/kernel, далее воспользуемся командой nextboot, которая одноразово задает ядро для следующей загрузки.
Обратите внимание на путь к ядру, он читается относительно директории /boot.

freebsd /# nextboot -k testkernels/boot/kernel 

Если nextboot ни на что не ругнулась, все ок, при этом был создан файл /boot/nextboot.conf. Можно перезагружаться.
После загрузки смотрим на каком мы ядре:

freebsd /# uname -i
GARROTTE-TEST

Теперь можно погонять систему, посмотреть все ли работает.
Если все в норме, копируем текущее ядро и ставим на его место, только что проверенное:

freebsd /# mv /boot/kernel /boot/kernel.bak
freebsd /# mv /boot/testkernels/boot/kernel /boot/kernel
freebsd /# reboot

После перезагрузки у нас рабочим будет новое ядро, на постоянной основе.

Комментарии

Собираю ядро:
собираю KERNELCONF=web
а в конце:
Kernel build for GENERIC completed

После ребута грузится с GENERIC ..
В чем может быть проблема?

не KERNELCONF, а KERNCONF
ну и естественно, что-бы собирать кастомное ядро, нужно скопировать конфиг GENERIC в конфиг с нужным именем, в вашем случае web и поправить в конфиге директиву ident, на web

а у меня почему-то не запускается make

srv1928 # make buildkernel KERNCONF=TEST-KERN
make: don't know how to make buildkernel. Stop

такое выдает

вы команду в каталоге /usr/src выполняете ?

veronika, попробуйте обновить исходник средствами csup или cvsup, и потом:

cd /usr/src/
rm -R /usr/obj/*.
make clean
make clean

Ну и собирайте ядро.

неа))

su
cd
fastest_cvsup -c ru
ee /root/9rel-supfile
cat ee /root/9rel-supfile
Code:
*default host=cvsup7.ru.freebsd.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_9_0
*default delete use-rel-suffix
*default compress
src-all
csup 9rel-supfile
..
ETA: 5 Hours..
ok.
uname -a
FreeBSD estaf.users.trc.local 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Tue Jan 3 07:46:30 UTC 2012 root@farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64

cd /usr/src/sys/amd64/conf/
cp GENERIC ROUTER
ee ROUTER
ok

cd /usr/src/
pwd
/usr/src
ok

cd /usr/src/
rm -R /usr/obj/*.
make clean
make clean

make buldkernel KERNCONF=ROUTER
make: don't know how to make buldkernel. Stop

>Dmitry
попробуйте команду make buildkernel KERNCONF=ROUTER, и вообще после make clean сделайте еще make cleandir

в первом блоке кода - ошибка, не booe, а boot

и вообще никогда не надо править GENERIC - скопировал файл конфига в файл со своим именем и все команды сборки резко упрощаются:
cp GENERIC MYKERN
vi MYKERN
config MYKERN
cd куда скажет предыдущая команда
make depend
make install

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
Регистр имеет значение
 oooooooooo.                ooooooooo.    oooo               .o      oooooooo 
`888' `Y8b `888 `Y88. `888 .d88 dP"""""""
888 888 oooooooo 888 .d88' 888 .oo. .d'888 d88888b.
888 888 d'""7d8P 888ooo88P' 888P"Y88b .d' 888 `Y88b
888 888 .d8P' 888 888 888 88ooo888oo ]88
888 d88' .d8P' .P 888 888 888 888 o. .88P
o888bood8P' d8888888P o888o o888o o888o o888o `8bd88P'


Введите код, изображенный в стиле ASCII-арт.