Установка из исходников
Материал из Mandriva Russian Community Wiki.
Статья нуждается в доработке! | |||
---|---|---|---|
Данный материал нуждается в переводе и правке. Русский текст не вычитан и содержит много ошибок |
Установка программного обеспечения путем сборки из исходного кода является наименее предпочтительным методом установки на Mandriva Linux и должно быть использовано только если Вы не можете найти программное обеспечение необходимое Вам в любом из официальных или сторонних репозиториев программного обеспечения Mandriva (для более подробной информации о других методах установки программного обеспечения, смотрите эту страницу). Иногда, однако, он является неизбежным. Эта страница содержит обсуждение общего метода для установки программного обеспечения путем компиляции из исходного кода на Mandriva Linux.
Содержание |
[править] Прежде чем Вы начнете
Прежде чем начать желательно понять в общем виде, что включает в себя сборка программного обеспечения из исходных кодов и решить некоторые организационные вопросы.
[править] Что произойдет
Установка программного обеспечения из исходных кодов происходит в три этапа. Сначала скрипт будет анализировать Вашу систему и проверять наличие установленного необходимого программного обеспечения для успешной компиляции, а иногда и настраивать параметры компиляции. На втором шаге код будет скомпилирован. На третьем полученные приложения, библиотеки и прочие файлы будут копироваться в соответствующие каталоги в Вашей системе, чтобы все пользователи имели доступ к ним. В случае очень простой программы первый шаг, возможно, не будет использоваться. Кроме того, некоторые приложения спроектированы таким образом, что Вы можете запускать их без выполнения третьего шага.
[править] Подготовка
Важно, чтобы исходный код был доступен даже после того, как Вы успешно установили приложение, так как без него удаление программы будет трудоемким. Вы, возможно, хотите держать Ваши исходные коды четко организоваными. Хорошей идеей будет создание каталога с именем source или src в вашем домашнем каталоге, и сохранение там исходники всех приложений, которые Вы компилируете в подкаталогах этой директории. Кроме того Вам нужно убедиться, что установлены основные приложения, необходимые для компилирования практически любой программы. Установите пакет gcc, если он еще не установлен. Перед сборкой любого приложения прочтите документацию, включенную в архив. Чаще всего это будет файл с именем INSTALL, в котором содержатся конкретные инструкции и информация о приложении.
[править] Шаг 1
Для большинства приложений, шаг 1 выполняется запуском команды ./configure в верхнем уровне каталога, содержащего исходный код . Если процесс конфигурации завершился удачно, этот скрип завершится либо без каких-либо сообщений об ошибке или с резюме, как именно программа будет собрана - опции, которые будут включены, и, возможно, куда она будет установлена. Более сложное и серьезное программное обеспечение, как правило, имеет несколько необязательных параметров для команды configure , которые могут быть использованы для включения или отключения функций программы. Вы можете использовать команду ./configure --help, чтобы просмотреть список этих параметров и включить/выключить некоторые из них, если это Вам необходимо. В большинстве случаев Вы можете не использовать параметры --prefix, --sysconfdir или --localstatedir.
[править] Варианты
Как отмечалось выше для некоторых простых приложений шаг ./configure исключен полностью. В этом случае, чтобы перейти прямо на # Шаг 2. В некоторых других случаях - как правило только для незрелого программного обеспечения или для нестабильных снапшотов - Вам придется выполнять другую команду, прежде чем Вы сможете запустить ./configure: ./autogen.sh. Этот скрипт создает configure и файлы, необходимые для генерации Makefiles (скрипты, которые контролируют фактический процесс компиляции). Реже, приложения могут использовать для сборки совершенно отличную от традиционной систему компиляции, описанной подробно на этой странице. В этом случае она почти наверняка будут документирована файле в README или INSTALL в каталоге с исходниками.
[править] Проблемы
Неудача на этом шаге не является чем-то необычным, особенно в первые несколько раз при попытке установить что-то из исходников. В configure скрипт выходит с ошибкой, сообщая, какой пакет или библиотека не установлены. Часто Вы будете обнаруживать, что пакет, на который он жалуется, на самом деле установлен.
Не паникуйте! Это связано с политикой сборки пакетов Mandriva. В Mandriva Linux разделяемые библиотеки - наборы функций, которые хранятся в общих каталогах и могут быть использованы более чем одним приложением - собираются в отдельный от приложений пакет. Пакеты библиотек затем также разделяются. Некоторые библиотеки полезны только для компиляции: они никогда не использовалуться для простого запуска приложений. В Mandriva Linux библиотеки, необходимые для запуска приложений на самом деле содержатся в одном пакете, а библиотеки полезные только для сборки содержатся в другом пакете. Таким образом, для достаточно типичной ситуации, например приложения, ассоциированного с библиотекой, Mandriva Linux включает три пакета. Если приложение называется example, то они будут называться подобно тому, как приведено ниже:
example libexample libexample-devel
Здесь могут быть варианты в один, два или все три пакета. Но как правило для большинства программ используется основная модель. Пакет "example" содержит сомо приложение и конфигурационные файлы, пункты меню, и связанные с ними данные, как звуки, графика, переводы и так далее. Пакет "libexample" содержит файлы для библиотек, связанных с приложением, которые нужны для запуска приложения (и любых других, которые используют те же библиотеки). В пакете "libexample-devel" содержаться файлы для библиотек, связанных с приложением, которые нужны только для компиляции приложений, которые используют эту библиотеку.
Если вы пытаетесь собрать что-либо из исходного кода, и скрипт configure завершается с ошибкой, что "example" не был установлен, то скорее всего Вам нужно установить пакет "libexample-devel".
Так же часто (опять же, чаще всего первые несколько раз, когда Вы пытаетесь установить что-либо из исходников) может потребоваться установить несколько -devel пакетов, которые еще не установлены, поэтому после установки одного и перезапуска скрипта configure , не удастся снова, на этот раз с жалобой о том, что еще одного пакета не хватает. Продолжайте и установливайте все необходимые -devel пакеты и в конечном итоге этот шаг пройдет успешно.
[править] Шаг 2
После того как вы успешно завершили Шаг 1, пора перейти к шагу 2 - компиляция. Это, как правило, выполняется запуском команды make в верхнем уровне директории с исходным кодом. Для хорошо написанного приложения, если скрипт configure успешно завершился, данный этап также должен завершиться без проблем. В этом случае процесс будет осуществляться в течение определенного периода времени (в зависимости от того, насколько сложные приложения, и как быстра Ваша система, то это может быть что угодно, от нескольких секунд до нескольких часов), а затем выйти с кратким сообщением о завершении: если ошибки не отображаются, процесс был успешным.
[править] Проблемы
Многие приложения не очень хорошо написаны и авторы забывают включить в configure проверку наличия библиотеки, требуемой для компиляции. В этом случае, конечно, процесс компиляции будет прерван и выведены несколько сообщений об ошибках. Чтобы узнать, что пошло не так, Вам, как правило, необходимо взглянуть на первую ошибку. Часто суть этой ошибки будет в том, что-lSOMETHING не найден. Это означает, что требуемая -devel библиотека не установлена, так же, как обсуждалось в Шаге 1. Обычно имя SOMETHING имеет некоторые сходства с именем необходимого пакета, но иногда это не так просто. Чтобы найти название mandriva пакета, который содержит определенный файл, используйте urpmf. Например, urmpf qtconfig расскажет Вам о том, что qtconfig находится в пакете qt3-common. В противном случае, если Вы не можете найти его, то можете попробовать использовать Google для поиска по ошибке, или Вы можете отправить просьбу помочь в форум поддержки Mandriva (как, например, форум Mandriva или на зайти на сайт приложения, которые Вы пытаетесь собрать. Вы должны также проверить README и INSTALL файлы в каталоге исходным кодом, так как в них возможно есть список требуемых пакетов. Установите соответствующего пакеты, а затем повторно запустите команду make , and it should pick up more or less where it left off. There is no need to restart the process from Step 1.
Если процесс компиляции прекращается с другими ошибками, то Вам, как правило, необходимо обратиться за помощью к эксперту на форуме Mandriva или за помощью на сайт приложения, которые Вы хотите установить.
[править] Варианты
Вариации на данном этапе процедуры редки, но иногда Вам может понадобиться запустить команду make с дополнительными параметрами для компиляции дополнительных частей приложеня, или запустить команду снова в подкаталоге. Такие вариации почти всегда должны быть изложены в README или INSTALL файлах.
[править] Шаг 3
Если Шаг 2 был успешно завершен, то теперь Вы можете установить приложение. Это предполагает копирование файлов в директории, где они будут доступны всем пользователям и (в соответствующих случаях) эти файлы будут доступны для других приложений. Этот шаг, как правило, выполняется запуском команды make install с привилегиями суперпользователя (чтобы получить права root, выполните команду su и введите Ваш пароль: не забудьте выйти из режима суперпользователя с помощью команды exit после запуска make install).
В большинстве случаев приложение будет установлено в каталог /usr/local. Исполняемый(мые) файлы будут размещены в /usr/local/bin, библиотеки будут помещены в /usr/local/lib, конфигурационные файлы будут помещены в /usr/local/etc и файлы данных будут помещены в файл /usr/local/share. Это важное соглашение: Mandriva Linux (и все остальные дистрибутивы) никогда не устанавливают что-либо в /usr/local и никогда не изменят каких-любо файлов в этом каталоге, так что Вы можете быть абсолютно уверены в том, что ни один файл не будет поврежден в результате компиляции и установки приложения из исходного кода или в результате ручного запуска команды . Если следовать этому соглашению, ничего в результате установки из исходного кода не перемешается с компонентами системы установленными с помощью инструментов управления пакетами Mandriva.
Альтернативой make install является запуск checkinstall (возможно, Вам придется установить сначала программу checkinstall ). Это позволит автоматически генерировать .rpm, которые могут быть установлены с помощью команды rpm -i. Теперь вы можете использовать менеджер пакетов для контроля установки и удаления.
[править] Варианты
Иногда вы можете встретить приложения, которые по умолчанию устанавливаются в системные директории: /usr/bin для исполняемых файлов, /usr/lib для библиотек, /etc для конфигурационных файлов и так далее. Это очень плохое поведение, как это может стать причиной конфликтов и возможно нарушения работы приложений, установленных с помощью пакетного менеджера Mandriva и такое поведение должно рассматриваться как серьезная ошибка в приложении, если оно абсолютно не может функционировать установленным в системные каталоги. О таком поведении следует сообщать как об ошибке в приложении разработчикам.
[править] Проблемы
Обычно на этом шаге проблемы возникают очень редко. Если же они возникли, то обратитесь за помощью экспертов.
It is very unusual to encounter problems during the actual running of this step: if you do, you will need to ask for expert assistance. It is more common to find that you still cannot run an application after installing it using this procedure. This is because the default Mandriva Linux environment does not account for applications installed to the /usr/local directory.
[править] Команда не найдена (command not found)
Если при попытке запуска приложения правильной командой оболочка Вам возвращает ошибку 'команда не найдена', то сначала попробуйте запустить команду hash -r, а затем повторите попытку. Если это не решит проблему, то скорее всего /usr/local/bin не находится в Вашем PATH. PATH - это переменная окружения в которой перечислены имена каталогов, содержащих исполняемые файлы: любой исполняемый файл в каталоге, указанном в PATH можно запустить просто вводом его названия, без указания в каком каталоге она находиться. Чтобы добавить /usr/local/bin в Ваш PATH однажды, выполните команду export PATH=$PATH:/usr/local/bin. Для того чтобы /usr/local/bin добавлялся в Ваш PATH каждый раз при старте системы, отредактируйте файл ~/.bash_profile. If there is an existing line reading something like:
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)
Если Вы смогли запустить приложение, но оно падает и жалуется, что не смогло найти файлы библиотеки, то нужно добавить директорию /usr/local/lib в список директорий, в которых система будет искать разделяемые библиотеки . Чтобы сделать это, отредактируйте файл /etc/ld.so.conf - Вам необходимы привилегии администратора - и добавить следующую строку в конце:
/usr/local/lib
Сохраните файл и запустите команду ldconfig также с привилегиями администратора. Вам придется сделать это один раз.
[править] Проблемы pkgconfig
There is another more obscure problem you may occasionally run into. Некоторые приложения - как правило из GNOME - используют систему pkgconfig. Она используется при компилировании приложений, как стандартный способ проверки присутствия необходимых -devel пакетов библиотек из других приложений . При установке приложения или библиотеки из исходников, которое использует систему pkgconfig, для того чтобы другие приложения знали, что доступно для компиляции, она установит файл с именем programname.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
[править] Удаление программ
Удаление программного обеспечения, которое Вы собрали из исходников можно сделать, как правило, просто выполнив команду {{cmd|make uninstall}) (с привилегиями root) из верхнем уровне каталога исходного кода . Иногда Вы можете встретить программное обеспечение, которое реализует make install, но не реализует make uninstall. О таком плохом поведении следует сообщать как об ошибке с наибольшим возможным приоритетом разработчикам программного обеспечения. В этом случае, единственный способ удаления программного обеспечения заключается в том, чтобы вручную найти все файлы, которые были установлены, и удалить их. Как уже говорилось выше, они, скорее всего, все будет находиться в каталоге /usr/local.
Если вы инсталлировали из исходников, а потом потеряли их, но затем хотели бы удалить приложение, то у Вас есть два варианта. Вы можете вручную найти и удалить файлы, как в случае с приложениями, которые не осуществляют make uninstall. Тем не менее, есть полезный трюк который спасет вас в большинстве случаев. Вы можете просто снова скачать ту же версию исходного кода, выполнить Шаг 1 и Шаг 2, сделав то же, что и во время установки в первый раз, а затем запустить make uninstall с привилегиями root.
[править] Расширенные темы: установка в системные директории
Иногда Вы будете сталкиваться с приложениями, которые не будет работать правильно, если установлен не в системные каталоги - то есть, оно не может быть установлено в /usr/local и работать при этом правильно. Это, как правило, отмечается в INSTALL или README файлах. В этом случае, Вы должны использовать некоторые параметры скрипта ./configure , чтобы указать ему, куда устанавливать файлы приложения. В этом случае вы должны принять осторожное решение, чтобы версии файлов приложения установленных из исходников не конфликтовали с версиями фалов приложения, установленного из пакета Mandriva. Если Вы хотите установить приложение из исходных кодов таким образом, то во-первых удалите все версии пакетов данного приложения и не устанавливать любые версии приложения в пакетах после установки из исходников до тех пор, пока Вы полностью не удалили скомпилированную Вами версию. Это почти никогда не является хорошей идеей для установки обновленных версий часто используемых библиотек, так как другие программы в системе могут не работать с обновленной версией библиотеки.
Чтобы установить приложение в системные директории используйте следующую команду: ./configure --prefix=usr --sysconfdir=/etc --localstatedir=/var.
[править] Расширенные темы: сборка RPM пакетов
Если Вы решили для себя собирать программное обеспечение из исходных кодов, Вы, возможно, пожелаете упаковать его в RPM пакеты, вместо непосредственной установки, либо для собственного удобства установки, удаления и слежения, или для вклада в репозитарии Mandriva Linux. Если Вы заинтересованы в этом, пожалуйста, обратитесь к документации, доступной на этом вики о создании RPM пакетов. Лучше всего начать это с RPM Howto.