Документация по ОС FreeBSD Пятница, 26.04.2024, 14:21
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » cvs

Обновление системы FreeBSD 6.3 до версии 7.0 [2008]
Все в мире течет и меняется. Технологии не стоят на месте. Вот и команда разработчиков FreeBSD несколько дней назад представила миру и всем почитателям BSD релиз 7.0 нашей глубокоуважаемой (сорри за лирику) операционной системы. Значит пришла пора обновляться. Особенно, после прочтения списка изменений, появляется желание сделать это как можно скорее.

 

Я решил писать эту статью, так сказать, по ходу дела, пока у самого на домашнем сервере работает make buildworld, ну и дальше, по мере продвижения процесса, записывать все происходящее, дабы картина была как можно более полной.

Почитав список изменений, которые появились в "семерке", возникают мысли о том, что так же будет необходимо внести некоторые изменения в файл конфигурации моего рабочего ядра. Кроме этого, вспоминается совет одного человека (не помню уже кто он, давно это было), что при переходе на новую ветку после обновления системы и очистки make delete-old-libs, рекомендуется пересобрать все установленные пакеты, дабы предотвратить возможность использования старых и несуществующих более библиотек каким-либо вспомогательным ПО. А следовательно, делать как в прошлый раз при апдейте 6.2 -> 6.3 я теперь не буду - обновлять софт через portupgrade –all в этот раз лучше после обновления системы до новой ветки. Однако порты обновить до обновления системы не помешает.

Судя по списку изменений уже можно сказать, что также после обновления необходимо будет отключить кое-какие (более не существующие) демоны (например, usbd) в /etc/rc.conf и удалить вручную стартовые скрипты.

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

Обновлять систему будем как обычно проверенным сто раз способом - компиляцией из исходных кодов в /usr/src. Получить исходники можно либо с помощью утилиты cvsup, либо, если Вы уже скачали компакт-диск 7.0-RELEASE-i386-disc1.iso, можно установить свежий код с диска. Я же пользуюсь cvsup. О том, что это такое, можно почитать в этой публикации.

Для получения исходных кодов FreeBSD 7.0 создаем такой supfile:

#
# FreeBSD 7.0 system source supfile by Daemony
#
 *default host=cvsup7.ua.FreeBSD.org
 *default base=/var/db
 *default prefix=/usr
 *default release=cvs tag=RELENG_7_0_0_RELEASE
 *default delete use-rel-suffix
 *default compress
 src-all

Замените cvsup7.ua.FreeBSD.org на ближайший Ваш FreeBSD cvsup сервер и запустите:

 cvsup -g -L 2 supfile

После того, как процесс получения исходников завершится (у меня он занял 3 часа на 2 мегабитном канале), переходим в /usr/src и читаем файлик UPDATING.

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

Собираем мир:

# cd /usr/src
# make buildworld

Пока собирается мир, пишем потихоньку эту статью и вносим изменения в конфиг ядра. Итак:

root# cd /usr/src/sys/i386/conf/
root# cp DAEMONY-2008 DAEMONY-2008-7R
root# mcedit DAEMONY-2008-7R

Что-то удаляем, что-то при необходимости добавляем. (Здесь опубликована статья о пересборке ядра FreeBSD)

Прежде всего убираем опции и девайсы, которые больше не поддерживаются.

options GEOM_GPT
options COMPAT_43
device lnc

Производим замену старых опций, которые теперь называются по другому:

options SCHED_4BSD
options SCHED_ULE
options PIM
options MROUTING

Если нужны поддержки таких вещей как wlan_ccmp, wlan_wep, wlan_tkip, uart, dumb, cpufreq или fwip (IP через FireWire) также не забываем включить их в ядро.

# Добавляем опции совместимости.
# Нам она пригодится когда установив новое ядро мы перезагрузимся для установки make installworld
options COMPAT_FREEBSD6

# Поддержка совместимости с консолью BSD 4.3 Рекомендуют оставить - оставим.
options COMPAT_43TTY

# Добавляем поддержку журналирования UFS
options UFS_GJOURNAL

# Поддержка аудита безопасности системы
options AUDIT

# Прочие опции:
# Providers labelization.
options GEOM_LABEL

# GPT partitioning
options GEOM_PART_GPT

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

# "Превращенный в шину" драйвер для последовательных интерфейсов.
# Он теперь заменяет сразу три девайса: sio(4), sab(4) и zs(4).
device uart

# Драйвер для AMD Am7900 LANCE и Am79C9xx PCnet. У меня закоменчен. Нет у меня такого.
#device le

# Поддержка fireware
#device firmware

Если Вам нужна поддержка каких-либо еще устройств, обратитесь к файлу /usr/src/sys/conf/NOTES и пройдитесь по нему поиском.

Сохраняем наш конфиг и начинаем собирать кернел.

root# cd /usr/src/
root# make buildkernel KERNCONF=DAEMONY-2008-7R
root# make installkernel KERNCONF=DAEMONY-2008-7R

К этому времени make buildworld уже закончил свою работу. "Мир" собирался около двух часов. Ядро соберется гораздо быстрее. А пока можно перекурить.

* * *

Строчки кода перестали бежать по экрану и появилось.

...
 install -o root -g wheel -m 555 if_zyd.ko /boot/kernel
 kldxref /boot/kernel
root#

Останавливаем все вспомогательные сервисы, такие как почтовый, веб, mysql сервера, отключаем их автозапуск в /etc/rc.conf и идем в reboot.

root# shutdown -r now

