Freebsd 10 обновление системы с помощью freebsd-update

Freebsd 10 обновление системы с помощью freebsd-update

Решил прояснить для себя вопрос с обновлением системы. В freebsd есть определенная неоднозначность в этом процессе. Один раз я попал в неприятную ситуацию при обновлении и потратил много времени, пока не понял, в чем же было дело. Сейчас постараюсь рассказать обо всех нюансах обновления freebsd. В качестве подопытной машины у меня выступает версия 10.1

Использование утилиты freebsd-update

Установить все обновления безопасности на сервер freebsd можно легко и быстро с помощью утилиты freebsd-update. Итак, у нас имеется:

# uname -aFreeBSD websrv.local 10.1-RELEASE FreeBSD 10.1-RELEASE #0 r274401: Tue Nov 11 21:02:49 UTC 2014     [email protected]:/usr/obj/usr/src/sys/GENERIC  amd64

Запускаем freebsd-update, проверяем наличие обновлений и скачиваем необходимые:

# freebsd-update fetchLooking up update.FreeBSD.org mirrors… none found. Fetching public key from update.FreeBSD.org… done. Fetching metadata signature for 10.1-RELEASE from update.FreeBSD.org… done. Fetching metadata index… done. Fetching 2 metadata files… done. Inspecting system… done. Preparing to download files… done. Fetching 19 patches…..10…. done. Applying patches… done. The following files will be updated as part of updating to 10.1-RELEASE-p1:

и дальше список обновлений перечисляется.

Устанавливаем обновления:

# freebsd-update install Installing updates… done.

Если после этого мы снова проверим версию системы с помощью uname, то окажется, что ничего не изменилось. Будет показана та же версия. Что же произошло после этого обновления? Произошло бинарное обновление системы до актуальных значений.

При этом, если у вас собрано и установлено свое ядро, отличное от GENERIC, то после перезагрузки у вас будет загружено ядро GENERIC. Про это обязательно нужно помнить. Я так долго разбирался, почему вдруг перестала работать команда forward в ipfw. Перепроверил все, что только мог, опустились руки.

А все потому, что процесс обновления и перезагрузки сервера были сильно разделены по времени, а заметил я то, что не работает перенаправление еще позже, поэтому не сопоставил эти два события. О том, что у меня не то ядро загружено я и представить не мог.

Я же знаю и помню, что ядро собирал и не трогал с тех пор. Вот такой нюанс, о котором нужно не забывать.

Чтобы отразить изменения в версии системы, пересоберем и установим ядро GENERIC. Исходные тексты системы, нужные для сборки, находятся в папке /usr/src. Если у вас там пусто, то их необходимо установить.

Установка и обновление исходных текстов системы Freebsd

Для установки исходных текстов системы есть много способов. Я предлагаю воспользоваться, как мне кажется, самым простым — с помощью программы subversion. Устанавливаем ее из портов:

# cd /usr/ports/devel/subversion # make install clean # rehash

И качаем исходники для версии 10.1:

# svn checkout https://svn0.ru.freebsd.org/base/release/10.1.0 /usr/src

Или для версии 10.2:

# svn checkout https://svn0.ru.freebsd.org/base/release/10.2.0 /usr/src

Для 10.3:

# svn checkout https://svn0.ru.freebsd.org/base/release/10.3.0 /usr/src

После того, как скачали исходники, снова запускаем обновление системы. Она найдет исправления, которые нужно внести в тексты:

# freebsd-update fetch # freebsd-update install

После этого собираем и устанавливаем ядро GENERIC:

# cd /usr/src # make buildkernel # make installkernel # shutdown -r now

Проверяем версию:

# uname -a FreeBSD websrv.local 10.1-RELEASE-p1 FreeBSD 10.1-RELEASE-p1 #0 r275828M: Tue Dec 16 16:55:19 MSK 2014     [email protected]:/usr/obj/usr/src/sys/GENERIC  amd64

Все изменения вступили в силу и отображены.

Теперь для того, чтобы иметь всегда актуальную версию критических обновлений безопасности системы, создадим задание cron на ежедневную проверку обновлений:

 # echo '20 3 * * * root freebsd-update cron' >> /etc/crontab

По этому заданию каждый день в 3.20 будет проверяться наличие новых критических обновлений безопасности системы freebsd 10. В случае, если таковые найдутся, они будут закачаны и пользователю root отправлено оповещение. Устанавливать их необходимо вручную.

Помогла статья? Есть возможность отблагодарить автора

Дополнительные материалы по Freebsd

Рекомендую полезные материалы по Freebsd:
Описание установки Freebsd 11 на одиночный диск, либо на софтовый raid1, сделанный средствами zfs, которые поддерживает стандартный установщик.Базовая настройка Freebsd, которую можно выполнить после установки сервера общего назначения. Представлены некоторые рекомендации по повышению удобства пользования и безопасности.Описание и нюансы обновления системы Freebsd с помощью утилиты freebsd-update. Показано пошагово на конкретном примере обновления.Настройка Freebsd шлюза для обеспечения выхода в интернет. Используется ipfw и ядерный нат, dnsmasq в качестве dhcp и dns сервера. Мониторинг сетевой активности с помощью iftop.Настройка максимально быстрого web сервера на базе Freebsd и nginx + php-fpm. Существенный прирост производительности по сравнению с классическим apache.

Источник: https://serveradmin.ru/freebsd-10-obnovlenie-sistemyi-s-pomoshhyu-freebsd-update/

Обновляем FreeBSD

Обновил статью 11.10.2016

Здесь будут рассмотрены 3 способа: через svn, через cvsup (уже не работает) и через freebsd-update (бинарное обновление).

через freebsd-update (бинарное обновление, только для ядра GENERIC)

Это так сказать полное обновление всех бинарников и ядра на GENERIC.

Последовательно выполним следующие команды (при условии, что у вас ядро GENERIC. Иначе будет ругань):

#freebsd-update -r 7.2-RELEASE upgrade #freebsd-update install #reboot #freebsd-update install

#reboot

Если при выполнении freebsd-update … upgrade получаем ошибку:

no mirrors remaining giving up

