Сборка пакетов Сравнение версий

Различия

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

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:сборка_пакетов [2011/04/09 11:33]
[Вариант 1]
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|тут]].
  
Строка 33: Строка 57:
  
 Нам понадобятся как минимум программы,​ устанавливаемые командой Нам понадобятся как минимум программы,​ устанавливаемые командой
-<code bash>​sudo apt-get install autoconf automake libtool autotools-dev dpkg-buildpackage ​fakeroot</​code>​+<code bash>​sudo apt-get install autoconf automake libtool autotools-dev dpkg-dev fakeroot</​code>​
 Можно так же ''​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|это]]. 
-И это ​[[http://​gq.net.ru/​2007/​03/​16/​building-deb-packages/​]]. +И [[http://​gq.net.ru/​2007/​03/​16/​building-deb-packages/​|это]]. 
-Тут полная документация на русском ​[[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
Строка 241: Строка 285:
  .  .
   Homepage: http://​curl.haxx.se</​file>​   Homepage: http://​curl.haxx.se</​file>​
-Ну а теперь собрать+Ну а теперь собрать:
 <code bash>​dpkg -b ./​someprog ​  ​some-prog-123-new.deb</​code>​ <code bash>​dpkg -b ./​someprog ​  ​some-prog-123-new.deb</​code>​
 Этой информации достаточно,​ чтобы собрать/​пересобрать простенький пакет. Этой информации достаточно,​ чтобы собрать/​пересобрать простенький пакет.
Строка 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>HOWTO deb сборка_пакетов ​FIXME}}+{{tag>​deb сборка_пакетов ​fixme}}