[ назад ] [ Содержание ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ вперед ]


APT HOWTO
Глава 5 - Сборка из исходного пакета


5.1 Загрузка пакетов исходных текстов

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

Другой способ использования исходных текстов в Debian - адаптация более новых версий программ из, например, нестабильного дистрибутива для использования со стабильным дистрибутивом. Сборка пакета в среде стабильного дистрибутива обеспечит генерацию .deb с зависимостями, соответствующими пакетам, доступным в дистрибутиве.

Для этого запись deb-src в вашем файле /etc/apt/sources.list должна указывать на нестабильный дистрибутив. Она должна быть разрешена (раскомментирована). См. раздел Файл /etc/apt/sources.list, раздел 3.1.

Aptitude - программа управление Debian пакетами - в основном, нацелена на управление двоичными пакетами. Для управления исходными пакетами вам нужно использовать apt-get. Для загрузки исходного пакета - необходимо выполнить следующую команду:

     $ apt-get source packagename

Команда должна загрузить три файла: .orig.tar.gz, .dsc и .diff.gz. В случае исконных Debian пакетов, последний из файлов не загружается и первый файл, обычно, не имеет вставки "orig" в своем имени.

Файл .dsc пользуется командой dpkg-source для распаковки пакета исходных текстов в каталог packagename-version. Внутри каждого загруженного пакета исходных текстов есть каталог debian/, который содержит файлы, необходимые для создания пакета .deb.

Для автоматического построения пакета из загружаемых исходных текстов просто укажите ключ -b в командной строке, примерно так:

     $ apt-get -b source имяпакета

Если вы решили не создавать .deb при загрузке, то вы можете создать его позже, запустив следующую команду из каталога, созданного для пакета после загрузки:

     $ dpkg-buildpackage -rfakeroot -uc -b

Заметим, что для сборки пакетов вам необходимы, по крайней мере, следующие пакеты: devscripts, dpkg-dev, debhelper, fakeroot - посмотрите пункт Установка и переустановка пакетов, раздел 4.4 и установите их прежде, чем продолжить. Многие пакеты также зависят от средств компиляции, так что может оказаться полезным в начале установить пакет build-essential. Возможно, понадобятся ещё какие-нибудь пакеты - более подробно об этом в Пакеты, необходимые для компиляции пакетов исходных текстов, раздел 5.2.

To install the package built by the commands above one must use the package manager directly. Take a look at Установка debian-пакетов, загруженных вручную или созданных локально, раздел 4.5. A useful tool is provided by the devscripts package: debi. If you run debi from inside the source package directory it will look for the .changes file at the parent directory to discover what are the binary packages the package produces and will run dpkg to install all of them. While this is not very useful if your source package produces conflicting packages, it might be in most circunstances. Of course you need root powers in order to perform this.

Есть разница между методом source команды apt-get и ее другими методами. Метод source может быть использован обычными пользователями, без необходимости иметь права root. Файлы помещаются в каталог, из которого вызывается команда apt-get source package.


5.2 Пакеты, необходимые для компиляции пакетов исходных текстов

Обычно, для сборки пакета нужны некоторые заголовочные файлы и совместно-используемые библиотеки. Все исходные пакеты имеют в своих управляющих файлах поле 'Build-Depends:', указывающее дополнительные пакеты, необходимые для сборки пакета из исходных текстов. Но также необходимы некоторые базовые пакеты, для продолжения предварительно ознакомьтесь с Загрузка пакетов исходных текстов, раздел 5.1.

