Главная
Форум
Регистрация
Гостевая книга
Поиск
Пользователи
Файлы
Профиль
Выход
Новые сообщения · Участники · Правила форума · Поиск · RSS
Страница 1 из 11
Форум » Операционные системы » Linux » Сборка из исходников в Debian (Ubuntu)
Сборка из исходников в Debian (Ubuntu)
-=xVx=-Дата: Понедельник, 27.07.2009, 12:39 | Сообщение # 1
Админ :)
Сообщений: 107
Репутация: 0
Здесь доступно много материала на эту тему https://wiki.ubuntu.com/PackagingGuide

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

Вступление:
Отличие дистрибутивов основанных на Debian это не только отличная система управления пакетами apt-get (aptitude)
которая сама разрешает зависимости, но есть ещё и удобные инструменты для создания пакетов и своих репозиториев.

Если уж вы решились собрать программу из исходников, то советую ещё изучить как дебианизировать исходники.
Это отнимет чуть больше времени чем стандартное ./configure && make && make install
но за то позволит сохранить систему в чистоте. Удалить программы установленные командой make install можно только командой make uninstall, но не все исходники это поддерживают, а что ещё чаще исходники удаляют после установки, тогда удалить программу можно только вручную. Но чтобы это сделать нужно точно знать что и куда установилось А это уж точно никто не знает кроме самих разработчиков программы (ну или тех кто более менее разбирался в исходниках программы).

Quote
Ну и что? Главное работает!

- apt-get не знает ничего об программах установленных вручную соответственно могут быть конфликты или просто непонятные глюки.
- очень часто исходники по умолчанию "рассчитаны" на определённый дистрибутив или наоборот рассчитаны только на установку из исходников, при этом выполняются разного рода "удобные" настройки в конфигурационных файлах. Так например очень любят прописывать mime типы. Но проблема в том что переводы разные бывают и в наутилусе может выскачить ошибка "Имя файла <тут имя> показывает, что файл является типом файла <Документ1>. Содержимое файла показывает, что файл является файлом типа <Документ2>" и документ не будет открываться.
Таких "недочётов" может быть очень много. А теперь если представить что это удалить нельзя поскольку пользователь не запоминал что и куда поставилось, наступает паника и как результат переустановка
Quote
Но как быть если программу хочется поставить, а версия в deb пакете устарела, или такой вообще нет?

Есть два выхода использовать программу checkinstall. Она собирает всё в один пакет.
К сожалению она позволяет решить только вопрос с удалением программы.
И даже если apt-get будет знать, что программа установлена, он в лучшем случае сообщит, что конфликт файлов, файл /some/path/to/some/file уже есть в пакете "имя пакета собранного с помощью checkinstall"
Чаще всего такие случаи очень корректно разрешаются путём удаления конфликтного пакета. Но времени на разбор ситуации это у вас займёт.

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

Вижу вам всё ещё интересно Это радует.
И так дано:
некий исходник gcoolprog-0.5.3.tar.bz2
Нужно собрать пакет.

Решение.
Ниже идёт вариант как я обычно поступаю в таком случае.

Первым делом смотрю нет ли deb пакета той же версии но допустим под Debian.
Если есть делаю так см. "Есть нужная версия пакета в репозитории debian или в будующем релизе убунты"

Если нет той же версии но есть предыдущей.
Тут можно сказать как повезёт, если изменения в исходниках не коснулись положения файлов то скорее всего дебианизация от сарого пакета подойдёт, нужно лишь сменить версию.
см. "Теперь вариант в репозитории есть пакет предыдущей версии."

ну и самый страшный случай нигде никаких deb пакетов нет только tar.gz и rpm
Не отчаиваться! И ни в коем случае не использовать rpm!!!

Нам понадобятся как минимум программы

Code

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

можно так же autobook это документация по утилитам* "GNU Autoconf, Automake, и Libtool"

