Ответ
Сборка пакетов из исходников через bash-скрипты — стандартная задача для автоматизации развертывания. Основной паттерн — ./configure, make, make install. Вот пример скрипта с обработкой ошибок и зависимостями:
#!/bin/bash
set -e # Выход при первой ошибке
PACKAGE="nginx-1.24.0"
PREFIX="/usr/local"
# Установка зависимостей для сборки (пример для Ubuntu/Debian)
sudo apt-get update
sudo apt-get install -y build-essential libpcre3 libpcre3-dev zlib1g-dev libssl-dev
# Загрузка и распаковка
wget -q "https://nginx.org/download/${PACKAGE}.tar.gz"
tar -xzf "${PACKAGE}.tar.gz"
cd "${PACKAGE}"
# Конфигурация с оптимизациями
./configure
--prefix="${PREFIX}"
--with-http_ssl_module
--with-http_v2_module
--with-threads
--with-file-aio
# Параллельная сборка с использованием всех ядер
make -j"$(nproc)"
# Установка
sudo make install
# Создание systemd-юнита (опционально)
sudo systemctl daemon-reload
Ключевые моменты для продакшена:
checkinstall: Вместо прямогоmake installлучше использоватьsudo checkinstallдля создания.debили.rpmпакета, что позволяет управлять версиями и чисто удалять.- Изоляция через Docker: Для воспроизводимости сборки создаю многоступенчатый Dockerfile, который кэширует зависимости.
- Альтернативные системы сборки: Для проектов на CMake (например, Redis) или Meson использую соответствующие команды (
cmake -B build && cmake --build build). - Артефакты CI: В пайплайне GitLab CI сохраняю собранные бинарные файлы как артефакты для последующего развертывания.