В данной статье, я хотел бы описать систему обновлений FreeBSD и привести некоторые моменты, связанные с «подводными камнями» с которыми я столкнулся при обновлении с версии FreeBSD 9.0 RELEASE-p3 до FreeBSD 9.1 RESELASE-p10. Так же хочу немного упомянуть про пакетную систему pkg (так как в новой версии теперь используется pkg, вместо «портов»).
Начнём с того, что нам необходимо скачать SVN (если он у нас ещё не установлен). Для того, чтобы это сделать, надо зайти в порты cd /usr/ports/ и ввести команду make search name=svn2git
Как видно из вывода команды, данная программа находится в директории: /usr/ports/devel/svn2git
Далее переходим в эту директорию и вводим команду: make install clean Отвечаем на вопросы с установкой, можно оставить дефолтные настройки, после установки переходим в каталог /usr/ports/ и удаляем всё его содержимое rm -rf * после переходим в /usr/src/ и удаляем его содержимое rm -rf * .
Теперь нам необходимо перенести содержимое исходников и портов от релиза 9.1 (Либо того релиза, до которого вы хотите обновиться. Список релизов можно увидеть на странице http://www.freebsd.org/releases/ ) Вот тут то нам и понадобится наш svn. Вводим вот такие вот 2 команды: svn co svn:svn.freebsd.org/base/release/9.1.0 /usr/src svn co svn:svn.freebsd.org/ports/head /usr/ports
После переноса содержимого портов и исходных кодов, мы вводим команду: freebsd-update -r 9.1 upgrade Где 9.1 это наш релиз, до которого мы хотим обновиться. И далее /usr/sbin/freebsd-update install
Теперь мы обновили сам релиз, но остались ещё пакеты и конечно же ядро. Так как я использую архитектуру i386 , то путь к конфигурационному файлу моего ядра будет /usr/src/sys/i386/conf (если вы используете архитектуру amd64 , то путь к вашему конфигу будет /usr/src/sys/amd64/conf )
В этом каталоге нам понадобится файл GENERIC, это и есть конфиг ядра, которым нам понадобится, скопируем этот файл cp GENERIC FW00 (FW00 это то, как я решил назвать ядро, которое я собственно и буду собирать)
Теперь открываем наш конфиг vim FW00 и видим поддерживаемые девайсы и опции, которое включает в себя этот конфиг. (Не большое примечание. Как вы могли уже догадаться по названию ядра, то я собираю фаерволл и так как я не использую протокол IPv6, то я его отключу в целях безопасности, для этого необходимо просто удалить строчку options INET6). Теперь мы можем вписать сюда необходимые нам опции и убрать то, что не будет использоваться. Список опций ядра, можно найти в http://www.freebsd.org/doc/ru/books/handbook/kernelconfig-config.html там подробно описаны все необходимые опции. Я включил для себя поддержку:
device pf device pfsync device pflog device carp
options IPSEC options IPSEC_DEBUG device crypto
options ALTQ options ALTQ_CBQ options ALTQ_RED options ALTQ_RIO options ALTQ_HFSC options ALTQ_PRIQ
Эти опции весьма полезны для работы с фаерволлом pf. Но про сам pf и его девайсы я напишу позже, когда у меня будет время. Вы можете указать любые другие опции, которые вы посчитаете нужными.
Так давайте приступим к самому обновлению нашего «мира» и ядра >
Переходим в каталог исходников cd /usr/src/ и производим сборку нашего ядра. make -j4 buildkernel KERNCONF=FW00 параметр -j4 это количество потоков, я использую все 4ре, если в это время кто-то ещё работает с вами на сервере, то лучше выставите более меньшее количество потоков, что бы не мешать работе другому человеку или службе, которая для вас жизненно необходима, но если вы делаете процедуру обновления на отдельном сервере, то можете выделить то количество потоков, которое вам необходимо.
Далее необходимо собрать сам «мир».
make -j4 buildworld
После сборки мира, вводим команду: mergemaster -p и переходим к самой установке ядра и мира: make installkernel KERNCONF=FW00 make installworld
После завершения процесса установки вводим mergemaster и перезагружаемся reboot.
Теперь мы можем войти в нашу обновлённую систему и произвести обновление самих пакетов из портов, для этого нам понадобится ввести 3 команды:
portupgrade -rRFa portupgrade -nrRba -l portupgrade_show portupgrade -rRbak –batch -y x tripwire -l portupgrade_show - в данном примере, опцию x tripwire можно пропустить, если у вас нет данного пакета. Я же решил его не обновлять, так как мне он больше не нужен.
После этого мы можем произвести обновления наших программ, через pkg, для этого введём: pkg update && pkg upgrade
Но вот тут то у меня и появилась ошибка связанная с пакетом perl ( pkg не видел новую версию (необходимая 5.14 и реально присутствующая 5.16)) Давай те исправим это, введём команду:
pkg set -o lang/perl5.14:lang/perl5.16
И после этого мы снова может вернуться к нашему обновлению, pkg update && pgk upgrade (не забываем утвердительно отвечать на вопросы «y»)
После этого мы можем перезагрузить систему, что бы удостовериться что всё работает как надо. Так же, в портах есть весьма полезная программа portaudit, которая покажет вам список уязвимых пакетов в вашей системе и даст ссылку на описание этой уязвимости. но так как мы перешли на систему пакетов pkg, то теперь, чтобы произвести «аудит» нам необходимо ввести команду: pkg-static audit -F и если мы увидим строки:
Vulnxml file up-to-date. 0 problem(s) in the installed packages found.
То значит всё у нас хорошо, уязвимых пакетов нет. можно спать спокойно
Так же, теперь мы может искать и устанавливать программы, через pkg search «name» и pkg install «name». В случае, если вы обнаружите какие-то проблемы ссылающиеся на базу pkg /var/db/pkg/pkgdb.db То, лечится это довольно просто pkgdb -fu , простое обновление базы пакетов.
Надеюсь эта статья помогла вам увидеть сам процесс сборки и обновления в FreeBSD. Всем спасибо !
BlackEVA