Обновление ядра и мира во 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/>

Вот и всё.

Обновлено: 12.03.2015