Обновление портов и исходников FreeBSD 8.x используя CSUP

По просьбе трудящихся пишу вот эту статью, о том как обновить собственно порты и исходные коды системы. О портах и говорить вроде нечего, обновляй да и все тут, а на исходниках системы стоит остановиться более подробно.
Начнем наверно с того, что в отличие от подлой проприетарщины, во FreeBSD все исходные коды открыты и скачать, употребить, собрать, помучать, изменить и т. д. их может каждый желающий, согласившийся с лицензией BSD .
В самой этой ОС четко разделяют: Ядро (KERNEL) и Мир (WORLD) — он же окружение пользователя (USERLAND). При установке с диска (без разницы CD или DVD), можно ко всему прочему распаковать и исходные коды к системе в /usr/src/.. Аналогично можно распаковать и порты в /usr/ports/.. После этих манипуляций и подключения к инету можно обновить исходные коды при помощи нескольких утилит, например cvsup или csup. Потом пересобрать обновленные исходники и проинсталлить их. После ребута получите последнюю систему на текущий момент.
Утила CVSUP ставится из портов и много чего умеет, а вот более простая утила CSUP, начиная с 7 ветки FreeBSD поставляется вместе с «Фрёй» и работает сразу после инсталляции системы.
Итак приступим. Для обновления исходных кодов системы лучше всего взять пример файла и переписать его под себя.

bsd# pwd
/usr/home/bsd
bsd# cd /usr/src/share/examples/cvsup
bsd# ls -l
total 36
-rw-r--r--  1 root  wheel  1180 Jul 31  2002 README
-rw-r--r--  1 root  wheel  5323 Mar 14  2008 cvs-supfile
-rw-r--r--  1 root  wheel  2633 Sep  8  2007 doc-supfile
-rw-r--r--  1 root  wheel  2286 Sep  8  2007 gnats-supfile
-rw-r--r--  1 root  wheel  3810 Sep  8  2007 ports-supfile
-rw-r--r--  1 root  wheel   367 Dec  8  2007 refuse
-rw-r--r--  1 root  wheel  1934 Jan 13  2009 refuse.README
-rw-r--r--  1 root  wheel  3934 Aug 25  2009 stable-supfile
-rw-r--r--  1 root  wheel  3030 Sep  8  2007 standard-supfile
-rw-r--r--  1 root  wheel  2357 Sep  8  2007 www-supfile

Видим в примерах несколько таких файлов заточенных под определенные задачи. Конфигурационные файлы для утил cvsup и csup ничем не отличаются. Здесь например файл ports-supfile заточен под обновление портов, stable-supfile под обновление исходников ОС до последнего стабильного состояния. Все, что нужно, так это взять файл и поправить его под себя, лучше его скопировать в тот же /etc/… и оставить для будущих систематических обновлений, например по расписанию, при помощи Cron’а.

bsd# cp ./ports-supfile /etc
bsd# cp ./stable-supfile /etc

Если хоть каплю английского понимаете, разобраться с файлами труда не составит. Весь конфиг прост и понятен, обильно снабжен комментами.
В файле, как правило нужно будет прописать сервер-зеркало CVSup (параметр *default host=), о чем там собственно и написано. Какие интернет-имена зеркал можно подставлять, расписано по адресу http://www.freebsd.org/doc/handbook/cvsup.html#CVSUP-MIRRORS

.............
# IMPORTANT: Change the next line to use one of the CVSup mirror sites
# listed at http://www.freebsd.org/doc/handbook/mirrors.html.
*default host=CHANGE_THIS.FreeBSD.org
*default base=/var/db
*default prefix=/usr
# The following line is for 8-stable.  If you want 7-stable, 6-stable,
# 5-stable, 4-stable, 3-stable, or 2.2-stable, change to "RELENG_7",
# "RELENG_6", "RELENG_5", "RELENG_4", "RELENG_3", or "RELENG_2_2"
# respectively.
*default release=cvs tag=RELENG_8
*default delete use-rel-suffix
..............

У нас тут с Яндексом вроде как бы локальные отношения, поэтому мной был выбран 6 сервер в ru зоне, или cvsup6.ru.freebsd.org
Больше в файле ничего править в обычном случае не нужно, но понимания всего конфига лучше добиться ничем иным, как изучением.
после сохранения файла набираем следующее:

csup -g -L 2 /etc/stable-supfile
bsd# csup -g -L 2 /etc/stable-supfile
Parsing supfile "/etc/stable-supfile"
Connecting to cvsup6.ru.FreeBSD.org
Connected to 195.14.50.21
Server software version: SNAP_16_1h
MD5 authentication started
MD5 authentication successful
Negotiating file attribute support
Exchanging collection information
Establishing multiplexed-mode data connection
Running
Updating collection src-all/cvs
 Edit src/MAINTAINERS
