FreeBSD upgrade
Был когда-то админ, который держал вэб-сервера в компании. А я в ту пору работал там же вэб-программером. Но потом он ушел - и все бразды правления серверами былипереданы мне до нахождения нового админа. Было это месяцев 8 назад. С тех пор я и админю эти сервера и программлю.
Так вот еще в те далекие времена на один из продакшен-серверов была поставлена FreeBSD 6.1 RELEASE. И были у нее иногда (раз-два в месяц) странные сбои - она спонтанно несколько раз уходила в ребут. Память там целая, да и рейд-массив не сбоит. Все логи чистые.
Как я смог наконец-то выяснить - такое поведение встречалось у некоторых других серверов с этой же версией фри, а также и с какой-то версией 5ки - вроде бы тоже 5.1.
Переставить сервер нет никакой возможности. К великому моему сожалению. Посему пришлось делать апгрейд. Да к тому же и ядро там самосборное, так что бинарный апгрейд не выйдет. И вот что я делал:
- Правим/проверяем /etc/make.conf. У меня он имеет такой вид: [cc lang="bash"] PERL_VER=5.8.8 PERL_VERSION=5.8.8 MASTER_SITE_BACKUP?= \ ftp://ftp5.us.freebsd.org/pub/FreeBSD/portg.freebsd.orgs/current-distfiles/${DIST_SUBDIR}/ MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP} SUP_UPDATE= yes SUP= /usr/local/bin/cvsup SUPFLAGS= -g -L 2 SUPHOST= cvsup5.us.freebsd.org PORTSSUPFILE= /usr/share/examples/cvsup/ports-supfile X11BASE=${LOCALBASE} [/cc]
- Конфигурируем-правим cvs-supfile: [cc lang="bash"] *default host=cvsup3.ua.freebsd.org *default base=/var/db *default prefix=/usr *default release=cvs delete use-rel-suffix compress #ports-all tag=. *default release=cvs tag=RELENG_6_2 src-all [/cc] если раскоментарить ports-all оно обновит еще и дерево портов, а мне долго ждать не хотелось. А в tag нужно вписать релиз, до которого будем апдейтить систему.
- Обновляем /usr/src: [cc lang="bash"]cvsup -g -L 2 /root/cvs-supfile[/cc]
- [cc lang="bash"]cd /usr/src[/cc]
- [cc lang="bash"]make buildworld[/cc]
- [cc lang="bash"]make buildkernel KERNCONF=MYKERNEL[/cc]
- [cc lang="bash"]make installworld[/cc]
- А вот теперь надо ставить ядро... Но вдруг не взлетит? Потому будем ставить в два ребута. [cc lang="bash"] make installkernel KERNCONF=MYKERNEL KODIR=/boot/testkernel nextboot -k textkernel [/cc] Nextboot укажет загрузчику что надо загрузиться с указанным ядром лишь раз - потом грузить дефолтное.
- [cc lang="bash"]reboot[/cc]
- [cc lang="bash"]uname -a[/cc] и смотрим, получилось или нет. У меня получилось... И теперь ставим это ядро как основное
- [cc lang="bash"]make installkernel KERNCONF=MYKERNEL[/cc]
- Насколько я понял - не помешает сделать [cc lang="bash"]mergemaster[/cc]Это попытается обновить конфиги сервисов, а те что изменены - поможет смерджить
- [cc lang="bash"]reboot[/cc]