Как собрать и установить пакет из исходников в Linux

В этом руководстве подробно объяснено, как собрать и установить программный пакет из исходного кода в Linux. Показан рабочий процесс на примере Git, но принципы применимы к большинству проектов с автоконфигурируемой или CMake/meson-сборкой.
Почему стоит собирать из исходников
- Полный контроль над опциями сборки и флагами компилятора.
- Возможность исправления багов и добавления функций.
- Обучение: чтение кода и практики архитектуры других проектов.
- Создание пакетов для специфичных дистрибутивов или версий библиотек.
Важно: сборка из исходников требует времени и понимания зависимостей. Для повседневных установок удобнее использовать менеджер пакетов вашей системы.
Что нужно заранее установить
Перед сборкой убедитесь, что установлены инструменты разработки и заголовочные файлы зависимостей.
На Debian/Ubuntu и производных:
sudo apt update
sudo apt install build-essential curl gettext cmake gcc g++ libcurl4-gnutls-dev libexpat1-dev libssl-dev zlib1g-devНа Arch Linux:
sudo pacman -Syu
sudo pacman -S base-devel curl cmakeНа Fedora/RHEL:
sudo dnf install @development-tools curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc cmakeСовет: для пакетов, доступных в репозитории, можно сначала запустить apt build-dep <пакет>, чтобы установить все зависимости сборки.
Шаг 1. Скачивание исходников
Скачайте архив с сайта проекта или зеркала. В примере используем Git 2.26.2 и curl. Рабочая папка — ~/Downloads.
cd ~/Downloads
curl --output git.tar.gz https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.26.2.tar.gzРаспакуйте архив:
tar -zxf git.tar.gz
cd git-2.26.2Откройте файлы README и INSTALL — там часто описаны специфичные флаги сборки.
Шаг 2. Подготовка и проверка зависимостей
Большинство проектов используют один из трёх подходов:
- Автоконфигурация: скрипт ./configure
- CMake: создание отдельной сборочной директории и запуск cmake
- Meson: создание сборочной директории и запуск meson
Запустите соответствующий инструмент. Для автоконфигурации:
./configureЕсли скрипт выдаёт ошибку о недостающей библиотеке, установите соответствующий dev-пакет и повторите.
Совет по автоматике: используйте make -j$(nproc) для параллельной сборки и ускорения на многоядерных CPU.
make -j$(nproc)Дополнительно полезно:
- ccache для ускорения повторных сборок
- strace или ldd для диагностики динамических зависимостей
Шаг 3. Опции установки: PREFIX и DESTDIR
По умолчанию make install копирует файлы в системные пути, что потребует sudo. Чтобы устанавливать в нестандартную директорию, используйте PREFIX или DESTDIR.
Установка в /usr/local по PREFIX:
./configure --prefix=/usr/local
make -j$(nproc)
sudo make installПодготовка пакетной установки без изменения корневой FS с DESTDIR:
make -j$(nproc)
make DESTDIR=$PWD/pkg install
# Теперь в каталоге pkg/ лежит макет устанавливаемых файлов: pkg/usr/local/bin/...DESTDIR удобно использовать для создания собственных пакетов (.deb/.rpm) или для тестовой установки.
Шаг 4. Безопасная установка и создание пакета
Вместо прямого sudo make install рекомендуется собирать пакет для вашего дистро:
- Для Debian-подобных систем: dpkg-buildpackage или checkinstall
- Для RPM: rpmbuild
Пример быстрой упаковки с checkinstall (создаёт .deb/.rpm и устанавливает пакет через менеджер пакетов):
sudo apt install checkinstall # если доступно
sudo checkinstall --pkgname=git --pkgversion=2.26.2 --backup=no --deldoc=yes --fstrans=yes --install=yesПреимущество: пакет можно легко удалить через apt/dpkg, метаданные сохраняются.
Важно: checkinstall подходит для быстрых случаев, но для релизной упаковки лучше настроить полноценные debian/ rpm-спецификации.
Шаг 5. Проверка и откат
Проверка установки:
git --version
which git
ldd $(which git) # показывает динамические библиотеки, используемые бинарникомОткат установки:
- Если установили через пакет (.deb/.rpm), удалите пакет через менеджер: sudo apt remove
- Если использовали sudo make install без пакета, часто в исходниках есть make uninstall. Запустите в каталоге исходников:
sudo make uninstallЕсли make uninstall отсутствует, придётся вручную удалить установленные файлы или восстановить систему из бекапа/снимка.
Общие ошибки и как их исправить
Ошибка: missing headers / cannot find -l
- Решение: установите dev-пакет библиотеки (например libssl-dev, zlib1g-dev).
Ошибка: permission denied при install
- Решение: используйте sudo для установки в системные директории или примените DESTDIR/PREFIX.
Несовместимые версии библиотек в системе
- Решение: собирайте с указанием статической линковки (если проект поддерживает) или используйте контейнер/chroot с нужными версиями.
Сборка слишком медленная
- Решение: make -j$(nproc), используйте ccache, удалите ненужные шаги тестов в конфигурации.
Когда сборка из исходников не подходит
- Вам нужна простая, безопасная и системно управляемая установка — используйте репозиторные пакеты.
- Приложение сильно интегрировано с менеджером пакетов дистрибутива (службы, зависимости) — сборка вручную усложнит обновление.
- Не хватает времени на поддержку и патчи — пакеты из репозиториев обновляются автоматически.
Альтернативные способы установки
- Менеджеры пакетов: apt, dnf, pacman.
- AUR/PKGBUILD и yay на Arch: удобный путь к кастомным сборкам.
- Snap, Flatpak, AppImage — контейнеризированные приложения без конфликтов зависимостей.
- Контейнеры Docker/Podman — изоляция и воспроизводимость окружения.
Безопасность сборки и жёсткие флаги компиляции
При сборке из исходников обратите внимание на флаги компилятора и опции безопасности:
- Используйте оптимизацию и защиту: -O2 -fstack-protector-strong -D_FORTIFY_SOURCE=2
- Для релизов включайте PIE и RELRO: -fPIE -fPIC -Wl,-z,relro,-z,now
- Проверяйте доверенность исходного кода и используйте GPG-подписи для архива, если они доступны.
Ролями: чеклисты для разработчика и системного администратора
Чеклист разработчика:
- Склонировать/скачать правильную версию исходников
- Прочитать README/INSTALL
- Установить dev-зависимости
- Собрать локально с make -j
- Запустить тесты проекта (make test, ctest)
- Провести статический анализ и собрать с отладкой
Чеклист системного администратора:
- Оценить влияние на систему и зависимости
- Подготовить тестовую виртуальную машину/контейнер
- Собрать пакет (.deb/.rpm) вместо прямой установки
- Проверить файл manifest и права
- Создать резервную копию или снимок системы
- Установить пакетом и проверить сервисы
Мини-методология сборки в 7 шагов
- Подготовьте окружение и установите build-essential.
- Скачайте и распакуйте исходники.
- Прочитайте документацию проекта.
- Настройте опции сборки (PREFIX, флаги).
- Соберите проект make -j$(nproc) или cmake && make.
- Упакуйте результат в .deb/.rpm или используйте checkinstall.
- Установите и протестируйте, затем задокументируйте изменения.
Шаблоны команд и часто используемые блоки
CMake сборка в отдельной директории:
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make installСоздание тестовой установки с DESTDIR:
make
make DESTDIR=$PWD/package install
# Просмотреть содержимое package/Создание простого .deb через dpkg-deb после DESTDIR:
# подготовить package/DEBIAN/control с метаданными
fakeroot dpkg-deb --build package mypackage.deb
sudo dpkg -i mypackage.debКритерии приёмки
- Команда git –version возвращает ожидаемую версию.
- Бинарный файл находится в ожидаемом пути (which git).
- Системные сервисы работают как до установки (если применимо).
- Для пакетов: пакет можно удалить без следов через менеджер пакетов.
Отладка и инструкция по реагированию при ошибке
- Повторите сборку с логированием: make V=1 или cmake –log-level.
- Проверьте зависимости: ldd бинарника, pkg-config –libs.
- Если установка сломала систему, восстановите из снимка или удалите пакет через менеджер.
- Для критических случаев: вернитесь к пакетам репозитория: sudo apt install –reinstall git
flowchart TD
A[Скачать исходники] --> B{Тип сборки}
B --> |autoconf| C[./configure]
B --> |cmake| D[mkdir build && cmake ..]
C --> E[make -j]
D --> E
E --> F{Упаковать?}
F --> |да| G[checkinstall / dpkg-buildpackage / rpmbuild]
F --> |нет| H[sudo make install]
G --> I[Установить пакет]
H --> I
I --> J[Проверка git --version]
J --> K[Готово]Короткий глоссарий
- configure — скрипт подготовки сборки, проверяет зависимости.
- make — утилита, выполняющая сборку по правилам Makefile.
- PREFIX — префикс установки, например /usr или /usr/local.
- DESTDIR — временная корневая директория при установке для упаковки.
- checkinstall — утилита для быстрой генерации пакетов из make install.
Советы по совместимости и миграции
- Если вы собираете старую версию на новом дистро, учитывайте версии glibc и системных библиотек.
- Для переносимости используйте контейнеры с нужным дистроем или chroot.
- Документируйте флаги компиляции и зависимости, чтобы можно было воспроизвести сборку в будущем.
Итоговая сводка
Сборка из исходников даёт гибкость и контроль, но требует аккуратности: следите за зависимостями, используйте PREFIX/DESTDIR, предпочитайте создание пакетов для простого отката и автоматического управления. Начните в тестовой среде, используйте параллельную сборку и инструменты упаковки, чтобы оставить систему управляемой.


Важно: перед массовой установкой на производстве протестируйте процесс на тестовой машине и подготовьте план отката.
Похожие материалы
Подготовка к техническому собеседованию разработчика
Запуск мастера устранения неполадок в Windows
Как создать мем: полное руководство
Как устранить BSOD 0x0000003B в Windows
Clone Stamp в Photoshop — подробное руководство