Ярлыки

вторник, 11 января 2011 г.

Обновление FreeBSD

Обновим сорцы. У меня супфайл такого содержания
jail# cat update-all
*default host=cvsupd.dc.beltelecom.by
*default base=/var/db
*default prefix=/usr
*default tag=RELENG_8_2
*default release=cvs delete use-rel-suffix compress
src-all
#ports-all
запускаем и идем готовить чай))
jail# csup update-all
Если csup закончил работу, то рекомендую под чаёк прочитать /usr/src/UPDATING.
Теперь очистим каталог obj для ускорения процесса сборки и избавления от лишнего геморроя :
jail# rm -Rf /usr/obj/*
и запустим сборку мира
jail# cd /usr/src
jail# make -j3 buildworld
где -j3 для сборки в 3 потока. Рекомендуется выбрать число от количества ядер процессора и добавить 1 (т.е. у меня двухядерник).
На всякий случай копирнем наше ядро... ну на всякий случай:
jail# cp -Rp /boot/kernel /boot/kernelOLD
из файла GENERIC создадим файл нашего нового ядра и отредактируем по своему вкусу:
jail# cp /usr/src/sys/i386/conf/GENERIC /usr/src/sys/i386/conf/KERNELIUS
jail# ee /usr/src/sys/i386/conf/KERNELIUS
И теперь можно приступить к сборке нового ядра
jail# make -j3 buildkernel KERNCONF=KERNELIUS
Если все прошло без ошибок, то
jail# make -j3 installkernel KERNCONF=KERNELIUS
иначе смотрим файлы make.conf, src.conf(если их редактировали) и файл конфигурации ядра и гуглим-гуглим-гуглим )) Лучше начинающим сразу не экспериментировать с оптимизацией.
Следующим шагом будет перезагрузка и переход в single mode
Вариант 1
jail# nextboot -o "-s" -k kernel
jail# shutdown -r now
Вариант 2
jail# shutdown -r now
--- и после перезагрузки в загрузочном меню выбрать пункт загрузки в однопользовательский режим
Если у Вас usb-клавиатура, то возможно понадобиться вот эта заметка.
При загрузке в однопользовательский режим оставляем шелл предлагаемый по-умолчанию (/bin/sh).
На всякий случай запустить
# fsck -y
а потом уже все смонтировать
# mount -a -t ufs
Теперь рекомендую проверить время и зону :
# date
и если покажет неправильно, то необходимо скорректировать настройку местного часового пояса
# adjkerntz -i
Пришло время запустить полезную утилиту для правильной синхронизации системных конфигурационных файлов :
# mergemaster -p
Описывать все ее особенности здесь я не буду... да и man mergemaster на это есть. Только скажу, что опция -p нужна для сравнения только тех файлов, которые понадобятся при запуске make installworld, (напр. /etc/make.conf) и кратко расскажу как сравнивать файлы, хотя там все должно быть понятно, но только на английском. В общем так.. если существует отличие при синхронизации конфига, то mergemaster сообщает об этом. Вверху экрана увидите имя старого файла, который не сходиться с новым, ниже - сами отличия.
  • - - этими знаками помечаются строки для удаления.
  • + - этими знаками помечаются строки для добавления.
За отличиями находиться меню управления синхронизацией текущего файла :
  • d - оставить полностью старый вариант
  • i - полностью согласиться с новым вариантом
  • m - построчное сравнение обеих варианта
  • v - пересмотреть отличия заново
В построчном режиме экран делится на две части, слева старый файла, а справа - новый. При нажатии на "Enter" выводятся возможные варианты последующих действий:
  • l - использовать вариант с левой стороны
  • r - использовать вариант с правой стороны
  • и еще несколько опций
После построчного сравнения придется сделать выбор :
  • i - оставить получившийся результат
  • r - повторить операцию построчного сравнения снова
  • v - просмотреть получившийся файл
И так файл за файлом. Придется набраться терпения )) Переходим в каталог с собранными файлами
# cd /usr/src
и устанавливаем мир
# make -j3 installworld
Следующим шагом будет очередной запуск mergemaster , но с другими флагами
# mergemaster -iU
  • i - автоматически установит конфигурационные файлы, которые отсутствуют в каталоге назначения
  • U - попытается автоматически обновить конфигурационные файлы, которые не были изменены пользователем.
Вот вроде и все. Загрузившись проверьте все-ли на месте, все-ли работает )) Ну и естественно полюбуйтесь на то, что Вы наделали :
jail# uname -a
В заключении можно было бы очистить немного места на диске от старых каталогов, файлов, библиотек(make delete-old; yes | - для автоматизации процесса) и результатов сборки :
jail# cd /usr/src
jail# yes | make delete-old
jail# cd /usr/obj
jail# chflags -R noschg * 
jail# rm -rf *

P.S.
после установки мира (make installworld) обдуманно делайте make delete-old или make delete-old-libs, т.к. это может удалить библиотеки, необходимые для запуска некоторых программ. Придется либо обновлять порт, либо собрать библиотеки нужной версии:
/usr/ports/misc/compat4x
/usr/ports/misc/compat5x
/usr/ports/misc/compat6x
/usr/ports/misc/compat7x

P.S.S.
если после сборки ядра система не грузится или не грузится и выдает ошибки, то не стоит отчаиваться. У нас же есть копии старого (и соответственно работоспособного) ядра. При загрузке системы необходимо выбрать в загрузочном меню пункт Escape to loader promt и в строке ввести команды:
# boot /boot/kernel.old/kernel
тем самым загрузив копию старого ядра, которую автоматически сделала система при сборке нового. Или загрузить копию, которую сделали мы :
# boot /boot/kernelOLD/kernel
После удачной загрузки со старым ядром Вы можете спокойно перепроверить Ваш конфигурационный файл, опираясь на сообщения из /var/log/messages, и пробовать еще раз собрать ядро.

Комментариев нет: