Сборка из исходного кода может предоставить версию или функцию, отсутствующую в настроенных репозиториях, но переносит работу по интеграции, обновлению и доверию с дистрибутива на вас. Если поддерживаемый пакет дистрибутива решает задачу, предпочитайте его.
Пакеты · Урок 7
Компиляция исходного кода
Узнайте, как проверять, настраивать, собирать, тестировать, размещать и отслеживать программы, скомпилированные из исходного кода.
Проверка и чтение до сборки
Получите исходный код из аутентифицированного канала выпусков исходного проекта. Проверьте его подпись или контрольную сумму через доверенный путь, затем исследуйте архив до извлечения в непривилегированный промежуточный каталог. Прочитайте файлы README, INSTALL, SECURITY и документацию проекта по сборке.
Инструкции сборки являются исполняемым кодом. Скрипт configure, определение сборки, тест или плагин компилятора способны запускать произвольные команды от имени вашего пользователя. Не собирайте недоверенный исходный код и не запускайте саму сборку через sudo.
Почему этап компиляции обычно следует выполнять без sudo?
Установка требований сборки
В системе разработки семейства Debian распространённой отправной точкой служит:
$ sudo apt install build-essential
Команда устанавливает базовый компилятор и инструменты сборки, но не все зависимости любого проекта. Проектам также могут понадобиться среды выполнения языков, генераторы, инструменты систем сборки, заголовки разработки или точные версии библиотек. Устанавливайте требования из доверенных репозиториев и отличайте зависимости сборки от зависимостей времени выполнения.
Что предоставляет build-essential в системе семейства Debian?
Настройка и сборка
Традиционный проект в стиле Autoconf использует:
$ ./configure --prefix=/usr/local
$ make
configure проверяет среду и создаёт файлы сборки согласно выбранным параметрам. make читает правила зависимостей и команд, обычно из Makefile, и создаёт запрошенные цели.
Эта последовательность не универсальна. Проекты могут использовать CMake, Meson, Ninja, инструменты конкретного языка или собственные скрипты. Следуйте документации точного выпуска, а не запускайте ./configure лишь по привычке. Если система сборки поддерживает это, отдельный каталог сборки помогает отделить созданные файлы.
Что делает make в традиционном процессе?
Тестирование до установки
Запустите документированную тестовую цель проекта, например:
$ make check
Настоящая цель может называться test, check или быть отдельной командой. Исследуйте сбои, а не устанавливайте непроверенный результат. Тестам могут потребоваться сеть, службы, специальное оборудование или изоляция; проверяйте их до выполнения так же, как другой код сборки.
Что делать, если документированный набор тестов завершается с ошибкой?
Промежуточное размещение и отслеживание установки
sudo make install может напрямую скопировать файлы в системные префиксы, не записав их в собственную базу пакетов. Цели удаления необязательны и могут быть неполными, а последующие обновления способны перезаписать или оставить файлы без владельца.
Предпочитайте один из контролируемых подходов:
- создайте официальный собственный пакет инструментами дистрибутива
- устанавливайте в явно отделённый префикс, например
/usr/local, если это разрешает политика - разместите файлы в промежуточном корне упаковки через поддерживаемый механизм вроде
DESTDIR - используйте непривилегированный пользовательский префикс, изолированное окружение или контейнер, когда это уместно
checkinstall может создать простой пакет для некоторых процессов make install, но он не универсален и не заменяет проверенный рецепт пакета качества дистрибутива. Никогда не считайте его обязательным правилом. До любого привилегированного копирования проверьте промежуточный список файлов, владельцев, права, пути и план удаления или обновления.
Каково назначение поддерживаемой промежуточной установки через DESTDIR?
Используйте лабораторию Сборка программного обеспечения из исходного кода в Linux в одноразовой среде, чтобы отработать процесс, не смешивая экспериментальные файлы с производственной системой.
Урок завершён
Вы завершили Компиляция исходного кода
Теперь вы можете рассматривать сборку из исходного кода как контролируемый процесс поставки программ.
Аутентифицируйте исходный код и проверяйте его инструкции как исполняемый код.
Устанавливайте явные требования сборки из доверенных репозиториев.
Настраивайте, собирайте и тестируйте без ненужных привилегий.
Размещайте и проверяйте результат до системной установки.
Отслеживайте установленные файлы собственным пакетом или намеренно изолированным префиксом.
Сохраните прогресс
Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.
Создать бесплатный аккаунт