Мир меняется, операционные системы обновляются, FreeBSD в этом - не исключение. В данной статье описывается процесс двоичного (бинарного) обновления операционной системы FreeBSD 9.0 RELEASE до версии 9.1 RELEASE (по такому же принципу можно потом обновить 9.1 до 9.2). Бинарное обновление процесс хоть и простой, но довольно длительный и опасный, и в случае ошибки можно потерять загрузку ОС. Бинарное обновление производится только в случае использования системой дефолтного ядра GENERIC. Если же ядро кастомное (перенастраивалось), ни в коем случае нельзя производить бинарное обновление, т.к. проблемы повсплывают почти со 100%-ной вероятностью, сразу их не заметите, потратите несколько дней на локализацию и исправление проблемы. Т.е. при кастомном ядре должна производиться только классическая сборка мира и ядра из исходного кода, с предварительным обновлением оного.
Приступим. Для начала убедимся, что ядро действительно дефолтное - GENERIC.
# uname -isor
FreeBSD 9.0-RELEASE GENERIC
Ядро подходит, но прежде чем устанавливать новую бинарную версию ядра и мира, необходимо накатить последние багфиксы текущей версии операционной системы. Скачиваем последние патчи для текущей версии.
# freebsd-update fetch
Looking up update.FreeBSD.org mirrors... 5 mirrors found. Fetching public key from update5.freebsd.org... done. Fetching metadata signature for 9.0-RELEASE from update5.freebsd.org... done. Fetching metadata index... done. Fetching 2 metadata files... done. Inspecting system... done. Preparing to download files... done. Fetching 246 patches.....10....20....30 .... 240... done. Applying patches... done. Fetching 1 files... done. The following files will be added as part of updating to 9.0-RELEASE-p7: /usr/src/crypto/openssl/ssl/s3_cbc.c The following files will be updated as part of updating to 9.0-RELEASE-p7: /boot/kernel/kernel /boot/kernel/kernel.symbols ... ... ^[[6~WARNING: FreeBSD 9.0-RELEASE HAS PASSED ITS END-OF-LIFE DATE. Any security issues discovered after Mon Apr 1 04:00:00 MSK 2013 will not have been corrected.
Утилита сообщила, что текущая версия FreeBSD (9.0) по вопросам безопасности не поддерживается с 1 апреля 2013 года. Устанавливаем скачанные патчи и перезагружаемся.
# freebsd-update install
Installing updates... done.
# shutdown -r now
Shutdown NOW!
После загрузки, рядом с версией системы мы должны увидеть суффикс »-pX», который указывает версию патчей безопасности.
# uname -isor
FreeBSD 9.0-RELEASE-p7 GENERIC
Актуальные патчи для текущей системы установлены, можно приступать к обновлению самой системы.
# freebsd-update upgrade -r 9.1-RELEASE
Начнётся довольно длительный процесс, в ходе которого мы должны будем ответить на несколько вопросов и увидим информативный вывод по замене бинарных файлов системы. Утилита может попросить внести изменения в файлы вручную, если вывод по обновлению того или иного конфига будет неоднозначный.
Looking up update.FreeBSD.org mirrors... 5 mirrors found. Fetching metadata signature for 9.0-RELEASE from update5.freebsd.org... done. Fetching metadata index... done. Fetching 1 metadata files... done. Inspecting system... done. The following components of FreeBSD seem to be installed: kernel/generic src/src world/base world/lib32 The following components of FreeBSD do not seem to be installed: world/doc world/games Does this look reasonable (y/n)? y Fetching metadata signature for 9.1-RELEASE from update5.freebsd.org... done. Fetching metadata index... done. Fetching 1 metadata patches. done. Applying metadata patches... done. Fetching 1 metadata files... done. Inspecting system... done. Fetching files from 9.0-RELEASE for merging... done. Preparing to download files... done. Fetching 37713 patches.....10....20....30....40....50....done ... ... Applying patches... done. Fetching 2120 files... done. Attempting to automatically merge changes in files... done. The following changes, which occurred between FreeBSD 9.0-RELEASE and FreeBSD 9.1-RELEASE have been merged into /etc/defaults/periodic.conf: --- current version +++ new version @@ -11,11 +11,11 @@ # are changed and new features are added. # # For a more detailed explanation of all the periodic.conf variables, please # refer to the periodic.conf(5) manual page. # -# $FreeBSD: release/9.0.0/etc/defaults/periodic.conf 220020 2011-03-26 03:01:48Z dougb $ +# $FreeBSD: release/9.1.0/etc/defaults/periodic.conf 231721 2012-02-15 01:52:59Z gjb $ # # What files override these defaults ? periodic_conf_files="/etc/periodic.conf /etc/periodic.conf.local" @@ -94,10 +94,11 @@ daily_status_disks_enable="YES" # Check disk status daily_status_disks_df_flags="-l -h" # df(1) flags for check # 404.status-zfs daily_status_zfs_enable="NO" # Check ZFS +daily_status_zfs_zpool_list_enable="YES" # List ZFS pools # 405.status-ata_raid daily_status_ata_raid_enable="NO" # Check ATA raid status # 406.status-gmirror @@ -145,10 +146,16 @@ # 500.queuerun daily_queuerun_enable="YES" # Run mail queue daily_submit_queuerun="YES" # Also submit queue +# 800.scrub-zfs +daily_scrub_zfs_enable="NO" +daily_scrub_zfs_pools="" # empty string selects all pools +daily_scrub_zfs_default_threshold="35" # days between scrubs +#daily_scrub_zfs_${poolname}_threshold="35" # pool specific threshold + # 999.local daily_local="/etc/daily.local" # Local scripts # Security options Does this look reasonable (y/n)? y The following changes, which occurred between FreeBSD 9.0-RELEASE and FreeBSD 9.1-RELEASE have been merged into /etc/newsyslog.conf: --- current version +++ new version @@ -1,7 +1,7 @@ # configuration file for newsyslog -# $FreeBSD: release/9.0.0/etc/newsyslog.conf 221382 2011-05-03 12:22:46Z ru $ +# $FreeBSD: release/9.1.0/etc/newsyslog.conf 234675 2012-04-25 07:09:02Z glebius $ # # Entries which do not specify the '/pid_file' field will cause the # syslogd process to be signalled when that log file is rotated. This # action is only appropriate for log files which are written to by the # syslogd process (ie, files listed in /etc/syslog.conf). If there @@ -17,19 +17,19 @@ # future, these defaults may change to more conservative ones. # # logfilename [owner:group] mode count size when flags [/pid_file] [sig_num] /var/log/all.log 600 7 * @T00 J /var/log/amd.log 644 7 100 * J -/var/log/auth.log 600 7 100 * JC +/var/log/auth.log 600 7 100 @0101T JC /var/log/console.log 600 5 100 * J /var/log/cron 600 3 100 * JC /var/log/daily.log 640 7 * @T00 JN /var/log/debug.log 600 7 100 * JC /var/log/kerberos.log 600 7 100 * J /var/log/lpd-errs 644 7 100 * JC /var/log/maillog 640 7 * @T00 JC -/var/log/messages 644 5 100 * JC +/var/log/messages 644 5 100 @0101T JC /var/log/monthly.log 640 12 * $M1D0 JN /var/log/pflog 600 3 100 * JB /var/run/pflogd.pid /var/log/ppp.log root:network 640 3 100 * JC /var/log/security 600 10 100 * JC /var/log/sendmail.st 640 10 * 168 B Does this look reasonable (y/n)? y The following files are affected by updates, but no changes have been downloaded because the files have been modified locally: /.cshrc /root/.cshrc The following files will be removed as part of updating to 9.1-RELEASE-p24: /boot/kernel/iw_cxgb.ko /boot/kernel/iw_cxgb.ko.symbols ... ... The following files will be added as part of updating to 9.1-RELEASE-p24: /boot/kernel/drm2.ko /boot/kernel/drm2.ko.symbols ... ... /usr/src/sys/arm/arm/genassym.c /usr/src/sys/arm/arm/identcpu.c To install the downloaded upgrades, run "/usr/sbin/freebsd-update install".
Обновления скачаны и настроены, устанавливаем.
# freebsd-update install
Installing updates... Kernel updates have been installed. Please reboot and run "/usr/sbin/freebsd-update install" again to finish installing updates.
Первым запуском freebsd-update install применяются обновления к ядру и его модулям. Следуем указаниям утилиты, перезагружаем систему.
# shutdown -r now
Shutdown NOW!
Система должна загрузиться с новым ядром. Далее нужно вновь запустить freebsd-update install. Утилита определит этап обновления и начнёт удалять старые объектные файлов и совместно используемые библиотеки.
# freebsd-update install
Installing updates... done.
После чего нужно снова перезагрузиться.
# shutdown -r now
И снова выполнить freebsd-update install и перезагрузиться, это позволит понять, что все этапы процесса обновления завершены.
# freebsd-update install
Installing updates... done.
# shutdown -r now
Готово, можно проверять текущую версию операционной системы.
# uname -isor
FreeBSD 9.1-RELEASE-p22 GENERIC FreeBSD 9.2-RELEASE-p15 GENERIC
Система теперь имеет версию 9.1-RELEASE и версию патчей безопасности p22. После бинарного обновления совершенно не лишним будет проверить логи, конфиги и корректную работу сервисов. Как и было указано в начале статьи, таким же образом производится обновление операционной системы с версии FreeBSD 9.1-RELEASE до версии FreeBSD 9.2-RELEASE. На этом всё, успехов в обновлении!