то пробуем указать IP одного из серверов (update.freebsd.orgupdate7.freebsd.org):

#freebsd-update -s 63.140.118.125 -r 7.2-RELEASE upgrade

и дальше как обычно.

через svn (или svnup)

Используйте одну из 2-х команд:

#svnlite co svn://svn.freebsd.org/base/releng/10.1/ /usr/src/ #svn co https://svn.FreeBSD.org/src/head /usr/src #cd /usr/src && svn update

через cvsup/csup (Официально уже закрыт, используйте только svn)

Здесь будет описан метод обновления с FreeBSD 7.0 до FreeBSD 7.1-RELEASE-p2, то есть до последнего релиза на момент обновления. Сам процесс состоит из нескольких этапов.

Примечание.

В процессе обновления нужно придерживаться такого порядка: собрать мир (не не инсталлировать), собрать и инсталлировать новое ядро (если вдруг что-то пойдёт не так, можно всегда загрузить старое ядро) и только после того, как вы поняли, что всё нормально работает — инсталлировать мир. В ином случае вы можете получить новый мир и старое ядро (если к примеру, новое не грузиться) — а это уже очень плохо, вплоть до незагружаемости сервера.

Будьте внимательны!

1) Установка cvsup и предварительная настройка.

Ставим cvsup-without-gui. (у кого оболочка bash, команду rehash делать не нужно!) Если у вас 7.0 и выше, то cvsup ставить не надо, есть уже штатный csup.

#cd /usr/ports/net/cvsup-without-gui && make install clean && rehash

Примечание.

А можно и не ставить csvup, а использовать штатный csup. В новых версиях переходят усиленно на svn, поэтому рекомендую использовать утилиту snvup (есть в портах) — легковесная замена стандартному svn.

После этого создаём файл такого содержания

*default tag=RELENG_7_1 *default host=cvsup5.ua.freebsd.org *default prefix=/usr *default base=/var/db *default release=cvs tag=RELENG_7_1 *default delete use-rel-suffix #*default compress src-all #*default tag=.

#ports-all

и обзываем его, например, /etc/cvs.conf

Примечание:

Если указать вместо 7_1 просто 7, то мы обновимся до PRERELEASE.

Теперь собственно будем выкачивать обновления. У кого трафик ограниченный — можно расскомментировать строку *default compress.

#cvsup /etc/cvs.conf

или так

#csup /etc/cvs.conf

Эта процедура очень длительная. Кстати, есть ещё несколько альтернативных зеркал

cvsup5.ua.freebsd.org
cvsup7.ua.freebsd.org

2) Пересобираем ядро.

После того, как всё было выкачано, приступаем к пересброрке ядра. Если у вас ядро отличается от GENERIC, рекомендуется пересобрать сначало GENERIC, а потом после того, когда система обновлена — только тогда пересобрать уже изменённое.

От версии к версии некоторые переменные могут меняться. Если вы находитесь в непосредственно близко, можете пересобирать изменённое ядро, а не GENERIC. Первый мой опыт был именно пересборка не GENERIC, а моего.

Хотя довольно много слышал, как некоторые админы после удалённых обновлений спешили к сервакам, ибо ядро не грузилось :). Такое вероятнее всего бывает, когда обновляете, например, с 5 до 6, или 6 до 7.

Если обновления происходят в пределах главной версии (с 7.0 до 7.1) то можно пробовать и не GENERIC пересобирать.

Перед сборкой рекомендуется сделать

#rm -rf /usr/obj/usr/src/

а потом уже

#cd /usr/src && make -j4 -s buildworld && make -j4 -s buildkernel KERNCONF=GENERIC INSTKERNNAME=kernel.new

Примечание: при апдейте на версию 10.3 и выше, нужно дополнительно выполнить:

# cd /usr/src && make -C sys/boot install

после этого продолжаем:

#cd /usr/src && make -s -j4 installkernel KERNCONF=GENERIC INSTKERNNAME=kernel.new

Параметр -j4 означает собирать в 4 потока, а параметр -s — показывать только то, что скомпиллилось, а не полностью процесс компиляции. То есть, если у вас как минимум dual-core, тогда имеет смысл использовать этот параметр и сборка теоретически должна пройти в несколько раз быстрее.

Так же можно использовать параметры:

— INSTKERNNAME=kernel.new, который установит новое ядро с именем kernel.new. Если этого не требуется, то можете убрать INSTKERNNAME=kernel.new

— KODIR=/boot/kernel.other, явно указывает куда устанавливать ядро

Если всё удачно (а что бы было всё удачно, рекомендую использовать nextboot), то выполняем ребут чтобы в случае проблем можно было остаться со старой версией системы (загрузить старое ядро и потом скопировать его в /boot/kernel):

#/sbin/shutdown -r now

3) mergemaster и согласование паролей и групп.

После этого предстоит довольно щепетильная процедура — процесс внесения изменений в конфигурационные файлы. Очень внимательно читайте то, что пишется. Сдесь будут задаваться вопросы о перезаписи существующий файлов групп и паролей. Поэтому, если не внимательны будете — можете затереть существующих юзеров.

#mergemaster -p

UPD.

Начиная с 9-ой версии, рекомендуют использовать вместо mergemaster использовать etcupdate.

4) Обновляем «мир»

#cd /usr/src && make -s -j4 installworld

При выполнении следующей команды, будьте внимательны, так как она удаляет старые библиотеки, с которыми могут быть слинкованы, например, ssh или bash. Эту команду лучше делать уже после полного пересбора критичного ПО. Если вы обновляетесь в пределах релиза (например, с 10.1 на 10.3), то данная команда практически безобидна, но лучше ещё раз всё проверить.

#yes | make delete-old && yes | make delete-old-libs

Читайте также:  Мое мнение по криптовалютам - не взлетит

5) mergemaster и обновления всех конфигурационных файлов.

Сейчас предстоит самая-самая трудоёмкая процедура. Будут задаваться вопросы о замене или сохранении существующих файлов конфигурации. Для большего познания mergemaster рекомендую прочесть хороший обзор этой утилиты здесь

Выполняем команду:

#mergemaster -F

