Для начала немного теории:
Каждый Debian-пакет имеет расширение ".deb" и содержит в себе компоненты, такие как бинарные файлы, исходный код, скрипты установки и метаданные, такие как имя пакета, версия, автор и описание. Debian-пакеты управляются с помощью инструментов управления пакетами, таких как apt-get, aptitude и dpkg.
Пакеты Debian имеют следующую структуру:
- Контрольный файл (control file), который содержит информацию о пакете, такую как имя пакета, версия, описание, зависимости, конфликты и многое другое.
- Архив с бинарными файлами (binary archive), который содержит бинарные файлы, которые будут установлены на вашей системе.
- Архив с исходным кодом (source archive), который содержит исходный код пакета. Этот архив может быть использован для компиляции пакета на вашей системе.
Управление пакетами Debian осуществляется с помощью инструментов, которые могут скачивать, устанавливать, обновлять и удалять пакеты из официальных репозиториев Debian. Одним из наиболее распространенных инструментов является apt-get, который может быть использован для установки и обновления пакетов, а также для управления зависимостями между ними.
Для создания своего собственного Debian-пакета необходимо создать файлы контрольного файла и архивов с бинарными исходными файлами, а затем использовать инструменты dpkg и debuild для создания и установки пакета.
Теперь давайте от теории перейдем к практике:
Для наглядности представлю вам структуру директории, в которой вы хотите собрать deb-пакет.
1) Создайте директорию (напр. test)
mkdir test
2) в директории test создайте директорию debian
cd test
mkdir debian
3) Также в директорию test поместите ваш пакет (разберем пакет на python)
В директории вашего python пакета обязательно должен быть файл __init__.py. Его вы можете оставить пустым (он нужен только для того, чтобы система понимала, что это и есть python пакет). Не забудьте про файл setup.py !
4) В то же время в директории test могут храниться второстепенные файлы, необходимые для вашего будущего пакета (напр. файлы перевода)
Теперь перейдем к файлу debian:
В данной директории у вас должно быть 5 файлов:
changelog, compat, control, install и rules
*Важно: имя директории, название пакета в файлах debian/changelog и debian/control должны быть одинаковые.
- Файл changelog создается командой dh_make.
В этом файле вы будете вести логгирование вашего пакета
Про файл compat лучше прочитать в официальной документации (https://www.debian.org/doc/manuals/maint-guide/dreq.ru.html#changelog) , но в этой статье для простоты понимания просто запишите в него число 11
- В файл control введите следующую информацию:
Source: package_name
Section: non-free/fly
Priority: optional
Maintainer: name <name@domain.ru>
Build-Depends: debhelper (>=10), dh-python, python3-all
Standards-Version: 3.8.0
Homepage: https://domain.ru/
Package: package_name
Architecture: any
Depends: ${shlibs:Depends}, python3, bash
Description: Libraries for fly applicati
Description here
- Теперь про файл install. В данной статье мы не будем его использовать, так как возьмем альтернативный способ, но для общего понимания: файл install содержит в себе строки, которые будут указывать, что (из директории test) и куда (в любое место системы) должно быть установлено вместе с пакетом.
- В файле rules внесите следующие строки:
%:
dh $@ --with python3 --buildsystem=pybuild
*Первая строка обязательно должна быть пустая.
Ура, мы на финишной прямой:
- Немного инфы про файл setup.py (он лежит в директории test):
from setuptools import setup, find_packages
setup(
name='package_name',
version='1.0.1',
entry_points={
'console_scripts': [
'имя_будующей_команды = имя_python_проекта.нужный_файл:нужная_функция', ]
},
packages= find_packages(),
data_files=[
('/путь_до_места_установки', ['установочный_второстепенный файл']),
]
)
Данный контент избавляет нас от ведения файла install в директории debian.
Теперь смело запускайте команду: sudo dpkg-buildpackage в директории test и переходите на уровень ниже (cd ..). Там и будет ваш созданный пакет, чтобы его установить выполните команду sudo dpkg -i имя_пакета.deb.
Приятного пользования!