Поиск по сайту:

Как собрать пакеты 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 из исходного кода.

Установите необходимые инструменты сборки

Чтобы собрать двоичный пакет из исходного кода, сначала нам необходимо установить необходимые инструменты сборки. В зависимости от инструмента командной строки для сборки двоичного пакета вам может потребоваться установить любой из следующих пакетов:

  1. dpkg-dev
  2. девскрипты

Эти пакеты предоставляют множество инструментов для создания бинарных пакетов из исходного кода.

Чтобы установить "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 из исходного кода

Мы скачали исходный код и изменили его. Давайте соберем пакет из исходного кода. Мы можем сделать это тремя способами:

  1. Использование команды "dpkg-buildpackage"
  2. Использование команды "debuild"
  3. Загрузите исходный код и соберите его напрямую

Способ 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

Надеюсь это поможет.

Статьи по данной тематике