Сборка FreeBSD из исходного кода


Установка «мира»

Оставаясь в однопользовательском режиме, можно выполнить установку обновленной системы FreeBSD, выполнив команду make installworld. После этого по экрану побегут строки, большая часть из которых будет содержать слово install.

# cd /usr/src
# make installworld

Некоторые программы и файлы могут оказаться ненужными в системе. Чтобы увидеть эти устаревшие файлы, запустите команду make check-old.

# make check-old
>>> Checking for old files
/usr/sbin/pccardc
/usr/share/man/man8/pccardc.8.gz
...

В этом списке будут перечислены все компоненты системы, некогда установленные и ставшие ненужными. Оцените потребность в них и либо сохраните существующие, но не поддерживаемые программы, либо найдите альтернативы. Немного дальше в выводе вы увидите разделяемые библиотеки, также ставшие нужными:

>>> Checking for old libraries
/lib/libcrypto.so.4
/usr/lib/libssl.so.4
/usr/lib/libroken.so.8
/lib/libatm.so.3
/lib/libc.so.6
...

В заключение вашему вниманию будет представлен список ставших ненужными каталогов. Удалять каталоги приходится очень редко — я могу вспомнить только семь таких случаев с момента появления команды make check-old.

Если вы не используете какие-либо из устаревших программ и каталогов, удалите их командой make delete-old. Перед удалением каждого файла утилита make(1) запросит подтверждение.

Устаревшие разделяемые библиотеки

Устаревшие разделяемые библиотеки требуют особого внимания. Этими библиотеками пользуются многие программы сторонних производителей. Если удалить такую библиотеку, программа просто не запустится. Крайне нежелательно, например, удалить библиотеку, если ее использует приложение, предназначенное для решения чрезвычайно важных задач. Единственный способ восстановить работоспособность такой программы — повторно скомпилировать ее или заменить библиотеку. Разделяемые библиотеки рассматривались в главе 12. Если библиотека не требуется для работы ни одной программе, ее можно удалить. Однако проверять все программы, чтобы выяснить, не используют ли они ту или иную библиотеку, весьма нелегко.

Проверим, для примера, список устаревших библиотек, приведенный выше. Одна из них — libc.so.6. Заглянув в каталог /lib, я увидел, что там присутствует библиотека libc.so.7. Скорее всего, мне не требуются сразу две библиотеки libc.so.6 и libc.so.7. Однако от библиотеки libc зависит слишком многое — это как главная городская магистраль. Если я удалю ее, может получиться так, что программы, установленные из «портов», просто перестанут работать. Присутствие этой устаревшей библиотеки в ближайшее время никак не повредит системе — оставив устаревшие библиотеки в дополнение к новым, вы обеспечите работоспособность системы и сможете не спеша выполнить переустановку дополнительного программного обеспечения. Порядок обновления «портов» мы рассмотрим ниже в этой главе.

В любом случае, если вы считаете, что ни одна из перечисленных библиотек не представляет никакого интереса, их можно удалить, но я настоятельно рекомендую перед удалением сохранить резервные копии всех библиотек. Для этого достаточно скопировать их в каталог old-libs где-нибудь в файловой системе. Обнаружив, что какое-то важное приложение не запускается, вы легко сможете восстановить его работоспособность. Чтобы работоспособность программ сохранилась, но при этом сами библиотеки хранились отдельно, можно записать устаревшие библиотеки в каталог /usr/lib/compat. Другой вариант состоит в том, чтобы использовать утилиту libchk (/usr/ports/sysutils/libchk) для идентификации программ, использующих ту или иную библиотеку.

И снова mergemaster

Мы почти у цели! Мы уже обновили информацию об учетных записях и группах в каталоге /etc, теперь нужно обновить остальные файлы. У программы mergemaster много специализированных функций, все они описаны на страницах руководства. Я могу порекомендовать две из них, наиболее полезные с моей точки зрения.

