Собрать deb пакет из исходников. Как собрать бинарный deb пакет: подробное HowTo. Установка CheckInstall on Linux

Существует несколько способов установки программ. Практически у всех есть общая часть - распаковать исходники:

Tar xvfj mega_app.tar.bz2

Tar xvfz mega_app.tar.gz

Выполнить комманду ./configure , затем make . Эти комманды служат для сборки из исходных кодов исполняемых файлов, библиотек и тп.
Отдельно стоит отметить первую комманду - ./configure
Если выполнить ./configure --help , то вы получите список параметров, которые можно передать ./configure
Например часто возможна такая комманда:

./configure --prefix=/opt/mega_app

Или указать путь к библиотеке, которая по каким либо причинам не нашлась сама:

./configure --kerberos-lib=/opt/kerberos/lib

Классический.
Итак делаем последовательность:

./configure make

И команда которая собственно установит все составляющие программы в систему:

Make install

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

Используем программу Checkinstall.
Правильный путь. После выполнения общей части запускаете:

Программа сама спросит вас обо всем, а можете просто везде нажать ENTER.
man checkinstall тоже очень хороший путь:))

Сборка пакета с исходников для Debian.
Это отдельный и сложный путь - вам нужно разобраться со многими аспектами создания deb-пакетов (или любых других). Здесь этот путь не будет описан в полной мере, только пример как собрать пакет из уже подготовленных материалов.
Итак, пример. Идем на packages.ubuntu.com, находим нужный пакет (diff например) и качаем два файла - исходник (http://archive.ubuntu.com/ubuntu/pool/main/d/diffutils/diffutils_2.8.1.o...) и патч к нему, который поправит исходники и создаст папку debian с магическим файлом rules внутри (http://archive.ubuntu.com/ubuntu/pool/main/d/diffutils/diffutils_2.8.1-1...).
Копируем их в папку ~/test и для начала распакуем исходники:

Tar xvfz diffutils_2.8.1.orig.tar.gz

А затем наложим патч:

Cd diffutils-2.8.1/ gzip -cd ../diffutils_2.8.1-11ubuntu4.diff.gz | patch -p1

Теперь надо сделать debian/rules исполняемым:

Chmod +x debian/rules

И собрать пакет:

Fakeroot debian/rules binary

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

Ls ../ diff_2.8.1-11ubuntu4_i386.deb diffutils-2.8.1 diffutils_2.8.1-11ubuntu4.diff.gz diffutils_2.8.1.orig.tar.gz

Как видите, пакет готов.

Или Debian:

wget имя_пакета.dsc, имя_пакета.diff.gz, имя_пакета.orig.tar.gz dpkg-source -x имя_пакета.dsc cd ./имя_пакета/ dpkg-buildpackage -rfakeroot

Заключение
Есть еще методы - сделать пакет от начала и до конца. Надо взять мануал по созданию пакетов от своего дистрибутива и по нему изучить этот процесс от и до. Делайте пакетов много, хороших и нужных. Если сделали хорошую сборку - киньте разработчикам дистрибутива, поддерживайте актуальным. Помните, что даже один пакет поддерживаемый вами, может пригодиться сотням людей по всему миру.

Сделаем небольшой перерыв и просмотрим видео о СЕО оптимизации сайта:

Я описывал сборку программы из исходного кода, а также создание простенького deb-пакета. В этот раз я хочу подробнее остановиться на их создании. Это руководство не претендует на звание инструкции для разработчики или сопровождающего, потому в конце я дам ссылки на подробные руководства от разработчиков Debian .

Способов создания deb-пакета довольно много. Я не буду здесь описывать крупные системы сборки, которые используются на сборочных серверах, ибо большинству это не нужно. Я опишу два наиболее простых способа создания своего пакета. Первым делом, нам нужно установить кое-какие инструменты для работы:

sudo apt-get install build-essential git automake devscripts make libtool fakeroot automake autotools-dev

Далее нужно создать цифровой ключ. Этот шаг не обязателен, но если вы планируете распространять свои пакеты, будет крайне мудрым решением подписать их своим ключом. Это позволит пользователю, скачавшему ваш пакет, удостовериться что именно вы его создали. Для создания ключа можно воспользовать графическими утилитами (Seahorse , Kgpg ) либо в терминале:

DEBEMAIL="ваш E-Mail который вы указали при создании ключа"
DEBFULLNAME="Ваше имя (или псевдоним)"
export DEBEMAIL DEBFULLNAME

Это позволит автоматически добавлять вашу цифровую подпись при подписании пакетов. Далее нам необходим архив с исходным кодом. Пример я буду проводить простой, так как в зависимости от сложности программы, необходима дополнительная настройка (создание постинсталяционных скриптов, правил сборки и т.д.). Предположим у нас есть архив с исходным кодом программы "Myprogramm" - myprogramm_1.0.tar.gz . Распакуем его в домашнюю директорию (или любую где вам удобнее). Обратите внимание: каталог после распаковки должен иметь имя myprogramm-1.0 . Название и через дефис - номер версии. Теперь откроем терминал и выполним:

cd ~/myprogramm-1.0
dh_make --createorig

Мы перешли в каталог с исходным кодом и создали архив с ним и базовую дебианизацию. После второй команды выведится сообщение, где нужно выбрать тип пакета: s (single, одиночный), m (multiple, несколько пакетов), l (library, библиотека), k (kernel module, модуль ядра). В нашем случае это s. Теперь нам нужно немного всё настроить. Перейдите в каталог /myprogramm-1.0/debian и откройте файл control в любом текстовом редакторе. Это главный файл для сборки пакета. В нём указывается вся основная информация. Он имеет примерно такой вид:

Source: myprogramm
Section: admin
Priority: optional
Maintainer: Aleksey Samoilov
Build-Depends: debhelper (>= 5)
Standards-Version: 3.9.6
Homepage: http://www.example.com

Package: myprogramm
Architecture: all
Depends: ${shlib:Depends}, ${misc:Depends}
Section: admin
Priority: optional
Description: My new programm
My programm is a simple example to build your own deb-package

Пошли по порядку. В первой секции указывается имя пакета с исходным кодом. Далее секция ПО (в данном случае admin). Затем приоритет (опционально), имя сопровождающего и его E-Mail (то есть ваше), сборочные зависимости (пакеты необходимые для сборки), версия стандарта (на данный момент 3.9.7), далее идёт имя пакета после сборки, архитектура для которой он собирается (all означает все поддерживаемые архитектуры), секция ПО, приоритет, краткое описание и полное описание. Так как пример у нас простой, для начала этого хватит. Вы также можете открыть файл copyright и указать там своё имя и E-Mail. В файле Changelog находится список изменений каждой версии данного ПО. Так как это первая сборка, то нужно указать что это First Release, а также закрыть некий баг (отсутствие данного пакета в репозитории). Номер бага можно написать от балды. Если вы пересобираете пакет, то сперва измените его версию командой dch -i Файлы в каталоге debian с расширениями .ex - это примеры. При сборке более сложных пакетов, будут нужны и эти дополнительные файлы. Это к примеру послеустановочные скрипты (postinst ), файл, проверяющий наличие новой версии тарболла с исходным кодом (watch ) и так далее. Файл rules - это мейкфайл, правила для сборки пакета. Для простых программ его можно не менять, в остальных случаях - необходима его правка, для указания параметров сборки, или установки иконок. Много чего.

Теперь, когда вы заполнили файл control, можно приступать к сборке. Для этого находясь в каталоге с исходным кодом, выполните команду debuild . Система проведёт конфигурацию, скомпилирует программу, запакует в пакет, выполнит проверку на распространённые ошибки при дэбианизации и попросит дважды ввести пароль для вашего ключа (если вы его не создавали, то ничего не будет). Теперь в каталоге уровнем выше (в нашем случае в домашней директории), вы увидите несколько файлов, среди которых искомый deb-пакет. Теперь его можно установить командой sudo dpkg -i myprogramm-1.0-1.deb или в графическом менеджере Gdebi.

Вот таким образом можно собрать простой пакет. Но что делать, если вы не хотите засорять систему кучей сборочных зависимостей? Более того, при сборке некоторых пакетов, могут быть использованы некоторые изменённые файлы. К примеру более новые версии библиотек, если вы обновили систему из бэкпортов, или различные изменения в конфигах. На подобные случаи можно воспользоваться виртуальной машиной, контейнером или использовать специальный инструмент под названием pbulder. Pbuilder - это инструмент для создания чистого окружения, в котором находится только то, что необходимо для сборки. Система при этом не засоряется ненужными файлами, а сборка программы происходит в лабораторных условиях. Устанавливаем:

sudo apt install pbuilder

Я приведу пример своего конфига, с помощью которого можно будет собирать пакеты не только под разные релизы Debian, но и Ubuntu.

sudo nano /etc/pbuilderrc

Вставляем следующее содержимое:

STABLE_CODENAME="stable"
OLDSTABLE_CODENAME="oldstable"
DEBIAN_SUITES=($UNSTABLE_CODENAME, $TESTING_CODENAME, $STABLE_CODENAME $STABLE_BACKPORTS_SUITE $OLDSTABLE_CODENAME
"sid" "stretch" "jessie" "wheezy")
UBUNTU_SUITES=("precise" "trusty" "xenial")
UBUNTU_MIRROR="mirror.yandex.ru"
DEBIAN_MIRROR="mirror.yandex.ru"
: ${DIST:="$(lsb_release --short --codename)"}
: ${ARCH:="$(dpkg --print-architecture)"}

NAME="$DIST"
if [ -n "${ARCH}" ]; then
NAME="$NAME-$ARCH"
# следующая строчка нужна для того чтобы собирать под разные архитектуры
DEBOOTSTRAPOPTS=("--arch" "$ARCH" "${DEBOOTSTRAPOPTS[@]}")
fi

BASETGZ="/home/sunderland93/pbuilder/$NAME-base.tgz"
DISTRIBUTION="$DIST"
BUILDRESULT="/home/sunderland93/pbuilder/$DIST/result/"
APTCACHE="/home/sunderland93/pbuilder/$NAME/aptcache/"
BUILDPLACE="/home/sunderland93/pbuilder/build/"
if $(echo ${DEBIAN_SUITES[@]} | grep -q $DIST); then
MIRRORSITE="http://$DEBIAN_MIRROR/debian/"
COMPONENTS="main contrib non-free"
elif $(echo ${UBUNTU_SUITES[@]} | grep -q $DIST); then
MIRRORSITE="http://$UBUNTU_MIRROR/ubuntu/"
COMPONENTS="main restricted universe multiverse"
else
echo "Неизвестный дистрибутив: @DIST"
exit 1
fi

export DPKG_GENSYMBOLS_CHECK_LEVEL=4
USE_PDEBUILD_INTERNAL=yes

Замените sunderland93 на своё имя в системе. Таким образом, мы сможем собирать пакеты для Debian 7, 8, testing и unstable, а также под Ubuntu 12.04, 14.04 и 16.04. Скачанные для сборки зависимости будут лежать в pbuilder/имя дистрибутива/aptcache . Это кстати очень полезно - у нас будет базовый архив, который не будет засорён левыми зависимостями и весить несколько гигабайт. И окружение будет готовиться индивидуально для каждой программы. Можно и вшить эти зависимости в базовый архив, но я не рекомендую это делать. Теперь давайте создадим базовый архив, содержащий чистое окружение для сборки. Для примера возьмём Debian 8 64-bit:

sudo DIST=jessie ARCH=amd64 pbuilder --create

Начнётся процесс создания архива. После того, как он будет готов, можно приступать к сборке программы. Для этого открываем терминал, переходим в каталог с исходным кодом, и выполняем:

sudo DIST=jessie ARCH=amd64 pdebuild

И ждём. Скачанные пакеты будут закешированны, и в следующий раз уже не буду качаться. После сборки, готовый deb-пакет появится в каталоге pbuilder/jessie/result . Вот и всё.

→ Инструкция по сборке deb-пакета

В сети существует не мало статей о том как собрать deb-пакет, но к сожалению не все из них будут понятны для разработчика, который решил сделать сборку впервые. Итак, у вас есть код. Он полезен, хорош, но требует некоторых навыков и усилий при установке на сервер или десктоп. Чтобы избежать ручной работы связанной с копированием файлов, манипуляций с базой данных, настройкой скриптов start-stop (для демонов) и настройкой конфигов, вы решили собрать все в deb-пакет.

В идеале, правильный deb-пакет должен быть подписан gpg-ключом. Иначе apt будет считать пакет ненадежным и будет выдавать соответствующее предупреждение. Но эту часть мы пока пропустим. Мануал о том как создать gpg-ключ и как подписать deb-пакет gpg-ключом рассмотрим позднее.

Шаг 1. Устанавливаем утилиты, которые потребуются для сборки вашего пакета :

Sudo apt-get install autoconf automake libtool autotools-dev dpkg-dev fakeroot

Шаг 2. Создаем корневой каталог для будущего пакета и копируем все файлы вашей утилиты в этот каталог, которые потребуются для работы и установки . Например:

Mkdir -p /home/username/deb/my_package cp /some_source_files /home/username/deb/my_package

Если ваша утилита будет находиться в папке:

/usr/local/share/my_project

/home/username/deb/my_package/usr/local/share/my_project

Шаг 3. Создаем в корне пакета каталог DEBIAN.

Имя каталога обязательно должно состоять из заглавных букв. В данном каталоге содержится мета-информация которая используется при установке.

Cd /home/username/deb/my_package mkdir DEBIAN

Далее, в каталоге DEBIAN создаем обязательный текстовый файл - control . В данном файле содержится основная информация о пакете. В файле, на каждой строке содержатся пары ключ-значение, разделенные двоеточием.

Cd ./DEBIAN touch control

Пример файла:

Package: my-package Version: 1.0.0 Provides: my-package Maintainer: Vasiliy Batareikin Architecture: all Section: web Priority: optional Pre-Depends: gcc, make, perl (>= 5.10), mysql-server Depends: gcc, make, perl (>= 5.10), perlmagick, mysql-server, unzip, rar Description: My first debian package

Package – Имя пакета. Допустимые символы . Обязательный параметр .

Version – Версия пакета. Обязательный параметр .

Provides – Имя приложения регистрируемое в системе.

Maintainer – Имя и почта мэйнтейнера пакета. Обязательный параметр .

Architecture – Архитектура процессора, для которой предназначен пакет. Обязательный параметр .

Section – Определяет группу приложений. Обязательный параметр .

Priority – Приоритет пакета. Параметр определяет насколько важен ваш пакет в системе.

Pre-Depends – Список пакетов через запятую, которые необходимы в процессе установки вашего пакета. Менеджер пакетов автоматически усатновит указанные пакеты.

Depends – Список пакетов через запятую, которые требуются для работы этого пакета. Менеджер пакетов автоматически усатновит указанные пакеты.

Description – Описание пакета. Обязательный параметр .

Если при установке или удалении пакета необходимо выполнить определенные действия, можно использовать специальные скрипты. Создаем их и ставим права на исполнение:

Cd ./DEBIAN touch preinst postinst prerm postrm chmod 775 preinst postinst prerm postrm

preinst – Выполняется перед установкой пакета.

postinst – Выполняется сразу после установки пакета.

prerm – Выполняется непосредственно перед удалением пакета.

postrm – Выполняется сразу после удаления пакета.


Шаг 4 . Сборка пакета .

Поднимаемся на один уровень с корневой папкой пакета и выполняем сборку.

Эта статья не завершена. Вы можете помочь в ее написании

    Исправив стилистику статьи

    Добавив больше информации о подготовке исходных кодов для дебианизации

Дистрибутивы, основанные на Debian – это не только отличная система управления пакетами APT , которая сама разрешает зависимости, но и удобные инструменты для создания пакетов и своих репозиториев. Если уж вы решились собрать программу из исходников, то советую ещё изучить, как дебианизировать исходники. Это отнимет чуть больше времени, чем стандартное

./ configure && make && make install make uninstall

но не все исходники это поддерживают, а что ещё чаще - исходники удаляют после установки, тогда удалить программу можно только вручную. Но чтобы это сделать, нужно точно знать что и куда установилось. А это уж точно никто не знает, кроме самих разработчиков программы (ну или тех, кто более-менее разбирался в исходниках программы).

Классификация случаев сборки

Возможны следующие случаи сборки пакетов:

    Сборка из исходников;

    Сборка из бинарных файлов;

исходники или бинарные файлы берутся:

    Не из репозитория;

    Из репозитория другого дистрибутива;

    Из репозитория другого выпуска Ubuntu, из PPA или из Debian;

дебианизация:

    Недоступна;

    Берётся из репозитория Ubuntu, из PPA или из Debian:

    • Из другой версии программы;

      Из текущей версии программы:

      • Не из репозитория текущего выпуска Ubuntu;

        Из репозитория текущего выпуска Ubuntu;

причина сборки:

    Ни в репозитории Ubuntu текущего выпуска, ни в PPA нет нужной версии программы;

    Доступная версия программы по каким-либо причинам не устраивает (не устраивает код или данные программы, параметры конфигурации или управляющая информация пакета);

    И то, и другое.

Сборка из исходников

Что необходимо

Полное Руководство начинающего разработчика Debian доступно .

К сожалению, на русском, информация немного устарела, свежая инструкция доступна на английском. Но принципы не изменились, поэтому если интересны детали лучше прочитать руководство от и до.

Нам понадобятся как минимум программы, устанавливаемые командой

sudo apt-get install autoconf automake libtool autotools-dev dpkg-dev fakeroot

Можно так же autobook - это документация по утилитам GNU Autoconf , Automake , и Libtool . Ну и конечно то, что требуют сами исходные коды для корректной сборки.

Создание ключа шифрования

Этот шаг не обязателен, его можно пропустить.

Чтобы создать ключ, зайдите в Приложения → Стандартные → Пароли и ключи шифрования . В открывшемся окне, в меню Ключ → Новый ключ , выбираем ключ pgp . Заполняем поля Полное имя и Электронный адрес .

В мире свободного программного обеспечения, для предотвращения «краж» или «подделок», принято подписывать свои «ценные» вещи электронным ключом, открытая часть которого хранится на общедоступных серверах и позволяет другим пользователям легко выяснить подлинность и целостность той или иной вещи.
Поэтому отнеситесь к созданию ключа очень ответственно.
Никто вас не заставляет вписывать сюда реальные имя и фамилию, или ещё какие-нибудь личные данные, но если вас не разыскивает интерпол - думаю указать фамилию и имя будет верным решением, хотя можно и просто свой ник В общем, решайте сами. А вот почтовый адрес укажите реальный, и который вы не поменяете.

Можно завести ящик, если ещё нет, на каком-нибудь популярном почтовом сервере: например, gmail.com или yandex.ru .
Это позволит в будущем легко связаться с вами человеку, который вас не знает, но по той или иной причине встретил «вещь», подписанную вами.
Далее вас спросят ввести пароль, как дополнительную защиту. Он может быть полезен, если вы будете использовать закрытый ключ на машинах, которым вы не можете на 100% доверять. Обратная сторона - вам придётся вводить пароль каждый раз, как только вы будете что-то подписывать.

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

Итак, вы создали ключ - теперь его можно будет использовать при создании пакетов.
Для этого, в файл ~/.bashrc, или в другой стартовый скрипт, вашего любимого шелла (для zsh ~/.zshrc), нужно вписать переменные

Export DEBEMAIL=ваш@имейл

На основании e-mail будет искаться ключ в pgp, при подписи пакета.
Нужно завершить сеанс и зайти заново, чтобы изменения вступили в силу.
Помните, что если вы бэкпортируете пакет, дебианизированный не вами, обязательно нужно изменить версию командой

dch -i

для того, чтобы в изменения вписался ваш e-mail. А для того, чтобы ваш открытый ключ попал на сервер, необходимо в настройках «seahorse → Пароли и ключи шифрования», настроить соединение с сервером публичных ключей.
Для этого, в меню Правка→Параметры на закладке Публикация ключей необходимо поставить галку Публиковать ключи… .
Теперь можно выбрать ключ и в меню по правой кнопке выбрать Синхронизировать и опубликовать ключи .

Дебианизация недоступна

Итак, у нас есть только gcoolprog-0.5.3.tar.gz .

Обычно я выполняю следующие действия:

Предварительно подготавливаю рабочую директорию

"http://<путь до файла>" #можно конечно и просто через браузер скачать но обычно так быстрее

Получаем файл gcoolprog-0.5.3.tar.gz . Распакуем его перейдем в полученный каталог:

tar zxvf gcoolprog-0.5.3.tar.gz cd gcoolprog-0.5.3

Для корректной сборки нужно, чтобы корневая директория содержала не только название, но и версию!

./ configure --prefix =/ usr && make

Если команда выполнилась успешно, то осталось только дебианизировать.

Дебианизация

Ничего страшного в этом нет, как я уже говорил есть скрипты, которые сильно упрощают этот процесс.
Вообще смысл всей этой процедуры - создать директорию debian в корне исходников, с нужными файлами конфигурации и скриптом(ами).
Для этого, в корне исходных текстов, выполним

Dh_make --createorig

На что мы должны получить следующий диалог

Type of package: single binary, multiple binary, library, kernel module or cdbs? s Maintainer name: denis Email-Address: [email protected] Date: Mon, 13 Aug 2007 12:40:33 +0400 Package Name: gcoolprog Version: 0.5.3 License: blank Type of Package: Single Hit to confirm:

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

Но мы с вами молодцы и всё у нас прошло без ошибок - появился каталог debian в корне исходников, посмотрев его содержимое, Вы увидите кучу файлов (расширение.ex) с примерами на все случаи жизни.

Description:

Вместо и (без угловых кавычек) нужно вписать описание, что это за программа.
Именно эти сведения увидит пользователь, когда посмотрит описание пакета.
Второй момент - это поправить файл debian/rules
в секции binary-arch : нужно раскомментировать (т.е. убрать # в начале строки)

Dh_install

без этого мы получим пустой пакет.
Иногда debian/rules содержит лишь:

%: dh $@

Что приемлемо с использованием debhelper.
Этих настроек будет достаточно для сборки пакета с одной программой, которая не содержит разделяемых библиотек, т.е. только бинарник в /usr/bin и данные в /usr/share.

Сборка пакета

Теперь, соберём пакет:

В директории выше, т.е. в ~/src/gcoolprog/0.5.3, мы получим файлы

Gcoolprog_0.5.3-1.diff.gz gcoolprog_0.5.3-1_i386.changes gcoolprog_0.5.3-1_i386.deb gcoolprog_0.5.3.orig.tar.gz

Вот теперь мы можем установить пакет

dpkg -i * .deb

Дебианизация берётся из репозитория Ubuntu, из PPA или из Debian

Дебианизация берётся из другой версии программы

В этом случае, очень удобно взять дебианизацию оттуда и поправить для новой версии.

Как я уже сказал, возможно нам повезёт и достаточно будет только сменить версию. Но не будем гадать.

Ниже я не буду комментировать то, что описано в предыдущем решении.

mkdir ~/ src/ gcoolprog mkdir ~/ src/ gcoolprog/ 0.5.3 cd ~/ src/ gcoolprog/ 0.5.3 wget "http://<путь до файла>"

получаем файл gcoolprog-0.5.3.tar.bz2

bunzip2 gcoolprog-0.5.3.tar.bz2 gzip gcoolprog-0.5.3.tar mv gcoolprog-0.5.3.tar.gz gcoolprog_0.5.3.orig.tar.gz

теперь распаковываем его

tar zxvf ./ gcoolprog_0.5.3.orig.tar.gz

скачиваем предыдущую версию с http://packages.ubuntu.com или http://packages.debian.org , файл gcoolprog_0.5.1.diff.gz (в самом низу в секции More Information on gcoolprog)

wget "http://archive.ubuntu.com/ubuntu/pool/universe/g/gcoolprog/gcoolprog_0.5.1.diff.gz" gunzip gcoolprog_0.5.1.diff.gz patch -p0 < ./ gcoolprog_0.5.1.diff

получаем директорию

~/ src/ gcoolprog/ 0.5.3/ gcoolprog-0.5.1/ debian

копируем каталог gcoolprog-0.5.1/debian в директорию ~/src/gcoolprog/0.5.3/gcoolprog-0.5.3

cp -a ~/ src/ gcoolprog/ 0.5.3/ gcoolprog-0.5.1/ debian ~/ src/ gcoolprog/ 0.5.3/ gcoolprog-0.5.3 dch -i

этой командой изменяется файл debian/changelog например увидим

Gcoolprog (0.5.1-1ubuntu2) feisty; urgency =low * -- denis < ubuntu_user@ mail.ru>

но поскольку у нас версия 0.5.3, то нужно изменить значения на

Gcoolprog (0.5.3-1ubuntu1) feisty; urgency =low * New upstream release. -- denis < ubuntu_user@ mail.ru> Mon, 13 Aug 2007 14 :13 :27 +0400

сохраните изменения. Теперь можно выполнить команду сборки в пакет.

Dpkg-buildpackage -rfakeroot

получим файлы

cd .. ls -1 gcoolprog_0.5.3-1 .diff.gz gcoolprog_0.5.3-1 _i386.changes gcoolprog_0.5.3-1 _i386.deb gcoolprog_0.5.3.orig.tar.gz dpkg -i * .deb

Дебианизация берётся из текущей версии программы

Дебианизация берётся не из репозитория текущего выпуска Ubuntu

Для Debian нужно использовать сайт http://packages.debian.org , для Ubuntu - http://packages.ubuntu.com . Тогда, например, в Ubuntu ищем пакет gcoolprog в репозитории будущего релиза.

Предварительно подготовим рабочую директорию

mkdir ~/ src/ gcoolprog mkdir ~/ src/ gcoolprog/ 0.5.3 cd ~/ src/ gcoolprog/ 0.5.3

теперь скачиваем три файла

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-1 .diff.gz

или тоже самое, но одной командой

Dget http:// archive.ubuntu.com/ ubuntu/ pool/ universe/ g/ gcoolprog/ gcoolprog_0.5.3-1 .dsc

из пакета devscripts
затем распакуем командой

Dpkg-source -x ./ gcoolprog_0.5.3-1 .dsc

получим каталог gcoolprog-0.5.3.Перейдём в него и сменим версию:

cd gcoolprog-0.5.3 dch -i gcoolprog (0.5.3-1ubuntu1) feisty; urgency =low * backport from gutsy -- denis < ubuntu_user@ mail.ru> Mon, 13 Aug 2007 14 :13 :27 +0400

теперь можно собирать пакет

Dpkg-buildpackage -rfakeroot

получим файлы

cd .. ls -1 . gcoolprog_0.5.3-1 .diff.gz gcoolprog_0.5.3-1 _i386.changes gcoolprog_0.5.3-1 _i386.deb gcoolprog_0.5.3.orig.tar.gz dpkg -i * .deb

Дебианизация берётся из репозитория текущего выпуска Ubuntu

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

Для сборки понадобятся следующие пакеты: build-essential devscripts fakeroot. Потребуются также пакеты для разработки, мы их установим в дальнейшем.

Скачиваем исходники:

cd ~/ src apt-get source gcoolprog

apt-get source скачивает исходники из репозитория Ubuntu в текущую директорию. Многие пакеты в репозитории имеют общие друг с другом исходники, поэтому кроме исходников выбранного пакета могут скачаться и исходники других пакетов (общие для нескольких пакетов исходники).

Устанавливаем необходимые для сборки пакеты для разработки:

sudo apt-get build-dep gcoolprog

Собираем пакеты:

cd gcoolprog-0.5.3 debuild -b -us -uc

debuild следует запускать в директории исходников. Параметры -b -us -uc передаются программе dpkg-buildpackage. Первый требует собирать только бинарные пакеты, второй и третий - не подписывать цифровой подписью, соответственно, пакет исходников и файл.changes. Получившиеся в результате сборки пакеты будут в директории на один уровень выше.

Сборка из бинарных файлов

Ниже идёт пример как можно поступить в случае, если доступен только deb-пакет и нет его дебианизированных исходников.

Предположим, что работаем в каталоге ~/tmp . Создадим подкаталог ~/tmp/someprog , чтобы распаковать файлы какого-нибудь пакета, нужно выполнить

dpkg -x ~./ tmp/ some-prog-123 .deb ./ someprog

Для того, чтобы извлечь контрольную информацию, выполним

mkdir ~/ tmp/ someprog/ DEBIAN dpkg -e ~/ tmp/ some-prog-123 .deb ./ someprog/ DEBIAN

ну а теперь, чтобы всё это собрать обратно в пакет, нужно выполнить

dpkg -b ./ someprog ~/ tmp/ some-prog-123 -new.deb

В каталоге ~/tmp/someprog/DEBIAN содержатся файлы, описывающие, что это за пакет, от чего он зависит, и контрольные суммы файлов, находящихся в нём. Для того, чтобы собрать свой пакет, нужно поместить файлы в каталоге ~/tmp/someprog так, как будто это корневой каталог.То есть, если нужно, чтобы файл установился в /usr/bin ,нужно его поместить в каталог ~/tmp/someprog/usr/bin , ну и, соответственно, если что-то должно лежать в /etc , то в ~/tmp/someprog/etc и т.д.

Затем в ~/tmp/someprog создать каталог DEBIAN, обязательно большими буквами, и в нём файл ~/tmp/someprog/DEBIAN/control , в этом файле описывается название пакета, его зависимости и описание, формат очень простой. Например:

Package: libcurl3 Version: 7.15.2-2 Section: libs Priority: optional Architecture: i386 Depends: libc6 (>= 2.3.5-1), libcomerr2 (>= 1.33-3), libidn11 (>= 0.5.18), libkrb53 (>= 1.4.2), libssl0.9.8 (>= 0.9.8a-1),zlib1g (>= 1:1.2.1), ca-certificates Suggests: libldap2 Replaces: libcurl2 (<< 1:7.11.2-2) Installed-Size: 324 Maintainer: Domenico Andreoli Source: curl Description: Multi-protocol file transfer library libcurl is designed to be a solid, usable, reliable and portable multi-protocol file transfer library. . SSL support is provided by OpenSSL. To enable LDAP support package libldap2-dev is required. . This is the shared version of libcurl. . Homepage: http://curl.haxx.se

Ну а теперь собрать:

dpkg -b ./ someprog some-prog-123 -new.deb

Этой информации достаточно, чтобы собрать/пересобрать простенький пакет. На самом деле можно ещё запускать скрипты при установке пакета, при его удалении и много чего ещё, что нужно нормальному maintainer"у.

Установка пакета checkinstall не должна вызвать особых сложностей. В операционных системах, использующих DEB пакеты, установка производится командой:

# sudo apt-get install checkinstall

В операционной системе, использующей RPM пакеты, установка пакета checkinstall выполняется командой:

# sudo rpm -i checkinstall

Если такой пакет в Вашей ОС не обнаружен, то Вам следует посетить домашнюю страницу проекта и скачать требуемую версию для Вашего дистрибутива:

http://checkinstall.izto.org/download.php

Переход в директорию с исходным кодом программы

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

Хотелось бы напомнить об очень удобном инструменте командной строки Linux - клавише TAB . Кнопка TAB позволяет автоматически дописывать название длинных директорий и файлов. Требуется ввести лишь первые символы названия директории / файла и нажать клавишу TAB , которая автоматически допишет полное название.

Почти все исходники распространяются в архивах формата tar.gz . Для разархивирования архива набираем команду:

Конфигурируем исходники под свою ОС

Проще говоря, это процесс «настройки» исходного кода под конкретную ОС. В результате этого процесса создается файл с описанием конфигурации. Конфигурирование исходников обычно осуществляется простой командой:

Эта команда не вносит никаких изменений в ОС и тем самым не сможет никак повредить ее.

Этот этап самый трудоемкий, так как необходимо установить все дополнительные пакеты, от которых зависит исходный код компилируемой программы. Если в ходе выполнения этой команды на экране появилось сообщение об ошибке и процесс конфигурирования остановился, то это значит что какой-то зависимый пакет отсутствует в системе.

К примеру, при конфигурировании Pidgin возникла ошибка:

checking for GTK... yes
checking for PANGO... yes
checking for X11... yes
checking for GTKSPELL... no
no
configure: error:
GtkSpell development headers not found.
Use --disable-gtkspell if you do not need it.

В приведенном листинге видно, что GTK, PANGA, X11 соответствуют требованиям компилируемого исходного кода (yes ), а проверка GTKSPELL вывела значение no . Скорее всего в этом примере требуется установить libgtkspell-dev .

Из этого примера видно, что это дело не такое уж и сложное. Если в процессе конфигурирования не возникло ошибок, то процесс считается завершенным успешно.

Компилирование исходников

Компилирование исходного кода - процесс «автоматический» при условии успешного выполнения предыдущего пункта.

Если все же возникают ошибки, то скорее всего это проблема в исходном коде. Нужно поместить часть строк вывода, в которых содержится ошибка, в любой поисковик и посмотреть результат поиска. Возможно с этой ошибкой уже сталкивалось интернет-сообщество.