Руководство по сборке и обновлению пакетов#

Важно

Документация дорабатывается по мере развития продуктов Группы Астра и по пожеланиям пользователей.

Ваши пожелания и замечания направляйте на почту docs@astralinux.ru

В операционной системе «Astra Linux» (AL) используются программные пакеты (далее по тексту — пакеты) в формате DEB (файлы с расширением .deb). Для управления пакетами в режиме командной строки (или в эмуляторе терминала в графическом режиме) предназначены набор команд нижнего уровня dpkg и комплекс программ высокого уровня apt, apt-cache и aptitude.

Инструмент командной строки dpkg#

Предназначен для операций с пакетами на локальном уровне. С помощью dpkg можно устанавливать и удалять пакеты, собирать пакеты из исходных текстов, получать информацию о конкретном пакете и об установленных в системе пакетах.

Важно

dpkg является низкоуровневой утилитой и не умеет работать с зависимостями, а лишь устанавливает пакет локально не используя доступ в интернет. Для установки пакета с учетом зависимостей используйте apt.

Для установки пакета необходимо выполнить команду:

dpkg -i <полное_имя_пакета>

Безопасное удаление установленного пакета выполняется командой (не удаляет .deb файла):

dpkg -r <полное_имя_пакета>

Информацию об установленных пакетах можно просмотреть с помощью команды:

dpkg -l

Инструмент командной строки apt#

Для установки пакета необходимо выполнить команду:

sudo apt install <полное_имя_пакета>

Безопасное удаление установленного пакета выполняется командой

sudo apt remove <имя программы>

Информацию об установленном пакете можно просмотреть с помощью команды:

sudo apt list --installed | grep <имя программы>

Разработка и сборка пакетов#

Для создания и работы с пакетами исходных кодов в ОС «Astra Linux» используется утилита dpkg-source. Она позволяет собирать исходный код, упакованным в формате, совместимом с Debian, и выполняет различные операции с источниками пакетов.

В качестве инструмента сборки используется dh_make — инструмент командной строки, используемый для упрощения процесса создания базовой структуры каталогов и файлов-шаблонов для упаковки ПО. После выполнения dh_make создается набор файлов и каталогов, формирующих начальную структуру пакета Debian.

Набор утилит и сценариев devscripts облегчает работы с сопровождающими пакетами. Включает в себя множество инструментов, предназначенных для автоматизации различных задач, связанных с пакетированием программного обеспечения в формате Debian.

Инструмент dpkg-buildpackage — контрольный скрипт, который может быть использован для автоматического создания пакета.

1. Типы пакетов#

Существует несколько форматов хранения пакетов с исходными кодами:

  • «1.0» (используется утилитой dpkg-source по умолчанию),

  • «2.0»,

  • «3.0» (имеет несколько разновидностей).

При разработке собственных пакетов для AL рекомендуется использовать формат «3.0 (native)», который почти совпадает с форматом «1.0», но при этом поддерживает различные методы сжатия. Кроме того, в отличие от «1.0» формат «3.0 (native)» по умолчанию игнорирует файлы и директории, относящиеся к системам контроля версий (таким как Git), а также множество временных файлов (т.о. сборку и отладку можно производить прямо в дереве исходных кодов).

Пакет формата «3.0 native» состоит из двух файлов:

  • <название_пакета>_<версия>.tar.gz

  • <название_пакета>_<версия>.dsc

    Например пакет исходных кодов для текстового редактора vim будет выглядеть так:

    • vim_7.1.314.tar.gz

    • vim_7.1.314.dsc

    где vim — название пакета, 7.1.314 — авторская версия (версия upstream source). Файл с именем .tar.gz содержит первичные авторские исходные коды (upstream source) и все специфичные исходные коды для дистрибутива. Файл .dsc содержит описание пакета исходных кодов.

Пакеты, специально разработанные для дистрибутива, или собственные пакеты (native) «дебианизируются» на этапе разработки и не содержат дополнительных изменений, так как разработчик первичной версии пакета обычно является одновременно и его сопровождающим.

Примечание

Если необходимо внести изменения в исходные коды, то разработчик делает это прямо в первичных исходных кодах проекта, увеличивая при этом основную версию пакета. Для этого используется файл вида <название_пакета>_<версия>.tar.gz.

По умолчанию утилита dpkg-source использует формат «1.0». Представлены три способа явного задания формата пакета с исходным кодом: - поле Format в файле debian/control; - опция командной строки –format; - содержимое файла debian/source/format.

Способы задания формата пакета исходных кодов перечислены в порядке приоритета, т.е. сначала утилита dpkg-source попытается использовать первый способ, затем второй, и только затем третий способ. Для разработки пакетов ПО для ОС рекомендуется использовать файл debian/source/format. Для задания формата пакета можно воспользоваться командой:

