Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:сборка_пакетов [2012/05/27 23:41] |
wiki:сборка_пакетов [2015/12/20 00:57] Страница wiki:создание_deb_пакетов переименована в wiki:сборка_пакетов (в Ubuntu deb, и так понятно, что deb) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Сборка ПО и создание .deb-пакетов из исходников в Debian-системах (Ubuntu) ====== | + | ====== Сборка пакетов ====== |
+ | <note tip>Эта статья не завершена. Вы можете помочь в ее написании | ||
+ | * исправив стилистику статьи | ||
+ | * добавив больше информации о подготовке исходных кодов для дебианизации | ||
+ | </note> | ||
- | ====== Вступление ====== | + | Дистрибутивы, основанные на Debian -- это не только отличная система управления пакетами [[APT]], |
- | + | ||
- | Дистрибутивы, основанные на Debian - это не только отличная система управления пакетами ''apt-get'' (''aptitude''), | + | |
которая сама разрешает зависимости, но и удобные инструменты для создания пакетов и своих репозиториев. | которая сама разрешает зависимости, но и удобные инструменты для создания пакетов и своих репозиториев. | ||
Если уж вы решились собрать программу из исходников, то советую ещё изучить, как дебианизировать исходники. | Если уж вы решились собрать программу из исходников, то советую ещё изучить, как дебианизировать исходники. | ||
Это отнимет чуть больше времени, чем стандартное<code bash>./configure && make && make install</code>но зато позволит сохранить систему в чистоте. | Это отнимет чуть больше времени, чем стандартное<code bash>./configure && make && make install</code>но зато позволит сохранить систему в чистоте. | ||
- | Удалить программы, установленные командой **make install**, можно только командой <code bash>make uninstall</code>но не все исходники это поддерживают, а что ещё чаще исходники удаляют после установки, тогда удалить программу можно только вручную. Но чтобы это сделать нужно точно знать что и куда установилось. | + | Удалить программы, установленные командой [[make install]], можно только командой <code bash>make uninstall</code>но не все исходники это поддерживают, а что ещё чаще - исходники удаляют после установки, тогда удалить программу можно только вручную. Но чтобы это сделать, нужно точно знать что и куда установилось. А это уж точно никто не знает, кроме самих разработчиков программы (ну или тех, кто более-менее разбирался в исходниках программы). |
- | А это уж точно никто не знает, кроме самих разработчиков программы (ну или тех, кто более-менее разбирался в исходниках программы). | + | |
* **Ну и что? Главное - работает!** | * **Ну и что? Главное - работает!** | ||
- | * apt-get не знает ничего об программах установленных вручную, соответственно могут быть конфликты, или просто непонятные ошибки. | + | * APT не знает ничего о программах, установленных вручную. Соответственно, могут быть конфликты, или просто непонятные ошибки. |
- | * Очень часто исходники по умолчанию "рассчитаны" на определённый дистрибутив, или, наоборот, рассчитаны только на установку из исходников, при этом выполняются разного рода "удобные" настройки в конфигурационных файлах. Так, например, очень любят прописывать mime-типы. Но проблема в том, что переводы разные бывают и в наутилусе может выскочить ошибка <code>"Имя файла <тут имя> показывает, что файл является типом файла <Документ1>. | + | * Очень часто исходники по умолчанию "рассчитаны" на определённый дистрибутив, или, наоборот, рассчитаны только на установку из исходников, при этом выполняются разного рода "удобные" настройки в конфигурационных файлах. Так, например, очень любят прописывать mime-типы. Но проблема в том, что переводы разные бывают и в [[Nautilus]] может выскочить ошибка <code>"Имя файла <тут имя> показывает, что файл является типом файла <Документ1>. |
Содержимое файла показывает, что файл является файлом типа <Документ2>" </code>и документ не будет открываться. Таких "недочётов" может быть очень много. А теперь, если представить что это удалить нельзя, поскольку пользователь не запоминал что и куда поставилось, наступает паника и как результат - переустановка. | Содержимое файла показывает, что файл является файлом типа <Документ2>" </code>и документ не будет открываться. Таких "недочётов" может быть очень много. А теперь, если представить что это удалить нельзя, поскольку пользователь не запоминал что и куда поставилось, наступает паника и как результат - переустановка. | ||
* **Но как быть, если программу хочется поставить, а версия в deb-пакете устарела, или такой вообще нет?** | * **Но как быть, если программу хочется поставить, а версия в deb-пакете устарела, или такой вообще нет?** | ||
* Есть два выхода: | * Есть два выхода: | ||
- | - Использовать программу **checkinstall**. Она собирает всё в один пакет. К сожалению, она позволяет решить только вопрос с удалением программы. И даже если apt-get будет знать, что программа установлена, он в лучшем случае сообщит, что есть конфликт файлов,<code>файл /some/path/to/some/file уже есть в пакете "имя пакета собранного с помощью checkinstall"</code> Чаще всего такие случаи очень корректно разрешаются путём удаления конфликтного пакета. Но на разбор ситуации уйдёт некоторое время. | + | - Использовать программу ''checkinstall''. Она собирает всё в один пакет. К сожалению, она позволяет решить только вопрос с удалением программы. И даже если APT будет знать, что программа установлена, он в лучшем случае сообщит, что есть конфликт файлов,<code>файл /some/path/to/some/file уже есть в пакете "имя пакета собранного с помощью checkinstall"</code> Чаще всего такие случаи очень корректно разрешаются путём удаления конфликтного пакета. Но на разбор ситуации уйдёт некоторое время. |
- 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! Делаем по [[#Дебианизация_недоступна|первому варианту]]. |
===== Что необходимо ===== | ===== Что необходимо ===== | ||
- | |||
Полное ''Руководство начинающего разработчика Debian'' доступно [[http://www.debian.org/doc/maint-guide/index.ru.html|тут]]. | Полное ''Руководство начинающего разработчика Debian'' доступно [[http://www.debian.org/doc/maint-guide/index.ru.html|тут]]. | ||
Строка 36: | Строка 60: | ||
Можно так же ''autobook'' - это документация по утилитам ''GNU Autoconf'', ''Automake'', и ''Libtool''. Ну и конечно то, что требуют сами исходные коды для корректной сборки. | Можно так же ''autobook'' - это документация по утилитам ''GNU Autoconf'', ''Automake'', и ''Libtool''. Ну и конечно то, что требуют сами исходные коды для корректной сборки. | ||
- | === Создание ключа шифрования === | + | ==== Создание ключа шифрования ==== |
Этот шаг не обязателен, его можно пропустить. | Этот шаг не обязателен, его можно пропустить. | ||
Чтобы создать ключ, зайдите в **Приложения -> Стандартные -> Пароли и ключи шифрования**. В открывшемся окне, в меню **Ключ -> Новый ключ**, выбираем ключ **pgp**. Заполняем поля **Полное имя** и **Электронный адрес**. | Чтобы создать ключ, зайдите в **Приложения -> Стандартные -> Пароли и ключи шифрования**. В открывшемся окне, в меню **Ключ -> Новый ключ**, выбираем ключ **pgp**. Заполняем поля **Полное имя** и **Электронный адрес**. | ||
- | В мире свободного программного обеспечения, для предотвращения "краж" или "подделок", принято подписывать свои "ценные" вещи электронным ключом, открытая часть которого хранится на обще доступных серверах и позволяет другим пользователям легко выяснить подлинность и целостность той или иной вещи.\\ | + | В мире свободного программного обеспечения, для предотвращения "краж" или "подделок", принято подписывать свои "ценные" вещи электронным ключом, открытая часть которого хранится на общедоступных серверах и позволяет другим пользователям легко выяснить подлинность и целостность той или иной вещи.\\ |
Поэтому отнеситесь к созданию ключа очень ответственно.\\ | Поэтому отнеситесь к созданию ключа очень ответственно.\\ | ||
- | Никто вас не заставляет вписывать сюда реальные имя и фамилию, или ещё какие нибудь личные данные, но если вас не разыскивает интерпол думаю указать фамилию и имя будет верным решением, хотя можно и просто свой ник :-) В общем, решайте сами. А вот почтовый адрес укажите реальный, и который вы не поменяете. | + | Никто вас не заставляет вписывать сюда реальные имя и фамилию, или ещё какие-нибудь личные данные, но если вас не разыскивает интерпол - думаю указать фамилию и имя будет верным решением, хотя можно и просто свой ник :-) В общем, решайте сами. А вот почтовый адрес укажите реальный, и который вы не поменяете. |
- | Можно завести ящик, если ещё нет, на каком нибудь популярном почтовом сервере, например gmail.com или yandex.ru .\\ | + | Можно завести ящик, если ещё нет, на каком-нибудь популярном почтовом сервере: например, gmail.com или yandex.ru .\\ |
- | Это позволит в будущем легко связаться с вами, человеку который вас не знает, но по той или иной причине встретил "вещь", подписанную вами.\\ | + | Это позволит в будущем легко связаться с вами человеку, который вас не знает, но по той или иной причине встретил "вещь", подписанную вами.\\ |
- | Далее вас спросят ввести пароль, как дополнительную защиту. Он может быть полезен если вы будете использовать закрытый ключ на машинах которым вы не можете 100% доверять. Обратная сторона, вам придётся вводить пароль каждый раз как только вы будете что то подписывать. | + | Далее вас спросят ввести пароль, как дополнительную защиту. Он может быть полезен, если вы будете использовать закрытый ключ на машинах, которым вы не можете на 100% доверять. Обратная сторона - вам придётся вводить пароль каждый раз, как только вы будете что-то подписывать. |
- | Хотя последняя версия программы **seahorse** имеет демон который автоматически запускается в сеансе гнома, и умеет "запоминать пароль" на время сеанса, но пока не все программы умеют с ней работать. | + | Хотя последняя версия программы **seahorse** имеет демон, который автоматически запускается в сеансе [[GNOME]], и умеет "запоминать пароль" на время сеанса, но пока не все программы умеют с ней работать. |
- | И так, вы создали ключ, теперь его можно будет использовать при создании пакетов.\\ | + | Итак, вы создали ключ - теперь его можно будет использовать при создании пакетов.\\ |
Для этого, в файл ~/.bashrc, или в другой стартовый скрипт, вашего любимого шелла (для zsh ~/.zshrc), нужно вписать переменные | Для этого, в файл ~/.bashrc, или в другой стартовый скрипт, вашего любимого шелла (для zsh ~/.zshrc), нужно вписать переменные | ||
- | <file>export DEBEMAIL=ваш@емэил</file> | + | <file>export DEBEMAIL=ваш@имейл</file> |
На основании e-mail будет искаться ключ в pgp, при подписи пакета.\\ | На основании e-mail будет искаться ключ в pgp, при подписи пакета.\\ | ||
Нужно завершить сеанс и зайти заново, чтобы изменения вступили в силу.\\ | Нужно завершить сеанс и зайти заново, чтобы изменения вступили в силу.\\ | ||
- | Помните, что если вы бэкпортируете пакет, дебианизированный не вами, обязательно, нужно изменить версию командой | + | Помните, что если вы бэкпортируете пакет, дебианизированный не вами, обязательно нужно изменить версию командой |
<code bash>dch -i</code> | <code bash>dch -i</code> | ||
для того, чтобы в изменения вписался ваш e-mail. | для того, чтобы в изменения вписался ваш e-mail. | ||
- | А для того, чтобы ваш открытый ключ попал на сервер, необходимо, в настройках "**seahorse** -> Пароли и ключи шифрования", настроить соединение с сервером публичных ключей.\\ | + | А для того, чтобы ваш открытый ключ попал на сервер, необходимо в настройках "**seahorse** -> Пароли и ключи шифрования", настроить соединение с сервером публичных ключей.\\ |
- | Для этого, в меню "Правка -> Параметры" на закладке "Публикация ключей" необходимо поставить галку "Публиковать ключи...".\\ | + | Для этого, в меню //Правка->Параметры// на закладке //Публикация ключей// необходимо поставить галку //Публиковать ключи...//.\\ |
- | Теперь можно выбрать ключ и в меню по правой кнопке выбрать "Синхронизировать и опубликовать ключи". | + | Теперь можно выбрать ключ и в меню по правой кнопке выбрать //Синхронизировать и опубликовать ключи//. |
- | ===== Вариант 1: Есть только архив с исходниками ===== | + | ===== Дебианизация недоступна ===== |
- | + | Итак, у нас есть только //gcoolprog-0.5.3.tar.gz//. | |
- | Начну с самого страшного :-), поскольку остальные случаи - это частные решения самого страшного. | + | |
- | + | ||
- | Итак, у нас есть только **gcoolprog-0.5.3.tar.bz2**. | + | |
Обычно я выполняю следующие действия: | Обычно я выполняю следующие действия: | ||
Строка 75: | Строка 96: | ||
mkdir ~/src/gcoolprog/0.5.3 | mkdir ~/src/gcoolprog/0.5.3 | ||
cd ~/src/gcoolprog/0.5.3 | cd ~/src/gcoolprog/0.5.3 | ||
- | wget "http://<путь до файла>" (можно конечно и просто через браузер скачать но обычно так быстрее)</code> | + | wget "http://<путь до файла>" #можно конечно и просто через браузер скачать но обычно так быстрее</code> |
- | получаем файл **gcoolprog-0.5.3.tar.bz2**. Немного забегая вперёд, обработаем файл программой gzip. | + | Получаем файл //gcoolprog-0.5.3.tar.gz//. Распакуем его перейдем в полученный каталог: |
- | <code bash>bunzip2 gcoolprog-0.5.3.tar.bz2 | + | <code bash>tar zxvf gcoolprog-0.5.3.tar.gz |
- | gzip gcoolprog-0.5.3.tar</code> | + | |
- | получим **gcoolprog-0.5.3.tar.gz**, переименуем | + | |
- | <code bash>mv gcoolprog-0.5.3.tar.gz gcoolprog_0.5.3.orig.tar.gz</code> | + | |
- | (т.е. разделили имя и версию подчёркиванием и после версии добавили слово orig: gcoolprog**_**0.5.3**.orig**.tar.gz) \\ | + | |
- | теперь распаковываем его (но ни в коем случае не удаляем!) | + | |
- | <code bash>tar zxvf ./gcoolprog_0.5.3.orig.tar.gz | + | |
cd gcoolprog-0.5.3</code> | cd gcoolprog-0.5.3</code> | ||
<note>Для корректной сборки нужно, чтобы корневая директория содержала не только название, но и версию!</note> | <note>Для корректной сборки нужно, чтобы корневая директория содержала не только название, но и версию!</note> | ||
- | Ниже будем считать директорию **~/src/gcoolprog/0.5.3/gcoolprog-0.5.3** корневой директорией исходников.\\ | + | Ниже будем считать директорию //~/src/gcoolprog/0.5.3/gcoolprog-0.5.3// корневой директорией исходников.\\ |
- | Далее выполняем "черновую" сборку. Т.е. делаем, как обычно | + | Далее выполняем "черновую" сборку. Т.е. сконфигурируем и соберем приложение, без его установки: |
<code bash>./configure --prefix=/usr && make </code> | <code bash>./configure --prefix=/usr && make </code> | ||
- | (но не устанавливаем!) Если конфигурируется со всеми нужными опциями и собирается в бинарный файл, значит осталось только дебианизировать.\\ | + | Если команда выполнилась успешно, то осталось только дебианизировать. |
- | **Дебианизация**\\ | + | ==== Дебианизация ==== |
- | Ничего страшного в этом нет, как я уже говорил есть скрипты которые сильно упрощают этот процесс.\\ | + | Ничего страшного в этом нет, как я уже говорил есть скрипты, которые сильно упрощают этот процесс.\\ |
Вообще смысл всей этой процедуры - создать директорию debian в корне исходников, с нужными файлами конфигурации и скриптом(ами).\\ | Вообще смысл всей этой процедуры - создать директорию debian в корне исходников, с нужными файлами конфигурации и скриптом(ами).\\ | ||
- | Для этого, в корне исходных текстов (~/src/gcoolprog/0.5.3/gcoolprog-0.5.3), выполним<code bash>dh_make | + | Для этого, в корне исходных текстов, выполним |
- | + | <code bash>dh_make --createorig</code> | |
- | Type of package: single binary, multiple binary, library, kernel module or cdbs? | + | На что мы должны получить следующий диалог |
+ | <code>Type of package: single binary, multiple binary, library, kernel module or cdbs? | ||
[s/m/l/k/b] s | [s/m/l/k/b] s | ||
Строка 108: | Строка 124: | ||
Type of Package : Single | Type of Package : Single | ||
Hit <enter> to confirm:</code> | Hit <enter> to confirm:</code> | ||
- | тут мы указываем сформировать пакет, для одиночного бинарного файла.\\ | + | Тут мы указываем сформировать пакет, для одиночного бинарного файла. |
- | Если бы мы не переименовали архив, то получили бы следующее сообщение | + | |
- | <code>Could not find gcoolprog_0.5.3.orig.tar.gz | + | |
- | Either specify an alternate file to use with -f, | + | |
- | or add --createorig to create one.</code> | + | |
- | в таком случае советую прервать **dh_make** (<key>ctrl-c</key>) и переименовать архив, как описано выше.\\ | + | |
- | Но мы с вами молодцы и всё у нас прошло без ошибок - появился каталог debian в корне исходников, посмотрев его содержимое, Вы увидите кучу файлов (расширение .ex) с примерами на все случаи жизни.\\ | + | Но мы с вами молодцы и всё у нас прошло без ошибок - появился каталог debian в корне исходников, посмотрев его содержимое, Вы увидите кучу файлов (расширение .ex) с примерами на все случаи жизни. |
- | Будем считать что программа у нас простая, обычно ни один из этих файлов не нужен.\\ | + | Будем считать, что программа у нас простая -- обычно ни один из этих файлов не нужен.\\ |
- | Первым делом нужно добавить описание программы в файле **debian/control** | + | Первым делом, нужно добавить описание программы в файле //debian/control// |
<file>Description: <insert up to 60 chars description> | <file>Description: <insert up to 60 chars description> | ||
<insert long description, indented with spaces></file> | <insert long description, indented with spaces></file> | ||
- | Вместо <insert up to 60 chars description> и <insert long description, indented with spaces> (без угловых кавычек) нужно вписать описание,что это за программа.\\ | + | Вместо <insert up to 60 chars description> и <insert long description, indented with spaces> (без угловых кавычек) нужно вписать описание, что это за программа.\\ |
- | Именно эти сведения увидит пользователь, когда посмотрит описание пакета в synaptic'е.\\ | + | Именно эти сведения увидит пользователь, когда посмотрит описание пакета.\\ |
Второй момент - это поправить файл **debian/rules**\\ | Второй момент - это поправить файл **debian/rules**\\ | ||
- | в секции **binary-arch**: нужно раскомментировать(т.е. убрать # в начале строки) | + | в секции **binary-arch**: нужно раскомментировать (т.е. убрать ''#'' в начале строки) |
- | <file> dh_install</file>без этого мы получим пустой пакет.\\ | + | <file=bash>dh_install</file> |
+ | без этого мы получим пустой пакет.\\ | ||
+ | Иногда **debian/rules** содержит лишь:\\ | ||
+ | <file>%: | ||
+ | dh $@</file> | ||
+ | Что приемлемо с использованием debhelper.\\ | ||
+ | Этих настроек будет достаточно для сборки пакета с одной программой, которая не содержит разделяемых библиотек, т.е. только бинарник в /usr/bin и данные в /usr/share.\\ | ||
- | Обычно этих настроек достаточно для сборки пакета с одной программой, которая не содержит разделяемых библиотек, т.е. только бинарник в /usr/bin и данные в /usr/share.\\ | + | ==== Сборка пакета ==== |
- | + | Теперь, соберём пакет: | |
- | Теперь, соберём пакет | + | |
<code bash>dpkg-buildpackage -rfakeroot</code> | <code bash>dpkg-buildpackage -rfakeroot</code> | ||
- | + | В директории выше, т.е. в ~/src/gcoolprog/0.5.3, мы получим файлы | |
- | в директории выше, т.е. в ~/src/gcoolprog/0.5.3, мы получим файлы | + | <file>gcoolprog_0.5.3-1.diff.gz |
- | <code bash>cd .. | + | |
- | ls -1 | + | |
- | gcoolprog_0.5.3-1.diff.gz | + | |
gcoolprog_0.5.3-1_i386.changes | gcoolprog_0.5.3-1_i386.changes | ||
gcoolprog_0.5.3-1_i386.deb | gcoolprog_0.5.3-1_i386.deb | ||
- | gcoolprog_0.5.3.orig.tar.gz</code> | + | gcoolprog_0.5.3.orig.tar.gz</file> |
- | вот теперь мы можем установить пакет<code bash>dpkg -i *.deb</code> | + | Вот теперь мы можем установить пакет |
- | + | <code bash>dpkg -i *.deb</code> | |
- | =====Вариант 2: Когда в репозитории есть пакет предыдущей версии===== | + | |
+ | ===== Дебианизация берётся из репозитория Ubuntu, из PPA или из Debian ===== | ||
+ | ==== Дебианизация берётся из другой версии программы ==== | ||
В этом случае, очень удобно взять дебианизацию оттуда и поправить для новой версии. | В этом случае, очень удобно взять дебианизацию оттуда и поправить для новой версии. | ||
- | Как я уже сказал возможно нам повезёт и достаточно будет только сменить версию.Но не будем гадать. | + | Как я уже сказал, возможно нам повезёт и достаточно будет только сменить версию. Но не будем гадать. |
- | Ниже я не буду комментировать то что описано в предыдущем решении. | + | Ниже я не буду комментировать то, что описано в предыдущем решении. |
Предварительно подготовим рабочую директорию | Предварительно подготовим рабочую директорию | ||
Строка 185: | Строка 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** в репозитории будущего релиза. |
Предварительно подготовим рабочую директорию\\ | Предварительно подготовим рабочую директорию\\ | ||
Строка 195: | Строка 209: | ||
теперь скачиваем три файла<code bash>wget http://archive.ubuntu.com/ubuntu/pool/universe/g/gcoolprog/gcoolprog_0.5.3-1.dsc | теперь скачиваем три файла<code bash>wget http://archive.ubuntu.com/ubuntu/pool/universe/g/gcoolprog/gcoolprog_0.5.3-1.dsc | ||
wget http://archive.ubuntu.com/ubuntu/pool/universe/g/gcoolprog/gcoolprog_0.5.3.orig.tar.gz | wget http://archive.ubuntu.com/ubuntu/pool/universe/g/gcoolprog/gcoolprog_0.5.3.orig.tar.gz | ||
- | wget http://archive.ubuntu.com/ubuntu/pool/universe/g/gcoolprog/gcoolprog_0.5.3-1.diff.gz</code>или тоже самое но одной командой<code bash>dget http://archive.ubuntu.com/ubuntu/pool/universe/g/gcoolprog/gcoolprog_0.5.3-1.dsc</code> из пакета **devscripts** \\ затем распакуем командой<code bash>dpkg-source -x ./gcoolprog_0.5.3-1.dsc</code>получим каталог gcoolprog-0.5.3.Перейдём в него и сменим версию:<code bash>cd gcoolprog-0.5.3 | + | wget http://archive.ubuntu.com/ubuntu/pool/universe/g/gcoolprog/gcoolprog_0.5.3-1.diff.gz</code>или тоже самое, но одной командой<code bash>dget http://archive.ubuntu.com/ubuntu/pool/universe/g/gcoolprog/gcoolprog_0.5.3-1.dsc</code> из пакета **devscripts** \\ затем распакуем командой<code bash>dpkg-source -x ./gcoolprog_0.5.3-1.dsc</code>получим каталог gcoolprog-0.5.3.Перейдём в него и сменим версию:<code bash>cd gcoolprog-0.5.3 |
dch -i</code><code bash>gcoolprog (0.5.3-1ubuntu1) feisty; urgency=low | dch -i</code><code bash>gcoolprog (0.5.3-1ubuntu1) feisty; urgency=low | ||
Строка 208: | Строка 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|это]]. | ||
Строка 215: | Строка 259: | ||
[[http://kaliuta.basnet.by/deb/deb.html|Тут]] полная документация на русском.</note> | [[http://kaliuta.basnet.by/deb/deb.html|Тут]] полная документация на русском.</note> | ||
- | Предположим, что работаем в каталоге **~/tmp**. Создадим подкатолог **~/tmp/someprog**, чтобы распаковать файлы какого нибудь пакета, нужно выполнить<code bash>dpkg -x ~./tmp/some-prog-123.deb ./someprog</code>Для того, чтобы извлечь контрольную информацию, выполним <code bash>mkdir ~/tmp/someprog/DEBIAN | + | Предположим, что работаем в каталоге **~/tmp**. Создадим подкаталог **~/tmp/someprog**, чтобы распаковать файлы какого-нибудь пакета, нужно выполнить<code bash>dpkg -x ~./tmp/some-prog-123.deb ./someprog</code>Для того, чтобы извлечь контрольную информацию, выполним <code bash>mkdir ~/tmp/someprog/DEBIAN |
- | dpkg -e ~/tmp/some-prog-123.deb ./someprog/DEBIAN</code>ну а теперь, чтобы всё это собрать обратно в пакет, нужно выполнить<code bash>dpkg -b ./someprog ~/tmp/some-prog-123-new.deb</code>В каталоге **~/tmp/someprog/DEBIAN** содержатся файлы, описывающие, что это за пакет, от чего он зависит, и контрольные суммы файлов, находящихся в нём.Для того, чтобы собрать свой пакет, нужно поместить файлы в каталоге **~/tmp/someprog** так, как будто это корневой каталог.То есть,если нужно,чтобы файл установился в **/usr/bin**,нужно его поместить в каталог **~/tmp/someprog/usr/bin**, ну соответственно, если что-то должно лежать в **/etc**, то в **~/tmp/someprog/etc** и т.д. | + | dpkg -e ~/tmp/some-prog-123.deb ./someprog/DEBIAN</code>ну а теперь, чтобы всё это собрать обратно в пакет, нужно выполнить<code bash>dpkg -b ./someprog ~/tmp/some-prog-123-new.deb</code>В каталоге **~/tmp/someprog/DEBIAN** содержатся файлы, описывающие, что это за пакет, от чего он зависит, и контрольные суммы файлов, находящихся в нём. Для того, чтобы собрать свой пакет, нужно поместить файлы в каталоге **~/tmp/someprog** так, как будто это корневой каталог.То есть, если нужно, чтобы файл установился в **/usr/bin**,нужно его поместить в каталог **~/tmp/someprog/usr/bin**, ну и, соответственно, если что-то должно лежать в **/etc**, то в **~/tmp/someprog/etc** и т.д. |
- | Затем в **~/tmp/someprog** создать каталог DEBIAN, обязательно большими буквами, и в нём файл **~/tmp/someprog/DEBIAN/control**, в стом файле описывается название пакета, его зависимости и описание, формат очень простой. Например: | + | Затем в **~/tmp/someprog** создать каталог DEBIAN, обязательно большими буквами, и в нём файл **~/tmp/someprog/DEBIAN/control**, в этом файле описывается название пакета, его зависимости и описание, формат очень простой. Например: |
<file>Package: libcurl3 | <file>Package: libcurl3 | ||
Version: 7.15.2-2 | Version: 7.15.2-2 | ||
Строка 247: | Строка 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/]] | ||
* Уголок разработчика Debian [[http://www.debian.org/devel/]] | * Уголок разработчика Debian [[http://www.debian.org/devel/]] | ||
- | * Хороший цикл статей [[http://tigro.info/wp/?p=375| Цикл статей по сборке RPM и DEB пакетов ]], правда автор предвзято относится к сборке deb пакетов, но если на это не обращать внимания, вполне приличный обзор. | + | * Хороший цикл статей [[http://tigro.info/wp/?p=375| Цикл статей по сборке RPM и DEB пакетов ]], правда автор предвзято относится к сборке deb-пакетов, но если на это не обращать внимания, вполне приличный обзор. |
* Здесь доступно много материала на эту тему [[https://wiki.ubuntu.com/PackagingGuide]] | * Здесь доступно много материала на эту тему [[https://wiki.ubuntu.com/PackagingGuide]] | ||
* Обсуждение данной статьи на форуме в этом разделе [[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 | ||
+ | * Как собрать бинарный deb пакет: подробное HowTo http://habrahabr.ru/post/78094/ | ||
- | {{tag>deb сборка_пакетов}} | + | {{tag>deb сборка_пакетов fixme}} |