..............
 Edit src/contrib/binutils/ChangeLog
  Add delta 1.1.1.7 2002.10.11.05.58.34 obrien
  Add delta 1.1.1.6 2002.03.20.21.34.02 obrien
  Add delta 1.1.1.5 2002.02.22.04.15.53 obrien
  Add delta 1.1.1.4 2002.01.27.11.57.25 obrien
  Add delta 1.1.1.3 2001.07.20.03.28.00 obrien
  Add delta 1.1.1.2 2000.11.25.10.29.36 obrien
  Add delta 1.1.1.1 2000.05.12.23.14.27 obrien
  Add delta 1.1 2000.05.12.23.14.27 obrien
  Add delta 1.2 2011.02.18.20.54.12 dim
..............
 Checkout src/usr.sbin/utxrm/utxrm.c
 Edit src/usr.sbin/wpa/wpa_supplicant/wpa_supplicant.conf.5
  Add delta 1.15 2011.02.20.17.54.49 imp
Shutting down connection to server
Finished successfully
bsd#

Сервер может конечно взбрыкнуть и отфутболить ввиду достижения максимума подключений, тогда, если неохота ждать лучше прописать в конфиге другой сервер, менее нагруженный.
С обновлением портов процедура аналогичная, только для файла /etc/ports-supfile.
После этого нужно по очереди собрать ядро, собрать мир, установить ядро, установить мир, выполнить слияние конфигов при помощи mergemaster.

bsd# uname -a
FreeBSD bsd.fok29.local 9.0-CURRENT FreeBSD 9.0-CURRENT #0: Sun Jan 30 14:01:21 VLAT 2011     root@bsd.fok29.local:/usr/obj/usr/src/sys/MYKRNL  amd64

Как видно, архитектура amd64, конфиг ядра уже нарисован, называется файл MYKRNL, поэтому сразу переходим к сборке ядра. (Составление конфига ядра — отдельная долгая песня, поэтому здесь ее не описываю, можно порыть инет на эту тему).

bsd# cd /usr/src
bsd# make buildkernel KERNCONF=MYKRNL

--------------------------------------------------------------
>>> Kernel build for MYKRNL started on Sun Mar 13 01:05:58 VLAT 2011
--------------------------------------------------------------
===> MYKRNL
mkdir -p /usr/obj/usr/src/sys

--------------------------------------------------------------
>>> stage 1: configuring the kernel
--------------------------------------------------------------
cd /usr/src/sys/amd64/conf;  PATH=/usr/obj/usr/src/tmp/legacy/usr/sbin:/usr/obj/usr/src/tmp/legacy/usr/bin:/usr/obj/usr/src/tmp/legacy/usr/games:/usr/obj/usr/src/tmp/usr/sbin:/usr/obj/usr/src/tmp/usr/bin:/usr/obj/usr/src/tmp/usr/games:/sbin:/bin:/usr/sbin:/usr/bin  config  -d /usr/obj/usr/src/sys/MYKRNL  /usr/src/sys/amd64/conf/MYKRNL
WARNING: duplicate option `GEOM_PART_BSD' encountered.
WARNING: duplicate option `GEOM_PART_MBR' encountered.
Kernel build directory is /usr/obj/usr/src/sys/MYKRNL
Don't forget to do ``make cleandepend && make depend''

--------------------------------------------------------------
>>> stage 2.1: cleaning up the object tree
--------------------------------------------------------------
cd /usr/obj/usr/src/sys/MYKRNL; MAKEOBJDIRPREFIX=/usr/obj  MACH.................

.. и получаем ErrorCode 1.
ld.config отказывается работать, порыв инет выяснилось, что на 9 ветке FreeBSD CURRENT сначала нужно собрать и установить мир, а уж потом собирать и ставить ядро.

-Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wunused-parameter -Wcast-align -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls -Wold-style-definition -Wno-pointer-sign  -o ldd32 ldd.o sods.o
--------------------------------------------------------------
>>> World build completed on Sun Mar 13 14:01:04 VLAT 2011
--------------------------------------------------------------

Вобщем последовательность команд будет следующая:

bsd#cd /usr/src
bsd#make -j 5 buildworld
bsd#make installworld
bsd#reboot
bsd#cd /usr/src
bsd#make buildkernel KERNCONF=MYKRNL
bsd#make installkernel KERNCONF=MYKRNL
bsd#reboot

Параметр «-j 5» указывает утиле make во сколько потоков (5) производить сборку. На 9ой ветке вроде стабильно работает. На 8ой бывают проблемы, поэтому если не получится собрать что-то в многопоточном режиме, попробовать нужно без параметра «-j». Число потоков лучше ставить из расчета по два на каждое настоящее ядро процессора + 1. Например для Q8400 это число 9, а для E8500 — 5, для AMD 1055T (6 ядер) — 13. Связано это с тем, что соотношение производительности процессора и жесткого диска разные и на заключительно-концевых операциях теряется много времени на подтягивание данных с накопителя.
Удачного обновления!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

CAPTCHA изображение

*