А можно попробовать выполнить и в автоматическом режиме (естественно, на свой страх и риск):

#mergemaster -iFUP

6) Заключительный reboot.

Вообщем, делаем эту команду, и сидим молимся :). Если что-то пошло не так — тогда читаем, думаем и гуглим

Источник: https://skeletor.org.ua/?p=75

Обновление ядра и мира FreeBSD

Я бы не сказал что в процессе удаленного администрирования серверов приходится часто обновлять систему, хотя-бы потому, что если это рабочий сервер, то есть на нем работают какие-то сервисы, сайты, всегда есть определенный риск превратить его в нерабочий). Что-бы обновлять систему удаленно, нужен как минимум KVM доступ. Тем не менее, иногда все таки это делать приходится.

Весь процесс будем выполнять на виртуалке.

Что имеем:

freebsd /# uname -r
8.1-RELEASE

Обновлять будем до, недавно вышедшей, версии FreeBSD 8.2.

Вообще, операционная система FreeBSD позволяет сделать бинарное обновление, описание этого есть на официальном сайте:

# freebsd-update upgrade -r 8.2-RELEASE
# freebsd-update install
# shutdown -r now
# freebsd-update install
# freebsd-update install
# shutdown -r now

но если не изменяет память, при использовании НЕ GENERIC ядра, этот вариант не прокатит, хотя в принципе, на время обновления можно перейти на ядро GENERIC.
В любом случае, мне ближе обновление из исходников, видишь и контролируешь весь ход обновления.

Итак, для начала нужно обновить ( если нет, то залить ) исходные тексты операционной системы.
Проверяить текущую версию дерева исходных текстов FreeBSD, установленных в системе ( если они конечно установлены ) можно так:

freebsd /# grep -A 2 'TYPE=”' /usr/src/sys/conf/newvers.sh
TYPE=”FreeBSD”
REVISION=”8.1″
BRANCH=”RELEASE-p2″

Есть несколько способов синхронизировать исходники. Рассмотрим 2 варианта обновления.

  • Первый — использовать программу csup ( это более свежая версия утилиты cvsup ), она устанавливается вместе с системой, по-умолчанию.
  • Второй — воспользоваться svn ( subversion ) репозитарием FreeBSD.

Обновление исходных текстов через csup

Идем в /usr/share/examples/cvsup, берем файл standard-supfile и копируем в более удобное место.

freebsd /# cp /usr/share/examples/cvsup/standard-supfile /etc/supfile

Приводим его к такому виду:

*default host=cvsup6.ru.FreeBSD.org # Список зеркал можно найти тут http://www.freebsd.org/doc/handbook/cvsup.html#CVSUP-MIRRORS
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_8_2
# Список тегов http://www.freebsd.org/doc/handbook/cvs-tags.html
*default delete use-rel-suffix
*default compress
src-all

После сохранения, запускаем:

csup -g -L 2 /etc/supfile

Запустится синхронизация исходных текстов системы. Длительность зависит от скорости канала.

Обновление исходных текстов через svn ( subversion )

В отличии от csup, svn не входит в стандартную поставку операционной системы FreeBSD, ее нужно установить дополнительно. В портах FreeBSD, кроме обычной subversion существует еще и специализированный вариант subversion-freebsd, для обновления исходников нас интересует именно он.

freebsd /# cd /usr/ports
freebsd /# make -C devel/subversion-freebsd install clean

Для синхронизации через svn можно использовать HTTP или SVN сервер:

freebsd /# svn checkout http://svn.freebsd.org/base/releng/8.2/ /usr/src # через HTTP

или соответственно

freebsd /# svn checkout svn://svn.freebsd.org/base/releng/8.2/ /usr/src # через SVN

После завершения, снова глянем версию:

freebsd /# grep -A 2 'TYPE=”' /usr/src/sys/conf/newvers.sh
TYPE=”FreeBSD”
REVISION=”8.2″
BRANCH=”RELEASE-p1″

Все как надо.
В дальнейшем, для синхронизации, достаточно сделать:

freebsd /# svn update /usr/src/

Можно приступать к сборке.

Обновление мира и ядра

Чистим на всякий случай директорию /usr/obj:

freebsd /# rm -rf /usr/obj

или как рекомендует хендбук:

freebsd /# cd /usr/obj
freebsd /# chflags -R noschg *
freebsd /# rm -rf *
freebsd /# cd /usr/src
freebsd /# make cleandir # хендбук рекомендует выполнять эту команду дважды (!)
freebsd /# make cleandir

Идем дерево исходных текстов:

freebsd /# cd /usr/src

Мир в контексте операционной системы FreeBSD, это все, что не ядро. Ключ -j команды make позволяет запустить процесс в несколько потоков, ключ -s уменьшает количество информации выводимой на экран в процессе сборки. Команда time просто считает время. затраченное на выполнение следующей за ней команды, чисто для интереса). Запускаем сборку мира и ждем.

freebsd /usr/src# time make -s -j4 buildworld

Если все прошло успешно, получаем:

————————————————————–
>>> World build completed on Thu Apr 21 06:43:20 UTC 2011
————————————————————–
4014.258u 2388.551s 1:01:03.06 174.7% 5955+2033k 14136+6961io 18494pf+0w

Все это делалось на виртуалке — заняло чвс.
Теперь собираем ядро. В параметре KERNCONF, указывается название нашего ядра, если таковое имеется, если данная опция не установлена, будет собрано ядро GENERIC, используемое системой FreeBSD по умолчанию.
В данном случае я собираю свое ядро:

freebsd /usr/src# make -j4 -s buildkernel KERNCONF=GARROTTE

На ядро конечно времени ушло куда меньше нежели на мир:

————————————————————–
>>> Kernel build for GARROTTE completed on Thu Apr 21 07:31:49 UTC 2011
————————————————————–
910.735u 430.353s 14:05.53 158.6% 5824+1908k 630+6573io 8pf+0w

Устанавливаем только что скомпилированное ядро:

freebsd /usr/src# make -s installkernel KERNCONF=GARROTTE

