Руководство по сборке и обновлению пакетов#
Важно
Документация дорабатывается по мере развития продуктов Группы Астра и по пожеланиям пользователей.
Ваши пожелания и замечания направляйте на почту 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/.
Пример сборки доступен на портале.