Синхронизация source-tree(cvsup) и сборка новой системы(make world)
Добавление: для тех кто хочет апгрейдить 3.x -> 4.-Stable и кому лень
читать `less /usr/src/UPDATING` рекомендую сперва просмотреть начало и
затем следовать процедуре описанной в завершении _опуса_.
1. Две ветви системы FreeBSD: Stable и Current.
Командой разработчиков OS FreeBSD была выбрана следующая тактика и стратегия
развития системы:
- направление Stable, версия стабильной системы FreeBSD на момент
разработки со всеми вытекающими из НАЗВАНИЯ выводами
- направление Current, стратегическая версия системы, те в этой ветке
закладывается новый, современный подход к системе, зачастую система
существенно перерабатывается с тем чтобы в дальнейшем осуществить
переход Current -> в следующюу НОВУЮ реализацию Stable.
Одним словом Current - это development ветка системы FreeBSD.
Примечание: чтобы все стало ясно, приведем пример,(это лишь пример и мои мысли)
- FreeBSD 3.x [последний Release == 3.5] - видимо это тупиковая ветка.
- FreeBSD 4.x-Stable [последний Release == 4.0], как сказано выше -
стабильная система или приближение к ней
- FreeBSD 5.x-Current - новая система, которая вероятно заменит в
будущем ветку 4.x-Stable
Вероятно в какой-то момент версия 4.x-Stable устареет и возможно станет
тупиковой веткой, а ей на смену придет версия 5.x, которая в свою очередь
станет 5.x-Stable, а следующим стратегическим направлением возможно
станет 6.x-Current и тд и тп - думаю смысл понятен.
2. Для чего нужно синхронизировать ВСЮ систему?
Для тех кто планирует иметь СТАБИЛЬНУЮ систему, включая свежие правки
security и тд и тп вероятно имеет смысл иметь альтернативный ОСНОВНОМУ
сервер, на котором производить серьезные изменения и после тщательного
тестирования переводить в "боевой режим" заменив ОСНОВНОЙ.
- стабильное ядро
- новые драйвера/драйвера для нового оборудования
- security
3. Настройка синхронизации source-tree.
Ограничимся рассмотрением синхронизации системы будь то STABLE или
CURRENT с использованием "CVSUP".
1) после установки "новой" системы для синхронизации source-tree
посредством cvsup, его cvs или cvsbin необходимо предварительно
установить из портов (подразумевается что при ИНСТАЛЛЯЦИИ системы)
вы попросили установить не только sources самой системы, но и дерево
портов - /usr/ports
Однако проще воспользоваться установкой пакета cvsup-it, поскольку
установка его из портов требует достаточно длительного периода времени.
CVSUP-IT - это на самом деле простой front-end для настройки параметров
синхронизации и непосредственно запуска синхронизации после настройки,
сам же пакет, как упоминалось выше, зависит от cvsup-bin, который
имеется в виде пакета и принудительно устанавливается при установке
cvsup-it.
2) я советую установить систему с необходимым минимумом пакетов и даже
не настраивая XFree86, затем перегрузиться и установить cvsup-it -
настроить файлы конфигурации: supfiles и на этом завершить саму установку
cvsup-it если вы планируете время от времени синхронизировать свою систему
или делать это ежедневно по-расписанию.
С тем чтобы вручную сделать изменения в конфигурационных файлах supfiles
и создать скрипт для запуска по cron'у, например положив его в
'/etc/periodic/daily' или '/etc/periodic/weekly'
Примеры настройки конфигурации CVSUP и скриптов:
4. Сборка новой системы - из нового дерева sources.
Важно: Лучше заранее прочитать ТО ЧТО написано в /usr/src:
- README
- UPDATING
и соответственно знать какие изменения претерпела система за прошедшее время,
нежели терзать себя поисками и расспросами ТОГО ЧТО У ВАС "под носом".
-----------------------------------------------------------------------------
Внимание: в зависимости от того на какой RELEASE или RELENG вы делаете upgrade,
проверьте описание изменений в файле /usr/src/UPDATING, в последних
релизах переменная KERNEL заменена на KERNCONF! А процедура сборки
системы и ядра УНИФИЦИРОВАНА следующим образом:
используемые теги:
tag=HEAD или tag=. - тег для CURRENT ветки FreeBSD
tag=RELENG_5_0 - только для скачивания изменений security и bug-fixes RELEASE-5.0
tag=RELENG_4 - для скачивания STABLE-4 текущей ветки
tag'и вида:
RELENG_4_X: RELENG_4_7, RELENG_4_6, и тд и тп заканчивая RELENG_4_3 - это теги
исключительно для патчей security и bug-fixes к RELEASE-4.X (4.7, 4.6 ... 4.3)
tag'и вида:
RELENG_4_Y_0_RELEASE: RELENG_4_7_0_RELEASE, RELENG_4_6_2_RELEASE ...
RELENG_2_2_0_RELEASE - это теги самих релизов RELEASE-4.X.Z.
у портов и документации: ports & docs, теги tag=.
cd /usr/src
make buildworld [-DPARAM-1 -DPARAM-2 ... ]
make buildkernel KERNCONF=ИМЯ_ЯДРА
make installkernel KERNCONF=ИМЯ_ЯДРА
[reboot ]
[boot -s загружаемся в single-user mode]
make installworld [-DPARAM-1 -DPARAM-2 ... ]
reboot
Прим: -DPARAM - позволяет задать опции при сборке системы
чаще всего я опускал фазу перезагрузки после `make installkernel` и
выполнял ее после `make installworld`, в зависимости от версии релиза, при
сборке ядра может использоваться либо переменная KERNEL, либо KERNCONF.
-----------------------------------------------------------------------------
Сборка новой системы из дерева исходников укрупненно выглядит так:
Вариант 1 | Вариант 2
-------------------------------------------------------------------
- cd /usr/src | cd /usr/src
- make world | make buildworld
--- анализ --- | --- анализ ---
| make installworld
Примечание: `make world`==`make buildworld; make installworld`
те он объединяет ОБА этапа, иногда бывает удобно их
разделить, выбор - на ваше усмотрение и в зависимости от ситуации-целей.
Дополнительный шаг в случае изменений в ядре и/или /usr/sbin/config
cd /sys/i386/conf
/usr/obj/usr/src/usr.sbin/config/config MYKERNEL
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
не случайно выделена новая утилита `config` - будьте внимательны, иначе
возможны проблемы:
- новое ядро и старые binaries системы (не работают `ps`, `top` и тд и тп)
- старое ядро и новые binaries (проблемы с загрузкой или полная чехарда...)
- запускаем mergemaster для замены старого варианта дерева "/" на новый
из "/var/tmp/temproot" - я бы не назвал эту операцию ОБЯЗАТЕЛЬНОЙ, но
в случае перехода от 3.x -> 4.-Stable в /etc появляется масса нового.
Отступление:
Mergemaster
~~~~~~~~~~~
MERGEMASTER - это обычный скрипт, который сравнивает основные
НАСТРОЕЧНЫЕ файлы системы, например из "/etc":
/etc/dafaults/rc.conf
/...
/etc/login.*
/rc*
и тд и тп - ничего необычного в этом НЕТ, происходят изменения в системе,
в ее security, настроечных файлах, окружения среды, опции компилятора и
тд и тп...
Запуск MERGEMASTER - не есть ОБЯЗАТЕЛЬНАЯ, но ЖЕЛАТЕЛЬНАЯ ОПЕРАЦИЯ благодаря
которой вы можете отследить различные изменения, а вот принятие решения
на предмет замены ваших ТЕКУЩИХ конфигурационных файлов НА АКТУАЛЬНЫЕ -
есть процесс принятия решения ИСКЛЮЧИТЕЛЬНО ВАМИ!
Перед запуском `mergemaster` проверьте наличие переменных среды:
PAGER и определите привычную для вас утилиту, для меня /usr/bin/less :)
либо заранее настройте ваш $HOME/.mergemasterrc и определитесь как вам удобнее
использовать mergemaster - в автоматическом режиме:
mergemaster -a
или ручном:
mergemaster [-i] [-t /path/to/temp/root]
^^^^^^^^^^^^^^^^^^^^^- задание альтернативного создания
дерева тому что by default /var/tmp/temproot
^^^^- автоматически добавлять в систему ТЕ НАСТРОЕЧНЫЕ файлы
которых в системе НЕ БЫЛО (те то новое что появилось в данной
версии)
Ничего сложно в использовании `mergemaster` - НЕТ:
"i" - нажимаем и в результате _новый_ файл заменяет ВАШ ТЕКУЩИЙ
"m" - merge, слить оба файла в ОДИН, ОНО вам НАДО?
- простое нажатие клавиши "ВВОД" :) оставляет ВАШИ настройки,
а _новый_ оставляет для того чтобы вы могли проанализировать и сравнить
его позже с вашим, найти этот _новый_ файл можно в "/var/tmp/temproot/..."
или там где вы задали при запуске mergemaster c ОПЦИЕЙ [-t /path/to/temp/root"]
Нет смысла разбирать ВСЕ опции по-скольку и сам mergemaster и его опции НУ
ОЧЕНЬ ПРОЗРАЧНЫ и ПОНЯТНЫ, ГЛАВНОЕ - НЕ УДАЛЯЙТЕ дерево "/var/tmp/temproot/..."
по завершении работы `mergemaster` если вы все же не поняли как это работает.
Примечание: используйте свои /etc/rc.conf, /etc/make.conf, /etc/rc.local.conf
вместо изменения содержимого /etc/defaults/... - тем самым сохраните
кучу своего времени нежели каждый раз наводить ревизию содержимого /etc/defaults
Так например, security & crypto идет в одной упаковке в SOURCES и если вы
захотели ИМЕТЬ у себя метод криптования IDEA, просто добавьте соответствующую
строку в свой /etc/make.conf, саму строку возьмите из /etc/defaults/make.conf.
Теперь RSA идет как подпрограммы из библиотек OpenSSL, а RSAINTL и ее порты
удалены из системы за ненадобностью.
И последнее, после того как вы успешно собрали И СИСТЕМУ И НОВОЕ ЯДРО, можете
смело удалить директорию /usr/obj/usr и /sys/compile/ИМЯ_ВАШЕГО_ЯДРА, тем
самым освободите свою FS=/usr, не забудьте ТОЛЬКО ПОСЛЕ успешной ПЕРЕСБОРКИ :)
Мб я съел чего или ... , можете удалять /usr/obj/* когда угодно, просто иной
раз удобно оставить объектники для дальнейших сборок системы, собственные
изменения или дополнения и тд и тп.
Только ТЕПЕРЬ можно ПЕРЕГРУЖАТЬСЯ!!!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Step by Step:
1. Проверить файлы логов после очередной отработки `cvsup` на предмет
изменения Kernel и /usr/sbin/config - ЕСЛИ ТАКОВЫЕ ИМЕЮТСЯ, настоятельная
рекомендация пересобрать НОВОЕ ЯДРО после ПОЛНОЙ сборки системы!!!
2. Человек != Робот, если что-либо НЕ ПОМНИТСЯ:
- cd /usr/share/doc/handbook
- READ makeworld.html
- READ kernelconfig.html
- `man mergemaster` или `less /usr/sbin/mergemaster`
3. Подготовительный этап - "на FreeBSD надейся - но сам не плошай"
- откатываем "рабочую" директорию '/etc':
cp -Rp /etc /path/to/etc.work
или
tar -cf - -C /etc . | tar xpf - -C /path/to/etc.work
[4.] В принципе можно пропустить, но желающие могут сделать листинг
или копию УСТРОЙСТВ - '/dev' - для последующего сравнения с новой и
добавления отсутствующих устройств - `cd /dev ; ./MAKEDEV device_name`
5. Посмотреть рекомендации в новом SOURCE-TREE.
- ПРОСМОТРЕТЬ и при желании настроить /etc/make.conf и /etc/defaults/make.conf
обратите внимание на следующие строки:
----------------------------------------------------------------------------
# мои предпочтения
#--lavr, нет надобности в RSA так как это часть OpenSSL встроенного в
# систему, как и OpenSSH
#RSAREF=YES [лично мне по НРАВУ RSA]
USA_RESIDENT=NO [справедливо для non-USA :)
CFLAGS= -O -pipe [с данными ключами компиляция идет "всегда"]
NOPROFILE= true [если вам не нужно proflibs - ускоряет]
COMPATXX= yes [поддержка совместимости с прежними версиями]
...
...
... остальное на ваше усмотрение...
----------------------------------------------------------------------------
- cd /usr/src
- less README
- less UPDATE
и при желании - посмотреть имеющиеся там Makefiles, бывает полезно.
6. Приступаем к самой СБОРКЕ.
Предупреждение: в качестве SHELL'а подразумевается Bourne-shell или Bash,
так что будьте осторожны с экранированием и перенаправлением
ввода-вывода в командной строке. Не используйте в качестве
основы для '/path[/to/file.log]' директорию '/tmp', она же
почистится после `reboot` и тогда очень трудно будет отыскать
"концы".
Вариант 1.
----------
По идее, правильно было бы перейти в "single-user mode" - для ЭТАПА
"installworld" - замена binaries системы, но "ОБЫЧНО" - все проходит
успешно и в "multi-user mode" - решать вам...
- cd /usr/src
- script /path/to/mkworld.log [можно использовать для дальнейшего
перенаправления ввода-вывода от 'make' -
завершением будет команда `exit`]
- make world
... идет сборка системы ... [при желании можно наблюдать: more или less логи]
- exit
СБОРКА НОВОЙ СИСТЕМЫ ЗАВЕРШЕНА
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- less /path/to/mkworld.log [посмотрели - проанализировали, приняли решение]
- mergemaster [интерактивный запуск анализа НОВОГО '/root',
который будет в /var/tmp/temproot, и ПРИНЯТИЯ
решения о ВНЕСЕНИИ изменений]
СБОРКА НОВОГО ЯДРА
~~~~~~~~~~~~~~~~~~
- cd /sys/i386/conf
- /usr/obj/usr/src/usr.sbin/config/config MYKERNEL
- cd ../../compile/MYKERNEL
- make depend
- make
- make install
- АНАЛИЗ "НОВЫХ": '/root', '/etc', '/dev'
- fastboot [перезагрузка и смотрим ЧТО получили]
Важное:
~~~~~~~
[не забудьте что ваше СТАРОЕ - РАБОЧЕЕ ЯДРО теперь == kernel.old и в случае
неудачи при загрузке всегда можно выйти из положения:
процесс загрузки:
loading kernel...
boot.... пошел отсчет секунд для загрузки... - нажали "пробел" или что-либо
отличное от "Enter" и вышли в "ЗАГРУЗЧИК":
unload kernel
load kernel.old
boot -s [single user mode - потому что не известно как старое
ядро будет работать с новыми binaries системы]
Вариант 2.
----------
Примечание: в этом варианте преднамеренно не повторяются предыдущие
действия, с тем чтобы вы сами могли комбинировать как вам удобно.
[multi-user mode]
- cd /usr/src
- make buildworld > /path/to/mkbuild.log 2>&1
... параллельно можно работать и смотреть `less /path/to/mkbuild.log`
завершился
для чистоты можно перейти в single-user mode:
- shutdown -k now или kill -TERM 1 == kill -1 1
- make installworld > /path/to/mkinstall.log 2>&1
- mergemaster -a -t /var/tmp/newroot [пускаем mergemaster на автомате "-a"
все различия при этом будут оставлены для
_ручного_ изменения в /var/tmp/newroot ]
или
- mergemaster -a - от верхнего отличается default_dir=/var/tmp/temproot
--- остальные действия как в "Варианте 1"
Примечание: если посмотреть внимательно Makefiles в '/usr/src', то увидим что
там есть ВСЕ:
- запуск cvsup
- построение системы:
a) make world
b) make buildworld && make installworld
- построение ядра
Хорошая идея сделать у себя СВОЙ Makefile, под свои нужды, например:
- cd $HOME
- "create Makefile"
Ниже пример с комменатриями: (ВНИМАНИЕ - Makefile не проверен, это всего лишь
заготовка под будующий ПУСКАЧ)
Примечание: я бы совместил full-supfile и secure-supfile в один supfile
и тянул бы все с cvsup.ru.freebsd.org - те русских CVS зеркал, ибо там
все уже должно быть как надо, подразумевается security.
Комментарий к примечанию - поскольку в мире лицензий crypto произошло много
изменений, больше НЕТ НЕОБХОДИМОСТИ отделять их от Full-Sources, достаточно в
настроечном sup-file'е указать "src-all", потому как OpenSSH/OpenSSL идут
в системе by-default и OpenSSL использует RSA, а /usr/ports/security/linrsaintl
удален из портов за ненадобностью, как и RSAINTL=YES из /etc/make.conf, НО
если вы хотите имет возможность использования алгоритма IDEA, добавьте в свой
/etc/make.conf:
MAKE_IDEA= YES # IDEA (128 bit symmetric encryption)
Держать supfile можно на выбор:
/etc/supfile
/usr/local/etc/supfile
или
/etc/cvsup/supfile
/usr/local/etc/cvsup/supfile
Логи же соединения cvsup удобнее держать там где место логам: /var/log
а логи изменений-перекачки source-tree внутри /var/log/cvsup/sup-ДАТА.
Предупреждение: данный Makefile лишь как набросок того что можно сделать
под свои нужды, работоспособность не проверена
------------------------ что-нибудь типа Makefile --------------------------
#
# Makefile for build new system or kernel.
#
# cvsup_note:
#
# for run cvsup with minimal command options set cvsaup_basedir in your
# "supfiles", otherwise run cvsup with options:
#
# cvsup -g -L 1 -z -b CVSUPbaseDir -c CVSUPcollDir /path/to/your-supfile
#
# cvsup_basedir_by_default=/usr/local/etc/cvsup - must be exist!!!
# cvsup_colldir_by_default=/cvsup_basedir/sup - source changes log
#
DATE=`date "+%H.%M-%d.%m.%y"`
CVSUPlogDIR=/var/log
CVSUPbaseDir=/var/log/cvsup
CVSUPcollDir=${CVSUPbaseDir}/sup-${DATE]
MYKERNEL=/sys/i386/conf/LAVR
update:
@if [ ! -d ${CVSUPcollDir} ]; then \
mkdir ${CVSUPcollDir}; \
cp /sys/i386/conf/LINT $[CVSUPcollDir} \
fi
cvsup -g -L1 -z -b ${CVSUPbaseDir} -c ${CVSUPcollDir} /usr/local/etc/cvsup/supfile 2>&1 | tee /var/log/cvsup-log.${DATE};
build:
cd /usr/src; \
make buildworld 2>&1 | tee /var/tmp/mkbuild.${DATE};
install:
cd /usr/src; \
make installworld 2>&1 | tee /var/tmp/mkinstall.${DATE};
world:
cd /usr/src; \
make world 2>&1 | tee /var/tmp/mkworld.${DATE};
kernel:
@if [ -f ${MYKERNEL} ]; then \
(cd /sys/i386/conf && \
config ${MYKERNEL} && \
cd ../../compile/${MYKERNEL} && \
make depend && \
make && \
make install && \
make clean) 2>&1 | tee /var/tmp/mkkernel.${DATE};
else \
@echo
@echo You must the first CREATE and EDIT ${MYKERNEL}
@echo only after that "make kernel" should be POSSIABLE!
@echo
@false
fi
newkernel:
@if [ -f ${MYKERNEL} ]; then \
(cd /sys/i386/conf && \
/usr/obj/usr/src/usr.sbin/config/config ${MYKERNEL} && \
cd ../../compile/${MYKERNEL} && \
make depend && \
make && \
make install && \
make clean) 2>&1 | tee /var/tmp/mkkernel.${DATE};
else \
@echo
@echo You must the first CREATE and EDIT ${MYKERNEL}
@echo only after that "make kernel" should be POSSIABLE!
@echo
@false
fi
merge:
/usr/sbin/mergemaster -a 2>&1 | tee /var/tmp/mkmerge.{DATE};
clean:
chflags -R noschg /usr/obj/;
rm -rf /usr/obj/*;
rm -rf /var/tmp/mk*;
clobber:
clean
rm -rf /usr/src/*;
all:
update
#world newkernel merge
---------------------- end of Makefile template ----------------------------
Вступление: по-скольку ВСЕ течет и ВСЕ изменяется, изменяется и сам
/usr/src/Makefile и сборка системы, ну и сама система, то к данному
пункту следует подходить ОЧЕНЬ аккуратно!!!
На настоящий момент подъем 3.x -> 4.x ПОЛНОСТЬЮ описан в:
/usr/src/UPDATING
Одна из рекомендаций с www.freebsd.org - поднимать 3.x до 4.x через
upgrade из Install, который в свою очередь выполнять с CD-ROM.
Важно:
- помнить что изменились драйвера устройств, те не забыть сделать
MAKEDEV и внести соответствующие изменения в /etc/fstab
- помнить что сменился загрузчик и не забыть о том откуда у вас
грузится система
--
lavr
Upgrade системы 3.x -> 4.-Stable в соответствии с /usr/src/UPDATING,
Step by Step:
Для начала отступление:
Upgrade - в случае ИЗМЕНЕНИЯ ЯДРА В-С-Е-Г-Д-А подразумевает ПЕРЕЗАГРУЗКУ,
а в данном случае: 3.x -> 4.-Stable -> reboot == 100% [однократный в случае
полного успеха - что по большому счету, маловероятно...]
Примечание: Для наиболее успешного апгрейда и минимального количества
reboot == 1, не забудьте ПОПРАВИТЬ-ВОССТАНОВИТЬ ВСЕ НЕОБХОДИМОЕ из старой
"/etc": rc.conf, make.conf, rc.conf.local, и тд и тп ВСЕ что будет
изменено, для этого ЛУЧШЕЕ запустить `mergemaster` без параметров - для
интерактивного принятия решения и "пометки на манжетах" ЧТО изменилось
для дальнейшей РУЧНОЙ ПРАВКИ.
Не забудьте что в 4.-Stable OpenSSH является ЧАСТЬЮ системы, дабы не
перехлестнуться с SSH.
Если у вас "боевой" сервер, то вероятно лучше настроить cvsup на закачку
дерева НЕ поверх /usr/src, а в иное место, варианты:
- если есть место на локальных дисках, то непосредственно на рабочей машине;
- нет места, подмонтировать и засапить туда;
- ядро бы тоже лучше собрать на похожей МАШИНЕ, но уже с 4.-Stable;
- ... ньюансы возможны разные ...
Вывод: делать СЕРЬЕЗНЫЙ UPGRADE на "БОЕВОМ" сервере ОПАСНО.
1. Правильно настроили cvsup и ничего не забыли:
- лучше выбрать ВСЕ
- не забыть про включение SECURITY в supfile, теперь все встроено в систему
2. Запустили cvsup и выкачали ВСЕ дерево, желательно порты тоже, но их можно
держать на другой машине.
- просмотрели логи cvsup и убедились что ВСЕ ok.
3. cd /usr/src
-----------------------------------------------------------------------------
Внимание: в зависимости от того на какой RELEASE или RELENG вы делаете upgrade,
проверьте описание изменений в файле /usr/src/UPDATING, в последних
релизах переменная KERNEL заменена на KERNCONF! А процедура сборки
системы и ядра УНИФИЦИРОВАНА следующим образом:
cd /usr/src
make buildworld [-DPARAM-1 -DPARAM-2 ... ]
make buildkernel KERNCONF=ИМЯ_ЯДРА
make installkernel KERNCONF=ИМЯ_ЯДРА
[reboot ]
[boot -s загружаемся в single-user mode]
make installworld [-DPARAM-1 -DPARAM-2 ... ]
reboot
Прим: -DPARAM - позволяет задать опции при сборке системы
чаще всего я опускал фазу перезагрузки после `make installkernel` и
выполнял ее после `make installworld`, в зависимости от версии релиза, при
сборке ядра может использоваться либо переменная KERNEL, либо KERNCONF.
-----------------------------------------------------------------------------
- отредактировать /etc/make.conf [советуют закомментить Kerberos, я бы
посоветовал убрать все > -O для компилятора, уж очень много с этим было
граблей при сборке ядра в 4.-Stable, -O -pipe - достаточно, лучше
не экспериментировать... не забудьте оставить compatxx
- make buildworld
... построили ...
4. строим НОВОЕ ЯДРО и инсталлируем его - описано выше.
(будьте осторожны с /usr/sbin/config)
или можно сделать через make не выходя из /usr/src, при этом не забыв
создать ваш - /sys/i386/conf/MYKERNEL (где MYKERNEL - имя вашего ядра)
- make buildkernel KERNEL=<MYKERNEL>
- make installkernel KERNEL=<MYKERNEL>
- chflags noschg /kernel
- chflags noschg /MYKERNEL
- mv /kernel /kernel.old
- mv /MYKERNEL /kernel
- chflags schg /kernel
далее можно создать все необходимые устройства сейчас, или потом:
- cp /dev/MAKEDEV /dev/MAKEDEV.orig
- cp /usr/src/etc/MAKEDEV /dev/MAKEDEV
тут вы можете придумать по вкусу:
- записываем наличие текущих устройств:
- ls -l | awk '{print $1, $2, $3, $4, $5, $6, $NF}' > /var/tmp/dev_old.out
- создаем новые, поскольку могут меняться major/minor
- cd /dev && ./MAKEDEV all [это тонкое и СТРЕМНОЕ место, при создании
новых - соответствующие им старые должны быть удалены! см. MAKEDEV -
та еще штучка]
- записываем НОВОЕ состояние устройств:
- ls -l | awk '{print $1, $2, $3, $4, $5, $6, $NF}' > /var/tmp/dev_new.out
- сравниваем и создаем недостающие из старых:
- diff /var/tmp/dev.out /var/tmp/dev2.out
- зачастую РАЗЛИЧИЕ в слайсах, например:
- ./MAKEDEV sd0s1
Я не могу дать готового решения, только рекомендацию:
старая система: IDE-devices == wdXsYz SCSI-devices == sdXsYz (2.2.x)
== daXsYz (3.x)
новая система IDE-devices == adXsYz SCSI-devices == daXsYz (4.stable)
== wdXsYz - оставили наименование от старого
драйвера для совместимости, точнее для памяти.
где X - номер диска или канала, а Y - номер слайса/slice, z - имя партиции.
так вот `sh MAKEDEV all` создаст вам устройства для первых четырех дисков:
- ide: ad0 ad1 ad2 ad3
- scsi: da0 da1 da2 da3
технология создания дисков проста:
- cd /dev && ./dev/MAKEDEV adX [ X - номер диска ]
- cd /dev && ./dev/MAKEDEV ad0sY [ Y - номер слайса ]
вот в таком духе..., например:
- cd /dev
- ./MAKEDEV ad6
или
- ./MAKEDEV ad6s1a[b[c...]]
Слайсы и партиции смотрите в вашем /etc/fstab - ваших дисков.
5. Строим модули для ЯДРА и создаем новые devices для нового драйвера
дисков - adX (ATA)
- модули
- cd /usr/src/sys/modules
- make install
- диски
- cd /usr/src/sbin/mknod
- make install
если вы не создали дисковые devices после сборки ядра - создайте сейчас,
как это делается, см. выше.
6. Теперь советуется перегрузиться в single-user mode, точнее:
- reboot
- boot -s [single-user mode]
Примечание: жаль попробовать не на чем - чуется мне что вовсе не обязательно
тут перегружаться, в крайнем случае просто перейти в single-user
mode: kill -1 1 и продолжить операцию "UPGRADE"
7. Устанавливаем утилиту install-info для update file/dir info.
cd /usr/src
cd gnu/usr.bin/texinfo/install-info
make install
8. Устанавливаем бинарники новой системы.
- cd /usr/src
- make installworld
Примечание: если получили сообщение от библотеки ld-elf.so :
- ld-elf.so cannot load libc.so - выполняем:
- 'ldconfig -R /usr/obj/usr/src/lib/libc' и повторяем
- make installworld
9. Устанавливаем НОВЫЙ '/root' из '/var/tmp/temproot' через mergemaster
- mergemaster
10. Перезагружаемся обычным образом или fastboot.
- reboot or fastboot
11. Новая система работает - проверяем сервисы.
Copyleft Andrey Lavrentyev