В ожидании, нервно пингуем машину по локалке… Отвечает! Значит поднялась! :cool: Это уже хороший знак. Входим по SSH, навсякий случай смотрим в логи на предмет матерщины, ну и как обычно

root# mergemaster -p

Приступаем к установке "мира".

root# cd /usr/src/
root# make installworld

Установка "мира" займет около 10 минут. После установки снова запускаем mergemaster.

root# mergemaster

Проверяем, что поменялось в системе, где и какие нужно внести изменения в конфиги. Эта команда сравнивает существующие конфигурационные файлы с теми, которые необходимо установить в новой версии FreeBSD. Обо всех различиях программа сообщает на экране. В начале сообщения указывается имя файла, в котором есть различия существующего файла от нового, а ниже собственно сами различия. "Минусом" помечаются строки, которые будут удалены, а "плюсом" - которые будут добавлены. Программа предлагает варианты действий со стороны пользователя:

  • d - оставить существующий файл без изменений, а новый удалить
  • i - установить новый файл, переписав старый
  • m - построчно сравнить существующий и новый файлы
  • v - просмотреть различия в файлах еще раз

Чаще всего можно нажимать "i", но неосторожное обращение этой опцией может обернуться тем, что Вы потеряете свои конфиги, точнее вместо своих конфигов получите дефолтные. Потому, если не уверены в отношении какого-либо файла, нажимайте "m" и сравнивайте. В этом режиме программа покажет Вам построчно оба файла: слева будет показана версия старого файла, справа - нового. При нажатии на Enter, программа спросит о действии:

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

После того, как программа закончит сравнение она снова спросит:

  • i - установить получившийся файл
  • r - повторить сравнение снова
  • v - просмотреть получившийся файл

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

  • d - удалить новый файл и оставить старый
  • i - установить новый файл, удалив старый

Таким образом сравниются все файлы в каталоге /etc и в корне системы (если таковые имеются).

Обратите внимание на вопрос в самом начале запуска mergemaster:

*** Beginning comparison*** Checking /etc/rc.d for stale files
*** The following files exist in /etc/rc.d but not in

 /var/tmp/temproot/etc/rc.d/:

 ike nfslocking pccard pcvt ramdisk ramdisk-own usbd

The presence of stale files in this directory can cause the
dreaded unpredictable results, and therefore it is highly
recommended that you delete them.

*** Delete them now? [n]

В каталоге /etc/rc.d файлы ike nfslocking pccard pcvt ramdisk ramdisk-own usbd - это стартовые скрипты, которые использовались в версии FreeBSD 6.3, но более не используются в 7.0, а потому можно смело ответить на этот вопрос Y и нажать Enter.

 *** Delete them now? [n] y
 *** Deleting …
done.

Дальше как по маслу. Спрашивает - отвечаем. Внимательно смотрим какие конфиги удаляем, какие заменяем, какие совмещаем. Конфигов много, но у меня на все про все отняло 15 минут.

Теперь напоследок удалим старые библиотеки.

root# cd /usr/src
root# make BATCH_DELETE_OLD_FILES=YES delete-old delete-old-libs

Очистили. Перезагружаемся еще раз для профилактики.

 root# shutdown -r now

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

root# portupgrade --all --force
/libexec/ld-elf.so.1: Shared object "libcrypt.so.3" not found, required by "ruby18"

Засада. Удалены старые библиотеки и вряд ли теперь какая-либо не системная программа сможет запуститься, а потому прийдется пересобирать portupgrade "по родному", через make.

Учтите, что если Вы используете нестандартные шеллы (вроде bash и ему подобных), Вы не сможете на этом этапе (после удаления старых библиотек) войти в систему - только в однопользовательском режиме. Если уж так не хочется расставаться с башем, расстаньтесь с ним хотя бы на время апдейта, сменив перед ребутом свой шелл, например, на sh.

# pkg_info | grep portupgrade
 portupgrade-2.4.3_2,2 FreeBSD ports/packages...
# pkg_delete portupgrade-2.4.3_2,2
# cd /usr/ports/ports-mgmt/portupgrade
# make install clean

Дальше ruby18 ругнется на отсутствие старой библиотеки. Ищем ruby в базе пакетов, удаляем и снова пытаемся установить portupgrade.

# pkg_info | grep ruby
 ruby-1.8.6.111_1,1 An object-oriented...
 ruby18-bdb-0.6.2 Ruby interface to...
# pkg_delete ruby-1.8.6.111_1,1 ruby18-bdb-0.6.2
# cd /usr/ports/ports-mgmt/portupgrade
# make install clean

На этот раз установка пройдет успешно. Имея в руках portupgrade обновляем все установленные пакеты в системе. При первом запуске portupgrade в FreeBSD 7.0 системе он закачает индексный файл с базой /usr/ports/INDEX-7.bz2 размером 1161 kB. А о том, как работать с пакетом утилит portupgrade рассказано в этой статье.

Резюме

  • Никогда еще не обновлялся удаленно по ssh, но теперь буду делать по возможности именно так.
  • Очистку от старых библиотек все таки следовало делать после portupgrade –force –all. Меньше было бы гемора.
# uname -a
FreeBSD home.daemony.org 7.0-RELEASE FreeBSD 7.0-RELEASE #1: Tue Mar 4 02:10:57 EET 2008
root@home.daemony.org:/usr/obj/usr/src/sys/DAEMONY-2008-7R i386

Удачного обновления!



Источник: http://live.daemony.org/freebsd/freebsd-update-from-6_3-to-7_0.html
Категория: cvs | Добавил: oleg (21.06.2008) | Автор: Daemony’s Live Blog
Просмотров: 2090 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024