echo “3.0 (native) > debian/source/format

2. Формирование пакетов#

Для формирования пакета с исходными текстами необходимо создать специальный каталог debian, в котором будут расположены сценарии сборки пакета. Для этого необходимо выполнить команду dh_make (является инструментом для создания шаблонов пакетов в Debian), находясь в каталоге с исходными текстами программы:

dh_make -s -e builder@build -f ../test-1.1.tar.gz

где test-1.1.tar.gz — gzip-архив с исходными текстами программы, builder@build — адрес электроннйо почты разработчика (в частности в поле Maintainer).

В дальнейшем необходимо изучить структуру каталога debian и согласно документу Debian Policy Manual заполнить необходимые параметры конфигурационных файлов.

При разработке пакетов необходимо обратить внимание на правильное описание build и runtime-зависимостей.

Пакеты исходного кода должны выполнять требования, касающиеся обязательных полей в файле debian/control и проверять полученный пакет с помощью утилиты lintian (lintian -c <имя deb-пакета или dsc-файла>). Недоработки, помеченные утилитой lintian как предупреждения «W», допускаются, а ошибки «E» крайне рекомендуется исправить.

3. Сборка пакетов#

Примечание

Для сборки пакетов требуется предустановить заранее build-essential, devscripts и dpkg-dev.

Сборку пакетов из пакетов с исходными текстами следует выполнять в ОС при помощи команды:

dpkg-buildpackage

Сборка должна в обязательном порядке выполняться под учетной записью пользователя.

В дальнейшем пакет ПО должен быть протестирован на корректную установку с соблюдением зависимостей в ОС.

После проверки установки пакета необходимо провести комплексное тестирование функционала перед поставкой пакета.

4. Разработка пакета с драйверами#

Разработка пакета с драйверами возможна двумя способами:

  • если драйвер содержит закрытые исходные тексты, то необходимо собирать драйвер описанным выше способом для каждой версии ядра;

  • если драйвер использует открытые исходные тексты, то рекомендуется использовать module-assistant, так как при использовании module-assistant отсутствует зависимость от конкретной версии ядра.

Для использования компонента module-assistant необходимо выполнить следующие подготовительные действия:

  • создать сценарий сборки модуля ядра (Makefile);

  • создать пакет с исходным текстом модуля ядра, сценарием сборки модуля ядра и сценарием сборки пакета;

  • собрать пакет с исходным текстом ядра и сценарием сборки и установить его в систему;

  • собрать пакет с исполняемым модулем ядра при помощи module-assistant.

Для создания пакета с исходными текстами необходимо выполнить операции, описанные выше, или выполнить его создание вручную. Служебные файлы будут располагаться в каталоге debian внутри каталога с исходными текстами модуля ядра.

Для того чтобы module-assistant имел возможность собрать исполняемый модуль, в файл сценария сборки пакета необходимо добавить несколько определений и целей, в заголовке файла должны быть подключены модули module-assistant и определены некоторые переменные:

PACKAGE=simple-modules
MA_DIR ?= /usr/share/modass
-include $(MA_DIR)/include/generic.make
-include $(MA_DIR)/include/common-rules.make
Также должны быть определены цели, необходимые для работы module-
assistant (цель, в которой выполняется сборка пакета  binary-modules):
kdist_config: prep-deb-files
kdist_clean: clean
$(MAKE) $(MFLAGS) -f debian/rules clean
rm -f *.o *.ko
binary-modules:
dh_testroot
dh_clean -k
dh_installdirs lib/modules/$(KVERS)/misc
$(MAKE) KERNEL_DIR=$(KSRC) KVERS=$(KVERS)
install -m 0644 simple.$ko debian/$(PKGNAME)/lib/modules/$
(KVERS)/misc
dh_installdocs
dh_installchangelogs
dh_compress
dh_fixperms
dh_installdeb
dh_gencontrol -- -v$(VERSION)
dh_md5sums
dh_builddeb --destdir=$(DEB_DESTDIR)
dh_clean -k

Для сборки пакета необходимо наличие файла control — файла описания пакета. Также необходимо создать файл control.modules.in. Данный файл необходим для последующей сборки пакета с исполняемым кодом модуля ядра.

После создания всех необходимых служебных файлов выполнить сборку пакета с исходными текстами модуля ядра с помощью команды (находясь в каталоге с исходными текстами):

dpkg-buildpackage

По окончании работы программы dpkg-buildpackage в вышележащем каталоге появится пакет с исходными текстами ядра. Установить полученный пакет при помощи команды:

dpkg -i <имя_пакета>

Собрать пакет с исполняемым модулем ядра, выполнив команду:

m-a build simple

где simple — название собираемого модуля. Пакет с исполняемым модулем ядра будет располагаться в каталоге /usr/src/.

Пример сборки доступен на портале.