Обновление FreeBSD
Целью написания этой совсем короткой заметки служит составление алгоритма обновления серверной операционной системы FreeBSD в пределах одного релиза. Т.е. например, обновление только что установленной «с нуля» 10.1-RELEASE до 10.1-RELEASE-p9. Данную операцию периодически необходимо проводить, пока осуществляется поддержка релиза, с целью обновления встроенных утилит (таких как — OpenSSH, OpenSSL и т.д.), устранения обнаруженных проблем с безопасностью. |
На данный момент команда разработчиков FreeBSD осуществляет поддержку и обновление только следующих релизов:
- FreeBSD 10.1-RELEASE (поддержка продлится до 31 декабря 2016 года);
- FreeBSD 9.3-RELEASE (поддержка релизов 9.1 и 9.2 завершена 1 января 2015 года, 9.3 продлится до 31 декабря 2016 года);
- FreeBSD 8.4-RELEASE (всем использующим этот релиз необходимо срочно запланировать апгрейд до более нового, т.к. поддержка всех релизов 8.x завершается 30 июня 2015 года).
Под поддержкой от разработчика понимается выпуск любых актуальных патчей, в том числе связанных с безопасностью. Более подробно тут – www.freebsd.org/security.
Проверить существующую версию вашего релиза вы можете командой:
# uname -r 10.1-RELEASE
На момент написания статьи вышел уже 10 патч на релиз 10.1. Проверить, существует ли обновление на ваш установленный релиз можно только командой freebsd-update fetch
, после работы которой вы обнаружите либо (к примеру):
# freebsd-update fetch ... No updates needed to update system to 10.1-RELEASE-p9. No updates are available to install.
либо:
# freebsd-update fetch Looking up update.FreeBSD.org mirrors... 5 mirrors found. Fetching public key from update5.freebsd.org... done. Fetching metadata signature for 10.1-RELEASE from update5.freebsd.org... done. Fetching metadata index... done. Fetching 2 metadata files... done. Inspecting system... done. Preparing to download files... done. Fetching 10 patches.....10 done. Applying patches... done. Fetching 4 files... done. The following files will be updated as part of updating to 10.1-RELEASE-p10: /bin/freebsd-version /boot/kernel/kernel /boot/kernel/kernel.symbols /boot/kernel/ufs.ko /boot/kernel/ufs.ko.symbols /usr/include/ufs/ffs/softdep.h /usr/sbin/freebsd-update /usr/share/man/man8/freebsd-update.8.gz /usr/src/sys/conf/newvers.sh /usr/src/sys/ufs/ffs/ffs_softdep.c /usr/src/sys/ufs/ffs/ffs_vfsops.c /usr/src/sys/ufs/ffs/softdep.h /usr/src/usr.sbin/freebsd-update/freebsd-update.8 /usr/src/usr.sbin/freebsd-update/freebsd-update.sh
с выводом всего, что подлежит обновлению.
Поэтому, для большинства пользователей, использующих FreeBSD версий 8.4, 9.3, 10.1, самым простым способом получить последние обновления является последовательное использование следующих команд:
# freebsd-update fetch # freebsd-update install
После их выполнения необходимо осуществить перезагрузку сервера. Если вы используете кастомное (вручную собранное) ядро, вам понадобиться заново его пересобрать и установить, т.к. после осуществления перезагрузки вы получите ядро для своего релиза, которое идёт по-умолчанию. Т.е. если до выполнения обновления вывод команды uname -i
был отличным от GENERIC, то после перезагрузки вы получите именно его:
# uname -i GENERIC
Пересобрать (исключить из него поддержку отсутствующих в системе устройств или ненужных опций) своё собственное ядро довольно просто. Подробное описание для этого вы найдете в HandBook – Глава 9. Настройка ядра FreeBSD. Для того, чтобы узнать какие именно устройства на данный момент используются на вашем сервере, достаточно при загрузке с ядром GENERIC внимательно изучить файл /var/run/dmesg.boot
:
# less /var/run/dmesg.boot Copyright (c) 1992-2014 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD is a registered trademark of The FreeBSD Foundation. FreeBSD 10.1-RELEASE-p9 #3: Tue Apr 21 13:31:45 MSK 2015 ...
Для системы amd64 (дистрибутив которой необходимо использовать, если на вашем сервере установлено более четырех гигабайтов оперативной памяти) необходимо выполнить следующее:
# uname -m
amd64
# cd /usr/src/sys/amd64/conf
# cp GENERIC MYKERNEL
# nano -w MYKERNEL
внесите необходимые изменения
# cd /usr/src
# make buildkernel KERNCONF=MYKERNEL
# make installkernel KERNCONF=MYKERNEL
# reboot
Для платформы i386 необходимо искать конфигурационный файл ядра по пути /usr/src/sys/i386/conf
:
# uname -m i386 # cd /usr/src/sys/i386/conf
При возникновении каких-либо трудностей при загрузке вашего собственного ядра обратитесь к разделу HandBook 9.7. Решение проблем.
Если после сборки и перезагрузки сервера вы увидели что-то вроде этого (в зависимости от того, как вы назвали своё ядро):
# uname -i MYKERNEL
вам необходимо пересобрать все установленные порты в системе (т.к. некоторые из них зависят от версии установленной системы (а она у вас поменялась) и не будут корректно работать (такие как lsof, например)).
Если вы никогда не выполняли обновление дерева портов в системе выполните команду:
# portsnap fetch extract
в противном случае, просто обновите его:
# portsnap fetch update
Для обновления установленных в системе портов я использую команду portupgrade
из /usr/ports/ports-mgmt/portupgrade
. Последовательность будет следующая:
# pkg update -f # pkg audit -F # portupgrade -vafrR # pkg check -Bd
На этом процесс выполнения обновления установленного в вашей системе релиза FreeBSD до последнего можно считать завершенным.
На случай, если что-то пошло не так, предусмотрен механизм отката внесенных изменений. Для этого вы можете воспользоваться командой:
# freebsd-update rollback
которая вернет вашу систему в изначальное состояние.
_______________
По мотивам.