Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Приемы работы в Ubuntu.
Глава 6: Управление пакетами

Оригинал: "Ubuntu Hacks: Chapter 6 - Package Management"
Авторы: Кайл Ранкин, Джонатан Оксер, Билл Чайлдерс (Kyle Rankin, Jonathan Oxer, Bill Childers)
Дата публикации: June 2006
Перевод: Н.Ромоданов
Дата перевода: сентябрь 2010 г.

Совет # 59: Установка программ из исходных кодов

Когда нет репозитария и нет пакета, надежда все еще остается. В этом разделе описывается, как собрать из исходного кода и установить отдельно взятые программы.

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

Эти старые времена были не такими уж добрыми. Реальность такова, что наряду с тем, что было упомянуто выше, на вас возлагались некоторые дополнительные обязанности:

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

В настоящее время почти в каждом дистрибутиве, в том числе и в Ubuntu, не только используются пакеты (программы, которые были откомпилированы и собраны специально для вас), но также применяются некоторые средства автоматического управления зависимостями. Если вы хотите установить программу, вы должны только сообщить системе Ubuntu, какую программу требуется установить, и система найдет ее и все ее зависимости, и установит их для вас. Если вы хотите выполнить обновление, Ubuntu найдет для вас новые зависимости и новые версии. В настоящее время так мало программ, для которых нужно скачивать и компилировать исходный код, что Ubuntu даже не устанавливает (по умолчанию) те программы, которые нужны для компиляции исходного кода. В девяти случаях из десяти, пакет, который вам нужен, либо уже есть в дистрибутиве, либо, по крайней мере, уже имеется в виде предварительно откомпилированного пакета .deb (как установить такие пакеты, описывается в разделе "Устанавливаем и удаляем отдельные файлы .deb" [Совет # 57]).

Кроме всего вышесказанного, есть еще несколько обстоятельств, при которых от вас потребуется загрузка и компиляция программы из исходного кода:

  • Был выпущен совершенно новый проект с открытым кодом. Он настолько новый, что никто еще не решил собрать его в виде пакетов для Ubuntu.
  • Есть некоторая особенность в ядре или в иной программе, которая по умолчанию отключена, или есть патч, который вы бы хотели добавить, поэтому вам необходимо скомпилировать ядро из исходного кода. (Впрочем, вы можете узнать, что можно настроить пакет .deb с исходным кодом [Совет # 63] таким образом, чтобы получить то, что вам нужно).
  • Сторонний производитель оборудования выпустил драйверы для Linux, однако, они выпущены только в виде исходных кодов (или, возможно, они реализованы только в виде пакетов RPM, предназначенных для Red Hat и SUSE, а для любых других дистрибутивов - в виде файла .tar.gz), а для Ubuntu еще не выпущен какой-нибудь уже готовый для использования пакет.
  • Вы сами программист и хотели бы оказать помощь проекту с открытым исходным кодом, подготовив для него патчи, либо, возможно, вы хотите начать работу целиком над новым проектом.
  • Вышла новая версия программы и вы не можете ждать, пока она появится в виде пакета,поэтому вы должны собрать пакет самостоятельно. (Впрочем, заметим, что, в зависимости от того, с какой программой вы имеете дело, есть риск вывести из строя другие части системы, зависящие от старой версии программы. Обычно, когда должна обновляться программа, влияющая на работу других программ, ее установка и установка ее зависимостей должны происходить до их полной установки под контролем менеджером пакетов).

Предостережение

В мире программного обеспечения, предназначенного для установки под Ubuntu, компиляция программы из исходных кодов должна быть самой крайней мерой. Если вы не знаете, что делаете, то есть большая вероятность, что вы можете вывести из строя вашу систему и разрушить ее зависимости. Пожалуйста, испробуйте все другие возможности, которые есть в вашем распоряжении, в том числе встроенные в Ubuntu менеджеры пакетов, упомянутые в разделах "Управление пакетами из командной строки" [Совет # 54], "Управление пакетами с помощью Synaptic" [Совет # 55], и "Управление пакетами с помощью Adept" [Совет # 56]. Если они вам не подходят, попробуйте найти предварительно откомпилированный пакет .deb и следуйте инструкциям, приведенным в разделе "Устанавливаем и удаляем отдельные файлы .deb" [Совет # 57]. Наконец, если все эти варианты для вас не подходят, то читайте этот раздел дальше.

Установка средств компиляции

Если вам требуется выполнять компиляцию из исходного кода, вам сначала нужно установить компилятор и все другие пакеты, необходимые для сборки программ из исходных текстов. В Ubuntu это делается просто: достаточно открыть менеджер пакетов, которым вы предпочитаете пользоваться, а затем найти и установить пакет build-essential. Будут получены и установлены компилятор GNU C (gcc), make, g++, а также ряд других программ, которые вам потребуются:

$ sudo apt-get install build-essential

Получаем и компилируем исходный код

После того, как все эти программы будут установлены, скачайте tar-архив вашей программы и распакуйте его куда-нибудь, например, в ваш домашний директорий. Большинство архивов извлекаются в свои собственные директории (часто имеющие то же название, что и программа), так что следующим шагом будет переход (с помощью команды cd) в этот директорий:

greenfly@ubuntu:~$ tar xvzf program.tar.gz
               
greenfly@ubuntu:~$ cd program/

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

Шаг 1: Конфигурирование

Первый шаг процесса создания, как правило, состоит в запуске скрипта configure, который расположен в главном директории с исходным кодом:

greenfly@ubuntu:~/program$ ./configure

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

Шаг 2: Компиляция

После того, как скрипт configure успешно завершит свою работу, следующим шагом будет компиляция исходного кода. В большинстве сегодняшних проектов вместе со скриптом configure используется скрипт makefiles, так что следующим шагом будет запуск make из главного директория с исходным кодом:

greenfly@ubuntu:~/program$ make

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

Шаг 3: Установка

После того, как исходный код скомпилирован, последним шагом будет установка программы в системе. В большинстве программ функция, которая выполняет установку, находится в файле makefiles; однако, отметьте, что вы, вообще говоря, должны устанавливать программу с правами root, поскольку потребуется устанавливать файлы в директорий /usr и другие директории, запись в которые возможны только с правами root. Убедитесь, что вы все еще находитесь в директории с исходным кодом, и наберите:

greenfly@ubuntu:~/program$ sudo make install

Теперь программа будет установлена в системе.

Подсказка

В некоторых пакетах есть также функция "uninstall" ("удалить"), которая удаляет программу из системы. Просто вернитесь обратно в основной директорий с исходными кодами и выполните команду:

greenfly@ubuntu:~/program$ sudo make uninstall

Совет по поводу совета

В большинстве случаев при установке пакета используется процедура, которая устанавливает приложение в директорий /usr/local. Но если вы хотите быть уверены, что установка будет выполняться подальше от той части файловой системы, которая контролируется Ubuntu, добавьте к команде ./configure параметр --prefix=pathname следующим образом:

greenfly@ubuntu:~/program$ ./configure --prefix=/opt

Это работает почти всегда. Однако есть некоторые программы, в которых параметр --prefix не используется, а некоторые программы (такие как те, которые добавляются в модули ядра) будут размещать свои компоненты по всей файловой системе.


Назад Оглавление Вперед