Обновление ядра и мира
Автор: lissyara.
Оригинал: http://www.lissyara.su/articles/freebsd/tuning/update_world_and_kernel/
Про обновление много написано на сайте 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
Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
:/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/>
Вот и всё.