ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Как собрать пакеты Debian из исходного кода

Как собрать пакеты Debian из исходного кода

Debian и системы на основе Debian, такие как Ubuntu, используют Advanced Package Tool , сокращенно APT , для установки, обновления, обновления и удаления программного обеспечения из командной строки. Обычно менеджер пакетов APT хранит список репозиториев в файле с именем /etc/apt/sources.list и в любом файле с суффиксом .list в каталоге. /etc/apt/sources.list.d/. Когда мы устанавливаем пакет, команда apt извлекает двоичную или предварительно скомпилированную версию данного пакета из этих репозиториев. Помимо установки двоичных пакетов, APT также позволяет загружать исходный код пакета. Таким образом, вы можете затем добавить некоторые функции в исходный код, собрать пакет из исходного кода и, наконец, установить измененную версию пакета. В этой статье давайте посмотрим, как создавать пакеты debian из исходного кода в Debian, Ubuntu и других системах на основе apt, таких как Linux Mint.

 

Почему мы должны собирать пакет из исходников?

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

 

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

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

  1. dpkg-dev
  2. devscripts

 

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

Чтобы установить «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 <package-name>”. Например, следующая команда загрузит исходный код “andreyex World!” программа:

$ apt source andreyex

 

Пример вывода:

Reading package lists... Done
Need to get 734 kB of source archives.
Get:1 http://in.archive.ubuntu.com/ubuntu focal/main andreyex 1.10-2ubuntu2 (dsc) [1847 B]
Get:2 http://in.archive.ubuntu.com/ubuntu focal/main andreyex 1.10-2ubuntu2 (tar) [726 kB]
Get:3 http://in.archive.ubuntu.com/ubuntu focal/main andreyex 1.10-2ubuntu2 (diff) [6560 B]
Fetched 734 kB in 2s (336 kB/s)
dpkg-source: info: extracting andreyex in andreyex-1.10
dpkg-source: info: unpacking andreyex_1.10.orig.tar.gz
dpkg-source: info: unpacking andreyex_1.10-2ubuntu2.debian.tar.xz

 

Как видите, мы загрузили исходный код программы andreyex World.

$ ls 
andreyex-1.10 andreyex_1.10-2ubuntu2.debian.tar.xz andreyex_1.10-2ubuntu2.dsc andreyex_1.10.orig.tar.gz

 

Просмотрите фактическое содержимое исходного кода:

$ ls andreyex-1.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       andreyex.1  maint.mk  src

 

Установите зависимости сборки для пакета

Затем нам нужно установить зависимости для этого пакета. Для этого запустите:

$ sudo apt build-dep andreyex

 

Теперь мы загрузили исходный код пакета и установили зависимости, необходимые для сборки этого пакета. Затем внесите изменения в исходный код.

 

Изменить исходный код пакета debian

Cd в каталог, содержащий исходный код пакета. В нашем случае это andreyex-1.10.

$ cd andreyex-1.10

 

Измените код по своему желанию. Код находится в файле «andreyex.c» в каталоге «src».

$ vi src/andreyex.c

 

Измените код и/или внесите какие-либо изменения. После редактирования кода сохраните и закройте файл.

Пришло время создать собственно пакет .deb.

 

Сборка пакетов Debian из исходного кода

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

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

 

Метод 1 – Использование dpkg-buildpackage:

Убедитесь, что вы установили пакет «dpkg-dev».

А затем выполните следующую команду, чтобы собрать пакет из исходного кода:

$ dpkg-buildpackage -rfakeroot -b -uc -us

 

Здесь:

Убедитесь, что вы запускаете указанную выше команду в основном каталоге исходного дерева. Иначе ничего не получится.

Если сборка прошла успешно, вы увидите сообщение, подобное приведенному ниже:

[...]
dpkg-deb: building package 'andreyex' in '../andreyex_1.10-2ubuntu2_amd64.deb'.
dpkg-deb: building package 'andreyex-dbgsym' in 'debian/.debhelper/scratch-space/build-andreyex/andreyex-dbgsym_1.10-2ubuntu2_amd64.deb'.
        Renaming andreyex-dbgsym_1.10-2ubuntu2_amd64.deb to andreyex-dbgsym_1.10-2ubuntu2_amd64.ddeb
 dpkg-genbuildinfo --build=binary
 dpkg-genchanges --build=binary >../andreyex_1.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)

 

Поздравляю! Мы успешно создали пакет .deb из исходников. Теперь вернитесь в родительский каталог, и вы увидите недавно созданный файл .deb:

$ cd ..

 

$ ls

 

Пример вывода:

andreyex-1.10                             andreyex_1.10-2ubuntu2.dsc              andreyex_1.10-2ubuntu2_amd64.deb
andreyex-dbgsym_1.10-2ubuntu2_amd64.ddeb  andreyex_1.10-2ubuntu2_amd64.buildinfo  andreyex_1.10.orig.tar.gz
andreyex_1.10-2ubuntu2.debian.tar.xz      andreyex_1.10-2ubuntu2_amd64.changes

 

Метод 2 – Использование debuild

Убедитесь, что вы установили пакет “devscripts”.

Затем соберите двоичный пакет, выполнив следующую команду из исходного дерева:

$ debuild -b -uc -us

 

После успешной сборки полученный пакет .deb будет сохранен в родительском каталоге.

 

Метод 3 – скачать и собрать напрямую

Это самый простой и понятный метод, чем два вышеупомянутых метода. В этом методе мы загружаем исходный код пакета и передаем параметр «–compile» для сборки двоичного файла в одной командной строке ниже:

$ sudo apt-get source --compile andreyex

 

Приведенная выше команда загрузит исходный код программы “andreyex”, соберет пакет .deb и сохранит его в текущем каталоге.

 

Установите файл .deb

Перейдите в место, где сохранен файл .deb, и установите его, как показано ниже:

$ sudo dpkg -i andreyex_1.10-2ubuntu2_amd64.deb

 

Если вы видите сообщение об ошибке отсутствия зависимостей, запустите:

$ sudo apt install -f

 

Как видите, собрать пакет debian из исходного кода очень просто!

Exit mobile version