[ назад ] [ Содержание ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ вперед ]
В мире свободного ПО общепринято изучать исходный код или даже делать исправления ошибок. Сборка из исходных текстов может быть также полезна и для включения возможностей, заблокированных в официальном пакете, или, наоборот, блокирования. Чтобы это сделать, вы должны загрузить исходный текст программы. Система 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.
Обычно, для сборки пакета нужны некоторые заголовочные файлы и совместно-используемые библиотеки. Все исходные пакеты имеют в своих управляющих файлах поле '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
Если вы хотите собрать пакет с поддержкой отладки, например, чтобы сообщить об ошибке, а может и исправить её -- то вы можете использовать обычные переменные среды окружения, поддерживаемые многими Debian пакетами.
Всё, что вам необходимо, для сборки пакета, содержащего программы с отладочной информацией [6] - это предварительно установить DEB_BUILD_OPTIONS=nostrip. Оптимизация также может усложнить отладку - её можно запретить, добавив строку noopt к переменной DEB_BUILD_OPTIONS. Пример:
$ DEB_BUILD_OPTIONS="nostrip noopt" dpkg-buildpackage -rfakeroot -uc -b
Если вы хотите изменить способ сборки пакета, то вам необходимо прочитать
описание файла 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
.
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 2006kov@debian.org