Установка из исходников
Материал из Mandriva Russian Community Wiki
Иногда, однако, такой способ является неизбежным — для версий ПО, для которых нет готовых пакетов, для непопулярного ПО или не попавшего ни в один репозиторий по каким-либо причинам.
Содержание |
Прежде чем вы начнёте
Прежде чем начать, желательно понять в общем виде, что включает в себя сборка программного обеспечения из исходных кодов, и подготовить к этому себя и свою систему.
Что произойдет
Установка программного обеспечения из исходных кодов происходит в три этапа.
- Сначала сценарий (скрипт) проанализирует Вашу систему и проверит, установлено ли необходимое программное обеспечение для успешной компиляции; при необходимости настроит параметры компиляции и сборки.
- Второй этап — компиляция кода, сборка всех частей программы.
- На третьем этапе готовые приложения, библиотеки и прочие файлы скопируются в соответствующие каталоги в вашей системе, чтобы все пользователи имели к ним доступ.
В случае очень простой программы первый шаг, скорее всего, будет пропущен. Кроме того, некоторые приложения спроектированы таким образом, что могут запускаться без выполнения третьего шага.
В простейшем случае весь процесс установки выглядит так:
Эти команды нужно выполнить из корневой директории исходных файлов.
Подготовка
Важно, чтобы исходный код был доступен даже после того, как вы успешно установите приложение, так как без него удаление программы будет трудоёмким. Если вы хотите держать ваши исходные коды чётко организоваными, вы можете создать каталог с именем source или src в вашем домашнем каталоге, и хранить исходники всех приложений, которые вы компилируете, в подкаталогах этой директории.
Кроме того, необходимо убедиться, что установлены основные приложения, необходимые для сборки программ. Установите пакеты gcc и checkinstall, если они еще не установлены. Может также понадобиться gcc-c++. Перед сборкой приложения прочтите документацию, включенную в архив. Обычно это файл INSTALL, в котором содержатся конкретные инструкции и информация о приложении.
Шаг 1. Подготовка к сборке
Для большинства приложений шаг 1 выполняется запуском команды ./configure в верхнем уровне каталога, содержащего исходный код. Если процесс конфигурации прошёл удачно, этот сценарий завершится либо без каких-либо сообщений об ошибке или с резюме, как именно программа будет собрана: опции, которые будут включены, и, возможно, куда она будет установлена.
Более сложное и серьезное программное обеспечение, как правило, имеет несколько необязательных параметров для команды configure, которые используются для включения или отключения функций программы. Вы можете использовать команду ./configure --help, чтобы просмотреть список этих параметров и включить/выключить некоторые из них, если это вам необходимо.
В большинстве случаев вы можете не использовать параметры --prefix, --sysconfdir или --localstatedir.
Для удобства лучше использовать команду ./configure --help|less, тогда можно будет просмотреть с прокруткой все опции и сохранить в буфер обмена (под иксами) нужные.
Большинство программ при использовании make install устанавливаются в папку /usr/local, если вам нужно это изменить, например, на /usr, вам следует запустить сценарий так: ./configure --prefix=/usr. Впрочем, обычно этого не требуется (подробнее). Если вы не знаете, нужно ли это вам, не обращайте внимания на это примечание.
Варианты
Как отмечалось выше, для некоторых простых приложений нет необходимости делать конфигурацию. В этом случае нужно перейти сразу к шагу 2.
В некоторых других случаях (как правило, только для недоработанного программного обеспечения или для нестабильных снапшотов) вам придется выполнить другую команду — ./autogen.sh, прежде чем вы сможете запустить ./configure. Этот сценарий создает configure и файлы, необходимые для генерации Makefiles (сценарии, которые контролируют фактический процесс компиляции).
Некоторые приложения могут использовать для сборки систему компиляции, совершенно отличную от традиционной (которая подробно описана на данной странице). В этом случае она почти наверняка будут документирована в файле README или INSTALL в каталоге с исходниками. Например, KDE 4 использует для сборки cmake и не поставляет сценарий configure.
Проблемы
Неудача на этом шаге не является чем-то необычным, особенно в первые несколько раз при попытке установить что-то из исходников. Конфигурационный сценарий выдаст ошибку, сообщая какой пакет или библиотека не установлены. Часто пакет, на который он жалуется, на самом деле установлен.
Не паникуйте! Это связано с политикой сборки пакетов Mandriva. В Mandriva Linux разделяемые библиотеки (наборы функций, которые хранятся в общих каталогах и могут быть использованы разными приложениями) собираются в отдельный от приложений пакет. Пакеты библиотек затем также разделяются. Некоторые библиотеки полезны только для компиляции: они никогда не использовалуться для простого запуска приложений. В Mandriva Linux библиотеки, необходимые для запуска приложений, на самом деле содержатся в одном пакете, а библиотеки необходимые для сборки, содержатся в другом пакете. Таким образом, часто для приложения, ассоциированного с библиотекой, Mandriva Linux включает три пакета.
Если приложение называется например, то они будут называться примерно так, как приведено ниже:
например libнапример libнапример-devel
Иногда существует только один пакет, иногда два, иногда все три. Как правило, для большинства программ используется основная модель.
- Пакет например содержит само приложение и конфигурационные файлы, пункты меню, и связанные с ними данные (звуки, графика, переводы и т.д.)
- Пакет libнапример содержит файлы для библиотек, связанных с приложением, которые нужны для запуска приложения (и любых других приложений, которые используют те же библиотеки).
- В пакете libнапример-devel содержатся файлы библиотек, необходимые для сборки использующих библиотеки программ.
И если при попытке собрать что-либо из исходного кода скрипт configure завершается с ошибкой, сообщая что example не был установлен, то, скорее всего, вам нужно установить пакет libexample-devel.
Часто (опять же, чаще всего первые несколько раз) может потребоваться установить несколько -devel пакетов, которые еще не установлены. В этом случае после установки одного пакета и перезапуска ./configure сценарий выдаст новую ошибку, на этот раз с жалобой на то, что не хватает ещё одного пакета. Продолжайте устанавливать все необходимые -devel пакеты, и в конечном итоге этот шаг будет пройден.
Если необходимый пакет -devel не найден, либо его установка не помогает, простейший способ определить, что же нужно конфигурационному сценарию, — это просмотреть файл config.log и найти, что конкретно он не находит. Это может быть библиотека, заголовочный файл либо еще что-то. Потом по имени файла можно найти пакет, в который он входит.
Запомните или запишите список требуемых пакетов (зависимостей), которые вам придётся установить. Это будет, хоть и неполный, список зависимостей для rpm-пакета, который вы создадите на шаге 3.
Возможно, также стоит изучить секцию #Проблемы pkgconfig, если проблема не решается установкой пакета.
Шаг 2. Сборка
После того как вы успешно завершили Шаг 1, пора перейти к шагу 2 — компиляция и сборка. Как правило, этот шаг запускается командой make в корневой директории файлов с исходным кодом (например, ~/src/gcc). Для хорошо написанного приложения, если сценарий configure успешно завершился, сборка также должна пройти без ошибок.
В зависимости от сложности программы и мощности компьютера сборка может занимать от нескольких секунд до нескольких часов. После сборки на экране (точнее, в stdout или stderr) должно появиться краткое сообщение о завершении: если ошибки не отображаются, процесс был успешным.
Варианты
Вариации на данном этапе процедуры редки, но иногда вам может понадобиться запустить команду make с дополнительными параметрами для компиляции дополнительных частей приложения или запустить команду снова в подкаталоге. Такие вариации почти всегда изложены в файлах README или INSTALL.
Некоторые программы используют систему сборки cmake вместо make. Это, правда, обнаруживается ещё на шаге 1.
Проблемы
Зависимости некоторых программ недостаточно хорошо определены авторами, и в configure не включены проверки наличия всех необходимых библиотеки, требуемой для компиляции. В этом случае процесс компиляции будет прерван, и будут выведены несколько сообщений об ошибках. Чтобы узнать, что пошло не так, вам, как правило, необходимо взглянуть на первую ошибку. Часто суть этой ошибки будет в том, что -lбиблиотека не найден. Это означает, что требуемая -devel библиотека не установлена, так же, как обсуждалось в Шаге 1.
Обычно имя библиотека имеет некоторые сходства с именем необходимого пакета, но иногда не везёт. Чтобы найти название пакета из репозитория, который содержит определенный файл, используйте urpmf. Например, urmpf qtconfig расскажет Вам о том, что qtconfig находится в пакете qt3-common.
Если вам не удалось найти пакет с нужной библиотекой, можете попробовать использовать какой-нибудь поисковик (например, гугль) для поиска по ошибке, отправить просьбу помочь в форум поддержки Mandriva (например, форум Mandriva) или на зайти на сайт приложения, которые вы пытаетесь собрать. Вы должны также проверить файлы README и INSTALL в каталоге исходным кодом, так как в них возможно есть список требуемых пакетов.
Установите соответствующего пакеты, а затем повторно запустите команду make, и сборка должна продолжиться с места остановки. Перезапускать процесс с шага 1 обычно не требуется.
Если процесс компиляции прекращается с другими ошибками, то вам, как правило, необходимо обратиться за помощью к эксперту на форуме Mandriva или за помощью на сайт приложения, которые вы хотите установить.
Шаг 3. Установка в систему
Если Шаг 2 был успешно завершен, то теперь вы можете создать rpm-пакет и установить приложение.
Установка предполагает копирование файлов в те директории, где они будут доступны всем пользователям и, если потребуется, другим приложениям.
Для создания пакета запустите checkinstall от имени суперпользователя (чтобы получить права root, выполните команду su и введите Ваш пароль: не забудьте выйти из режима суперпользователя с помощью команды exit после запуска checkinstall). В качестве зависимостей укажите недостающие пакеты, которые вы устанавливали на предыдущих шагах — это упростит установку в следующий раз. Кроме того, список зависимостей вы можете найти на официальном сайте проекта. Оттуда же можно взять описание пакета.
Когда пакет будет собран, вы увидите на экране путь к готовому пакету. Установите его командой
.При необходимости можно будет воспользоваться командой urpme для удаления пакета.
Если же вы используете make install, произойдёт следующее:
В большинстве случаев приложение будет установлено в каталог /usr/local:
- Исполнимые файлы будут размещены в /usr/local/bin;
- Библиотеки будут помещены в /usr/local/lib;
- Конфигурационные файлы будут помещены в /usr/local/etc — и в домашнюю папку пользователя;
- Файлы данных будут помещены в файл /usr/local/share.
Это важное соглашение: Mandriva Linux (и все остальные дистрибутивы) никогда не устанавливают что-либо в /usr/local и никогда не изменят каких-либо файлов в этом каталоге, так что Вы можете быть абсолютно уверены в том, что ни один файл не будет поврежден в результате компиляции и установки приложения из исходного кода или в результате ручного запуска команды . Если следовать этому соглашению, ничего в результате установки из исходного кода не перемешается с компонентами системы, установленными с помощью инструментов управления пакетами Mandriva.
Лучше устанавливать программы, используя checkinstall, так как в этом случае они будут правильно обрабатываться как зависимости другими пакетами. Например, если вас не устраивает версия screen из репозитория, и вы хотите установить другую, нужно собрать rpm-пакет, установить его, а затем все программы, требующие screen, будут использовать ваш пакет, а не пакет из репозитория.
Если же вы хотите установить программу, не заменяя версию из официальных источников, можно воспользоваться make install. В таком случае ваша программа не будет учитываться другими rpm-пакетами и обновляться менеджером обновлений.
Варианты
Иногда вы можете встретить приложения, которые по умолчанию устанавливаются в системные директории: /usr/bin для исполняемых файлов, /usr/lib для библиотек, /etc для конфигурационных файлов и так далее. Такое поведение программы может привести к конфликтам с другими частями системы и стоит сообщить разработчикам этой программы об этом как об ошибке, если в справочных файлах программы явно не указано требование установки в системные папки.
Проблемы
Обычно на этом шаге проблемы возникают очень редко. Если же они возникли, то обратитесь за помощью экспертов.
Программы, установленные вручную, часто не добавляются в меню (KDE, GNOME), может оказаться бесполезно искать их там.
Команда не найдена (command not found)
Если при попытке запуска приложения правильной командой оболочка вам возвращает ошибку 'команда не найдена', то сначала попробуйте запустить команду hash -r, а затем повторите попытку. Если это не решит проблему, то скорее всего /usr/local/bin (если вы устанавливали программу в /usr/local) не находится в вашем PATH.
PATH — это переменная окружения в которой перечислены имена каталогов, содержащих исполняемые файлы: любой исполнимый файл в каталоге, указанном в PATH, можно запустить просто вводом его названия, без указания в каком каталоге он находится. Чтобы узнать, есть ли /usr/local/bin в PATH, выполните:
echo "$PATH"|if grep ':/usr/local/bin:' &>/dev/null; then
echo -e "\e[32m\e[1m/usr/local/bin уже есть в PATH";
else
echo -e "\e[33m\e[1mДобавьте /usr/local/bin в PATH";
fi;
tput sgr0;
Чтобы добавить /usr/local/bin в ваш PATH для текущего сеанса работы, выполните команду export PATH=$PATH:/usr/local/bin. Для того чтобы /usr/local/bin добавлялся в ваш PATH каждый раз при старте системы, отредактируйте файл ~/.bash_profile. Если уже есть строка вида
PATH=$PATH:$HOME/bin
добавьте /usr/local/bin в её конец:
PATH=$PATH:$HOME/bin:/usr/local/bin
Если нет такой строки, тогда добавьте эти две строчки в конец файла:
PATH=$PATH:/usr/local/bin export PATH
После внесения каких-либо изменений в PATH выполните команду hash -r.
Библиотека не найдена (libraries not found, *.so* not found)
Если Вы смогли запустить приложение, но оно падает и жалуется, что не смогло найти файлы библиотеки, то нужно добавить директорию /usr/local/lib в список директорий, в которых система будет искать разделяемые библиотеки. Чтобы сделать это, отредактируйте файл /etc/ld.so.conf — вам необходимы привилегии администратора — добавьте следующую строку в конце:
/usr/local/lib
Сохраните файл и запустите команду ldconfig также с привилегиями администратора. Вам потребуется сделать это только один раз.
Проблемы pkgconfig
Существует ещё одна принципиальная проблема, с которой вы можете столкнуться. Некоторые приложения — как правило, из GNOME — используют систему pkgconfig. Она используется при компиляции приложений как стандартный способ проверки присутствия необходимых -devel пакетов библиотек из других приложений.
Программа или библиотека, написанная с использованием системы pkgconfig, для предоставления другим приложениям сведений о себе установит файл с именем имя_программы.pc в директорию /usr/local/lib/pkgconfig. Другое приложение, зависящее от первого, при сборке может пожаловаться на то, что первое приложение не найдено. Это объясняется отсутствием каталога /usr/local/lib/pkgconfig в пути поиска доступных библиотек программой pkgconfig.
Чтобы решить эту проблему в текущем сеансе работы, запустите команду export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig.
Чтобы решить эту проблему навсегда, добавьте следующие две строки в файл ~/.bash_profile:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
Удаление программ
Удаление программного обеспечения, которое вы собрали из исходников, можно сделать, как правило, просто выполнив команду make uninstall (с привилегиями root) в каталога исходного кода верхнего уровня.
Иногда вы можете встретить программное обеспечение, которое реализует make install, но не реализует make uninstall. О таком плохом поведении следует сообщать как об ошибке разработчикам программного обеспечения. В этом случае единственный способ удаления программного обеспечения заключается в том, чтобы вручную найти все файлы, которые были установлены, и удалить их. Как уже говорилось выше, они, скорее всего, все будет находиться в каталоге /usr/local.
Если вы устанавливали из исходников, а потом потеряли их, но затем хотели бы удалить приложение, то у вас есть два варианта.
- Вы можете вручную найти и удалить файлы, как в случае с приложениями, которые не осуществляют make uninstall.
- Тем не менее, есть полезный трюк который спасет вас в большинстве случаев. Вы можете просто снова скачать ту же версию исходного кода, выполнить Шаг 1 и Шаг 2, сделав то же, что и во время установки в первый раз, а затем запустить make uninstall с привилегиями root.
Дополнительная информация
Установка в системные директории
Вам может встретиться приложение, которое не будет правильно работать, если его не установить в системные каталоги, а установить, например, в /usr/local. Эти требования, как правило, отмечаются в INSTALL или README файлах.
В этом случае вы должны использовать некоторые параметры сценария ./configure, чтобы указать ему, куда устанавливать файлы приложения. Устанавливая программы в системные директории, нужно быть очень осторожным, так как может возникнуть конфликт версий установленных через urpmi программ и устанавливаемых.
При небходимости установить приложение из исходных кодов именно таким образом, полезно следовать двум советам:
- Удалите все версии пакетов данного приложения;
- После установки из исходников не устанавливайте любые версии пакетов этого же приложения до тех пор, пока вы полностью не удалите скомпилированную вами версию.
Этот способ установки почти никогда не стоит применять для установки обновленных версий часто используемых библиотек, так как другие программы в системе, вероятно, смогут не работать с обновленной версией библиотеки и так как автоматическое обновление установленных таким образом библиотек производиться не будет.
Чтобы установить приложение в системные директории используйте следующую команду: ./configure --prefix=usr --sysconfdir=/etc --localstatedir=/var.
Сборка RPM пакетов
Если вы решили для себя собирать программное обеспечение из исходных кодов, вы, возможно, пожелаете упаковать его в RPM пакеты вместо непосредственной установки — либо для собственного удобства установки, удаления и слежения, либо для вклада в репозитории Mandriva Linux. Если Вы заинтересованы в этом, пожалуйста, обратитесь к документации, доступной на этой вики, о создании RPM пакетов. Лучше всего начать с RPM Howto.

