Форум русскоязычного сообщества Ubuntu
Страница сгенерирована за 0.047 секунд. Запросов: 23.
- Сайт
- Об Ubuntu
- Скачать Ubuntu
- Семейство Ubuntu
- Новости
- Форум
- Помощь
- Правила
- Документация
- Пользовательская документация
- Официальная документация
- Семейство Ubuntu
- Материалы для загрузки
- Совместимость с оборудованием
- RSS лента
- Сообщество
- Наши проекты
- Местные сообщества
- Перевод Ubuntu
- Тестирование
- RSS лента
© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.
Компиляция и установка программ из исходников
Не редко необходимые пакеты можно найти только в виде исходных текстов, в данной статье описывается метод установки пакета из исходных текстов.
Распаковка
Программы обычно распространяются в упакованных архивах, это файлы с расширениями
.tar.gz (иногда .tgz) .tar.bz2
Нужно понимать отличие между архиватором и упаковщиком.
Для архивации директорий и файлов используется программа tar; результатом её работы является файл с расширением .tar. Грубо говоря, это копия файловой системы — директорий и файлов с их атрибутами и правами доступа, помещённая в один файл.
Данный файл по размеру будет чуть больше, чем суммарный размер файлов, которые были архивированы. Поэтому (а может и по другой причине) используют упаковщики — программы, которые позволяют уменьшить размер файла без потери данных.
Программа tar умеет распаковывать, поэтому не нужно вызывать gunzip, а можно просто указать программе tar, что файл нужно cначала распаковать. Например, команда
tar -xvf some_app_name>.tar.gz
сразу распакует и разархивирует. Отличие файлов с расширениями
.tar.gz
.tar.bz2
лишь в том, что использовались разные упаковщики, программа tar определяет метод сжатия автоматически и дополнительных опций в данном случае не требуется.
После распаковки необходимо перейти в полученный каталог, все описываемые ниже команды выполняются в каталоге с исходными текстами пакета.
cd имя_пакета>*
Сборка пакета
Для сборки программ в GNU/Linux используется (в основном) программа make, которая запускает инструкции из Makefile, но поскольку дистрибутивов GNU/Linux много, и они все разные, то для того чтобы собрать программу, нужно для каждого дистрибутива отдельно прописывать пути,где какие лежат библиотеки и заголовочные файлы. Программисты не могут изучать каждый дистрибутив и для каждого отдельно создавать Makefile. Поэтому придумали конфигураторы, которые «изучают» систему, и в соответствии с полученными знаниями создают Makefile. Но на конфигураторе они не остановились и придумали конфигураторы конфигураторов
…на этом они остановились ![]()
Для сборки нам нужны компиляторы: они прописаны в зависимостях пакета build-essential, так что достаточно установить его со всеми зависимостями. Ещё нужны autoconf и automake.
Итак, чтобы собрать что-то из исходников, нужно сначала собрать конфигуратор; как собрать конфигуратор, описано в файле configure.in. Для сборки конфигуратора необходимо выполнить
./bootstrap
./autogen.sh
Если таких скриптов в архиве не оказалось, то можно выполнить последовательно следующие команды:
aclocal autoheader automake --gnu --add-missing --copy --foreign autoconf -f -Wall
Все эти команды используют файл configure.in. После выполнения этих команд создастся файл configure. После этого необходимо запустить конфигуратор для проверки наличия всех зависимостей, а также установки дополнительных опций сборки (если возможно) и просмотра результата установки (опционально- может не быть)
./configure
Конфигуратор построит Makefile основываясь на полученных знаниях и файле makefile.am. Можно передать конфигуратору опции, предусмотренные в исходниках программы, которые позволяют включать/отключать те или иные возможности программы, обычно узнать о них можно командой
./configure --help
Также есть набор стандартных опций, вроде
--prefix=
, которая указывает, какой каталог использовать для установки. Для Ubuntu обычно
--prefix=/usr
--prefix=/usr/local
БЕЗ слеша в конце! Теперь можно запустить процесс сборки самой программы командой
make
Для сборки достаточно привелегий обычного пользователя. Окончанием сборки можно считать момент, когда команды в консоли перестанут «беспорядочно» выполняться и не будет слова error. Теперь всё скомпилировано и готово для установки.
Установка
Усилия потраченные на Правильную установку в последствии с лихвой окупятся в случае удаления или обновления устанавливаемого программного обеспечения.
Правильная установка(Вариант №1)
Установка при помощи утилиты checkinstall. Для установки выполните
sudo apt-get install checkinstall
Минус данного способа: checkinstall понимает не все исходники, поскольку автор программы может написать особые скрипты по установке и checkinstall их не поймёт.
Для создания и установки deb-пакета необходимо выполнить
sudo checkinstall
Правильная установка(Вариант №2)
Быстрое создание deb-пакета «вручную».
Основное отличие от предыдущего способа заключается в том, что в данном случае вы создаете пакет вручную и отслеживаете все вносимые изменения. Так же этот способ подойдет вам, если исходники не поддерживают сборку пакета с checkinstall.
Производим установку во временную директорию, где получаем весь набор устанавливаемых файлов:
fakeroot make install DESTDIR=`pwd`/tempinstall
Создадим в «корне пакета» директорию DEBIAN и сложим в DEBIAN/conffiles список всех файлов, которые должны попасть в /etc:
сd tempinstall mkdir DEBIAN find etc | sed "s/^/\//" > DEBIAN/conffiles
После чего создаём файл DEBIAN/control следующего содержания:
Package: имя_пакета Version: 1.2.3 Architecture: amd64/i386/armel/all Maintainer: Можете вписать своё имя, можете дребедень, но если оставить пустым, то dpkg будет ругаться Depends: Тут можно вписать список пакетов через запятую. Priority: optional Description: Тоже надо что-нибудь вписать, чтобы не кидало предупреждения
При необходимости там же можно создать скрипты preinst, postinst, prerm и postrm.
Создаем deb-пакет, для чего выполняем:
dpkg -b tempinstall
Получаем на выходе tempinstall.deb, который и устанавливаем
sudo dpkg -i tempinstall.deb
Глава 6. Сборка пакета
The rewrite of this tutorial document with updated contents and more practical examples is available as Guide for Debian Maintainers. Please use this new tutorial as the primary tutorial document.
Теперь мы готовы собрать пакет.
6.1. Полная (пере)сборка
Для полной (пере)сборки пакета, необходимо убедиться в установке следующего:
- пакета build-essential ,
- пакетов, перечисленных в поле Build-Depends (смотрите Раздел 4.1, «Файл control ») и
- пакетов, перечисленных в поле Build-Depends-indep (смотрите Раздел 4.1, «Файл control »).
Затем выполните следующую команду в каталоге с исходным кодом:
$ dpkg-buildpackage -us -uc
Она сделает всё, что необходимо для создания всех двоичных пакетов и пакета с исходным кодом. Она выполняет:
- очистку дерева исходного кода ( debian/rules clean )
- сборку пакета с исходным кодом ( dpkg-source -b )
- сборку программы ( debian/rules build )
- сборку двоичных пакетов ( fakeroot debian/rules binary )
- создаёт файл .dsc
- создаёт файл .changes с помощью dpkg-genchanges
If the build result is satisfactory, sign the .dsc and .changes files with your private GPG key using the debsign command. You need to enter your secret pass phrase, twice. [62]
Для неродного пакета Debian, например, gentoo , после сборки пакетов вы увидите следующие файлы в родительском каталоге ( ~/gentoo ):
- gentoo_0.9.12.orig.tar.gz This is the original upstream source code tarball, merely renamed to the above so that it adheres to the Debian standard. Note that this was created initially by the command dh_make -f ../gentoo-0.9.12.tar.gz .
- gentoo_0.9.12-1.dsc Этот файл содержит информацию о содержимом исходного кода. Он файл генерируется из вашего файла control и используется при распаковке пакета с исходным кодом с помощью dpkg-source (1) .
- gentoo_0.9.12-1.debian.tar.gz В этом сжатом архиве tar находится содержимое вашего каталога debian . Все дополнения, вносимые вами в исходный код, хранятся в виде заплат quilt в каталоге debian/patches . Если кто-либо захочет пересоздать ваш пакет с нуля, они легко смогут сделать это, используя перечисленные выше три файла. Процедура извлечения тривиальна: просто скопируйте куда-нибудь три файла и выполните dpkg-source -x gentoo_0.9.12-1.dsc [63] .
- gentoo_0.9.12-1_i386.deb Это ваш собранный двоичный пакет. Вы можете использовать dpkg для его установки и удаления, как любой другой пакет.
- gentoo_0.9.12-1_i386.changes В этом файле описываются все изменения, сделанные в данной редакции пакета, и он используется программами поддержки FTP-архива Debian для внесения пакетов (как двоичных, так и с исходным кодом) в архив. Он частично генерируется из файлов changelog и .dsc . По мере того, как вы будете работать над пакетом, будет меняться его поведение и будет добавляться новая функциональность. Люди, загружающие ваш пакет, могут посмотреть этот файл и сразу понять, что было изменено. Программы поддержки архива Debian будут также отправлять содержимое этого файла в список рассылки debian-devel-changes@lists.debian.org.
The gentoo_0.9.12-1.dsc and gentoo_0.9.12-1_i386.changes files must be signed using the debsign command with your private GPG key in the ~/.gnupg/ directory, before uploading them to the Debian FTP archive. The GPG signature provides the proof that these files are really yours, using your public GPG key.
The debsign command can be made to sign with your specified secret GPG key ID (good for sponsoring packages) with the following in the ~/.devscripts file:
DEBSIGN_KEYID=ID_ключа_GPG
Длинные строки цифр в файлах .dsc и .changes — это контрольные суммы SHA1/SHA256 упомянутых файлов. Человек, загружающий ваши файлы, может проверить их с помощью sha1sum (1) или sha256sum (1) и, если числа не совпадают, он поймёт, что файл был повреждён или подделан.
6.2. Autobuilder
Debian поддерживает много переносов с помощью сети autobuilder, в которой работает служба buildd на компьютерах различных архитектур. Хотя вам и не придётся этим заниматься, но всё же следует узнать, что будет происходить с вашими пакетами. Рассмотрим в общих чертах как ваш пакет пересобирается для различных архитектур [64] .
Для пакетов с Architecture: any система autobuilder выполняет пересборку. Она убеждается, что установлен
- пакет build-essential и
- пакеты, перечисленные в поле Build-Depends (смотрите Раздел 4.1, «Файл control »).
Затем в каталоге с исходным кодом вызывается команда
$ dpkg-buildpackage -B
Она делает всё необходимое для сборки пакетов для данной архитектуры. А именно:
- очистку дерева исходного кода ( debian/rules clean )
- сборку программы ( debian/rules build )
- сборку архитектурно-зависимых двоичных пакетов ( fakeroot debian/rules binary-arch )
- подпись файла исходного кода .dsc с помощью gpg
- создание и подпись загружаемого файла .changes с помощью dpkg-genchanges и gpg
Так ваш пакет собирается для различных архитектур.
Хотя пакеты, перечисленные в поле Build-Depends-indep , должны быть установлены при ручном пакетировании (смотрите Раздел 6.1, «Полная (пере)сборка»), их не нужно устанавливать при использовании системы autobuilder, так как она занимается исключительно архитектурно-зависимыми двоичными пакетами [65] . Это различие между обычным пакетированием и использованием autobuilder определяет, где должны быть перечислены необходимые пакеты: в поле Build-Depends или Build-Depends-indep файла debian/control (смотрите Раздел 4.1, «Файл control »).
6.3. Команда debuild
Для автоматизации действий по сборки с помощью dpkg-buildpackage можно использовать команду debuild . Смотрите debuild (1) .
The debuild command executes the lintian command to make a static check after building the Debian package. The lintian command can be customized with the following in the ~/.devscripts file:
DEBUILD_DPKG_BUILDPACKAGE_OPTS="-us -uc -I -i" DEBUILD_LINTIAN_OPTS="-i -I --show-overrides"
Для очистки каталога исходного кода и пересборки пакета выполните:
$ debuild
Для очистки древа исходного кода выполните:
$ debuild -- clean
6.4. Пакет pbuilder
В чистой среде сборки ( chroot ) для проверки пакетных зависимостей очень полезен пакет pbuilder [66] . Он поможет убедиться в чистоте сборки под управлением auto-builder из sid для различных архитектур и избежать опасной ошибки FTBFS (ошибка сборки из исходного кода), которая всегда относится к категории RC (критична для данного выпуска) [67] .
Давайте настроим пакет pbuilder следующим образом:
- дадим пользователю право записи в каталог /var/cache/pbuilder/result
- создадим каталог для размещения сценариев, например, /var/cache/pbuilder/hooks , доступный пользователю для записи.
- добавим в файл ~/.pbuilderrc или в /etc/pbuilderrc следующие строки:
AUTO_DEBSIGN=$ HOOKDIR=/var/cache/pbuilder/hooks
Для начальной инициализации локальной системы chroot пакета pbuilder выполним:
$ sudo pbuilder create
Если у вас имеется готовый пакет исходного кода, то в каталоге, где расположены файлы foo .orig.tar.gz , foo .debian.tar.gz и foo .dsc , для обновления локальной системы chroot пакета pbuilder и сборки соответствующих двоичных пакетов выполните следующие команды:
$ sudo pbuilder --update $ sudo pbuilder --build foo_версия.dsc
Только что собранные пакеты без подписи GPG будут помещены в каталог /var/cache/pbuilder/result/ , их владельцем будет обычный пользователь (не суперпользователь).
Подписи GPG для файлов .dsc и .changes можно сгенерировать следующим образом:
$ cd /var/cache/pbuilder/result/ $ debsign foo_версия_архитектура.changes
Если у вас есть обновлённое древо исходного кода, но нет собранных пакетов с исходным кодом, выполните в каталоге, где размещён подкаталог debian , другие команды:
$ sudo pbuilder --update $ pdebuild
Вы можете войти внутрь окружения chroot и настроить его командой pbuilder —login —save-after-login . Изменения будут сохранены, когда вы покинете оболочку, нажав ^D (Control-D).
Последняя версия команды lintian может быть вызвана в окружении chroot , используя сценарий /var/cache/pbuilder/hooks/ /B90lintian , настроенный следующим образом [68] :
#!/bin/sh set -e install_packages() < apt-get -y --allow-downgrades install "$@" >install_packages lintian echo "+++ lintian output +++" su -c "lintian -i -I --show-overrides /tmp/buildd/*.changes" - pbuilder # use this version if you don't want lintian to fail the build #su -c "lintian -i -I --show-overrides /tmp/buildd/*.changes; :" - pbuilder echo "+++ end of lintian output +++"
Для правильной сборки пакета для sid вам потребуется самое свежее окружение этой ветви, однако миграция на sid всей системы может быть нежелательна. Пакет pbuilder поможет вам в этой ситуации.
You may need to update your stable packages after their release for stable-proposed-updates , stable/updates , etc. [69] For such occasions, the fact that you may be running a sid system is not a good enough excuse for failing to update them promptly. The pbuilder package can help you to access environments of almost any Debian derivative distribution of the same architecture.
6.5. git-buildpackage command and similar
Если автор программы применяет систему управления кодом [70] , то и вы можете использовать её возможности. Это упрощает слияние и выборку заплат для исходного кода. Для каждой VCS существуют специализированные инструменты, позволяющие производить сборку пакетов Debian:
- git-buildpackage : инструменты для пакетирования в репозиториях Git.
- svn-buildpackage : вспомогательные программы для сопровождения пакетов Debian в Subversion.
- cvs-buildpackage : набор сценариев для пакетирования в CVS.
Среди разработчиков Debian становится популярным использовать git-buildpackage для управления пакетами Debian на сервере Git alioth.debian.org. [71] В этот пакет включено много команд для автоматизации процесса упаковки:
- gbp-import-dsc (1) : import a previous Debian package to a Git repository.
- gbp-import-orig (1) : import a new upstream tar to a Git repository.
- gbp-dch (1) : generate the Debian changelog from Git commit messages.
- git-buildpackage (1) : сборка пакетов Debian из репозитория Git.
- git-pbuilder (1) : сборка пакетов Debian из репозитория Git с помощью pbuilder / cowbuilder .
Для ведения пакетирования в этих командах используются 3 ветви:
- main — дерево родных пакетов Debian.
- upstream — дерево авторского исходного кода.
- pristine-tar для авторского tar, создаваемый при использовании параметра —pristine-tar . [72]
Для настройки git-buildpackage используйте файл ~/.gbp.conf . Смотрите gbp.conf (5) . [73]
6.6. Быстрая пересборка
При работе над большим пакетом, возможно, вы не захотите каждый раз полностью пересобирать его из исходного кода при изменении настроек в файле debian/rules . Исключительно для тестовых целей вы можете создать deb-файл без пересборки кода следующим образом [74] :
$ fakeroot debian/rules binary
Или просто выполните для выяснения возможна ли сборка пакета:
$ fakeroot debian/rules build
После выбора оптимальных настроек не забудьте пересобрать пакет стандартными средствами. Полученные таким способом файлы .deb могут быть загружены в архив некорректно, если вы попытаетесь это сделать.
6.7. Иерархия команд
Вот краткая сводка команд, которые объединяются в единую систему для сборки пакетов. Есть много способов сделать одно и тоже.
- debian/rules = сценарий сопровождающего для сборки пакета
- dpkg-buildpackage = ключевой инструмент сборки пакета
- debuild = dpkg-buildpackage + lintian (сборка при проверенных переменных окружение)
- pbuilder = ключевой инструмент chroot-окружения Debian
- pdebuild = pbuilder + dpkg-buildpackage (сборка в chroot)
- cowbuilder = ускорение выполнения pbuilder
- git-pbuilder = простой синтаксис командной строки для pdebuild (используется в gbp buildpackge )
- gbp = управление исходным кодом Debian в репозитории git
- gbp buildpackge = pbuilder + dpkg-buildpackage + gbp
Хотя высокоуровневые команды, такие как gbp buildpackge и pbuilder , предоставляют замечательную среду сборки пакета, необходимо понимать какие нижележащие команды, такие как debian/rules и dpkg-buildpackage , в них используются.
[62] Для подключения к доверенному веб (web of trust) этот ключ GPG должен быть подписан разработчиком Debian и должен быть зарегистрирован в связке ключей Debian. Это позволяет закачивать пакеты для приёма в архивы Debian. Смотрите Создание нового ключа GPG и вики Debian по подписыванию ключами.
[63] Вы можете избежать наложения заплат quilt в формате исходного кода 3.0 (quilt) в конце извлечения, указав параметр —skip-patches . Или же вы можете выполнить quilt pop -a после обычной распаковки.
[64] На самом деле, работа системы autobuilder гораздо сложнее, однако её детальное описание не для этого документа.
[65] В отличие от пакета pbuilder ,окружение chroot из пакета sbuild , который используется системой autobuilder, не требует минимальной системы и допускает наличие установленных пакетов, не являющихся необходимыми.
[66] Так как пакет pbuilder всё ещё развивается, за подробностями настройки обратитесь к его официальной документации.
[67] Более полная информация по автоматической сборке пакетов Debian приведена в http://buildd.debian.org/.
[68] Здесь предполагается, что HOOKDIR=/var/cache/pbuilder/hooks . Примеры вызываемых (hook) сценариев можно найти в каталоге /usr/share/doc/pbuilder/examples .
[69] Есть некоторые ограничения для такого обновления пакета из stable .
[72] The —pristine-tar option invokes the pristine-tar command, which can regenerate an exact copy of a pristine upstream tarball using only a small binary delta file and the contents of the tarball that are typically kept in an upstream branch in the VCS.
[73] Несколько веб-ресурсов для опытных пользователей:
- Сборка пакетов Debian с помощью git-buildpackage ( /usr/share/doc/git-buildpackage/manual-html/gbp.html )
- Пакеты debian в git
- Использование Git для пакетирования Debian
- git-dpm: пакеты Debian в Git
[74] Environment variables that are normally configured to proper values are not set by this method. Never create real packages to be uploaded using this quick method.
|
![]() |
|
| Глава 5. Другие файлы в каталоге debian/ | |
Глава 7. Проверка пакета на наличие ошибок |
Как установить dkms build-essential в Debian 10?

Вот как все было:
В виртуалбоксе поставил убунту, и по гайду пингвинуса установил там «dkms build-essential» через команду в терминале «sudo apt install dkms build-essential». А когда я установил дебиан 10 и потом ввёл эту же команду, терминал показал это:
и всё бы ничего, но я не могу ничего писать в терминале. Как тогда установить «dkms build-essential» в дебиане?
- Вопрос задан более двух лет назад
- 425 просмотров
3 комментария
Простой 3 комментария
