Компиляция базовых компонентов системы
Вы должны находиться в каталоге /usr/src:
# cd /usr/src
(если, конечно, ваш исходный код не находится в другом месте, в случае чего вам нужно перейти в соответствующий каталог).
Для полного перестроения системы используется команда make(1). Эта команда читает инструкции из файла Makefile, описывающего, как должны быть перестроены программы, которые составляют систему FreeBSD, в каком порядке они должны быть построены и так далее.
Общий формат командной строки, которую вы будет набирать, таков:
# make -x -DVARIABLE target
В этом примере -x является параметром, который вы передаете в make(1). Обратитесь к справочной странице программы make(1), которая содержит список возможных параметров.
-DVARIABLE передает переменную в Makefile. Поведение Makefile определяется этими переменными. Это те же самые переменные, которые задаются в /etc/make.conf, и это -- еще один способ их задания.
# make -DNOPROFILE=true target
является другим способом указания того, что библиотеки для профилирования строить не нужно, и соответствует строке
NOPROFILE= true # Обход построения библиотек для профилирования
в файле /etc/make.conf.
target указывает программе make(1) на то, что вы хотите сделать. Каждый файл Makefile определяет некоторое количество различных ``целей'', и ваш выбор цели определяет то, что будет делаться.
Некоторые цели, перечисленные в файле Makefile, не предназначены для вызова. Просто они используются в процессе построения для разбиения его на этапы.
В большинстве случаев вам не нужно передавать никаких параметров в make(1), так что ваша команда будет выглядеть примерно так:
# make target
Начиная с версии FreeBSD 2.2.5 (на самом деле впервые это было сделано в ветке FreeBSD-CURRENT, а затем адаптировано в FreeBSD-STABLE где-то между 2.2.2 и 2.2.5) цель world была разделена на две: buildworld и installworld. Начиная с версии FreeBSD 5.3, world изменена так, что она более не работает, поскольку для большинства пользователей ее выполнение представляет опасность.
Как указывают на это названия, buildworld строит полностью новое дерево в каталоге /usr/obj, а installworld устанавливает это дерево на используемой машине.
Это весьма полезно по двум причинам. Во-первых, это позволяет вам безопасно строить систему, зная, что компоненты вашей рабочей системы затронуты не будут. Построение ``самодостаточно''. По этой причине вы можете спокойно запустить buildworld на машине, работающей в многопользовательском режиме без опаски получить какие-либо проблемы. Но всё же рекомендуется запускать цель installworld в однопользовательском режиме.
Во-вторых, это позволяет вам использовать монтирование по NFS для обновления многих машин в сети. Если у вас есть три машины, A, B и C, которые вы хотите обновить, запустите make buildworld и make installworld на машине A. Хосты B и C должны будут затем смонтировать по NFS каталоги /usr/src и /usr/obj с машины A, и вы сможете запустить make installworld
для установки результатов построения на машинах B и C.
Хотя цель world всё ещё имеется в наличии, вам настоятельно рекомендуется не пользоваться ею.
Выполните
# make buildworld
В настоящее время имеется возможность задавать команде make
параметр -j, который приводит к запуску нескольких одновременно работающих процессов. Наиболее полезно использовать это на многопроцессорных машинах. Однако, так как процесс компиляции больше всего требователен к подсистеме ввода/вывода, а не к производительности процессора, это можно использовать и на машинах с одним процессором.
На типичной машине с одним CPU вы должны запускать:
# make -j4 buildworld
будет иметь до 4 одновременно работающих процессов. Эмпирические замеры, опубликованные как-то в списке рассылки, показывают, что в среднем это дает наибольшее увеличение производительности.
Если у вас многопроцессорная машина и вы используете ядро с настройками для SMP, попробуйте использовать значения между 6 и 10 и посмотрите, как это отразится на скорости работы.
Имейте в виду, что это все еще экспериментальная возможность, и изменения в дереве исходных текстов иногда могут быть не совместимы с параллельной сборкой.Если система не может быть построена с использованием этого параметра, попробуйте еще раз без него перед тем, как сообщать о проблемах.