После добавления файла в базовую установку FreeBSD нет смысла сравнивать его с чем бы то ни было. С ключом -i программа mergemaster автоматически установит файлы в каталог /etc. Завершив работу, mergemaster выведет список установленных файлов.

Есть еще один набор файлов, которые меня совсем не интересуют и которые я никогда не редактирую. Например, в операционной системе FreeBSD присутствуют десятки сценариев запуска, расположенные в каталоге /etc/rc.d. Поскольку я не изменяю эти файлы, то могу просто установить более новые версии этих сценариев. Ключ -U предписывает программе mergemaster автоматически обновлять любые системные файлы, которые я не редактировал.

# mergemaster -iU

mergemaster просмотрит все файлы в /etc и проверит их принадлежность к базовому дистрибутиву FreeBSD. Принцип действия программы mergemaster в этом случае точно такой же, как и в случае с подготовкой к установке, поэтому здесь мы не будем углубляться в подробности. Выполните перезагрузку — и вы получите обновленную систему! Теперь можно побеспокоиться об обновлении портов.

Наконец, ключ предписывает программе mergemaster сохранять замещаемые файлы, при этом нужно указать каталог для сохранения копий в файле /etc/mergemaster.rc. Вообще я предпочитаю заранее создавать резервную копию всей системы, тем не менее для сохранения замещаемых файлов в локальной файловой системе можно использовать ключ , что позволит вернуть файлы на место быстрее, чем восстановление из резервной копии.

Определите нужные значения параметров в файле .mergemasterrs из своего домашнего каталога или в файле /etc/mergemaster.rc. Некоторые очень удобные параметры из тех, что находятся в конфигурационном файле, невозможно задать в командной строке, например, я всегда изменяю содержимое файла /etc/motd, поэтому нахожу параметр IGNORE_MOTD=yes весьма полезным.

Обновление в однопользовательском режиме

Согласно инструкциям, обновление некоторых компонентов системы следует выполнять в однопользовательском режиме. Многие считают это неприятностью, а кое-кто даже серьезным препятствием. Программы FreeBSD — это всего лишь файлы на диске, не так ли? Здравый смысл подсказывает, что достаточно просто скопировать их на диск, перезагрузить систему и все будет в порядке.

Это еще один пример ситуации, когда здравый смысл может нарушить ваши планы на месяц. В редких случаях разработчики FreeBSD вносят в систему некоторые низкоуровневые изменения, требующие установки в однопользовательском режиме. Могут возникать конфликтные ситуации, если особо важные программы не смогут работать, если были установлены в многопользовательском режиме. Если в такой редкой ситуации окажется файл /bin/sh, вы попадете в мир кошмаров. В этом случае у вас останется единственный способ восстановить систему: вынуть жесткий диск из сервера, установить его на другую машину, скопировать с него все нужные данные, отформатировать диск и вновь установить на него систему. Или можно загрузиться с компакт-диска восстановления системы и молиться, чтобы ваших навыков хватило для решения этой задачи.*

Обновление в многопользовательском режиме может породить и другие проблемы, такие как трудноуловимая гонка за ресурсами, проблемы с именованием и масса других неприятностей. Конечно, вы можете выполнить обновление в многопользовательском режиме, но тогда не жалуйтесь, если в системе обнаружатся какие-нибудь проблемы.

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

NFS и обновление

Вам нужно обновить много компьютеров? Вспомните о сетевой файловой системе (NFS), которая рассматривалась в главе 8. Соберите новую систему и все ваши ядра на центральном, самом быстром сервере, а затем экспортируйте каталоги /usr/src и /usr/obj этой системы всем остальным клиентам. Использование этих томов NFS для работы команд make installkernel и make installworld позволит сэкономить время при сборке программных компонентов на других машинах и гарантирует, что во всех системах FreeBSD будут установлены одни и те же двоичные файлы.

Комментарии запрещены.