При установке нового ядра происходит слудующее: новое ядро копируется в папку /boot/kernel, текущее перемещается в /boot/kernel.old. В случае, если с новым ядром система не завелась, есть возможность загрузить предыдущую версию из командной строки загручика.

Теперь нужно сделать перезагрузку в однопользовательский режим. Делаем либо reboot, а затем на экране загрузчика выбираем Single user mode, цифра 4 в окне загрузчика, либо используем команду shutdown now, переводящую машину в режим single user.

В процессе загрузки, будет выдан запрос, ввести полный путь к системной оболочке, тут можно просто нажать Enter, согласившись с предложенным /bin/sh.
Если использовали shutdown now, разделы будут смонтированы как нужно, при использовании reboot, будут смонтированы 2 раздела, devfs и корневой раздел, при этом корневой будет смонтирован в режиме read only, то есть только чтение.

Если делали reboot, поступаем следующим образом:

# mount -u / # Перемонтируем корневой раздел в режим чтение/запись
# mount -a # Монтируем все что прописано в /etc/fstab

теперь выполняем команду

freebsd /# mergemaster -p

Тут нужно быть внимательным смотреть, что mergemaster предлагает сделать с тем или иным конфигом, и выбирать устраивающий вас вариант действий.

  • d – оставить старый вариант файла, удалив новый;
  • i – установить новый, удалив старый;
  • m – построчное сравнение старого и нового файла;
  • v – сравнить файлы еще раз.

При выборе построчного сравнения. на экран быдут выведены обе версии файла, слева — содержимое старого файла, справа — нового. Возможные варианты действий:

  • l – использовать вариант слева, то есть старый;
  • r – использовать вариант справа, то есть новый;

Имейте в виду, тупая установка свежих версий конфигов, не всегда является тем, что вам нужно, поскольку в процессе работы вы могли настраивать какие-то конфиги под свои нужды и выбрав установку новой версии файла, все сделанные изменения в старом файле будут утеряны.

После завершения работы над конфигами, устанавливаем мир:

freebsd /# make installworld

Процесс не многим дольше установки ядра, после окончания делаем reboot и проверяем что получилось:

freebsd /# uname -r
8.2-RELEASE-p1

UPD. Спасибо за дополнение.
По необходимости, удаляем старые библиотеки:

freebsd /# cd /usr/src && make check-old
freebsd /# yes | make delete-old
freebsd /# yes | make delete-old-libs

чистим за собой /usr/obj

freebsd /# cd /usr/obj && chflags -R noschg * && rm -rf *

В принципе вроде все.
Удачного администрирования.

Источник: https://vds-admin.ru/freebsd/obnovlenie-yadra-i-mira-freebsd

Как обновить FreeBSD до последнего релиза | Реальные заметки Ubuntu & Windows

Сегодня я покажу, как операционную систему «FreeBSD 9.0» обновить до последнего релиза «9.1» внутри виртуального окружения «Virtualbox«.

Заострять внимание, как произвести установку я пока не буду, это тема в будующем отдельной реальной заметки.

Данная заметка пишется для того, что в будующем если понадобится необходимость быстро вспомнить какие действия нужно произвести чтобы произвести обновление до релиза «9.1«. И так обновлять будем с:

# uname -srm

FreeBSD 9.0-RELEASE amd64

Обновление до релиза 9.1 буду производить через бинарное обновление с помощью утилиты freebsd-update:

# freebsd-update -r 9.1-RELEASE upgrade

Looking up update.FreeBSD.org mirrors… 5 mirrors found.

Fetching public key from update6.freebsd.org… done.

Fetching metadata signature for 9.0-RELEASE from update6.freebsd.org… done.

Fetching metadata index… done.

Fetching 2 metadata files… done.

Inspecting system… done.

The following components of FreeBSD seem to be installed:

kernel/generic world/base world/games world/lib32

The following components of FreeBSD do not seem to be installed:

src/src world/doc

Does this look reasonable (y/n)? y — Соглашаемся с требуемыми изменениями в файлах

Fetching metadata signature for 9.1-RELEASE from update6.freebsd.org… done.

Fetching metadata index… done.

Fetching 1 metadata patches. done.

Applying metadata patches… done.

Fetching 1 metadata files…

….<\p>

/var/yp/Makefile.dist

To install the downloaded upgrades, run «/usr/sbin/freebsd-update install».

Делаем, как уведомляет нас инсталлятор введя команду:

# /usr/sbin/freebsd-update install

Installing updates…

Kernel updates have been installed. Please reboot and run

«/usr/sbin/freebsd-update install» again to finish installing updates.

Далее перезагружаем нашу систему которую только что собственно и обновили до релиза 9.1-RELEASE:

# reboot

Теперь нужно привести порты в соответствие с обновленной ОС, в этом нам поможет portmaster:

# cd /usr/ports/ports-mgmt/portmaster/

# make && make install

Обновляем все установленные порты:

# portmaster -a

===>>> Gathering distinfo list for installed ports

===>>> Starting check of installed ports for available updates

===>>> All ports are up to date

И напоследок нужно еще раз запустить:

# /usr/sbin/freebsd-update install

Installing updates… done.

И еще раз перезагружаем нашу систему:

# reboot

Итог:

# uname -srm

FreeBSD 9.1-RELEASE-p7 amd64

Результат достигнут, обновление с релиза «9.0» до последнего актуального «9.1» посредством бинарного режима успешно произведено. Вот собственно и всё, с уважением ekzorchik.

Источник: http://www.ekzorchik.ru/2013/09/how-to-upgrade-to-the-latest-release-of-freebsd/

Записки администратора freebsd

Если Вам необходимо обновить версию FreeBSD без перехода на более высокую версию ( например без перехода с FreeBSD 7.1 на FreeBSD 7.2) А просто наложить патчи безопасности. При этом Вы не перекомпилировали ядро и не изменяли встроенных пользователей.

Читайте также:  Очистка и обслуживание почтовой базы postfix

Для этого делаем следующее:

Устанавливаем, если необходимо,прокси HTTP_PROXY http://myproxy:myport.