APT имеет простой метод установки этих пакетов. Просто запустите apt-get build-dep package, где `package' - это имя пакета, который вы собираетесь построить. Например:

     # apt-get build-dep gmc
     Reading Package Lists... Done
     Building Dependency Tree... Done
     The following NEW packages will be installed:
       comerr-dev e2fslibs-dev gdk-imlib-dev imlib-progs libgnome-dev libgnorba-dev
       libgpmg1-dev 
     0 packages upgraded, 7 newly installed, 0 to remove and 1  not upgraded.
     Need to get 1069kB of archives. After unpacking 3514kB will be used.
     Do you want to continue? [Y/n]

Будут установлены пакеты, необходимые для правильной сборки пакета gmc. Важно отметить, что команда не загружает сам исходный пакет. По этой причине вам потребуется дополнительно выполнить apt-get source.

Если вы хотите узнать только то, какие пакеты необходимы для сборки данного пакета, то можно воспользоваться методом showpkg команды apt-cache (см. Получение информации о пакетах., Глава 6), показывающим, среди прочей информации, строку Build-Depends со списком необходимых пакетов.

     # apt-cache showsrc package

5.3 Сборка отладочного пакета

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

Всё, что вам необходимо, для сборки пакета, содержащего программы с отладочной информацией [6] - это предварительно установить DEB_BUILD_OPTIONS=nostrip. Оптимизация также может усложнить отладку - её можно запретить, добавив строку noopt к переменной DEB_BUILD_OPTIONS. Пример:

     $ DEB_BUILD_OPTIONS="nostrip noopt" dpkg-buildpackage -rfakeroot -uc -b

5.4 Переопределение параметров сборки пакета

Если вы хотите изменить способ сборки пакета, то вам необходимо прочитать описание файла debian/rules. Внутри основного каталога, созданного при распаковке исходного пакета, находится каталог debian, содержащий множество файлов. Один из них особый: файл rules.

Это, обычно, Makefile, содержащий цели для настройки, сборки, установки и создания пакета. Например, если нужно, чтобы пакет luola был собран без поддержки звука, то, после загрузки и распаковки исходников, необходимо поправить файл debian/rules следующим образом:

     [...]
     configure: configure-stamp
     configure-stamp:
     	dh_testdir
     	# Add here commands to configure the package.
     	./configure $(confflags) \
     		--prefix=/usr \
     		--mandir=share/man \
     		--infodir=share/info \
     		--datadir=share/games \
     		--bindir=games \
     		--enable-sound
     #		 --enable-sdl-gfx	
     
     	touch configure-stamp
     [...]

Найдите опцию --enable-sound! Если удалить её или заменить на --disable-sound и затем пересобрать пакет, используя методику, описанную в Загрузка пакетов исходных текстов, раздел 5.1 -- мы получим пакет luola без поддержки звука.

Если же вы хотите постоянно работать с исходными пакетами, то рекомендуем вам прочесть Руководство нового сопровождающего Debian и Политику Debian. Также полезным будет чтение документации, доступной в Уголке разработчиков Debian.


5.5 Создание пакетов зависимостей

Sometimes, people want to use a specific version of a program available only on source code, with no Debian package. But the packaging system can be a trouble when doing this. Suppose you want to compile a new version of your email server. All is fine, but many packages in Debian depend on an MTA (Mail Transfer Agent). Since you installed something you compiled by yourself, the packaging system doesn't know about it.

Тут на сцену выходит equivs. Чтобы его использовать, установите одноимённый пакет. Equivs создаёт пустой пакет, наполненный зависимостями, уведомляя, таким образом, систему пакетов, что все зависимости удовлетворены.

Прежде, чем мы начнем, хорошо бы напомнить вам, что есть более безопасные способы компиляции программ, для которых уже есть пакеты Debian с различными параметрами, и что в этом случае лучше не использовать equivs для замены зависимостей, если вы не уверены в том, что все делаете правильно. См. подробности в разделе Загрузка пакетов исходных текстов, раздел 5.1.

Давайте вернемся к примеру с MTA, вы только что установили свежесобранный postfix и переходите к установке mutt. Сразу же вы обнаружите, что mutt нужен установленный MTA. Но ведь он у вас уже есть.

Зайдите в какой-нибудь каталог (/tmp, например) и запустите:

     # equivs-control name

Замените name на имя управляющего файла, который вы создаете. Будет создан следующий файл:

     Section: misc
     Priority: optional
     Standards-Version: 3.5.10
      
     Package: <enter package name; defaults to equivs-dummy>
     Version: <enter version here; defaults to 1.0>
     Maintainer: Your Name <yourname@foo.com>
     Pre-Depends: <packages>
     Depends: <packages>
     Recommends: <packages>
     Suggests: <package>
     Provides: <(virtual)package>
     Architecture: all
     Copyright: <copyright file; defaults to GPL2>
     Changelog: <changelog file; defaults to a generic changelog>
     Readme: <README.Debian file; defaults to a generic one>
     Extra-Files: <additional files for the doc directory, commaseperated>
     Description: <short description; defaults to some wise words>
      long description and info
      .
      second paragraph

Нам просто нужно поправить его, как нам нужно. Формат полей и их описаний понятен визуально, так что давайте сделаем требуемое:

     Section: misc
     Priority: optional
     Standards-Version: 3.0.1
     
     Package: mta-local
     Provides: mail-transport-agent

Вот и всё. mutt зависит от mail-transport-agent, это виртуальный пакет, обеспечиваемый всеми MTA. Теперь mta-local регистрируется как mail-transport-agent, используя поле Provides.

The Conflicts and Replaces fields are needed, too, so that APT and dpkg will understand they should remove the currently installed MTA package in favour of the new one you're installing.

Сейчас вам нужно только построить пакет:

     # equivs-build name
     dh_testdir
     touch build-stamp
     dh_testdir
     dh_testroot
     dh_clean -k
     # Add here commands to install the package into debian/tmp.
     touch install-stamp
     dh_testdir
     dh_testroot
     dh_installdocs
     dh_installchangelogs
     dh_compress
     dh_fixperms
     dh_installdeb
     dh_gencontrol
     dh_md5sums
     dh_builddeb
     dpkg-deb: building package `name' in `../name_1.0_all.deb'.
     
     The package has been created.
     Attention, the package has been created in the current directory,

И установите полученный .deb файл. См. Установка debian-пакетов, загруженных вручную или созданных локально, раздел 4.5.

Очевидно, существует различные применения для equivs. Одно из них, например, - создание пакета my-favorites, зависящего от программ, которые вы обычно устанавливаете. Просто включите свое воображение, но будьте осторожны.

Важно заметить, что примеры управляющих файлов есть в каталоге /usr/share/doc/equivs/examples. Посмотрите их.


[ назад ] [ Содержание ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ вперед ]


APT HOWTO

2.0.2 - October 2006

Gustavo Noronha Silva kov@debian.org