Создание пакета с драйвером для различных



Pdf просмотр
Дата09.11.2016
Размер0.57 Mb.
Просмотров237
Скачиваний0

Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Петрозаводский государственный университет»
Кафедра информационно-измерительных систем и физической электроники

СОЗДАНИЕ ПАКЕТА С ДРАЙВЕРОМ ДЛЯ РАЗЛИЧНЫХ
ДИСТРИБУТИВОВ LINUX
ВЫПУСКНАЯ РАБОТА на квалификацию бакалавра по направлению подготовки
09.03.01 “Информатика и вычислительная техника (Автоматизированные системы обработки информации и управления)”
Автор работы: студент группы 21412
_____________
Д. В. Андреев
«____» ____________ 2016 г.
Научный руководитель: инженер, аспирант,
_____________
А. А. Пикалев
«____» ____________ 2016 г.
Петрозаводск 2016

2
Реферат
Число страниц: 45
Число рисунков: 0
Число таблиц: 1
Число ссылок на литературу: 8
Число приложений: 0

Ключевые слова:
Archlinux
Debian
Linux
Драйвер
Модули ядра
Пакетирование ПО
Цель работы: Создание пакета с драйвером PCI платы для различных дистрибутивов Linux
Задачи работы:
1.
Изучение принципов пакетирования для ОС Debian, Arch Linux
2.
Создание набора пакетов с драйвером для ОС Debian
3.
Создание набора пакетов с драйвером для ОС Arch Linux
4.
Сравнительный анализ процесса пакетирования и полученных результатов
Результат работы:
1.
Рассмотрены принципы создания пакетов на основе руководств и готовых пакетов дистрибутивов.
2.
Создана тестовая программа и собраны для неё пакеты для Debian и Archlinux.
3.
Разобраны основные элементы исходного кода для PCI платы
4.
Для Debian и Archlinux собран необходимый набор пакетов для драйвера PCI платы, включающий в себя пакеты для исходных кодов, модулей ядра, библиотек, документации и разработки.
5.
Проведен сравнительный анализ процесса пакетирования и полученных результатов для различных дистрибутивов Linux, выявлены недостатки и преимущества.

3
СОДЕРЖАНИЕ
Введение
4
Глава 1. Обзор вспомогательных статей и руководств
7
Глава 2. Обзор основных способов установки ПО
8
Глава 3. Теоретическая часть
10
3.1 Операционная система Debian.
10
3.1.1 Управление пакетам и репозитории.
11 3.1.2 Основы пакетирования
15 3.1.3 Дополнения для создания необходимых пакетов.
21
3.2 Операционная система Arch Linux
24
3.2.1 Управление пакетам и репозитории.
25 3.2.2 Основы пакетирования.
26 3.2.3 Дополнения для создания необходимых пакетов
29
Глава 4. Практическая часть
30
4.1 Создание пакетов Debian
30
4.1.1 Создание пакета для своей программы
30 4.1.2 Создание пакетов для драйвера PCI платы.
34 4.1.3 Дополнения
36 4.1.4 Результат
39
4.2 Создание пакетов Arch Linux
40
4.2.1 Создание пакетов для драйвера PCI платы.
40 4.2.2 Результат
42
Заключение
43
Список использованных источников
45

4
Введение
Программное обеспечение в Linux распространяется с помощью пакетов, либо исходных кодов. Пакет обычно содержит полный комплект файлов, необходимых для реализации определённого набора команд или возможностей. Основными наглядными преимуществами установки программ с помощью системы пакетов являются:

Автоматическая установка «зависимостей». Например, когда для работы некоторой программы требуются сторонние библиотеки

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

Деление исходного кода на пакеты по содержанию. Например, если пользователю захотелось прочитать документацию, то достаточно установить «…–doc» пакет

Обновление программ также выполняется с помощью одной команды, либо автоматически с обновлением всех пакетов в системе
Установщики программ в ОС Windows в некоторой мере уступают по вышеперечисленным параметрам. Кроме того:

их исходный код (как и код самой программы) чаще всего скрыт от пользователя и не может быть изменён;

5

нет централизованного хранилища необходимого для работы свободного программного обеспечения, поддерживаемого производителем ОС;

программы удаления зачастую оставляют глобальные пометки
(например, для ограничения срока работы), а иногда — и бинарные файлы (например, библиотеки)

6
Постановка задачи

