Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> настройка —> обновление

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

Автор: lissyara.


    Про обновление много написано на сайте FreeBSD - однако, по просьбам трудящихся, решил сам вкратце пробежаться по этой теме. Несмотря на наличие этой инструкции и работоспособность предложенных тут телодвижений - советую делать так, как предложено в хандбуке, а не следовать моим советам :)
   Немного про то, почему я делаю не так. Я никогда не обновлялся радикально - с переходом из ветки в другую (4.x->5.x или 5.x->6.x) - ибо не вижу чего-то радикально нового в новых фрях, чтобы к этому стремиться. Для однопроцессорных машин лучше 4.11 ничё не придумали :) А при смене оборудования - да, приходится ставить новые версии - ради 64-х разрядности и дров. Ну, а при обновлении в пределах одной ветки (не считая 5-ки - там были вроде коренные изменения какие-то между 5.0 и 5.2), не стоит заморачиваться насчёт точного следования инструкции - отличия обычно именно в дровах и в исправлениях ошибок. Конечно, что-то по мелочи меняется (типичный пример - при обновлении с 6.0 до 6.1 нехочет инсталлится мир - ибо в 6.1 добавили новую группу пользователей. Правда я и тут не стал следовать выводиммым при этом инструкциям, а добавил её руками :)), но в общем и целом эта одна и таже система.
   Итак. Имеем, для примеру (абсолютно реальный пример - обновлял пару дней назад фряху - ошибся в синтаксисе конфига cvsup и вместо того, чтобы обновиться - откатился.) FreeBSD 4.11 такой версии:
/usr/home/lissyara/>uname -r
4.11-STABLE
/usr/home/lissyara/>

Для начала ставим cvsup из портов - это описано тут. после чего имеем такой набор файлов:
/usr/home/lissyara/>cd /usr/share/examples/cvsup/
/usr/share/examples/cvsup/>ll
total 36
-r--r--r--  1 root  wheel  1180  9 май 19:43 README
-r--r--r--  1 root  wheel  5274  9 май 19:43 cvs-supfile
-r--r--r--  1 root  wheel  2773  9 май 19:43 doc-supfile
-r--r--r--  1 root  wheel  2427  9 май 19:43 gnats-supfile
-r--r--r--  1 root  wheel  3903  9 май 19:43 ports-supfile
-r--r--r--  1 root  wheel   349  9 май 19:43 refuse
-r--r--r--  1 root  wheel  1918  9 май 19:43 refuse.README
-r--r--r--  1 root  wheel  4013  9 май 19:43 stable-supfile
-r--r--r--  1 root  wheel  3172  9 май 19:43 standard-supfile
-r--r--r--  1 root  wheel  2498  9 май 19:43 www-supfile
/usr/share/examples/cvsup/>

После чего берём какой-нить stable-supfile и приводим к такому виду (для 4.11):
# конфиг для обновления исходных кодов:
*default host=cvsup4.ru.FreeBSD.org
*default base=/usr
*default prefix=/usr
*default release=cvs tag=RELENG_4_11
*default delete use-rel-suffix
*default compress
src-all

или к такому - для 6.1
# конфиг для обновления исходных кодов:
*default host=cvsup4.ru.FreeBSD.org
*default base=/usr
*default prefix=/usr
*default release=cvs tag=RELENG_6_1
*default delete use-rel-suffix
*default compress
src-all

Проверяем, а есть ли у нас исходные коды? :)
/usr/home/lissyara/>cd /usr/src/
/usr/src/>ll
total 142
-rw-r--r--    1 root  wheel   6117  2 янв  2005 COPYRIGHT
-rw-r--r--    1 root  wheel   8480 16 апр  2003 Makefile
-rw-r--r--    1 root  wheel  24306 11 май 10:48 Makefile.inc1
-rw-r--r--    1 root  wheel   9761 28 авг  1999 Makefile.upgrade
-rw-r--r--    1 root  wheel   2699 26 апр  2002 README
-rw-r--r--    1 root  wheel  46655 19 апр 11:03 UPDATING
drwxr-xr-x   32 root  wheel    512 20 окт  2005 bin
drwxr-xr-x   45 root  wheel   1024 20 окт  2005 contrib
drwxr-xr-x    7 root  wheel    512 20 окт  2005 crypto
drwxr-xr-x   14 root  wheel   2048 11 май 10:49 etc
drwxr-xr-x   41 root  wheel   1024 20 окт  2005 games
drwxr-xr-x    6 root  wheel    512 20 окт  2005 gnu
drwxr-xr-x    6 root  wheel   1536 20 окт  2005 include
drwxr-xr-x    7 root  wheel    512 20 окт  2005 kerberos5
drwxr-xr-x    8 root  wheel    512 20 окт  2005 kerberosIV
drwxr-xr-x   57 root  wheel   1536 20 окт  2005 lib
drwxr-xr-x   35 root  wheel   1024 20 окт  2005 libexec
drwxr-xr-x   10 root  wheel    512 11 май 10:49 release
drwxr-xr-x   82 root  wheel   1536 20 окт  2005 sbin
drwxr-xr-x    6 root  wheel    512 20 окт  2005 secure
drwxr-xr-x   23 root  wheel    512 20 окт  2005 share
drwxr-xr-x   49 root  wheel   1024 20 окт  2005 sys
drwxr-xr-x    8 root  wheel    512 20 окт  2005 tools
drwxr-xr-x  221 root  wheel   3584 20 окт  2005 usr.bin
drwxr-xr-x  158 root  wheel   3072 20 окт  2005 usr.sbin
/usr/src/>

