Удаленная сборка и установка ядра 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
такое выдает
вы команду в каталоге /usr/src выполняете ?
veronika, попробуйте обновить исходник средствами csup или cvsup, и потом:
Ну и собирайте ядро.
неа))
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
Отправить комментарий