Например:(setenv HTTP_PROXY http://172.16.2.1:3128)

Выполняем

#freebsd-update fetch.

Затем #

freebsd-update install.

Перезагружаемся.

Смотрим, что имеем на сервере.

freebsd7a# u(name -a

( FreeBSD freebsd7a.localdomain 7.2-RELEASE FreeBSD

…edited…

Вот как это делается.

freebsd7a# setenv HTTP_PROXY http://172.16.2.1:3128

freebsd7a# freebsd-update fetch

Looking up update.FreeBSD.org mirrors… 3 mirrors found.

Fetching public key from update5.FreeBSD.org… done.

Fetching metadata signature for 7.2-RELEASE from update5.FreeBSD.org…

done.

Fetching metadata index… done.

Fetching 2 metadata files… done.

Inspecting system… done.

Preparing to download files… done.

Fetching 26 patches…..10….20… done.

Applying patches… done.

The following files will be updated as part of updating to 7.2-RELEASE-p3:

/boot/kernel/if_bce.ko

/boot/kernel/if_bce.ko.symbols

/boot/kernel/if_fxp.ko

/boot/kernel/if_fxp.ko.symbols

/boot/kernel/kernel

/boot/kernel/kernel.symbols

/lib/libc.so.7

/lib/libthr.so.3

…edited…

/usr/sbin/named

/usr/sbin/nologin

/usr/sbin/ntpd

freebsd7a# freebsd-update install

Installing updates… done.

freebsd7a# reboot

Смотрим, установился ли патч.

freebsd7a# un(ame -a

FreeBSD freebsd7a.localdomain 7.2-RELEASE-p2

Другой вариант — установка патчей вручную.

Мы хотим вручную применить патчи безопасности.

Для этого необходимо проверить эти патчи с помощью Gnu Privacy Guard и импортировать ключи разработчиков. Так мы сможем проверять сигнатуры патчей, которые будем устанавливать.

Инсталлируем GnuPG

freebsd7# pkg_add -vr gnupg

scheme: [ftp]

user: []

password: []

host: [ftp.freebsd.org]

port: [0]

document: [/pub/FreeBSD/ports/i386/packages-7.1-release/Latest/gnupg.tbz]

—> ftp.freebsd.org:21

looking up ftp.freebsd.org

connecting to ftp.freebsd.org:21

…edited…

Инсталлируем GPG и импортируем ключи разработчиков

freebsd7# gpg —import /usr/share/doc/en_US.ISO8859-1/books/handbook/pgpkeys.html

gpg: directory ‘/root/.gnupg’ created

gpg: new configuration file ‘/root/.gnupg/gpg.conf’ created

gpg: WARNING: options in ‘/root/.gnupg/gpg.conf’ are not yet active during this run

gpg: keyring ‘/root/.gnupg/secring.gpg’ created

gpg: keyring ‘/root/.gnupg/pubring.gpg’ created

gpg: /root/.gnupg/trustdb.gpg: trustdb created

gpg: key CA6CDFB2: public key «FreeBSD Security Officer » imported

gpg: key FF8AE305: public key »

Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.

» imported

gpg: key 7414629C: public key «FreeBSD portmgr secretary » importedgpg: Total number processed: 3

gpg: imported: 3 (RSA: 1)

gpg: no ultimately trusted keys found

Проверяем, установлены ли у нас source.

freebsd7# ls /usr/src

Должны увидеть следующее:

COPYRIGHT contrib rescue

LOCKS crypto sbin

MAINTAINERS etc secure

Makefile games share

Makefile.inc1 gnu sys

ObsoleteFiles.inc include tools

README kerberos5 usr.bin

UPDATING lib usr.sbin

bin libexec

cddl release

Значит, что установлено.

Если не видим,  ставим через sysinstall.

Запускаем sysinstall.

Выбираем Configure – Do post-install configuration of FreeBSD

Выбираем Distributions – Install additional distribution sets

Выбираем src – Sources for everything by highlighting and hitting the space bar

Выбираем All – Select all of the below by highlighting and hitting return.

Кнопка OK .

Кнопка OK на Select the distributions you wish to install pageand нажать return.

Выбираем CD/DVD – Install from a FreeBSD CD/DVD and нажать return.

Обновляем source код с помощью CVS.

freebsd7# cd /usr

freebsd7# cvs -d

Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.

:/home/ncvs co -r RELENG_7_1_0 src

cvs checkout: Updating src

cvs checkout: Updating src/bin

cvs checkout: Updating src/bin/cat

…truncated…

Демонстрация наложения патча

Скачиваем патч для ktimer

freebsd7# fetch

http://security.FreeBSD.org/patches/SA-09:06/ktimer.patch

ktimer.patch 100% of 476 B 61 kBps

freebsd7# fetch http://security.FreeBSD.org/patches/SA-09:06/ktimer.patch.asc

ktimer.patch.asc 100% of 195 B 24 kBps

Проверяем сигнатуру подписи патча ktimer.

freebsd7# gpg —verify ktimer.patch.asc ktimer.patch

gpg: Signature made Sun Mar 22 19:59:58 2009 EDT using DSA key ID CA6CDFB2

gpg: Good signature from «FreeBSD Security Officer »

gpg: WARNING: This key is not certified with a trusted signature!

gpg: There is no indication that the signature belongs to the owner.

Primary key fingerprint: C374 0FC5 69A6 FBB1 4AED B131 15D6 8804 CA6C DFB2

Накладываем патч ktimer

freebsd7# patch < /root/ktimer.patch

Источник: http://bsdadmin.ru/freebsd/250-update-freebsd/

Обновление FreeBSD

Обновить ОС FreeBSD в общем случае достаточно просто и легко, но для начала нужно определиться какого рода обновления нас интересуют.

Любого рода обновления можно разделить на несколько категорий:

  • Обновление самой ОС FreeBSD
    • Обновление ядра FreeBSD
    • Обновление мира FreeBSD
  • Обновление установленного программного обеспечения ( порты, ports )

Теперь разберем по порядку каждый вариант обновлений.

Как и в любой другой операционной системе в ОС FreeBSD тоже находят ошибки и уязвимости, и их надо исправлять.
Для этого разработчики FreeBSD предлагают несколько вариантов:

  • Бинарное обновление.
  • Обновление «по старинке», сборкой из исходников.

Бинарное обновление произвести довольно просто, но все пройдет успешно если у вас GENERIC ядро и вы не делали изменений в других частях ОС. Конечно в некоторых случаях и с  кастомным ядром бинарное обновление тоже может пройти успешно, но гарантий совершенно нет.

Итак, что нужно набирать в консоли при бинарном обновлении в текущей версии:

# freebsd-update fetch
скачаем бинарные обновления с сервера обновлений

# freebsd-update install
установим обновления

# reboot

Для перехода на следующую версию:<\p>

freebsd-update -r 7.3-RELEASE upgrade<\p>

freebsd-update install<\p>

reboot<\p>

freebsd-update install<\p>

reboot

Вот так все просто!

В случае если у вас в системе присутствует директория с исходными текстами то обновятся и они, что в дальнейшем может быть полезно при пересборке.

Нужен доступ к серверу, так как придется загружаться в single user mode + доступ в интернет + время + прямые руки.

Обновления с исходних кодов.
1. Заходим под root`ом(пока что можно удаленно)
2. Копируем образец supfile в удобное для нас место

cp /usr/share/examples/cvsup/standard-supfile /root/supfile.8

3. Редактируем /root/supfile.8. Изменяем

*default host=cvsup1.us.FreeBSD.org
*default release=cvs tag=RELENG_8_0

4. Скачиваем исходники FreeBSD 8

csup /root/supfile.8

Переходим в /usr/scr и начинаем процесс обновления. Запаситесь терпением, так как это занимает 1-2 часа на P4.

server# cd /usr/src/

server# rm -rf /usr/obj

server# make -j4 buildworld

Где j4 – компилировать в 4 потока. Рекомендуется для однопроцессорных машин, т.к. компиляция в большей степени требовательная к системе ввода-вывода, а не процессору. Для многопроцессорных это значение можно увиличить.
Для настройки системы можно использовать make.conf. Пример смотрите здесь<\p>

/usr/share/examples/etc/make.conf.

server# make -j4 buildkernel KERNCONF=MYKERNEL

Где MYKERNEL – ваше ядро. Без KERNCONF=MYKERNEL собирается с ядром GENERIC. В следующей строке поступаем соответственно.

server# make installkernel KERNCONF=MYKERNEL

Перезагрузимся

server# reboot

Перейдем в однопользовательский режим. При загрузке жмем 4, либо из основного режима следующей командой.

server# shutdown now

Монтируем разделы файловой системы.

server# mount -u /

server# mount –a

server# mergemaster –p

Устанавливаем мир

server# cd /usr/src

server# make installworld

Удаляем временные файлы

server# make delete-old

Сравниваем конфигурационные файлы

server# mergemaster

Несколько слов о работе этой утилиты. Она сравнивает уже установленные файлы конфигурации с теми которые предлагаются новой версией FreeBSD. Если есть отличия, то на экране появляется сообщение об этом.

Первой строкой в нем идет имя файла, который не соответствует новым требованиям, а ниже сами отличия. Знаком “-” помечаются строки, которые утилита собирается удалить, а “+” – которые будут добавлены.

В конце предлагаются следующие варианты:

d – удалить предлагаемый вариант и оставить старый;

i – установить предлагаемый вариант, удалив старый;

m – сравнить построчно старый и предлагаемый вариант;

v – посмотреть отличия в файлах снова.

Чаще всего можно жать i, но иногда это может привести к замене ваших настроек на дефолтные. Так что будте внимательны

Возможен также вариант, когда с новой версией системы появляются новые файлы, которых до этого не было. В таком случае предлагается только 2 варианта:

d – удалить предлагаемый вариант и оставить старый;

i – установить предлагаемый вариант, удалив старый.

И в таком же духе сравниваются все файлы.

Перезагрузимся

server# reboot

server# cd /usr/src/

server# make delete-old-libs

Обновление установленного программного обеспечения.

Есть несколько вариантов как установить софт в ОС FreeBSD:

  • Сборка из «портов»
  • Сборка из исходных кодов
  • Установка скомпилированых пакетов

Порты FreeBSD это грубо говоря набор указаний для системы, откуда скачивать исходники, какие патчи применять, какие права выставлять, и т.п.
Для того чтобы использовать всю мощь »портов» и их удобство, порты необходимо скачать и регулярно обновлять, делается это так:

# portsnap fetch
# portsnap extract
Эти две команды нужно использовать если у вас еще не установлены «порты».

# portsnap fetch update
Эта команда используется для обновления дерева портов

Для сборки какого либо порта например php нужно использовать такую команду:

# make -C /usr/ports/lang/php5/ install clean

Для обновления рекомендую использовать например portupgrade который так же можно установить из портов командой:

# make -C /usr/ports/ports-mgmt/portupgrade/ install clean

После обновления дерева портов нужно посмотреть что собственно требует обновления

# pkg_version -v|grep need

apache-2.2.15_2 < needs updating (port has 2.2.15_7)

Источник: http://my-srv.blogspot.com/2010/11/freebsd.html

Записки программиста

31-го июля сего года закончилась поддержка FreeBSD 8.2. На моем ноутбуке Asus X51L как раз установлена FreeBSD, притом именно этой версии. Решил обновиться до FreeBSD 9.0 и запостить в бложик заметку о том, как выглядит процесс обновления этой системы.<\p>

Есть по крайней мере два способа обновления FreeBSD.

Если вы используете ядро GENERIC (собранное с параметрами по умолчанию), то можете скачать и установить бинарное обновление с помощью утилиты freebsd-update. Чуть более сложный, но и более универсальный, способ заключается в получении исходников интересующей вас версии FreeBSD из SVN репозитория с последующей их компиляцией.

Я использую ядро GENERIC, так что далее речь пойдет о первом способе.

Дополнение: Описание второго способа вы найдете в заметке Собираем ядро и мир FreeBSD из исходников.

Поехали:

freebsd-update -r 9.0-RELEASE upgrade

Читайте также:  Где хранятся настройки mysql в bitrix env и как их изменять

Если во время обновления будет получена такая ошибка:

… следует применить к /usr/sbin/freebsd-update вот этот патч. Там требуется всего лишь немного поправить одну строчку.

Во время обновления будут пропатчены некоторые конфигурационные файлы. Следует просматривать вносимые изменения крайне внимательно и разрешать конфликты с максимальной осторожностью. Если вы не уверены в том, что делаете, всегда лучше остановиться и посоветоваться с более опытными пользователями.

После завершения работы скрипта говорим:

… и перезагружаем систему:

После перезагрузки внимательно проверяем, что ничего не отвалилось. Если система вдруг не сможет загрузиться, то при следующей загрузке будет использовано прежнее ядро.

Лично я столкнулся со следующей проблемой. Оказалось, что перестал работать фаервол (PF). Команда `dmesg -a` показала мне следующую ошибку:

pfctl: DIOCADDRULE: Operation not supported by device

Как выяснилось, это ОК (причина заключается в расхождении версий ядра и мира), потому я продолжил обновление системы.

Следующим шагом говорим (да, опять):

И действительно, после выполнения команды:

pfctl -F all -f /etc/pf.conf

… фаервол заработал.

Во время последнего запуска freebsd-update вывел мне такое сообщение:

Вот вам еще одна причина пользоваться бинарными пакетами, а не портами. В случае использования бинарных пакетов достаточно подправить значение переменной окружения $PACKAGESITE и сказать:

У меня обновилось всего лишь пять пакетов, так что все не настолько ужасно, как вы могли бы подумать. Правда, позже выяснилось, что Perl все-таки отвалился (видимо, я собирал его из портов). Но решить проблему оказалось несложно:

ln -s /lib/libutil.so.9 /lib/libutil.so.8

Итак, завершаем обновление системы:

Готово!

Не считая названных проблем с Perl и PF, на момент написания данных строк никаких косяков мною замечено не было. Да, в некоторых системах обновление ядра устроено куда проще. Но подход, описанный выше, имеет и свои плюсы:

  • Если во время обновления ядра что-то пошло не так, можно с легкостью откатиться к старой версии;
  • Диагностировать проблемы проще, хотя бы потому что точно известно, на каком шаге обновления они возникли;
  • Не хочешь — не обновляйся, система не станет настаивать;

А вы уже перешли на девятую ветку?

Источник: https://eax.me/freebsd-update/

FreeBSD: Обновление бинарников и портов

После установки системы первым делом рекомендуется выполнить: обновление бинарников и портов.

Бинарное обновление

Выполняем командой freebsd-update

Основные команды:

  • fetch — получает обновления для текущей архитектуры и конфиграции
  • cron — случайно, с промежутком от 1 до 3600 секунды выполняет fetch для получения обновлений. Если обновления имеются, то шлется письмо, обычно на имя root.
  • upgrade — получает файлы, необходимые для обновления на новый релиз. Прежде чем использовать, ознакомьтесь с анонсами и правилами обновления для нового релиза, если требуется выполнение дополнительных действий.
  • install — устанавливает полученные обновления.
  • rollback — удаляет установленные обновления.

Для текущих обновлений выполняется:

# freebsd-update fetch

Результат будет таким:

# freebsd-update fetch
Looking up update.FreeBSD.org mirrors… 3 mirrors found.
Fetching metadata signature for 9.1-RELEASE from update4.freebsd.org… done.
Fetching metadata index… done.
Inspecting system… done.
Preparing to download files… done. No updates needed to update system to 9.1-RELEASE-p2.

Если есть обновления выполняем:

# freebsd-update install

Если патчи безопасности относились к ядру (ядро или модули), по завершению работы freebsd-update систему необходимо будет перезагрузить.

Утилита freebsd-update в состоянии обновлять только GENERIC-ядро. В том случае, если Вы используете ядро собственной сборки, Вам потребуется его перекомпилировать после каждой отработки freebsd-update, в которой затронуты изменения относящиеся к ядру.

Обновление портов

Обновить дерево портов FreeBSD можно штатной утилитой – Portsnap, она имеет несколько служебных команд для выполнения различных действий:

  • Команда fetch — Скачивает снимок ( snapshot ), основного дерева портов с указанного в конфигурации сервера. Используется только для интерактивной работы, не через cron
  • Команда cron — Используется для запуска из планировщика заданий cron.
  • Команда extract — Разворачивает дерево портов, данная команда полностью удаляет существующее дерево портов, включая все внесенные в него изменения, как правило выполняется в первый раз и в случае, если нужно получить, чистое дерево портов или при использовании с опцией path( cм. ниже )
  • Команда update — Служит для, непосредственно, обновления, основного дерева портов.
  • path — Это дополнительная опция, используется с командой extract, для обновления конкретного порта, или нескольких портов.

Если это первый запуск portnap, делаем:

# portsnap fetch
Looking up portsnap.FreeBSD.org mirrors… 6 mirrors found.
Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org… done.
Fetching snapshot metadata… done.
Updating from Tue Apr 9 23:00:28 EEST 2013 to Wed Apr 24 19:34:54 EEST 2013.
Fetching 3 metadata patches.. done.
Applying metadata patches… done.
Fetching 3 metadata files… done.
Fetching 1749 patches…..10….20….30….40….50….60….70….80….90….100….110….120….130….140….150….160….170….180….190….200….210….220….230….240….250….260….270….280….290….300….310….320….330….340….350….360….370….380….390….400….410….420….430….440….450….460….470….480….490….500….510….520….530….540….550….560….570….580….590….600….610….620….630….640….650….660….670….680….690….700….710….720….730….740….750….760….770….780….790….800….810….820….830….840….850….860….870….880….890….900….910….920….930….940….950….960….970….980….990….1000….1010….1020….1030….1040….1050….1060….1070….1080….1090….1100….1110….1120….1130….1140….1150….1160….1170….1180….1190….1200….1210….1220….1230….1240….1250….1260….1270….1280….1290….1300….1310….1320….1330….1340….1350….1360….1370….1380….1390….1400….1410….1420….1430….1440….1450….1460….1470….1480….1490….1500….1510….1520….1530….1540….1550….1560….1570….1580….1590….1600….1610….1620….1630….1640….1650….1660….1670….1680….1690….1700….1710….1720….1730….1740…. done.
Applying patches… done.
Fetching 28 new ports or files… done.

Теперь можно распаковать дерево:

# portsnap extract

Данная команда разворачивает все дерево целиком, поэтому время выполнения не зависит от того, как давно вы обновлялись.

Теперь обновляем:

# portsnap update

Вот и все, имеем свежее дерево портов.

Читать дальше

Статьи по теме

Источник: https://alexnettm.com/freebsd/freebsd-obnovlenie-binarnikov-i-portov.html

Обновление FreeBSD

Svn не входит в стандартную поставку операционной системы FreeBSD, ее нужно установить дополнительно. В портах FreeBSD, кроме обычной subversion существует еще и специализированный вариант subversion-freebsd, для обновления исходников нас интересует именно он.

freebsd /# cd /usr/portsfreebsd /# make -C devel/subversion-freebsd install clean

Для синхронизации через svn можно использовать HTTP или SVN сервер:

freebsd /# svn checkout http://svn.freebsd.org/base/releng/10/ /usr/src # через HTTP

или соответственно

freebsd /# svn checkout svn://svn.freebsd.org/base/releng/10/ /usr/src # через SVN

После завершения, снова глянем версию:

freebsd /# grep -A 2 'TYPE=”' /usr/src/sys/conf/newvers.sh TYPE=”FreeBSD” REVISION=”10″ BRANCH=”RELEASE”

Все как надо.
В дальнейшем, для синхронизации, достаточно сделать:

freebsd /# svn update /usr/src/

Можно приступать к сборке.

Обновление мира и ядра

Чистим на всякий случай директорию /usr/obj:

freebsd /# rm -rf /usr/obj

или как рекомендует хендбук:

freebsd /# cd /usr/obj freebsd /# chflags -R noschg * freebsd /# rm -rf * freebsd /# cd /usr/src freebsd /# make cleandir # хендбук рекомендует выполнять эту команду дважды (!) freebsd /# make cleandir

Идем дерево исходных текстов:

freebsd /# cd /usr/src

Мир в контексте операционной системы FreeBSD, это все, что не ядро. Ключ -j команды make позволяет запустить процесс в несколько потоков, ключ -s уменьшает количество информации выводимой на экран в процессе сборки. Команда time просто считает время. затраченное на выполнение следующей за ней команды, чисто для интереса). Запускаем сборку мира и ждем.

freebsd /usr/src# time make -s -j4 buildworld

Если все прошло успешно, получаем:

————————————————————– >>> World build completed on Tue Jun 21 06:43:20 UTC 2014 ————————————————————– 4014.258u 2388.551s 1:01:03.06 174.7% 5955+2033k 14136+6961io 18494pf+0w

Все это делалось на виртуалке — заняло чвс.
Теперь собираем ядро. В параметре KERNCONF, указывается название нашего ядра, если таковое имеется, если данная опция не установлена, будет собрано ядро GENERIC, используемое системой FreeBSD по умолчанию.
В данном случае я собираю свое ядро:

freebsd /usr/src# make -j4 -s buildkernel KERNCONF=GENERIC

На ядро конечно времени ушло куда меньше нежели на мир:

————————————————————– >>> Kernel build for GARROTTE completed on Tue Jun 21 07:31:49 UTC 2014 ————————————————————– 910.735u 430.353s 14:05.53 158.6% 5824+1908k 630+6573io 8pf+0w

Устанавливаем только что скомпилированное ядро:

freebsd /usr/src# make -s installkernel KERNCONF=GENERIC

При установке нового ядра происходит слудующее: новое ядро копируется в папку /boot/kernel, текущее перемещается в /boot/kernel.old. В случае, если с новым ядром система не завелась, есть возможность загрузить предыдущую версию из командной строки загручика.

Теперь нужно сделать перезагрузку в однопользовательский режим. Делаем либо reboot, а затем на экране загрузчика выбираем Single user mode, цифра 4 в окне загрузчика, либо используем команду shutdown now, переводящую машину в режим single user.

В процессе загрузки, будет выдан запрос, ввести полный путь к системной оболочке, тут можно просто нажать Enter, согласившись с предложенным /bin/sh.
Если использовали shutdown now, разделы будут смонтированы как нужно, при использовании reboot, будут смонтированы 2 раздела, devfs и корневой раздел, при этом корневой будет смонтирован в режиме read only, то есть только чтение.

Если делали reboot, поступаем следующим образом:

# mount -u / # Перемонтируем корневой раздел в режим чтение/запись # mount -a # Монтируем все что прописано в /etc/fstab

теперь выполняем команду

freebsd /# mergemaster -p

Тут нужно быть внимательным смотреть, что mergemaster предлагает сделать с тем или иным конфигом, и выбирать устраивающий вас вариант действий.

  • d – оставить старый вариант файла, удалив новый;
  • i – установить новый, удалив старый;
  • m – построчное сравнение старого и нового файла;
  • v – сравнить файлы еще раз.

При выборе построчного сравнения. на экран быдут выведены обе версии файла, слева — содержимое старого файла, справа — нового. Возможные варианты действий:

  • l – использовать вариант слева, то есть старый;
  • r – использовать вариант справа, то есть новый;

Имейте в виду, тупая установка свежих версий конфигов, не всегда является тем, что вам нужно, поскольку в процессе работы вы могли настраивать какие-то конфиги под свои нужды и выбрав установку новой версии файла, все сделанные изменения в старом файле будут утеряны.

После завершения работы над конфигами, устанавливаем мир:

freebsd /# make installworld

Процесс не многим дольше установки ядра, после окончания делаем reboot и проверяем что получилось:

freebsd /# uname -r 10-RELEASE

По необходимости, удаляем старые библиотеки:

freebsd /# cd /usr/src && make check-old freebsd /# yes | make delete-old freebsd /# yes | make delete-old-libs

чистим за собой /usr/obj

freebsd /# cd /usr/obj && chflags -R noschg * && rm -rf *

В принципе вроде все.

Источник: http://desktopbsd.ru/info/15-obnovlenie_freebsd.html

Ссылка на основную публикацию