Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:сборка_пакетов [2013/02/04 17:29] |
wiki:сборка_пакетов [2015/12/20 00:57] Страница wiki:создание_deb_пакетов переименована в wiki:сборка_пакетов (в Ubuntu deb, и так понятно, что deb) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Сборка ПО и создание .deb-пакетов из исходников в Debian-системах ====== | + | ====== Сборка пакетов ====== |
<note tip>Эта статья не завершена. Вы можете помочь в ее написании | <note tip>Эта статья не завершена. Вы можете помочь в ее написании | ||
* исправив стилистику статьи | * исправив стилистику статьи | ||
Строка 19: | Строка 19: | ||
- Cобрать нормальный пакет, как это делают мантейнеры. В котором будет корректная версия, зависимости и расположение файлов будет соответствовать политике дистрибутива. Вижу вам всё ещё интересно :-). Это радует. | - Cобрать нормальный пакет, как это делают мантейнеры. В котором будет корректная версия, зависимости и расположение файлов будет соответствовать политике дистрибутива. Вижу вам всё ещё интересно :-). Это радует. | ||
- | ====== Основная часть ====== | + | ====== Классификация случаев сборки ====== |
+ | Возможны следующие случаи сборки пакетов: | ||
+ | |||
+ | * сборка из исходников; | ||
+ | * сборка из бинарных файлов; | ||
+ | |||
+ | исходники или бинарные файлы берутся: | ||
+ | * не из репозитория; | ||
+ | * из репозитория другого дистрибутива; | ||
+ | * из репозитория другого выпуска Ubuntu, из PPA или из Debian; | ||
+ | * из репозитория текущего выпуска Ubuntu; | ||
+ | |||
+ | дебианизация: | ||
+ | * недоступна; | ||
+ | * берётся из репозитория Ubuntu, из PPA или из Debian: | ||
+ | * из другой версии программы; | ||
+ | * из текущей версии программы: | ||
+ | * не из репозитория текущего выпуска Ubuntu; | ||
+ | * из репозитория текущего выпуска Ubuntu; | ||
+ | |||
+ | причина сборки: | ||
+ | * ни в репозитории Ubuntu текущего выпуска, ни в PPA нет нужной версии программы; | ||
+ | * доступная версия программы по каким-либо причинам не устраивает (не устраивает код или данные программы, параметры конфигурации или управляющая информация пакета); | ||
+ | * и то, и другое. | ||
+ | |||
+ | ====== Сборка из исходников ====== | ||
* Дано: некий исходник gcoolprog-0.5.3.tar.bz2. Нужно из него собрать пакет. | * Дано: некий исходник gcoolprog-0.5.3.tar.bz2. Нужно из него собрать пакет. | ||
* Решение: ниже идёт вариант, как я обычно поступаю в таком случае. | * Решение: ниже идёт вариант, как я обычно поступаю в таком случае. | ||
- | - Первым делом смотрю, нет ли deb-пакета той же версии, но допустим под Debian. Если есть делаю так: [[#вариант_3|есть нужная версия пакета в репозитории debian или в будущем релизе Ununtu]] | + | - Первым делом смотрю, нет ли deb-пакета той же версии, но допустим под Debian. Если есть делаю так: [[#Дебианизация_берётся_не_из_репозитория_текущего_выпуска_Ubuntu|есть нужная версия пакета в репозитории debian или в будущем релизе Ununtu]] |
- | - Если нет той же версии, но есть предыдущей. Тут можно сказать как повезёт, если изменения в исходниках не коснулись положения файлов, то скорее всего дебианизация от старого пакета подойдёт, нужно лишь сменить версию. [[#вариант_2|Теперь вариант в репозитории есть пакет предыдущей версии.]] | + | - Если нет той же версии, но есть предыдущей. Тут можно сказать как повезёт, если изменения в исходниках не коснулись положения файлов, то скорее всего дебианизация от старого пакета подойдёт, нужно лишь сменить версию. [[#Дебианизация_берётся_из_другой_версии_программы|Теперь вариант в репозитории есть пакет предыдущей версии.]] |
- | - Ну и самый страшный случай - нигде никаких deb-пакетов нет, только tar.gz и rpm. Ни в коем случае не использовать rpm! Делаем по [[#вариант_1|первому варианту]]. | + | - Ну и самый страшный случай - нигде никаких deb-пакетов нет, только tar.gz и rpm. Ни в коем случае не использовать rpm! Делаем по [[#Дебианизация_недоступна|первому варианту]]. |
===== Что необходимо ===== | ===== Что необходимо ===== | ||
Строка 35: | Строка 60: | ||
Можно так же ''autobook'' - это документация по утилитам ''GNU Autoconf'', ''Automake'', и ''Libtool''. Ну и конечно то, что требуют сами исходные коды для корректной сборки. | Можно так же ''autobook'' - это документация по утилитам ''GNU Autoconf'', ''Automake'', и ''Libtool''. Ну и конечно то, что требуют сами исходные коды для корректной сборки. | ||
- | === Создание ключа шифрования === | + | ==== Создание ключа шифрования ==== |
Этот шаг не обязателен, его можно пропустить. | Этот шаг не обязателен, его можно пропустить. | ||
Строка 62: | Строка 87: | ||
Теперь можно выбрать ключ и в меню по правой кнопке выбрать //Синхронизировать и опубликовать ключи//. | Теперь можно выбрать ключ и в меню по правой кнопке выбрать //Синхронизировать и опубликовать ключи//. | ||
- | ===== Вариант 1: Есть только архив с исходниками ===== | + | ===== Дебианизация недоступна ===== |
Итак, у нас есть только //gcoolprog-0.5.3.tar.gz//. | Итак, у нас есть только //gcoolprog-0.5.3.tar.gz//. | ||
Строка 113: | Строка 138: | ||
<file=bash>dh_install</file> | <file=bash>dh_install</file> | ||
без этого мы получим пустой пакет.\\ | без этого мы получим пустой пакет.\\ | ||
- | + | Иногда **debian/rules** содержит лишь:\\ | |
- | Обычно этих настроек достаточно для сборки пакета с одной программой, которая не содержит разделяемых библиотек, т.е. только бинарник в /usr/bin и данные в /usr/share.\\ | + | <file>%: |
+ | dh $@</file> | ||
+ | Что приемлемо с использованием debhelper.\\ | ||
+ | Этих настроек будет достаточно для сборки пакета с одной программой, которая не содержит разделяемых библиотек, т.е. только бинарник в /usr/bin и данные в /usr/share.\\ | ||
==== Сборка пакета ==== | ==== Сборка пакета ==== | ||
Строка 124: | Строка 152: | ||
gcoolprog_0.5.3-1_i386.deb | gcoolprog_0.5.3-1_i386.deb | ||
gcoolprog_0.5.3.orig.tar.gz</file> | gcoolprog_0.5.3.orig.tar.gz</file> | ||
- | Dот теперь мы можем установить пакет | + | Вот теперь мы можем установить пакет |
<code bash>dpkg -i *.deb</code> | <code bash>dpkg -i *.deb</code> | ||
- | =====Вариант 2: Когда в репозитории есть пакет предыдущей версии===== | + | ===== Дебианизация берётся из репозитория Ubuntu, из PPA или из Debian ===== |
+ | ==== Дебианизация берётся из другой версии программы ==== | ||
В этом случае, очень удобно взять дебианизацию оттуда и поправить для новой версии. | В этом случае, очень удобно взять дебианизацию оттуда и поправить для новой версии. | ||
Строка 171: | Строка 199: | ||
dpkg -i *.deb</code> | dpkg -i *.deb</code> | ||
- | ===== Вариант 3: Есть нужная версия пакета в репозитории debian или в будущем релизе Ubuntu ===== | + | ==== Дебианизация берётся из текущей версии программы ==== |
+ | === Дебианизация берётся не из репозитория текущего выпуска Ubuntu === | ||
Для Debian нужно использовать сайт [[http://packages.debian.org]], для Ubuntu - [[http://packages.ubuntu.com]]. Тогда, например, в Ubuntu ищем пакет **gcoolprog** в репозитории будущего релиза. | Для Debian нужно использовать сайт [[http://packages.debian.org]], для Ubuntu - [[http://packages.ubuntu.com]]. Тогда, например, в Ubuntu ищем пакет **gcoolprog** в репозитории будущего релиза. | ||
Строка 194: | Строка 222: | ||
dpkg -i *.deb</code> | dpkg -i *.deb</code> | ||
- | ====== Как пересобрать deb-пакет ====== | + | === Дебианизация берётся из репозитория текущего выпуска Ubuntu === |
+ | В случае, когда для нужной версии программы имеется пакет в репозитории текущего выпуска Ubuntu, но он по каким-либо причинам не устраивает и в его исходники нужно внести изменения (например, применить какой-нибудь патч) и пересобрать, основываясь на уже имеющейся в пакете дебианизации, можно поступить следующим образом. | ||
+ | Для сборки понадобятся следующие пакеты: build-essential devscripts fakeroot. Потребуются также пакеты для разработки, мы их установим в дальнейшем. | ||
+ | |||
+ | Скачиваем исходники: | ||
+ | |||
+ | <code bash> | ||
+ | cd ~/src | ||
+ | apt-get source gcoolprog | ||
+ | </code> | ||
+ | |||
+ | apt-get source скачивает исходники из репозитория Ubuntu в текущую директорию. Многие пакеты в репозитории имеют общие друг с другом исходники, поэтому кроме исходников выбранного пакета могут скачаться и исходники других пакетов (общие для нескольких пакетов исходники). | ||
+ | |||
+ | Далее вносим изменения в исходники и собираем из них обратно пакеты. | ||
+ | |||
+ | Устанавливаем необходимые для сборки пакеты для разработки: | ||
+ | |||
+ | <code bash> | ||
+ | sudo apt-get build-dep gcoolprog | ||
+ | </code> | ||
+ | |||
+ | Собираем пакеты: | ||
+ | |||
+ | <code bash> | ||
+ | cd gcoolprog-0.5.3 | ||
+ | debuild -b -us -uc | ||
+ | </code> | ||
+ | |||
+ | debuild следует запускать в директории исходников. Параметры -b -us -uc передаются программе dpkg-buildpackage. Первый требует собирать только бинарные пакеты, второй и третий — не подписывать цифровой подписью, соответственно, пакет исходников и файл .changes. Получившиеся в результате сборки пакеты будут в директории на один уровень выше. | ||
+ | |||
+ | ====== Сборка из бинарных файлов ====== | ||
**Ниже идёт пример как можно поступить в случае, если доступен только deb-пакет и нет его дебианизированных исходников.** | **Ниже идёт пример как можно поступить в случае, если доступен только deb-пакет и нет его дебианизированных исходников.** | ||
<note>Для начала советую прочитать [[http://wiki.debian.org/DebianRussian/DebinstPackages|это]]. | <note>Для начала советую прочитать [[http://wiki.debian.org/DebianRussian/DebinstPackages|это]]. | ||
Строка 233: | Строка 291: | ||
====== Ссылки ====== | ====== Ссылки ====== | ||
- | |||
* Некоторые команды мне подсказал Александр Герасёв [[http://gq.net.ru/2007/03/16/building-deb-packages/]] | * Некоторые команды мне подсказал Александр Герасёв [[http://gq.net.ru/2007/03/16/building-deb-packages/]] | ||
* Официальное полное руководство на Русском [[http://www.debian.org/doc/maint-guide/]] | * Официальное полное руководство на Русском [[http://www.debian.org/doc/maint-guide/]] | ||
Строка 241: | Строка 298: | ||
* Обсуждение данной статьи на форуме в этом разделе [[http://forum.ubuntu.ru/index.php?board=13.0|forum.ubuntu.ru]] | * Обсуждение данной статьи на форуме в этом разделе [[http://forum.ubuntu.ru/index.php?board=13.0|forum.ubuntu.ru]] | ||
* Слайды лекции "Пакетирование для Debian" http://lists.debian.org/debian-russian/2012/06/msg00302.html | * Слайды лекции "Пакетирование для Debian" http://lists.debian.org/debian-russian/2012/06/msg00302.html | ||
+ | * Как собрать бинарный deb пакет: подробное HowTo http://habrahabr.ru/post/78094/ | ||
{{tag>deb сборка_пакетов fixme}} | {{tag>deb сборка_пакетов fixme}} |