FreeBSD - Обновление - "пересборка мира"
Обновление FreeBSD - "пересборка мира"
--anton 22:32, 11 августа 2010 (UTC)
Перед синхронизацией сорцов при необходимости нужно забекапить конфиг ядра:
# cp /usr/src/sys/i386/conf/KERNEL1 ~/
Скачать исходные тексты с svn/cvs/etc репозиториев.
CVS теги:
Пример - release ветка: RELENG_8_1 RELENG_8_2
Пример - stable ветка: RELENG_8
Пример - head ветка: . (точка)
Все CVS теги: http://www.freebsd.org/doc/en/books/handbook/cvs-tags.html
Синхронизируем исходные тексты используя утилиту, которая входит в базовую систему - csup:
% ls /usr/share/examples/cvsup/ README gnats-supfile refuse.README www-supfile cvs-supfile ports-supfile stable-supfile doc-supfile refuse standard-supfile % cp /usr/share/examples/cvsup/stable-supfile /etc/supfile
% egrep -v "^#" /etc/supfile | grep -v ^$ *default host=cvsup6.ua.FreeBSD.org *default base=/var/db *default prefix=/usr *default release=cvs tag=RELENG_8 *default delete use-rel-suffix *default compress src-all % csup /etc/supfile
Как вариант, скачать сорцы с svn репозитория(в примере качаем сорцы для 8-STABLE):
Установить svn client: # cd /usr/ports/devel/subversion-freebsd && make config install clean
% rm -fr /usr/src % rm -fr /var/db/sup/src-all % cd /usr % svn co http://svn.freebsd.org/base/stable/8 src (по протоколу HTTP) или: % svn co svn://svn.freebsd.org/base/stable/8 src (по протоколу SVN) В следующий раз просто: % cd /usr/src/; svn up - для того чтобы обновить/добавить/удалить сорцы для этой ветки, а не выкачивать снова все.
Официальный SVN репозиторий FreeBSD проекта(web) - http://svn.freebsd.org/viewvc/base/
Посмотреть примечания к обновлению:
% more /usr/src/UPDATING
Посмотреть для какой версии сорцы:
% grep -A 1 'REVISION=' /usr/src/sys/conf/newvers.sh REVISION="8.1" BRANCH="STABLE"
Обязательно сделать бекап работающего ядра (при первом фейле - ядро будет как kernel.old, а при второй неудаче уже здесь будет ядро с которого нельзя
будет загрузиться):
% cp -Rp /boot/kernel /boot/kernel.good
По требованию правим конфиг файл ядра - /usr/src/sys/i386/conf/KERNEL1
Создание конфигурационного файла ядра может быть выполнено используя файлы:
/usr/src/sys/conf/NOTES --- для опций, которые не зависят от архитектуры /usr/src/sys/i386/conf/NOTES --- опции, только для архитектуры i386
Выполняем процедуру обновления и слияния файлов:
# cd /usr/obj - удаляем все из /usr/obj (если есть) # chflags -R noschg * # rm -rf * # cd /usr/src # make -j2 buildworld - собираем мир в 2 потока (результат сохраняется в /usr/obj) # make buildkernel KERNCONF=KERNEL1 - собираем ядро # make installkernel KERNCONF=KERNEL1 - устанавливаем ядро # nextboot -o "-s" -k kernel - следующая загрузка в однопользовательском режиме с новым ядром # reboot - перезагрузка # adjkerntz -i - синхронизации времени с CMOS. # mount -a -t ufs - монтируем разделы с UFS
Если обновление выполняется удаленно, то переводить машину в single mode (и соответсвенно монтировать разделы с UFS) не нужно, для этого:
1) закомментировать все стартующие сервисы в /etc/rc.conf, кроме sshd 2) shutdown -r now - перезагрузить машину 3) не забыть после обновления включить все сервисы обратно
# mergemaster -p - пре-установочное слияние, # cd /usr/src # make -j2 installworld - установка мира # mergemaster -Ui # reboot ------ mount -a -t ufs - -a смонтиовать все ФС описанные в /etc/fstab, -t - тип ФС, по умолчанию ufs mergemaster -Ui -i Automatically install any files that do not exist in the des- tination directory. -U Attempt(попытка) to auto upgrade files that have not been user modi- fied. -p Pre-buildworld mode. Compares(сравнивать) only files known to be essen- tial(важные) to the success of {build|install}world, including /etc/make.conf.
mergemaster - утилита, которая сравнивает существующие конфигурационные файлы с теми, которые собирается установить.
При этапе вмешивания со стороны пользователя при слиянии файлов будет предложено такие опции:
* d - оставить существующий файл без изменений, а новый удалить * i - установить новый файл, переписав старый * m - построчно сравнить существующий и новый файлы: * ? [тут еще не разобрался как сделать чтобы использовал оба файла] * l - использовать файл с левой стороны * r - использовать файл с правой стороны * v - просмотреть различия в файлах еще раз
Не меняйте shell root - могут возникнуть потенциальные проблемы!!
Если бы я поменял шелл root на какой-нибудь /usr/local/bin/... , то после make delete-old-libs этот шел перестал бы быть работоспособен практически гарантированно, так как завязан на старые библиотеки, которые я удалил. В результате ни su, и login root я сделать не смог бы.
При переходе с одной мажорной версии к другой(например 7.Х->8.Х) перед delete-old надо пересобрать порты % portupgrade -afrR и потом удалять старые файлы. Также возможно потребуется поставить /usr/ports/misc/compatxx/ - для совместимости с предыдущими версиями.
Чистим старые библиотеки и файлы (интерактивно):
# cd /usr/src # make check-old # make delete-old && make delete-old-libs To remove old files and directories run 'make delete-old'. To remove old libraries run 'make delete-old-libs'.
Либо чтобы не подтверждать удаления для каждого файла выполните:
# yes | make delete-old # yes | make delete-old-libs
Удаляем /usr/obj/usr - остатки от make buildworld:
# du -sh /usr/obj 1,9G /usr/obj # chflags -R noschg /usr/obj/usr # rm -rf /usr/obj/usr # cd /usr/src # make cleandir # make cleandir
Если ядро загрузилось нормально, то можно удалить старые ядра (в случае нехватки места):
# du -sh /boot/kernel* 154M /boot/kernel 144M /boot/kernel.good 154M /boot/kernel.old # rm -rf /boot/kernel.old
Если проблемы с загрузкой и инициализацией ядра, выполнить(при наличии kernel.good):
прервать загрузку unload load /boot/kernel.good/kernel load /boot/kernel.good/acpi.ko boot
Что означает p1, p2.... после выхода релиза?
Первая пересборка, вторая пересборка...... с соответсвующими исправлениями!
Ключи make для /usr/src:
# The user-driven targets are: # # universe - *Really* build *everything* (buildworld and # all kernels on all architectures). # buildworld - Rebuild *everything*, including glue to help do # upgrades. # installworld - Install everything built by "buildworld". # world - buildworld + installworld, no kernel. # buildkernel - Rebuild the kernel and the kernel-modules. # installkernel - Install the kernel and the kernel-modules. # installkernel.debug # reinstallkernel - Reinstall the kernel and the kernel-modules. # reinstallkernel.debug # kernel - buildkernel + installkernel. # doxygen - Build API documentation of the kernel, needs doxygen. # update - Convenient way to update your source tree (cvs). # check-old - List obsolete directories/files/libraries. # check-old-dirs - List obsolete directories. # check-old-files - List obsolete files. # check-old-libs - List obsolete libraries. # delete-old - Delete obsolete directories/files/libraries. # delete-old-dirs - Delete obsolete directories. # delete-old-files - Delete obsolete files. # delete-old-libs - Delete obsolete libraries.
Файл - инструкция по обновлению - /usr/src/Makefile
Ссылки:
- http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/updating-upgrading.html
- http://www.cyberciti.biz/faq/freebsd-8-upgrade-tutorial/
- http://live.daemony.org/freebsd/freebsd-update-from-6_2-to-6_3.html
- http://live.daemony.org/freebsd/freebsd-update-from-6_3-to-7_0.html
- http://izenfire.blogspot.com/2008/10/freebsd.html
- http://people.freebsd.org/~rse/upgrade/freebsd-upgrade-7x-8x.txt
- http://forum.lissyara.su/viewtopic.php?f=8&t=22803
- http://ignix.ru/public/local_remote_update_freebsd
- http://www.arg.su/ru-RU/update_freebsd
- http://rhyous.com/2009/12/25/how-to-download-freebsd-current-or-freebsd-stable-using-svn/
- http://www.lissyara.su/articles/freebsd/tuning/cvs_svn_portsnap_update/ - обновление исходных текстов: cvsup, csup, svn, portsnap
- http://m.habrahabr.ru/post/113441/
- http://vds-admin.ru/freebsd/obnovlenie-yadra-i-mira-freebsd
- http://www.understudy.net/makeworld.html