В качестве объекта пакетирования был использован драйвер платы PCI-
1202. Производители не создали для него пакет, а лишь предоставили исходные коды(URL сервера с драйвером
- http://ftp.icpdas.com/pub/cd/iocard/pci/ napdos/linux/). Которые включали в себя драйвер, библиотеки и документацию. Основной задачей стало создать пакеты для всего вышеперечисленного для различных дистрибутивов Linux.
Для ознакомления и базового понимания принципов пакетирования для различных дистрибутивов необходимо создать пакет со своей программой на основе руководств Debian[1] и Arch Linux[8].

7
Глава 1. Обзор вспомогательных статей и руководств
Большую часть информации, необходимой при выполнении квалификационной работы связанной с созданием Debian пакетов, я почерпнул из
Руководства начинающего разработчика
Debian[4], размещенного на официальном сайте Debian. Это руководство довольно подробно описывает процесс создание пакета Debian, предназначение тех или иных файлов или функций.
Кроме руководства с сайта Debian, было использовано руководство “Как собрать бинарный deb пакет: подробное HowTo”, оформленное в виде статьи на сайте Habrahabr.ru[6]. Автор этой статьи поделился своими знаниями и опытом в создании пакетов, попутно описывая процесс создания пакета и объясняя назначение выполняемых команд и создаваемых файлов.
При пакетировании для Arch Linux мне понадобилось лишь Arch wiki[8], состоящее из набора страниц по определенной тематике, например, по стандартам пакетирования или руководству по установке. Оно помогло мне как с установкой и настройкой системы, так и с созданием необходимых пакетов. Информация в нем изложена предельно понятно и просто, снабжена полезными ссылками и примерами.
Статья “Работаем с модулями ядра в Linux” с сайта habrahabr.ru помогла разобраться использованием модулей ядра[7]. В этой статье автор кратко разъяснил базовые знания о том, как работает и из чего состоит ядро в Linux, описал некоторые команды, необходимые для работы с модулями ядра.

8
Глава 2. Обзор основных способов установки ПО
Как было сказано ранее, для разных операционных систем существуют различные методы установки, удаления и обновления программ. Большинство программ для Linux распространяются в виде пакетов, которые в свою очередь различаются по формату, структуре и управляющим ими пакетному менеджеру в зависимости от дистрибутива Linux. В данной работе будут рассмотрен процесс пакетирования драйвера для дистрибутивов Debian и Arch
Linux. Они являются одними из популярных в нынешнее время. Такие дистрибутивы как Ubuntu и Linux Mint также используют Debian пакеты.
Помимо Arch и Debian пакетов существует еще несколько пакетных систем. Кратко рассмотрим для наглядности принцип работы с RPM пакетами, используемыми таким дистрибутивом как Fedora.
Для создания RPM пакета необходимо создать текстовый файл с названием вашей программы и расширением “spec” и указать в определенном формате название пакета, версию, правила сборки и т.п. При корректном заполнении всех обязательных полей в .spec файле пакет создается командой rpmbuild. Это довольно краткое описание процесса пакетирования, о Debian и Arch пакетах будет описано более подробно.
Для управления пакетом можно выполнить следующие базовые команды:

Установка пакета: rpm –i имя_пакета

Удаление пакета: rpm –e имя_пакета

Обновление пакета: rpm –U имя_пакета

9
До недавнего времени ОС Windows была лишена пакетного менеджера, и пользователям приходилось пользоваться различными установщиками, о недостатках которых сказано выше. Однако разработчики Windows 10 разрешили эту проблему добавлением пакетного менеджера Chocolatey
Основные команд для управления пакетами:

Установка пакета: chocolatey install name

Удаление пакета: chocolatey unistall name
Для создания пакета необходимо создать файл описания в формате xml, в котором должны быть элементы имени, версии, авторов, описания и т.д.
Следующим шагом понадобится написать скрипт для загрузки и установки программы. После этого для сборки пакета возможно воспользоваться командой nuget pack. В результате должен получиться локальный пакет, который уже можно установить или загрузить на сайт.
Подведя итог можно сказать, что пакетная система Windows еще уступает системе пакетов в Linux, хотя бы потому, что chocolatey не проверяет и не устанавливает необходимые зависимости, а команда chocolatey unistall name оставляет после себя различные файлы, например те, что установлены в
Progam Files.

10
Глава 3. Теоретическая часть
3.1 Операционная система Debian.

Проект Debian — это ассоциация людей, общим делом которых является создание свободной операционной системы. Созданная ими операционная система называется Debian. Создание Debian было начато в августе 1993 года Яном Мёрдоком. Он руководствовался желанием создать дистрибутив, процесс рождения которого будет, с одной стороны, открытым и свободным в духе GNU/Linux, и одновременно исключительно тщательным и добросовестным. Сначала над проектом работала небольшая сплочённая группа хакеров мира свободного ПО, которая постепенно разрасталась, став большим организованным сообществом разработчиков и пользователей.[1]

Разумеется, в первую очередь, люди хотят иметь прикладное программное обеспечение, т.е. программы, которые помогают им делать то, что им хочется: от редактирования документов до управления бизнесом, от игр до написания другого программного обеспечения. Debian содержит более
43000 пакетов (скомпилированного заранее программного обеспечения в удобном для установки на вашу машину формате), менеджер пакетов (APT), а также другие утилиты, благодаря которым можно управлять тысячами пакетов на тысячах компьютеров так же просто, как установить одно единственное приложение.[1]
Для разрешения использования другим людям своего программного обеспечения в Debian наиболее часто используется Генеральная общественная лицензия (GNU General Public License) или GPL(URL сайт с официальным текстом лицензии https://www.gnu.org/licenses/gpl.txt).
Некоторые из особенностей этой лицензии в общих чертах:

11

Вы можете устанавливать программное обеспечение на столько машин, сколько хотите.

В один и тот же момент времени это программное обеспечение может использовать любое количество людей.

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

Нет никаких ограничений на изменение данного программного обеспечения (если вы сохраните в неизменном виде некоторые замечания).[2]
3.1.1 Управление пакетам и репозитории.
В Debian для управления пакетами имеется множество средств, от программ с графическими или текстовыми интерфейсами, до низкоуровневых утилит установки пакетов.
Основная программа управления пакетами dpkg. Она может вызываться со многими параметрами. Наиболее часто используемые:

Показать управляющий файл (и другую информацию) для указанного пакета: dpkg --info foo_VVV-RRR.deb

Установить пакет на жёсткий диск (т. е. распаковать и настроить): dpkg -
-install foo_VVV-RRR.deb

Удалить пакет (но не его файлы настроек): dpkg --remove foo

12

Удалить пакет (вместе с файлами настроек): dpkg --purge foo

Вывести состояние установки пакетов, содержащих в имени строку (или регулярное выражение) «foo*»: dpkg --list 'foo*'
Команда apt-get - это мощный консольный инструмент, который работает с
Улучшенным инструментарием пакетов (APT), выполняющий такие функции, как установка новых программных пакетов, обновление имеющихся пакетов, обновления индекса списка пакетов и даже обновление всей системы.

Установить пакет на жёсткий диск (т. е. распаковать и настроить): apt- get install foo

Удалить пакет (но не его файлы настроек): apt-get remove foo

Удалить пакет (и его файлы настроек): apt-get --purge remove foo

Обновление пакетов: apt-get upgrade
Пакеты по умолчанию устанавливаются из репозиториев. Репозитории – это специальные сервера-хранилища таких файлов. Их также можно назвать
«Источниками приложений». Пользовательские компьютеры подключаются к репозиториям по сети или через интернет и при помощи специальных утилит
(таких как Synaptic) позволяют Вам увидеть, какие пакеты у Вас установлены, какие доступны для установки. Большинство утилит поддерживают простой поиск по ключевым словам и способны разбивать группы пакетов по категориям.

13
Использование связки репозиторий-утилита позволяет использовать простой, централизованный метод установки/удаления программ, а также предоставляет удобный способ выкладывания обновлений.
Список репозиториев из которых могут быть скачаны пакеты содержится в файле /etc/apt/sources.list и имеет следующий формат deb http://site.example.com/debian distribution component1 component2 component3 deb-src http://site.example.com/debian distribution component1 component2 component3 deb http://ftp.de.debian.org/debian stable main contrib non-free
Тип архива
Первое слово в каждой строке, deb или deb-src, указывает тип архива. Deb указывает, что архив содержит бинарные пакеты (deb), пре- компилированные пакеты для нормального использования. Deb-src указывает, что это архив пакетов с исходным кодом, который содержит оригинальные исходные коды программ плюс контрольный файл Debian (.dsc) и diff.gz содержащий изменения и необходимый для пакетирования программы.
URL Репозитория
Следующая запись в строке это адрес (URL) репозитория с которого вы хотите скачивать пакеты.

Дистрибутив
'distribution' может быть либо кодовое имя / псевдоним релиза
(Squeeze, Wheezy, Jessie, sid), либо класс релиза
(stable, oldstable, testing, unstable).


14
Компонент
main состоит из пакетов, удовлетворяющих DFSG(Критерии Debian по определению Свободного ПО), которым не требуется другое ПО из других зон. Эти пакеты считаются частью дистрибуции Debian contrib пакеты содержат DFSG-удовлитворяющее ПО, но у них есть зависимости из зоны non-free (возможно упакованы в non-free). non-free содержит ПО, которое не соответствует DFSG.[3]

15
3.1.2 Основы пакетирования
Допустим, Вы написали полезную программу и хотите поделиться ей с сообществом, то есть создать для нее пакет и добавить его в репозиторий.
Первым шагом к созданию пакета необходимо подготовить каталог(дерево каталогов) с программой, то есть очистить его от результатов компиляции на вашей системе, например, объектных файлов. Это необходимо сделать, так как для пакета с исходным кодом понадобится оригинальный архив с
«исходниками», а объектные файлы, созданные на вашей системе там ни к чему.
Далее из корневого каталога программы возможно выполнить команду dh_make –createorig, которая копирует шаблоны всех файлов, необходимых для постройки deb-пакета из исходного кода программы. Эти шаблоны могут включать информацию, которую предоставил пользователь, и краткую информацию о том, как строится программа из исходного кода. После запуска dh_make, майнтейнеру всё равно предстоит отредактировать большинство файлов шаблонов для того, чтобы построить deb-пакет. Ключ –
createorig означает, что необходимо создать архив с «исходниками» программы. После запуска вам будет предложено указать тип создаваемого пакета s/m/l/k/b, означающие соответственно одиночный бинарный, множественный бинарный, библиотеку, модули ядра или CDBS(это абстрактная система сборки программ, основанная на использовании make- файлов с заранее предписанными правилами)
Кроме архива с именем program_1.0.orig.tar.gz( до знака “_” идет название вашей программы, а после ее версия) dh_make создаст каталог debian, в котором и будет находиться множество шаблонных файлов, которые

16 необходимо отредактировать для корректной настройки и сборки пакета.
Наиболее важными являются:
Файл control. Этот файл содержит информацию, которая используется программами dpkg, dselect, apt-get, apt-cache, aptitude и некоторыми другими инструментами для работы c пакетами.
Пример control файла созданного dh_make’ом.
1 Source: program
2 Section: unknown
3 Priority: extra
4 Maintainer: name
5 Build-Depends: debhelper (>=9)
6 Standards-Version: 3.9.4 7 Homepage:
8 9 Package: program
10 Architecture: any
11 Depends: ${shlibs:Depends}, ${misc:Depends}
12 Description:
13
В строке 1 содержится название пакета с исходным кодом.
В строке 2 содержится название раздела в дистрибутиве, к которому относится пакет с исходным кодом.
В строке 3 указывается насколько важен данный пакет(Приоритет extra, обычно, назначается новым пакетам, которые конфликтуют с другими пакетами, имеющими приоритета не extra.)
В строке 4 указано имя и адрес электронной почты сопровождающего.
В строке 5 содержится список пакетов, необходимых для сборки вашего пакета.
В строке 6 указывается версия документа руководства по политике Debian, стандартам которого следует данный пакет.
В строке 7 можно указать URL домашней страницы программы.
В строке 9 содержится имя двоичного пакета.

17
В строке 10 перечислены архитектуры двоичного пакета, для которых он может быть скомпилирован.
В строке 11 показана одна из мощнейших сторон пакетной системы Debian.
Пакеты могут быть связаны друг с другом различными способами. Кроме поля Depends за отношения между пакетами отвечают следующие поля:
Recommends – не обязательные, но обычно использующиеся с вашим пакетом
Suggests – пакеты, которые могут дополнить вашу программу
Pre-Depends – более важные пакеты, чем те, что указаны в Depends. Пакет не установится, если эти зависимости не установлены, либо некорректно настроены
Breaks – после установка вашего пакета работа, указанных здесь пакетов будет нарушена
Provides – поле для указания виртуального имени. Они используются, когда существует несколько программ, выполняющих схожие функции.
Replaces – пакеты, файлы (или пакет целиком) которых будут заменены файлами из вашего пакета.
В строке 12 содержится краткое описание пакета.
В строке 13 указывается длинное описание.[4]
Файл rules. Этот файл описывает правила, которые выполняются программой dpkg-buildpackage для создания пакета. Файл rules, как и любой Makefile, состоит из нескольких правил, каждое из которых описывает цель и способ её достижения. Новое правило начинается с объявления цели в

18 первой колонке. Следующие за ним строки начинаются с кода TAB (ASCII 9); в них описывается команды достижения цели. Например, цель build служит для сборки исходного кода в скомпилированные программы и отформатированные документы в дереве сборки (требуемая).

При запуске debian/rules build выполняется команда dh build, которая запускает другие: dh_testdir dh_auto_configure dh_auto_build dh_auto_test
Некоторые из них вызывают команды из Makefile’a программы, например, команда dh_auto_build, обычно, выполняет следующее для первой цели в Makefile (если он существует): make.[4]
При создании нескольких бинарных пакетов для разделения файлов по пакетам используются name.install файлы, где name – имя пакета. Синтаксис содержания этих файлов прост: сначала указывается файл (набор файлов) и через пробел путь, куда его (их) необходимо установить. debhelper — это коллекция небольших программ, которые могут быть использованы в файле debian/rules. Изначально она была написана Джо
Хессом для помощи майнтейнерам программ Debian писать структурно более простые debian/rules файлы.
Есть много задач, которые являются часто выполняемыми в debian/rules при сборке разных пакетов. Вместо того, чтобы копировать код из файла в файл, debhelper позволяет майнтейнеру упростить задачу, позволяя переиспользовать готовые стабильные и удобные решения для многих

19 подзадач. На сегодняшний день debhelper содержит более 60 небольших программ.[5]
Файл changelog. Это обязательный файл, его специальный формат используется программой dpkg и другими для получения информации о номере версии, редакции и срочности пакета. Также является местом для хранения изменений, которые вы сделали.[4]
Файл copyright. Этот файл содержит информацию об авторских правах и лицензионное соглашение исходной программы. В этом файле вы должны указать отсутствующую информацию, например, откуда был получен пакет, действующее уведомление об авторском праве и лицензию. Список распространённых лицензий на свободное ПО: GNU GPL-1, GNU GPL-2, GNU
GPL-3, LGPL-2, LGPL-2.1, LGPL-3, GNU FDL-1.2, GNU FDL-1.3, Apache-2.0 или Artistic. Их тексты можно найти в соответствующих файлах в каталоге /usr/share/common-licenses/, который есть в каждой системе Debian.[4]

После редактирования этих обязательных файлов возможно вызвать команду dpkg-buildpackage для создания пакета.
Программа quilt предлагает простой способ записи изменений, произведённых в исходном коде для пакетирования Debian.
Для добавления нового патча нужно указать quilt создать новый патч, сообщить ему, какие файлы этот патч должен изменить, отредактировать файлы, а затем обновить патч:
$ quilt new ubuntu_02_program_description.diff
Patch ubuntu_02_program_description.diff is now on top
$ quilt add src/main.cpp
File src/main.cpp added to patch kubuntu_02_program_description.diff

20
$ sed -i "s,Webcam picture retriever,Webcam snapshot program," src/main.cpp
$ quilt refresh
Refreshed patch kubuntu_02_program_description.diff
Утилита lintian проверяет наличие распространенных ошибок. Пакет задается 3мя способами: по имени файла, имени пакета, файлом .changes.
После ее использования в терминал будут выведены найденные ошибки, предупреждения и замечания. С ключом –i будет выведена подробная информация по каждой ошибке.

21
3.1.3 Дополнения для создания необходимых пакетов.
Удобным дополнением к бинарному пакету может стать пакет с отладочной информацией. Эта информация позволяет использовать
«символьные» (отладочные) данные о двоичном файле, такие как имена переменных и функций из исходного кода. С помощью отладочных символов становится проще найти ошибки в исходном коде. В Unix-системах с отладочными символами работает GDB(GNU Debugger) – отладчик проекта
GNU, позволяющий производить отладку многих языков программирования, включая Си, С++, Pascal и т.д. Однако пользователю далеко не всегда нужна отладочная информация, которая включается в бинарный файл и занимает до нескольких мегабайт, поэтому удобнее перенести отладочную информацию в пакет с постфиксом –dbg.
Существует возможность встраивания скриптов в deb пакеты. Скрипт
(script – англ. «сценарий») – компьютерная программа, представляющая собой последовательность инструкций для работы некоторого приложения. Скрипты позволяют управлять установкой, переустановкой и удалением пакета, выполняя действия, которые нельзя сделать простым копированием файлов в правильные места. Это может быть скачивание дополнительных файлов (как это делает flash-installer), изменение существующих, а также — вывод интерактивных (GUI или ncurses) диалогов, позволяющих пользователю сконфигурировать пакет под себя: например, mysql спрашивает какой установить пароль для root.
Все скрипты выполняются от пользователя root. Также они получают аргументы (которые обрабатывать не обязательно), конкретизирующие на каком именно этапе находится установка.[6]
DEBIAN/(preinst|postinst|prerm|postrm): скрипты установки
Всего можно создать до четырёх скриптов в одном пакете(см. таблицу 1)

22
Таблица 1
Назначение скриптов
Скрипт
Назначение
DEBIAN/preinst
Выполняется перед установкой пакета: он может подготовить что- либо для успешной установки
DEBIAN/postinst
Выполняется сразу после установки пакета: он настраивает установленный пакет так, чтоб он был готов к работе. Здесь также выполняется интерактивная конфигурация пакета: это делается при помощи dh_input и файла DEBIAN/templates
DEBIAN/prerm
Выполняется непосредственно перед удалением пакета: обычно этот скрипт подчищает установочные пути пакета.
DEBIAN/postrm Выполняется сразу после удаления пакета: вычищает остатки
Для сохранения данных, приобретенных в результате диалога с пользователем, используется файл templates. Он состоит из блоков, каждый из которых обозначает ресурсы для каждого диалогового окна.
Пример шаблона:
Template: package/hello
Type: string
Description: Hello, user!
Default: hello
Данный шаблон просто выводит текст и ждет ответа от пользователя.
Значение, введённое в ответ, будет сохранено в базу данных debconf. Это может помочь, например, когда после удаления программы через некоторое время она опять вам понадобится. В этом случае при повторной установке не будут задаваться вопросы и предложения ввести, например, имя и почту, так как ответы уже имеются в базе данных. Для удаления этих данных используется apt-get purge имя_пакета.

23
Ядро — это та часть операционной системы, работа которой полностью скрыта от пользователя, т. к. пользователь с ним не работает напрямую: пользователь работает с программами. Но, тем не менее, без ядра невозможна работа ни одной программы, т.е. они без ядра бесполезны.
В Linux ядро монолитное, т.е. все его драйвера и подсистемы работают в своем адресном пространстве, отделенном от пользовательского. Сам термин
«монолит» говорит о том, что в ядре сконцентрировано всё, и, по логике, ничего не может в него добавляться или удаляться. В случае с ядром Linux — это правда лишь отчасти: ядро Linux может работать в таком режиме, однако, в подавляющем большинстве сборок возможна модификация части кода ядра без его перекомпиляции, и даже без его выгрузки. Это достигается путем загрузки и выгрузки некоторых частей ядра, которые называются модулями.[7]
Естественно, что ядро не включает в себя драйверов для всевозможных PCI плат. Поэтому драйвер необходимо перекомпилировать вручную в каталоге с заголовочными файлами ядра. Для этого нужны заголовочные файлы ядра.
Дело в том, что модули ядра всегда собираются вместе с ядром, используя его заголовочные файлы, т.к. любое отклонение и несоответствие версий модуля и загруженного ядра ведет к невозможности загрузить этот модуль в ядро.
После компиляции модуля ядра для драйвера будет получено несколько файлов с расширением «ko». Их можно загрузить с помощью команды insmod.
Для создания пакета с модулями ядра была использована программа module- assistant(m-a). m-a помогает облегчить процесс создания модулей ядра из исходного кода. На вход m-a подается пакет с исходным кодом, содержащий control.modules и rules.modules файлы, их строение аналогично описанным ранее control и rules файлам. После выполнения команды m-a build «пакет с исходным кодом» создастся бинарный .deb пакет с модулями ядра.

24
3.2 Операционная система Arch Linux
Arch Linux - это независимо разрабатываемый i686/x86-64 дистрибутив
GNU/Linux общего назначения, достаточно гибкий для выполнения любой роли. Процесс разработки фокусируется на простоте, минимализме и элегантности кода. Arch устанавливается в виде минимальной базовой системы, настраивается пользователем под собственные нужды путём построения уникальной среды с установкой только необходимых компонентов. Инструменты настройки с графическим интерфейсом официально не предоставляются, и большая часть настроек системы выполняется из консоли путём редактирования простых текстовых файлов.
Основанный на модели плавающих релизов, дистрибутив Arch стремится оставаться предельно современным и предлагает последние стабильные версии большинства пакетов.[8]
Создателем Arch Linux является канадец Джадд Винет. Дата выхода первого релиза – 11 марта 2002 года. В текущий момент продолжает руководить проектом Аарон Грифин.
Arch Linux является легковесным, простым и гибким. Это достигается с помощью того, что после установки пользователь получает минимальную среду (консоль). Отличительной особенностью от таких дистрибутивов как, например, Ubuntu или Debian, является то, что пользователь решает сам, какой должна быть его система на основе Arch, без каких-либо шаблонов выбранных за него.
Arch Linux использует систему плавающих релизов, позволяющую устанавливать последние версии ПО. С помощью такой системы появляется возможность одноразовой установки Arch и непрерывных обновлений, без переустановки всей ОС.

25
3.2.1 Управление пакетам и репозитории.
Для управления пакетами в Arch Linux используется менеджер пакетов pacman. Он разработан на языке Си и является простым и довольно быстрым.
Существует возможность синхронизировать пакеты одной командой или даже пересобрать всю ОС с помощью вызова одной команды.
Arch, помимо официальных репозиториев содержащих несколько тысяч пакетов, также предлагает для использования пользовательский репозиторий
AUR. Он содержит созданные пользователями скрипты PKGBUILD, с их помощью любой желающий может собрать установочные пакеты программой makepkg. Помимо этого пользователи имеют возможность создавать собственные репозитории.
Arch не использует специального формата для пакетов, например .deb в
Debian. Вместо этого используются ".pkg.tar.gz" и ".pkg.tar.xz", такие архивы могут быть распакованы, изучены и изменены при помощи простого архиватора tar.
Некоторые примеры использования pacman с различными параметрами:

Установка пакета: pacman –s имя_пакета

Удаление пакета: pacman –R имя_пакета

Обновление пакета: pacman –Syu

Установка локального пакета: pacman –U путь/имя-версия.tar.xz

Узнать к какому пакету принадлежит файл: pacman –Qo путь/имя_файла

Скачать, но не устанавливать пакет: pacman –Sw имя_пакета

26
3.2.2 Основы пакетирования.
Для создания Arch пакета нужно отредактировать лишь один файл -
PKGBUILD. Он содержит всю необходимую информацию о пакете. В директории пакетного менеджера pacman /usr/share/pacman существует прототип этого файла. И весь процесс пакетирования заключается в его редактировании под собственное ПО.
Содержимое PKGBUILD.proto:
# Maintainer: Your Name pkgname=NAME pkgver=VERSION pkgrel=1 epoch= pkgdesc="" arch=() url="" license=('GPL') groups=() depends=() makedepends=() checkdepends=() optdepends=() provides=() conflicts=() replaces=() backup=() options=() install= changelog= source=("$pkgname-$pkgver.tar.gz"
"$pkgname-$pkgver.patch") noextract=() md5sums=() validpgpkeys=() prepare() { cd "$pkgname-$pkgver" patch -p1 -i "$srcdir/$pkgname-$pkgver.patch"
} build() { cd "$pkgname-$pkgver"
./configure --prefix=/usr make
}

27 check() { cd "$pkgname-$pkgver" make -k check
} package() { cd "$pkgname-$pkgver" make DESTDIR="$pkgdir/" install
}
Как заметно из его содержания, он состоит из переменных и функций.
Разберемся в значении основных из них: pkgname: Название пакета pkgver: Версия пакета, допустимы буквы, цифры, знаки препинания. pkgrel: Переменная, значение которой нужно увеличивать на один, при каждой пересборке, чтобы различать различные версии сборки при одной версии пакета. pkgdesc: Краткое описание пакета arch: Список архитектур, необходим для корректной сборки пакета из
PKGBUILD url: Ссылка на сайт программы license: Тип лицензии depends: Список пакетов, необходимых для использования вашего пакета makedepends: Список пакетов, необходимых для сборки вашего пакета

28 provides: Список пакетов, потребность в которых исчезает после установки вашего пакета conflicts: Список пакетов, которые могут вызывать проблемы при использовании вашего пакета replaces: Список пакетов, которые замещает собой ваш пакет source: Ссылка для скачивания исходного кода для сборки пакета md5sums: Контрольные суммы для файлов из source
Функция build() используется для автоматической сборки программ, ее содержимое должно соответствовать команды необходимые для компиляции программы. Эта функция использует команды оболочки и bash.
Функция package() – основная, ее задача установить собранные файлы в pkg директорию. Из этой директории makepkg возьмет файлы и создаст пакет.
Таким образом, она имитирует корень файловой системы для последующей установки программы. Другими словами, эта функция отвечает за содержание пакета, и если из одного PKGBUILD создается несколько бинарных пакетов, то необходимо создать несколько package_name() функций, где name – название пакета.
Если в результате редактирования PKGBUILD файла не было допущено ошибок и makepkg отработал корректно, то будет создан $pkgname-
$pkgver.pkg.tar.gz файл. Это и есть пакет, для его установки необходимо выполнить команду pacman –U имя_пакета.
Для проверки собранного пакета на ошибки и предупреждения существует программа namcap. Использование: namcap имя_пакета.

29
3.2.3 Дополнения для создания необходимых пакетов
При создании пакета для модулей ядра необходимо выполнить несколько дополнительных действий:
Во-первых, необходимо указать для переменной makedepends значение ‘linux- headers, что означает то, что для компиляции модулей ядра понадобятся заголовочные файлы ядра.
Во-вторых, для автоматической загрузки и выгрузки скомпилированных модулей необходимо вызывать post_install и post_remove скрипты соответственно. Для этого полагается создать имя_пакета.install файл и описать в нем post_install и post_remove функции, а также в PKGBUILD присвоить переменной install из функции package() значение
‘имя_пакета.install’.
Для разделения на несколько пакетов необходимо перечислить все пакеты в переменной pkgname и добавить package() функции с постфиксами в виде названия пакета, например “package_myprog-doc”, а также указать для них необходимые переменные.

30
Глава 4. Практическая часть
4.1 Создание пакетов Debian

4.1.1 Создание пакета для своей программы
В качестве материала к созданию первого пакета была написана простая программа на языке C++. Программа maketest состояла из двух файлов с реализацией функций, основного файла c кодом программы, заголовочного файла и Makefile.
Создание архива с исходным кодом: dh_make –createorig
После выполнения dh_make создался каталог debian, включающий в себя набор шаблонных файлов(control, rules, copyright и т.д.) и архив
«maketest_1.0.orig.tar.gz», содержащий исходные тексты программы: main.cpp, hello.cpp, factorial.cpp, functions.h, Makefile.
Далее были отредактированы основные файлы, созданные dh_make’ом.
После выполненных изменений их содержимое стало следующим control:
Source: maketest
Section: misc
Priority: optional
Maintainer: Andreev D. V.
Build-Depends: debhelper (>= 9.0.0),libstdc++-4.8-dev
Standards-Version: 3.9.5
Package: maketest
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Pre-Depends: debconf
Description:


31
Package: maketest-dbg
Section: debug
Priority: extra
Architecture: any
Depends: maketest (= 1.0), ${misc:Depends}
Description:

Секция для программы была выбрана «misc»(разное). Так как для процесса дебианизации использовался инструмент debhelper, в зависимостях сборки указана его текущая версия, также в программе использовались функции из библиотеки libstdc++.
Для пакета с исходным кодом определены зависимости «${shlibs:Depends},
${misc:Depends}». Утилита dh_shlibdeps вычисляет зависимости двоичного пакета от общих библиотек. Она генерирует список исполняемых файлов ELF и общих библиотек, которые находит для каждого двоичного пакета. Этот список подставляется вместо ${shlibs:Depends}. Некоторые команды пакета debhelper могут добавлять зависимости к генерируемому пакету. Каждая команда генерирует список необходимых пакетов для каждого двоичного пакета. Этот список подставляется вместо ${misc:Depends}.[6]
Для пакета с отладочными символами указана секция «debug»(отладка), а в зависимости добавлен бинарный пакет. rules:
#!/usr/bin/make -f
# -*- makefile -*-
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
%: dh $@
.PHONY: override_dh_strip override_dh_strip: dh_strip --dbg-package=maketest-dbg

32
В этом файле были добавлены последние три строчки для отделения отладочных символов в отдельный пакет
В файле copyright я указал лицензию(GPL-2+) и свои контактные данные:
Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=135
Name: maketest
Maintainer: Andreev D. V.
Copyright: 2015 Andreev D. V.
License: GPL-2+
Files: debian/*
Copyright: 2015 f4nk
License: GPL-2+
This package is free software; you can redistribute it and/or modify
В файл maketest.preinst был добавлен скрипт, который запрашивает у пользователя подтверждение установки, maketest.preinst:
#!/bin/sh set -e
. /usr/share/debconf/confmodule
#DEBHELPER# db_get maketest/ask if [ "$RET" = false ]; then exit 1 fi который в свою очередь использует файл шаблонов templates, содержащий вопрос и его тип. templates:
Template: maketest/ask
Type: boolean
Description: Install it?
Были добавлены иконка, тип и имя для лучшего отображения исполняемого файла из графической оболочки.

33

С помощью команды dpkg-buildpackage были собраны бинарные пакеты для своей программы, а с помощью lintian были исправлены ошибки и недочеты.

34
4.1.2 Создание пакетов для драйвера PCI платы.
Разработчики платы PCI-1202 выложили в открытый доступ архив, содержащий исходные коды драйвера и библиотеки, необходимые для использования платы под ОС Linux. Также архив содержал документацию и примеры. На основе файлов из этого архива были созданы пакеты.
Драйвер, написанный на языке программирования Си, помимо .с файлов содержал заголовочные файлы и Makefile. При удачной компиляции создавались .ko файлы(модули ядра). Пакет, содержащий исходные коды драйверы получил постфикс “-source”. Исходные коды статической библиотеки, написанной также на Си, вместе с заголовочными файлами для драйвера были размещены в пакет с постфиксом “-dev”. Документация, состоящая из .html и .pdf файлов разместилась в “-doc” пакете.
После выполнения dh_make и редактирования основных файлов их содержимое следующим образом control:
Source: ixpci
Section: kernel
Priority: extra
Maintainer: Andreev D. V.
Build-Depends: debhelper (>= 9.0.0)
Standards-Version: 3.9.5
Package: ixpci-source
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Recommends: module-assistant
Description: ixpci driver source
Source for ixpci driver
Package: ixpci-doc
Section: doc
Architecture: all
Depends: ${misc:Depends}
Description: ixpci docs

35 documentation for ixpci
Package: ixpci-dev
Section: libdevel
Architecture: any
Depends: ixpci (= 1.0), ${misc:Depends}
Description: dev package for ixpci libs and headers for ixpci
Так как результатом сборки драйвера будут модули ядра, секция была выбрана как kernel(ядро). Для создания пакета с исходными кодами модулями ядра я использовал module-assistant. Так как пакет, соддержащий библиотеку, компилируется на конкретной архитектуре, то в значение поля “Architecture” установлено “any”. rules:
#!/usr/bin/make -f
# -*- makefile -*-
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1 name = ixpci
%: dh $@ binary-arch:
# libs make -C lib override_dh_auto_install: dh_install -p$(name)-dev lib/*.a /usr/lib/$(name)
# ixpci-source (for use with module-assistant) dh_installdirs -p$(name)-source usr/src/modules/$(name)/debian dh_install -p$(name)-source driver/Makefile usr/src/modules/$(name)/driver dh_install -p$(name)-source Makefile usr/src/modules/$(name)/ dh_install -p$(name)-source driver/*.c usr/src/modules/$(name)/driver

36 dh_install -p$(name)-source include/*.h usr/src/modules/$(name)/include install -D -m 0755 debian/rules.modules debian/$(name)- source/usr/src/modules/$(name)/debian/rules for file in changelog compat control control.modules.in copyright; do \ install -m 644 debian/$$file debian/$(name)- source/usr/src/modules/$(name)/debian/; \ done cd debian/$(name)-source/usr/src && tar cfj
$(name).tar.bz2 modules && rm -rf modules
В этом файле была добавлена цель binary-arch(зависимо от архитектуры) для сборки библиотеки, указаны необходимые пути установки и добавлены команды, необходимые для использования module-assistant.
Для того чтобы m-a корректно обработал подаваемый на вход -source пакет понадобилось создать архив с исходными файлами и установить его в директорию с модулями ядра. Также в этот архив были скопированы файлы rules.modules и control.modules.in, описанные далее.
4.1.3 Дополнения
Для использования module-assistant, с помощью которого создаются и устанавливаются бинарные пакеты с модулями ядра, было отредактировано еще два файла control.modules.in и rules.modules.in. Формат этих файлов аналогичен ранее использованным control и rules, а содержимое было скопировано с одного пакета для драйвера из репозитория, а далее отредактировано под текущую цель. Такой подход связан с неполнотой документации для module-assistant. control.modules.in:
Source: ixpci
Section: kernel

37
Priority: extra
Maintainer: Andreev D. V.
Build-Depends: debhelper (>= 9)
Standards-Version: 3.9.4
Package: ixpci-modules-_KVERS_
Architecture: all
Depends: linux-image-_KVERS_
Provides: ixpci-modules
Description: ixpci driver kernel modules
This package contains the compiled Linux kernel modules for
_KVERS_
Переменная KVERS здесь означает версию ядра. rules.modules.in:
#!/usr/bin/make -f
# module-assistant stuff
PACKAGE = ixpci-modules
MA_DIR ?= /usr/share/modass
-include $(MA_DIR)/include/generic.make
-include $(MA_DIR)/include/common-rules.make kdist_clean: prep-deb-files dh_clean
$(MAKE) clean KBUILD=$(KSRC) KVERS=$(KVERS) kdist_config: prep-deb-files binary-modules: kdist_config dh_testdir dh_testroot dh_prep
# Build and install the module make -C $(KSRC) M=$(CURDIR)/driver install -D -m 0644 driver/ixpci.ko debian/$(PACKAGE)-
$(KVERS)/lib/modules/$(KVERS)/kernel/drivers/ixpci-1.0/ixpci.ko install -D -m 0644 driver/ixpci822.ko debian/$(PACKAGE)-
$(KVERS)/lib/modules/$(KVERS)/kernel/drivers/ixpci-
1.0/ixpci822.ko install -D -m 0644 driver/ixpci826.ko debian/$(PACKAGE)-
$(KVERS)/lib/modules/$(KVERS)/kernel/drivers/ixpci-
1.0/ixpci826.ko

38 install -D -m 0644 driver/ixpci1002.ko debian/$(PACKAGE)-
$(KVERS)/lib/modules/$(KVERS)/kernel/drivers/ixpci-
1.0/ixpci1002.ko install -D -m 0644 driver/ixpci1202.ko debian/$(PACKAGE)-
$(KVERS)/lib/modules/$(KVERS)/kernel/drivers/ixpci-
1.0/ixpci1202.ko install -D -m 0644 driver/ixpci1602.ko debian/$(PACKAGE)-
$(KVERS)/lib/modules/$(KVERS)/kernel/drivers/ixpci-
1.0/ixpci1602.ko install -D -m 0644 driver/ixpci1800.ko debian/$(PACKAGE)-
$(KVERS)/lib/modules/$(KVERS)/kernel/drivers/ixpci-
1.0/ixpci1800.ko install -D -m 0644 driver/ixpcilanner.ko debian/$(PACKAGE)-
$(KVERS)/lib/modules/$(KVERS)/kernel/drivers/ixpci-
1.0/ixpcilanner.ko install -D -m 0644 driver/ixpcim512.ko debian/$(PACKAGE)-
$(KVERS)/lib/modules/$(KVERS)/kernel/drivers/ixpci-
1.0/ixpcim512.ko install -D -m 0644 driver/ixpcip8r8.ko debian/$(PACKAGE)-
$(KVERS)/lib/modules/$(KVERS)/kernel/drivers/ixpci-
1.0/ixpcip8r8.ko install -D -m 0644 driver/ixpcip16x16.ko debian/$(PACKAGE)-
$(KVERS)/lib/modules/$(KVERS)/kernel/drivers/ixpci-
1.0/ixpcip16x16.ko install -D -m 0644 driver/ixpcitmc12.ko debian/$(PACKAGE)-
$(KVERS)/lib/modules/$(KVERS)/kernel/drivers/ixpci-
1.0/ixpcitmc12.ko dh_installdocs dh_installchangelogs dh_installmodules -n dh_compress dh_fixperms dh_installdeb dh_gencontrol -- -v$(VERSION) dh_md5sums dh_builddeb --destdir=$(DEB_DESTDIR
)
В этом файле выполняется сборка из каталога с исходными кодами ядра необходимых модулей и выполняется их установка. В переменной MA_DIR указан путь к директории, в которой находятся файлы generic.make и common- rules.make. Далее эти два файла подключаются для корректной сборки

39 модулей ядра. Также использован набор debhelper команд, например dh_installmodules –n указывает на то, что нет необходимости в создании postinst и postrm скриптов, так как у создателей драйвера написаны собственные.
Возникли некоторые трудности при использовании m-a. Одна из них заключалась в том, что при попытке собрать модули ядра программа не могла найти заголовочные файлы. Сообщение об ошибке было обнаружено при чтении log файла программы и заключалась в не совсем корректном Makefile для драйвера. Рассмотрим следующую строку из Makefile
EXTRA_CFLAGS += -I$(PWD)/../include -std=gnu99
Переменная PWD в этой команде означает текущий каталог. Такая конструкция будет работать, если пользователь находится в директории с самим Makefile. Чтобы исправить эту ошибку переменная PWD была заменена на src.
Для автоматической загрузки и выгрузки модулей ядра в файлы postinst и postrm были добавлены написанные разработчиками драйвера скрипты.
4.1.4 Результат
После удачного выполнения dpkg-buildpackage создались “-source”,
“-doc”, “-dev” пакеты; “-source” пакет был установлен. Далее была выполнена команда sudo m-a build ixpci-source, в результате которой был собран бинарный пакет с модулями ядра. Для его установки была использована команда sudo m-a install ixpci-source, в результате которой модули ядра для
PCI платы были установлены.

40
4.2 Создание пакетов Arch Linux
4.2.1 Создание пакетов для драйвера PCI платы.
После редактирования PKGBUILD и тестирования получаемого пакета было полученное следующее содержимое файла PKGBUILD:
# Maintainer: Andreev D. V. pkgname=(ixpci ixpci-doc ixpci-source ixpci-dev) pkgver=0.8.12 pkgrel=1 arch=('i686' 'x86_64') url="http://www.icpdas.com/" license=('GPL') makedepends=('linux' 'linux-headers') source=("http://ftp.icpdas.com/pub/cd/iocard/pci/napdos/linux/ixp ci.tar.gz") md5sums=('191dd51dcf7b315c2ba82a68a57e0a9e') build() { cd "$pkgname"
./configure --prefix=/usr cd driver make cd ../lib make
} package_ixpci() { pkgdesc="kernel modules for PCI-1202" arch=('i686' 'x86_64') install=ixpci.install mkdir -p -m755 ${pkgdir}/usr/lib/modules/$(uname - r)/kernel/drivers/${pkgname}/ install -m644 ${srcdir}/${pkgname}/driver/*.ko
${pkgdir}/usr/lib/modules/$(uname -r)/kernel/drivers/${pkgname} cd "$pkgname"
} package_ixpci-doc(){ pkgdesc="docs for ixpci" arch=('any') mkdir -p -m755 ${pkgdir}/usr/share/doc/ixpci/PDF/ mkdir -p -m755 ${pkgdir}/usr/share/doc/ixpci/html/ install -m644 ${srcdir}/ixpci/doc/PDF/*
${pkgdir}/usr/share/doc/ixpci/PDF/

41 install -m644 ${srcdir}/ixpci/doc/html/*
${pkgdir}/usr/share/doc/ixpci/html/
} package_ixpci-source(){ pkgdesc="source code for ixpci" arch=('any') mkdir -p -m755 ${pkgdir}/usr/src/ixpci/driver/ mkdir -p -m755 ${pkgdir}/usr/include/ixpci/ install -m644 ${srcdir}/ixpci/driver/*.c
${pkgdir}/usr/src/ixpci/driver rm ${pkgdir}/usr/src/ixpci/driver/*.mod.c install -m644 ${srcdir}/ixpci/driver/Makefile
${pkgdir}/usr/src/ixpci/driver install -m644 ${srcdir}/ixpci/include/*
${pkgdir}/usr/include/ixpci install -m644 ${srcdir}/ixpci/Makefile
${pkgdir}/usr/src/ixpci
} package_ixpci-dev(){ pkgdesc="headers and lib for ixpci" depends=(ixpci) arch=('i686' 'x86_64') mkdir -p -m755 ${pkgdir}/usr/include/ixpci/ install -m644 ${srcdir}/ixpci/include/*
${pkgdir}/usr/include/ixpci/ install -D -m644 ${srcdir}/ixpci/lib/libpci_64.a
${pkgdir}/usr/lib/ixpci/libpci_64.a
}
В pkgname указаны имена всех создаваемых после вызова makepkg пакетов. Для каждого из них определена своя package() функция, в которой присвоены значения для описания пакета и список архитектур, на которых возможно использовать данный PKGBUILD. В функции build() описан процесс конфигурации и сборки драйвера и библиотеки. В функции package() для модулей ядра для переменной install указано название файла, содержащего скрипты для автоматической загрузки и выгрузки модулей.

42
4.2.2 Результат
Для создания пакетов на основе PKGBUILD файла была использована команда makepkg –f. После её удачного выполнения в директории с
PKGBUILD создались необходимые пакеты, которые были проверены на ошибки с помощью команды namcap, и установлены с помощью команды pacman –U имя_пакета.

43
Заключение
В результате данной работы были освоены принципы пакетирования для
ОС Debian и Arch Linux, на основе полученных знаний были созданы пакеты для драйвера платы PCI-1202. Основные этапы создания пакетов, а также информация, необходимая для понимания их назначения, отображена в работе.
На основе полученных знаний и опыта пакетирования можно провести сравнительный анализ пакетных систем для Debian и Arch:

Результат, то есть сами пакеты, полученные для разных дистрибутивов, отличаются лишь сопутствующей информацией к пакетируемым файлам. В Debian это файл control, содержащий описательную информацию о пакете (название, версия, описание и т.п), и контрольные суммы.
В Arch Linux это файлы PKGINFO – аналог control и MTREE – хэши и временные метки для проверки целостности пакета.

Процесс обучения и пакетирования для Debian мне показался сложнее и запутанней по сравнению с Arch Linux. Это связано с более сложной процедурой создания пакета, которая включает в себя редактирование разных файлов по определенным правилам, изучение работы порядка команд и программ.
В Arch’е же для создания пакета мне понадобилось отредактировать единственный файл. Какого-то преимущества в результате или удобстве создания при пакетировании для Debian выявлено не было, возможно такая детализация процесса пакетирования может помочь при создании более сложных пакетов.

44

Также стоит оценить материалы, призванные обучить процессу создания пакетов. В Debian это довольно подробное руководство, описывающее все файлы, команды и программы. При чтении этого руководства у меня нередко возникали вопросы о необходимости и общем значении тех или иных действий. Возможно, это связано с тем, что я обучался пакетированию как раз для Debian.
В Arch Linux руководство по пакетированию умещено в виде небольшой статьи в вики. Однако информация там изложена весьма понятно и просто. Благодаря этому на создание пакета для драйвера мне понадобилось гораздо меньше времени.

45
Список использованных источников
Интернет издания:
1. Официальный сайт Debian – О Debian.
URL:
https://www.debian.org/intro/about
2. Официальный сайт Debian – Что означает Free.
URL:
https://www.debian.org/intro/free
3. Debian wiki – Apt.
URL: https://wiki.debian.org/ru/SourcesList
4. Официальный сайт Debian – Руководство начинающего разработчика.
URL:
https://www.debian.org/doc/manuals/maint-guide/
5. Debhelper. Материал из Википедии — свободной энциклопедии.
URL:
https://ru.wikipedia.org/wiki/Debhelper
6. Вартанян М. – Как собрать бинарный deb пакет: подробное HowTo.
URL:
https://habrahabr.ru/post/78094/
7. Щербаков Д. – Работаем с модулями ядра в Linux.
URL: https://habrahabr.ru/post/117654/
8. ArchWiki.
URL
: https://wiki.archlinux.org/


Поделитесь с Вашими друзьями:


База данных защищена авторским правом ©nethash.ru 2017
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал