Как собрать пакеты Debian из исходного кода
В этом пошаговом руководстве мы посмотрим, как собирать пакеты Debian из исходного кода в Debian, Ubuntu и других системах на основе APT, таких как Linux Mint.
Debian и системы на его основе, такие как Ubuntu, используют Advanced Package Tool или, короче, APT, для установки, обновления, обновления и удаления программного обеспечения из командной строки.
Обычно менеджер пакетов APT хранит список репозиториев в файле с именем /etc/apt/sources.list
и в любом файле с суффиксом . .list
в каталоге /etc/apt/sources.list.d/
.
Когда мы устанавливаем пакет, команда apt
извлекает двоичную или предварительно скомпилированную версию данного пакета из этих репозиториев.
Помимо установки бинарных пакетов, APT также позволяет загружать исходный код пакета. Таким образом, вы можете затем добавить некоторые функции в исходный код, собрать пакет из исходного кода и, наконец, установить модифицированную версию пакета.
Почему нам следует собирать пакет из исходного кода?
Может быть много причин для сборки пакета из исходного кода. Вот несколько причин, о которых я мог подумать сейчас:
- Проверьте исходный код, чтобы найти ошибку.
- Добавляйте новые функции в пакеты, которые больше не разрабатываются активно.
- Установите самую последнюю версию пакета из исходного кода. Как правило, пакеты в официальных репозиториях могут быть устаревшими.
- И что еще более важно — научитесь собирать пакеты Debian из исходного кода.
Установите необходимые инструменты сборки
Чтобы собрать двоичный пакет из исходного кода, сначала нам необходимо установить необходимые инструменты сборки. В зависимости от инструмента командной строки для сборки двоичного пакета вам может потребоваться установить любой из следующих пакетов:
- dpkg-dev
- девскрипты
Эти пакеты предоставляют множество инструментов для создания бинарных пакетов из исходного кода.
Чтобы установить "dpkg-dev"
, запустите:
sudo apt install dpkg-dev
Команда для установки пакета "devscripts"
:
sudo apt install devscripts
Включить исходные репозитории
Убедитесь, что вы включили исходные репозитории.
Для этого откройте файл /etc/apt/sources.list
:
sudo vim /etc/apt/sources.list
Вы увидите в нем несколько строк, как показано ниже:
See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
newer versions of the distribution.
deb http://in.archive.ubuntu.com/ubuntu focal main restricted
deb-src http://in.archive.ubuntu.com/ubuntu focal main restricted
[...]
В приведенном выше файле все строки, начинающиеся с одного или двух хешей (#), являются просто комментариями, предназначенными только для информации. А строки без хешей — это подходящие репозитории.
В репозитории apt строки, начинающиеся с «deb», относятся к двоичным пакетам, которые пользователи могут установить с помощью менеджера пакетов apt. И строки, начинающиеся с «deb-src», относятся к исходным пакетам. Это полезно для разработчиков. По умолчанию «deb-src» закомментирован в списке источников.
Чтобы загрузить исходные пакеты, вам необходимо раскомментировать строку «deb-src». Удалите символ #, чтобы раскомментировать строку. После раскомментирования строки репозитория должны выглядеть следующим образом:
See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
newer versions of the distribution.
deb http://in.archive.ubuntu.com/ubuntu focal main restricted
deb-src http://in.archive.ubuntu.com/ubuntu focal main restricted
[...]
Сохраните и закройте файл. Обновите список репозиториев с помощью команды:
sudo apt update
Загрузить исходные пакеты
Загрузите исходный код пакета с помощью команды "apt source
. Например, следующая команда загрузит исходный код программы Hello World!»
:
apt source hello
Пример вывода:
Reading package lists... Done
Need to get 734 kB of source archives.
Get:1 http://in.archive.ubuntu.com/ubuntu focal/main hello 2.10-2ubuntu2 (dsc) [1847 B]
Get:2 http://in.archive.ubuntu.com/ubuntu focal/main hello 2.10-2ubuntu2 (tar) [726 kB]
Get:3 http://in.archive.ubuntu.com/ubuntu focal/main hello 2.10-2ubuntu2 (diff) [6560 B]
Fetched 734 kB in 2s (336 kB/s)
dpkg-source: info: extracting hello in hello-2.10
dpkg-source: info: unpacking hello_2.10.orig.tar.gz
dpkg-source: info: unpacking hello_2.10-2ubuntu2.debian.tar.xz
Скачать исходный код пакета
Как видите, я скачал исходный код программы Hello World.
$ ls
hello-2.10 hello_2.10-2ubuntu2.debian.tar.xz hello_2.10-2ubuntu2.dsc hello_2.10.orig.tar.gz
Просмотрите фактическое содержимое исходного кода:
$ ls hello-2.10/
ABOUT-NLS ChangeLog INSTALL NEWS README-release aclocal.m4 configure debian lib man tests
AUTHORS ChangeLog.O Makefile.am README THANKS build-aux configure.ac doc m4 po
COPYING GNUmakefile Makefile.in README-dev TODO config.in contrib hello.1 maint.mk src
Установите зависимости сборки для пакета
Далее нам также нужно установить зависимости для этого пакета. Для этого запустите:
sudo apt build-dep hello
Установить зависимости сборки
Теперь мы загрузили исходный код пакета и установили зависимости, необходимые для сборки этого пакета. Далее внесите изменения в исходный код.
Изменить исходный код пакета Debian
Перейдите в каталог, содержащий исходный код пакета. В нашем случае это hello-2.10.
cd hello-2.10
Измените код по своему желанию. Код находится в файле "hello.c"
в каталоге "src"
.
vi src/hello.c
Настройте код и/или внесите какие-либо изменения. Закончив редактирование кода, сохраните и закройте файл.
Теперь пришло время собрать настоящий пакет .deb.
Сборка пакетов Debian из исходного кода
Мы скачали исходный код и изменили его. Давайте соберем пакет из исходного кода. Мы можем сделать это тремя способами:
- Использование команды
"dpkg-buildpackage"
- Использование команды
"debuild"
- Загрузите исходный код и соберите его напрямую
Способ 1. Использование dpkg-buildpackage:
Убедитесь, что вы установили пакет "dpkg-dev"
.
Затем выполните следующую команду, чтобы собрать пакет из исходного кода:
dpkg-buildpackage -rfakeroot -b -uc -us
Здесь,
dpkg-buildpackage
– команда для сборки двоичных или исходных пакетов из исходных кодов.-rfakeroot
— создайте среду fakeroot для имитации привилегий root (во избежание проблем с владением и разрешениями).-b
— собрать только двоичный пакет.-uc
— не подписывайте журнал изменений криптографически. т. е. не подписывайте файлы.buildinfo
и.changes
.-us
— не подписывайте исходный пакет.
Убедитесь, что вы запускаете указанную выше команду в главном каталоге дерева исходного кода. В противном случае это не сработает.
Если сборка прошла успешно, вы увидите сообщение, подобное приведенному ниже:
[...]
dpkg-deb: building package 'hello' in '../hello_2.10-2ubuntu2_amd64.deb'.
dpkg-deb: building package 'hello-dbgsym' in 'debian/.debhelper/scratch-space/build-hello/hello-dbgsym_2.10-2ubuntu2_amd64.deb'.
Renaming hello-dbgsym_2.10-2ubuntu2_amd64.deb to hello-dbgsym_2.10-2ubuntu2_amd64.ddeb
dpkg-genbuildinfo --build=binary
dpkg-genchanges --build=binary >../hello_2.10-2ubuntu2_amd64.changes
dpkg-genchanges: info: binary-only upload (no source code included)
dpkg-source --after-build .
dpkg-buildpackage: info: binary-only upload (no source included)
Сборка пакетов Debian из исходного кода
Поздравляем! Мы успешно собрали пакет .deb из исходного кода. Теперь вернитесь в родительский каталог и вы увидите только что созданный файл .deb:
cd ..
ls
Пример вывода:
hello-2.10 hello_2.10-2ubuntu2.dsc hello_2.10-2ubuntu2_amd64.deb
hello-dbgsym_2.10-2ubuntu2_amd64.ddeb hello_2.10-2ubuntu2_amd64.buildinfo hello_2.10.orig.tar.gz
hello_2.10-2ubuntu2.debian.tar.xz hello_2.10-2ubuntu2_amd64.changes
Способ 2 — использование дебилда
Убедитесь, что вы установили пакет "devscripts"
.
Затем соберите двоичный пакет, выполнив следующую команду из дерева исходного кода:
debuild -b -uc -us
После успешной сборки полученный пакет .deb
будет сохранен в родительском каталоге.
Способ 3. Загрузите и создайте напрямую.
Это самый простой и понятный метод, чем два вышеуказанных метода. В этом методе мы загружаем исходный код пакета и передаем параметр "--compile"
для сборки двоичного файла в одной командной строке ниже:
sudo apt-get source --compile hello
Приведенная выше команда загрузит исходный код программы "hello"
, создаст пакет .deb
и сохранит его в текущем каталоге.
Установите файл .deb
Перейдите в папку, где сохранен файл .deb
, и установите его, как показано ниже:
sudo dpkg -i hello_2.10-2ubuntu2_amd64.deb
Если вы видите сообщение об ошибке отсутствия зависимостей, запустите:
sudo apt install -f
Как видите, собрать пакет Debian из исходного кода в Linux очень просто!
Связанное чтение:
- Как собрать пакеты из исходного кода с помощью CheckInstall
- Как легко создавать пакеты Linux для нескольких платформ
- Воссоздать двоичные пакеты Debian, которые уже установлены в системе
- Как конвертировать пакеты Linux с помощью Alien
- Как конвертировать пакеты DEB в пакеты Arch Linux
Надеюсь это поможет.