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

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:сборка_пакетов [2012/05/28 00:21]
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''​. Ну и конечно то, что требуют сами исходные коды для корректной сборки.
  
-=== Создание ключа шифрования ===+==== Создание ключа шифрования ​====
 Этот шаг не обязателен,​ его можно пропустить. Этот шаг не обязателен,​ его можно пропустить.
  
Строка 49: Строка 73:
 Далее вас спросят ввести пароль,​ как дополнительную защиту. Он может быть полезен,​ если вы будете использовать закрытый ключ на машинах,​ которым вы не можете на 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, при подписи пакета.\\
 Нужно завершить сеанс и зайти заново,​ чтобы изменения вступили в силу.\\ Нужно завершить сеанс и зайти заново,​ чтобы изменения вступили в силу.\\
Строка 60: Строка 84:
 для того, чтобы в изменения вписался ваш 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** в репозитории будущего релиза.
  
 Предварительно подготовим рабочую директорию\\ Предварительно подготовим рабочую директорию\\
Строка 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|это]].
Строка 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/​]]
Строка 254: Строка 297:
   * Здесь доступно много материала на эту тему [[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}}