Как пересобрать пакет из исходников в Debian/Ubuntu

Несмотря на то, что Linux известен своей открытостью, одной из ключевых причин популярности является возможность глубокой кастомизации: вы можете изменять конфигурации и исходные файлы под свои нужды. Пересборка пакета из исходников — стандартный инструмент для кастомизации, отладки и применения локальных исправлений.
В этой статье пошагово описан процесс пересборки пакета в Debian/Ubuntu-подобных системах: от включения исходных репозиториев до установки полученного .deb.
Что вы получите
- Понимание базового процесса пересборки пакета.
- Рабочие команды для скачивания, установки зависимостей, правок и сборки.
- Практические советы по безопасности и тестированию.
1. Включите исходные репозитории
Прежде чем пересобирать пакет, нужно включить исходные (source) репозитории в вашей системе. Это позволит apt скачивать исходные пакеты, а не только бинарные.
В Debian/Ubuntu отредактируйте файл /etc/apt/sources.list и добавьте или раскомментируйте строки с deb-src. Пример для Debian buster:
deb http://deb.debian.org/debian buster main
deb-src http://deb.debian.org/debian buster main
deb http://deb.debian.org/debian-security/ buster/updates main
deb-src http://deb.debian.org/debian-security/ buster/updates main
deb http://deb.debian.org/debian buster-updates main
deb-src http://deb.debian.org/debian buster-updates maindeb-src указывает пакетному менеджеру, что нужно возвращать исходные архивы.
После сохранения файла обновите индекс:
sudo apt-get updateВажно: в современных системах можно также использовать команду apt вместо apt-get (например, sudo apt update), но приведённые ниже примеры используют apt-get/apt по контексту.
2. Скачайте исходный пакет
Создайте рабочую директорию и скачайте исходники интересующего пакета. В примере используем пакет tar.
mkdir apt-rebuilds
cd apt-rebuilds
apt-get source tarКоманда apt-get source скачает архив исходников и распакует его в текущую директорию.
Просмотреть файлы:
ls -la
3. Проверка и установка зависимостей сборки
Перед сборкой убедитесь, что на вашей системе установлены все зависимости для сборки пакета.
В каталоге с исходниками выполните проверку зависимостей:
sudo dpkg-checkbuilddepsЭта команда покажет, какие пакеты отсутствуют. Чтобы установить зависимости автоматически, используйте:
sudo apt-get build-dep tarЕсли вы предпочитаете apt:
sudo apt build-dep tarПримечание: замените tar на имя пакета, который вы собираете.

Совет по изоляции: для чистой и воспроизводимой сборки используйте chroot-инструменты (pbuilder, sbuild) или контейнеры Docker — это уменьшит риск «работает на моей машине».
4. Внесите изменения в пакет
Откройте каталоги исходников и внесите нужные правки: патчи, изменения настроек, компилятора и т.д. Как вы будете править — зависит от цели: убрать флаг, включить опцию конфигурации, обновить версию библиотеки.
Обновите changelog, увеличив локальную версию, чтобы пакет отличался от оригинала. Для Debian-пакетов удобно использовать dch (devscripts):
dch --localЭта команда откроет ваш редактор и позволит добавить строку в debian/changelog. Впишите краткое описание изменений и сохраните.
Важно: используйте семантику версии, понятную вашей организации (например, 1.2.3-4custom1).
5. Сборка пакета
Когда всё готово, выполните сборку из каталога с исходниками (где находится debian/):
dpkg-buildpackage --force-signЕсли вы не хотите подписывать пакеты, можно убрать –force-sign. Для быстрой сборки только бинарных пакетов используйте:
dpkg-buildpackage -bВремя сборки зависит от пакета и вашего железа.

6. Установка собранного пакета
После успешной сборки .deb-файлы обычно оказываются в родительском каталоге. Установите их так:
sudo dpkg -i ../*.debЕсли есть проблемы с зависимостями, исправьте их командой:
sudo apt-get install -fКогда этот процесс полезен и когда нет
- Полезно: включение/отключение опций, патчинг уязвимостей, оптимизация под конкретное железо, тестирование новых функций без ожидания upstream.
- Не полезно: если нужно лишь изменить отдельный конфигурационный файл — достаточно локального конфигурирования; если пакет интенсивно взаимодействует с системой, кастомная сборка может привести к несоответствию гарантиям и поддержке.
Альтернативные подходы
- Использовать checkinstall для быстрого создания .deb из make install (подходит для простых случаев).
- Собирать в pbuilder/sbuild для чистой, воспроизводимой среды.
- Контейнеризировать сборку через Docker для упрощения CI/CD.
- Патчи через quilt и debian/patches — удобнее поддерживать изменения.
Мини-методология (шаги наподобие SOP)
- Включить deb-src и sudo apt update.
- Скачать исходники apt-get source
. - Установить build-dep для
. - Внести изменения и обновить debian/changelog через dch –local.
- Собрать dpkg-buildpackage в изолированной среде.
- Установить и протестировать, затем задокументировать изменения.
Критерии приёмки
- Пакет собирается без ошибок.
- Установленный пакет работает корректно на целевой системе.
- Наличие тестов: если пакет поставляется с тестовым набором, они проходят.
- Версия пакета уникальна и задокументирована.
Роли и чек-листы
Администратор:
- Включил deb-src и сделал обновление индексов.
- Проверил зависимости сборки.
- Выполнил сборку в изолированной среде.
- Установил и провёл smoke-тесты.
Разработчик/Инженер релиза:
- Подготовил патчи (quilt) и обновил changelog.
- Обеспечил совместимость ABI/API при необходимости.
- Подготовил инструкцию отката.
Короткий глоссарий
- deb-src: запись в sources.list для исходных пакетов.
- dpkg-buildpackage: инструмент для сборки Debian-пакетов.
- build-dep: набор пакетов, требуемых для сборки.
- dch: утилита для редактирования debian/changelog.
- pbuilder/sbuild: инструменты для изолированной сборки в chroot.
Безопасность и лучшие практики
- По возможности собирайте в chroot/контейнере, чтобы избежать подмены зависимостей.
- Подписывайте пакеты, если собираетесь распространять их внутри организации.
- Документируйте изменения и храните патчи в SCM (git).
Типичные ошибки и их устранение
- “Unmet build dependencies”: запустите sudo apt-get build-dep
. - Проблемы с версией: увеличьте локальную версию в debian/changelog.
- Сборка работает у вас, но не на CI: используйте pbuilder/sbuild для совпадения окружений.
Примеры команд (Cheat sheet)
# Обновить репозитории и скачать исходники
sudo apt-get update
apt-get source
# Установить зависимости для сборки
sudo apt-get build-dep
# Обновить changelog перед сборкой
dch --local
# Собрать пакет (подписанный)
dpkg-buildpackage --force-sign
# Установить собранные пакеты
sudo dpkg -i ../*.deb
sudo apt-get install -f В завершение
Пересборка пакета — практический навык для администраторов и продвинутых пользователей Linux. Она открывает доступ к гибкой настройке и исправлению пакетов, но требует дисциплины: используйте изолированные среды, подписывайте релизы и храните патчи в системе контроля версий.
Важно: если вы только учитесь — начните с простых пакетов и используйте тестовую виртуальную машину, чтобы не нарушить рабочую систему.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента