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.
Почему мы должны собирать пакет из исходников?
Может быть много причин для создания пакета из исходного кода. Вот несколько причин, о которых я мог подумать сейчас:
- Просмотреть исходный код, чтобы найти ошибку.
- Добавить новые функции в пакеты, которые больше активно не разрабатываются.
- Установите самую последнюю версию пакета из исходников. Как правило, пакеты в официальных репозиториях могут быть устаревшими.
- И что еще более важно – научится собирать пакеты Debian из исходников.
Установите необходимые инструменты сборки
Чтобы собрать двоичный пакет из исходного кода, сначала нам нужно установить необходимые инструменты сборки. В зависимости от инструмента командной строки для сборки двоичного пакета вам может потребоваться установить любой из следующих пакетов:
- dpkg-dev
- 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 из исходного кода
Мы скачали исходный код и изменили код. Давайте соберем пакет из исходников. Мы можем сделать это тремя способами:
- Используя команду “dpkg-buildpackage”
- Использование команды “debuild”
- Загрузите исходный код и соберите его напрямую
Метод 1 – Использование dpkg-buildpackage:
Убедитесь, что вы установили пакет «dpkg-dev».
А затем выполните следующую команду, чтобы собрать пакет из исходного кода:
$ dpkg-buildpackage -rfakeroot -b -uc -us
Здесь:
- dpkg-buildpackage – команда для сборки двоичных пакетов или пакетов с исходным кодом из источников.
- -rfakeroot – создать среду fakeroot для имитации привилегий суперпользователя (во избежание проблем с правами собственности и разрешениями).
- -b – построить только двоичный пакет.
- -uc – Не подписывать журнал изменений криптографически. т.е. не подписывайте файлы .buildinfo и .changes.
- -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 из исходного кода очень просто!