Ну и конечно то что требуют сами исходные коды, для корректной сборки.

А так же не помешает завести ключик которым мы будем подписывать пакеты.
Данный шаг не обязателен его можно пропустить.

Для этого зайдите в Приложения-> Стандартные-> Пароли и ключи шифрования
В открывшемся окне в меню ключь->новый ключь
выбираем ключь pgp
Заполняем поля полное имя и электронный адрес.
В мире свободного программного обеспечения, для предотвращения "краж" или "подделок" принято подписывать свои "ценные" вещи электронным ключём, открытая часть которого хранится на обще доступных серверах и позволяет другим пользователям легко выяснить поддлинность и целостность той или иной вещи. Поэтому отнеситесь к созданию ключа очень ответственно. Никто вас не заставляет вписывать сюда раельные имя и фамилию, или ещё какие нибудь личные данные, но если вас не разыскивает интерпол думаю указать фамилию и имя будет верным решением, хотя можно и просто свой ник
В общем решайте сами. А вот почтовый адрес укажите реальный, и который вы не поменяете. Можно использовать адреса крупных доменов таких как gmail.com или yandex.ru (т.е. у вас там должен быть свой ящик) Это позволит в будующем легко связаться с вами, человеку который вас не знает но по той или иной причине встретил "вешь" подписанную вами.
Далее вас спросят ввести пароль. Как дополнительную защиту. Он может быть полезен если вы будете использовать закрытый ключь на машинах которым вы не можете 100% доверять. Обратная сторона, вам придётся вводить пароль каждый раз как только вы будете что то подписывать. Хотя последняя версия программы seahorse имеет демон который автоматически запускается в сеансе гнома, и умеет "запоминать пароль" на время сеанса, но пока не все программы умеют с ней работать.
И так вы создали ключь теперь его можно будет использовать при создании пакетов.
Для этого в файл ~/.bashrc или в другой стартовый скрипт вашего любимого шелла (для zsh ~/.zshrc)* нужно вписать переменные

Code

export DEBEMAIL=ваш@емэил

на основании емаил будет искаться ключь в пгп при подписи. пакета.
Нужно перелогиниться чтобы изменения вступили в силу.
Помните что если вы бэкпортируете пакет дебианизированный не вами обязательно нужно изменить версию.
Командой dch -i для того чтобы в изменениях вписался ваш email .
А для того чтобы ваш открытый ключ попал на сервер, в настройках seahorse ("Пароли и ключи шифрования")
нужно настроить соединение с сервером публичных ключей. Для этого нужно в меню правка->параметры
на закладке "Публикация ключей" поставить галку "Публиковать ключи..."
теперь можно выбрать ключ и в меню по правой кнопке выбрать "Синхронизировать и опубликовать ключи"

И так ...

Начну с самого страшного ) поскольку остальные случаи это частные решения самого страшного.

И так у нас есть только gcoolprog-0.5.3.tar.bz2
Обычно я выполняю следующие действия

Code
$ mkdir ~/src/gcoolprog
$ mkdir ~/src/gcoolprog/0.5.3
$ cd ~/src/gcoolprog/0.5.3
$ wget "http://<путь до файла>" (можно конечно и просто через браузер скачать но обычно так быстрее)

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

Немного забегая в перёд переархивируем файл программой gzip

Code
$ bunzip2* gcoolprog-0.5.3.tar.bz2
$ gzip gcoolprog-0.5.3.tar
получим gcoolprog-0.5.3.tar.gz
и переименуем  
$ mv gcoolprog-0.5.3.tar.gz gcoolprog_0.5.3.orig.tar.gz

(т.е. разделили имя и версию подчёркиванием и после версии добавили слово orig)

теперь распаковываем его (но не в коем случае не удаляем!)

Code

$ tar zxvf ./gcoolprog_0.5.3.orig.tar.gz
$ cd gcoolprog-0.5.3