Если нету - надо поставить. (Если быстрый и халявный инет - то cvsup это сам сделает при попытке обновиться - но учтите - это будет стоит прилично траффику - для 6.1 попробовал - 104 мега входящего, и час времени - но тут в канал упёрлось. Как оказалось он неплохо жмёт - всего получилось 418 мегабайт исходников. На 4.11 их поменьше - 338Mb, соответственно и траффику будет меньше). После чего запускаем обновление:
/usr/share/examples/cvsup/>cvsup -g -L 2 stable-supfile
Parsing supfile "stable-supfile"
Connecting to cvsup4.ru.FreeBSD.org
Connected to cvsup4.ru.FreeBSD.org
Server software version: SNAP_16_1h
Negotiating file attribute support
Exchanging collection information
Establishing multiplexed-mode data connection
Running
Updating collection src-all/cvs
 Checkout src/COPYRIGHT
 Edit src/Makefile.inc1
  Add delta 1.141.2.70.2.1 2004.12.17.13.41.58 kensmith
 Checkout src/UPDATING
 .............
 .............
 Checkout src/usr.sbin/syslogd/syslogd.c
Shutting down connection to server
Finished successfully
/usr/share/examples/cvsup/>

Ну и всё. Имеем обновлённые исходные коды системы. Можно собирать `мир` (вкратце - мир - это то, что не ядро :) - пользовательские программы - типа grep, awk, sh, chmod и прочего. Короче всё, что не входит в ядро и модули ядра.). Перед сборкой рекомендуется вернуть взад все нестандартные опции из /etc/make.conf - у меня там, например налеплена оптимизация O3, тип CPU да ещё кое какие мелочи. Я ничё не убираю. Хотя в случае проблем - если что-то не собирается или не инсталлится - стоит посмотреть, что там и убрать лишнее (на 4.x по-дефолту этого файла вообще нет, в 6.x в нем тока пара строк про версию перла. На это и ориентируйтесь).
/usr/home/lissyara/>cd /usr/src/
/usr/src/>rm -R /usr/obj/* && make cleandir && make cleandir && \
? make buildworld && make installworld && shutdown -r now

make cleandir делать дважды рекомендует хандбук (я ещё make clean делаю... На всякий случай...). Сборка достаточно длительный процесс - на AMD64 3200+ на сборку мира от FreeBSD 6.1 у меня уходило чуть больше часа. Для 4.11 соответственно намного быстрей - раза в два-три (на PII-266 уходит порядка 5-ти часов - для мира 4.11). На этой машине, на которой щас мучаем (AMD K7, Duron 1100MHz, FreeBSD 4.11) ушло час и десять минут, и минут 10 на инсталляцию.
После чего перезагрузка, и собираем ядро. Собсно частенько бывает проблемой вспомнить - а какое ядро у меня стоит щас? :) это можно легко проверить:
/usr/home/lissyara/>uname -v
FreeBSD 4.11-STABLE #0: Wed May 10 23:59:44 MSD 2006
lissyara@mx.lissyara.su:/usr/obj/usr/src/sys/router.acpi
/usr/home/lissyara/>

Сборку ядра я уже описывал, но тут пробегусь ещё разок.
/usr/home/lissyara/>cd /usr/src/
/usr/src/>rm -R /usr/obj/* && make clean && make clean \
? make buildkernel KERNCONF=router.acpi && \
? make installkernel KERNCONF=router.acpi && shutdown -r now

Ядро собралось бодренько - за 14 минут. После перезагрузки получилось:
/usr/home/lissyara/>uname -r
4.11-RELEASE-p17
/usr/home/lissyara/>

Вот и всё.



размещено: 2006-05-11,
последнее обновление: 2006-05-11,
автор: lissyara


creativ, 2006-05-11 в 18:15:29

Это у вас на серверах make.conf с 03 или на десктопе? Если на серверах то как со стабильностью?

lissyara, 2006-05-11 в 22:51:36

раньше на серверах было :) Игрался. Щас прошло... В паре мест -O2 есть (на 4.11 - на 6.0 оно штатно), а так по дефолту везде оставляю...
====
насчёт стабильности - некоторые вещи просто не собирались. Если собиралось - работало.

northern, 2006-05-13 в 19:58:02

сенкс! приятно, что пожелания народа учитываются.

Чингиз, 2007-03-11 в 6:54:55

а вот чем в принципе отличаются способы обновлением МИРа и ядра, от данной статьи и http://www.lissyara.su/?id=1270, помимо того что способы немного разнятся.

Чингиз, 2007-03-11 в 6:56:16

тоесть способом реализации.

nikola93, 2007-10-17 в 8:23:09

Пасиб тебе класная статья
сначало ошибки были потом стал разбиратся оказывается дата старая стояла вобщем дату поменял и все заработало

toughcat, 2008-02-01 в 11:32:37

похоже тут "... && make clean \
? make buildkernel KERNCONF=router.acpi && ...
"
одна "&&" пропущена

user, 2008-02-28 в 22:22:59

хз, лично я для обновления p юзаю freebsd-update

VVD, 2008-03-21 в 4:28:57

А чем не устраивает путь более близкий к классическому?
make buildworld
make buildkernel KERNCONF=router.acpi
make installkernel KERNCONF=router.acpi
make installworld
reboot

К тому же даже для близких версия (типа с 6.2 до 6.3) mergemaster я бы не стал исключать.
Ну а в single user mode для installworld в данном случае можно не входить. Но если вдруг что не так пойдёт "пиняйте на себя". :-D

Vagner, 2008-04-14 в 14:58:08

Зачетная статья! Сенкс! Доделаю сайт поставлю линку на ентот ресурс;)

sas, 2008-04-29 в 0:07:46

ребята а вы в статье забыли указать что нужно делать mergemaster после make installworld и mergemaster -p после make installkernel.или я не прав???

a-i, 2008-05-12 в 18:35:43

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

eGuru, 2008-06-20 в 23:35:19

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

Добавлю немного своего опыта по апгрейду с 6.2 на 7.0.
Действовоал по сценарию из Makefile, сборка ядра и мира нормально. Пришлось заново изготовить конфиг ядра, так как некоторые опции из 6.2 вызывали ошибку при компиляции ядра 7.0. Далее инсталлкернел, и ребут в однопользовательский режим. В однопользовательском режиме первым делом надо дать команду mount -a, чтобы смонтировать необходимые файловые системы. Далее mergemaster-ы. При объединении конфигов надо быть очень внимательным, с одной стороны желательно поставить новый конфиг, с другой стороны надо сохранить свои настройки из старых. Тут без ручной правки не обойтись. После завершения mergemaster можно перезагрузиться в нормальный режим, если все стартовала сразу - вы счастливый человек. Последний шаг, указанный в инструкции - make delete-old-libs. Выполнить его надо, однако перед этим необходимо пересобрать ВСЕ установленные в системе приложения. Если этого не сделать, и сразу удалить старые библиотеки, приложения перестанут запускаться.

Вкратце так.

shaggy, 2008-11-02 в 8:01:14

К написанному eGuru я бы добавил установку из портов
/usr/ports/misc/compat6x дабы избежать проблем с библтотеками.

shaggy, 2008-11-02 в 8:03:08

Помимо mount -a надо бы еще mount -rw сделать

vihlun82, 2009-05-30 в 23:06:10

Статья супер =) тока мне пришлось чуться прееиграть на 7.2 не делать мейк слин 2 раза =) зато понял что такое world и ядро =)))))))))))

NecAway, 2009-07-28 в 20:33:08

Господа.. статья, конечное, хорошая, но может её стоит подновить? Вместо cvsup давно нужно csup пользовать...

Чел, 2011-01-11 в 22:11:39

а как вам этот метод?
http://server-help.ru/?p=17



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.05 секунд
Из них PHP: 28%; SQL: 72%; Число SQL-запросов: 77 шт.
У Вас отключено GZIP-сжатие в браузере. Размер страницы 42438