(замечание для корректной сборки нужно чтобы корневая директория содержала не только название но и версию!)
ниже будем считать директорию ~/src/gcoolprog/0.5.3/gcoolprog-0.5.3 корневой директорией исходников.

далее выполняем "черновую" сборку. Т.е. делаем как обычно ./configure --prefix=/usr && make (но не устанавливаем!)
если конфигурируется со всеми нужными опциями и собирается в бинарный файл, значит осталось только дебианизировать.

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

Code
$ dh_make

Type of package: single binary, multiple binary, library, kernel module or cdbs?
  [s/m/l/k/b] s

Maintainer name : denis
Email-Address* *: Ubuntu_user@mail.ru
Date* * * * * * : Mon, 13 Aug 2007 12:40:33 +0400
Package Name* * : gcoolprog
Version* * * * *: 0.5.3
License* * * * *: blank
Type of Package : Single
Hit <enter> to confirm:

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

Если бы мы не переименовали архив то получили бы следующее сообщение

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.

в таком случае советую прервать dh_make (ctrl+c) и переименовать архив как описано выше.

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

Первым делом нужно добавить описание программы в файле debian/control

Code
Description: <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
в секции binary-arch:
нужно раскомментировать

Code

* * * *dh_install

(т.е. убрать # в начале строки)
без этого мы получим пустой пакет.

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

Теперь если выполнить в корне с исходниками

Code
$ dpkg-buildpackage -rfakeroot

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

Code

$ cd .. (в директорию выше т.е. в ~/src/gcoolprog/0.5.3)
$ 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

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

$ dpkg -i *.deb

Теперь вариант в репозитории есть пакет предыдущей версии.

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

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

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

Code
$ 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 файл gcoolprog_0.5.1.diff.gz (в самом низу в секции More Information on gcoolprog)

Code
$ 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

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

дальше нам нужно изменить версию командой

Code

$ dch -i

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

например увидим

Code
gcoolprog (0.5.1-1ubuntu2) feisty; urgency=low

* *

  -- denis <ubuntu_user@mail.ru>* Mon, 13 Aug 2007 14:13:27 +0400

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

Code

gcoolprog (0.5.3-1ubuntu1) feisty; urgency=low

* * New upstream release.

  -- denis <ubuntu_user@mail.ru>* Mon, 13 Aug 2007 14:13:27 +0400

сохранить изменения

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

Code
$ dpkg-buildpackage -rfakeroot

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

Code
$ 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

Ну и последний вариант
Есть нужная версия пакета в репозитории debian или в будующем релизе убунты
для дебиана нужно использовать сайт packages.debian.org
для убунты packages.ubuntu.com
тогда например в убунте ищем пакет gcoolprog в репозитории будующего релиза.

Code
$ 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

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

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

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

Code
$ dpkg-source -x ./gcoolprog_0.5.3-1.dsc

получим каталог gcoolprog-0.5.3

перейдём в него и сменим версию

Code
$ cd gcoolprog-0.5.3
$ dch -i

Code

gcoolprog (0.5.3-1ubuntu1) feisty; urgency=low

* * backport from gutsy

  -- denis <ubuntu_user@mail.ru>* Mon, 13 Aug 2007 14:13:27 +0400

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

Code

$ dpkg-buildpackage -rfakeroot

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

Code
$ 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

Некоторые команды мне подсказал Александр Герасёв
http://gq.net.ru/2007/03/16/building-deb-packages/

Официальное полное руководство на Русском http://www.debian.org/doc/maint-guide/
Уголок разработчика Debian http://www.debian.org/devel/

Хороший цикл статей http://tigro.info/blog/index.php?id=375
правда автор предвзято относится к сборке deb пакетов, но если на это не обращать внимания вполне приличный обзор.


grabberz.com


 
Форум » Операционные системы » Linux » Сборка из исходников в Debian (Ubuntu)
Страница 1 из 11
Поиск:


Бесплатный хостинг uCoz