Установка программы из исходных файлов -или- Что мне делать с этим file.tar.gz?
Как-то раз я решил скачать «cuyo» (смотрите в обзор http://www.linuxgazette.com/lissue74/orr3.html Mik’а Orr’а) — новую игру, о которой упоминалось в рассылке Answer Gang admin. Однако, зайдя на веб-сайт, вместо пакета для установки я нашёл только тарболл с исходными файлами, хотя в письме упоминалось, что должен иметься архивный пакет для Debian. «Ничего сложного,» — подумал я — «я делал это и раньше. «
[Пакет cuyo .deb есть в нестабильной ветви дистрибутива Debian. Но эта статья применима к любой программе, которая либо не входит в ваш дистрибутив, либо версия дистрибутиве устарела или неадекватна, но которую вы, тем не менее, хотите установить. -Iron.]
Для тех, кто не знает: тарболл — это заtarенный и, как правило, заgzipенный набор исходных файлов, из которых можно скомпилировать в программу; обычно файловое имя тарболла либо «progfile-1.23.tgz», либо «progfile-1.23.tar.gz», где «progfile» — это название программы, а «1.23» (разумеется, числа могут быть любыми) соответствует номеру версии. Когда вы устанавливаете пакет — неважно, RPM, DEB или что-то другое, используемое в вашем дистрибутиве, — вы просто помещаете библиотеки, документацию и уже откомпилированный бинарный файл(ы) в соответствующие каталоги. Компиляция исходных файлов — это работа, которую обычно выполняют для вас люди, сопровождающие пакет (мэйнтейнеры).
Установка программ в Linux Manjaro с использованием pacman
После того, как я скачал тарболл в свой подкаталог «/home/ben/TGZs», специально созданый мною для хранения скачанных тарболлов, я скопировал его в «/tmp» — мне нравится компилировать исходные файлы там. Кстати, некоторые предпочитают это делать в «~/tmp» — подкаталоге своего домашнего каталога: причина в том, что «/tmp» обычно очищается во время загрузки, а компиляция, преведшая К ДЕЙСТВИТЕЛЬНО СЕРЬЕЗНОЙ ошибке может «подвесить» машину. что потребует перезагрузки (о-опс!). Не берусь опровергать эту точку зрения, но сам продолжаю оставаться чертовски рисковым парнем — я доверяю своему Linux. 🙂
Файл назывался «cuyo-1.03.tar.gz» — поэтому соответствующей магией, превращающей его обратно в полезные файлы, будет
tar xvzf cuyo-1.03.tar.gz
Эта команда создаст каталог с именем «cuyo-1.03» прямо в «/tmp».
(Вообще-то, я сделал не совсем так — я зашёл внутрь тарболла с помощью Midnight Commander’а, открыл во второй панели «/tmp» и нажал «F5», чтобы скопировать сжатый каталог. Я привел здесь это заклинание для тех, кто хочет или вынужден проделывать всё это вручную.)
Учтите, что некоторые авторы программ не столь любезны при сборке своих тарболлов: иногда такое расtarивание приводит к копированию всех файлов в текущий каталог. Страшная путаница, особенно, если это ваш домашний каталог! Несколько дюжин файлов перемешиваются с вашими, в придачу к ним кучка каталогов — а уж если если имена некоторых файлов совпадут с именами ваших файлов. (не то, что ваши файлы будут заменены, но все равно путаница ещё та) или каталогов (пакет будет скопирован в них, и вам потом нужно будет всё это вычищать). Как примитивно! Вот почему я люблю заходить в тарболлы и копировать вместо обычного разtarивания. Те, кто не использует Midnight Commander или другой файловый менеджер, могут заглянуть внутрь тарболла просто выполнив команду
20. Установка программ из архивов
tar tvf
Вы увидете содержимое архива, и берегитесь, если перед именем каждого файла не стоит имя каталога! Ну, конечно, не так всё страшно: всё, что вам нужно сделать — создать каталог (если вы дадите ему имя тарболла «progname», то потом вы не забудете, что там находится) и расtarить файл внутрь него.
mkdir rudeprogram-6.66 tar xvf rudeprogram-6.66.tgz -C rudeprogram-6.66
Теперь все файлы из тарболла «rudeprogram» будут извлечены в указанный подкаталог.
К счастью, автор «cuyo» был культурным товарищем (как и большинство авторов программ), и «cuyo» был заtarен прямо в собственном подкаталоге. Внутри был набор файлов, включая те, которые вы должны изучить перед началом работы: «README» и «INSTALL». В первом обычно содержатся авторские инструкции, рекомендации и т.п. Второй — достаточно стандартный, в нём объясняется работа скрипта «configure», весьма крутой программы, обычно создаваемой утилитой «autoconf», которая изучает вашу систему и корректно (ну, почти корректно) создает Makefile, необходимый для сборки программы. Огромное преимущество этого метода в том, что если автор был внимателен при написании своей программы, «configure» создаст правильный Makefile для любой версии Unix и, возможно, даже для других OS.
Позвольте мне на минутку отвлечься: некоторые программы настолько просты, что не требуют «configure», а поставляются просто с Makefile (его имя может начинаться с большой буквы или полностью пишется строчными). Другие — ещё проще, всё, что вы увидите — это один единственный «progfile.c» или «progfile.cc». Для них, в первом случае нужно просто выполнить «make», а во втором — «cc progfile.c -o progfile».
Как бы то ни было, я запустил «configure» в подкаталоге «cuyo» — он немного «пожевал» мою систему, что является его работой, и создал Makefile. Что могло быть лучше? 🙂 Хотя была небольшая проблема — «configure» во время работы выводит сообщения и предупреждает вас в случае отказов (обычно останавливаясь и печатая ошибку.) Сообщение, которое он мне выдал, правда, без остановки, было такое:
checking the Qt meta object compiler. (cached) failure >configure: warning: Your Qt installation seems to be broken!
Хм-м. Ну он же всё-таки сделал makefile. Обычно нефатальные ошибки просто означают, что вы не получите каких-либо возможностей программы, но её всё-ещё можно скомпилировать. Давайте попробуем.
Я запустил «make» — просто в командной строке набрал «make» — который по умолчанию читает «Makefile» (или «makefile») и выполняет команды, соответствующие цели «all» и тут.
О-опс. Он обвалился.
Это и был момент, когда я решил написать эту статью. До этого я не думал делать это — вообще-то, в этом месяце у меня было много работы — но мне кажется, что установка из тарболлов — навык, необходимый каждому пользователю Linux, и моей мыслью было задокументировать весь процесс, включая поиск ошибок в неправильно выполняющейся установке. Это то, с чем я боролся в свои первые дни в Linux, и я хотел бы уберечь других от этих мучений. 🙂
Итак. Мы смело продолжаем. Когда я сказал, что он обвалился, что конкретно я видел? Ну, «make» должен выполняться без ошибок. Иногда — часто — вы будете получать предупреждения, но это другое — просто библиотеки у вас могут слегка отличаться, или, возможно, ваш компилятор несколько более строг к объявлениям — обычно это не фатально.
Ошибки, из-за которых вы вываливаетесь из компиляции до ее завершения — вот их то мы и должны исправить. Вот как это выглядело:
Baldur:/tmp/cuyo-1.03$ make make all-recursive make[1]: Entering directory `/tmp/cuyo-1.03′ Making all in src make[2]: Entering directory `/tmp/cuyo-1.03/src’ c++ -DHAVE_CONFIG_H -I. -I. -I.. -DPKGDATADIR=»/usr/local/share/cuyo» -Wall -ansi -pedantic -c bildchenptr.cpp In file included from bildchenptr.h:21, from bildchenptr.cpp:18: inkompatibel.h:13: qglobal.h: No such file or directory make[2]: ** [bildchenptr.o] Error 1 make[2]: Leaving directory `/tmp/cuyo-1.03/src’ make[1]: [all-recursive] Error 1 make[1]: Leaving directory `/tmp/cuyo-1.03′ make: * [all-recursive-am] Error 2 Baldur:/tmp/cuyo-1.03$
Начало ошибки начинается со строки «In file included. » и заканчивается (по крайней мере, та часть, которая нам нужна) словами «. qglobal.h: No such file or directory».
Понятно, не хватает заголовочного файла. Я быстренько просмотрел дерево исходных файлов «cuyo», чтобы проверить, что автор не забыл включить один из собственных файлов (да, бывает) — ничего. Видимо, это один из моих — так и есть, программа должна найти файл, поставляемый с библиотекой, которую я должен был иметь в своей системе для компиляции программы. Хмм. А какая?
Разумеется, та, которая содержит «qgloval.h».
В моей системе есть несколько скриптов, которые помогают мне в работе со стандартыми задачами установки. Один из них — «pkgf» — он ищет нужный мне файл во всём дистрибутиве Debian и сообщает, в каком пакете этот файл находится. (Это не то же, что «dpkg -S «, который делает это только для установленных пакетов). Если вы используете Debian, то сможете получить такую же функцию, скачав текущий «Packages.gz» с и zgrepпнув в нём (поискать с помощью утилиты zgrep) имя файла, или просто сходите на и воспользуйтесь их утилитой поиска. Смысл в том, чтобы найти пакет с «qglobal.h» и установить его.
pkgf «qglobal.h» usr/include/qt/qglobal.h devel/libqt-dev devel/libqt3-emb-dev devel/libqt3-dev devel/libqt-emb-dev
Так, так — похоже, мне нужно выбирать из нескольких пакетов. Хорошо, «libqt3-dev», вроде, самый последний:
apt-get install libqt3-dev
Установка прошла достаточно быстро, и. я снова получил ту же ошибку, когда ещё раз запустил «make». То же будет и у вас. Поэтому, не делайте так. Не следует забывать (а я знал, что будет ошибка — я это сделал, чтобы привлечь ваше внимание), что вы уже выполнили «./configure» и старые (неверные) значения всё ещё содержатся в Makefile, а также в нескольких других файлах, поэтому, вместо того, чтобы впустую тратить время на выяснение, где они могут быть, сделайте так:
Другими словами, я просто целиком «снёс» каталог «cuyo» и заменил его свежей копией исходных файлов. Это хорошее правило: при сомнениях вернуться к первоначальным исходным файлам. Верите или нет, я научился этому трюку от корабельного механика, который необычно хорошо справлялся со своей работой.
Кенни изложил его такими словами: «верни все к заведомо рабочему состоянию и начинай оттуда». Я не видел, чтобы его совет не сработал; известно, что клиенты склоны вопить, когда ты говоришь, что должен удалить часть засоренного софта, стоящего в данный момент, и устанавливать с нуля. но, немного погодя, слышишь: «Э-э, а этот парень неплохо все сделал». Так можно потерять часть сделанной работы — у меня так бывало — но, как Кенни, я не хочу, чтобы моё имя стояло на барахле.
Знаю, знаю — я говорю на общие темы, а не о старой доброй установке тарболла. Суть в том, что надо понимать «философию» того, чем вы собираетесь заниматься, и лучше понять методологию и особенности работы до того, как вы начнете реально что-либо делать. Хорошо, вернёмся к главному вопросу — программа заработала или нет.
Ураааа. Ошибок нет — и когда я вошёл в каталог «cuyo-1.03/src», там был очень миленький бинарничек под названием «cuyo». Теперь, если я хочу продолжить установку (а не просто посмотреть, понравится ли мне игра), мне надо ввести
make install
Будет прочитан Makefile и выполнятся все команды для цели «install», которые, скорее всего, установят бинарник(и), страницы man и документацию. Однако у меня есть склонность сначала поиграться с программой и посмотреть, нравится ли она мне, поскольку в большинстве тарболлов make-файлы не содержат цель «uninstall» (по-моему, это стыдно, ведь это сделало бы тарболл-пакеты почти такими же лёгкими в установке и удалении, как, скажем, RPM или DEB).
Перечислим всю процедуру установки тарболла:
- Проверить, содержит ли он каталог или файлы просто (как некультурно!) свалены в него.
- Разtarте в каталог «/tmp» или «~/tmp»
- Выполните «configure», если он есть.
- Выполните «make» или, в случае единственного простого «file.c» или «file.cc», команду «cc».
- Выполните «make install», если результат получился тот, что вы ожидали.
Это почти всё. Обратите внимание, что я не обсуждал здесь вопросы безопасности (действительно ли вы доверяете автору этого тарболла или пакета? Никогда не заходите рутом, чтобы поиграться с бинарником, ладно?), ни многие другие аспекты, касающиеся системного администрирования — эти аспекты очень важны и необходимы, однако, не рассматриваются этой короткой статье. Мудрый системный администратор — а это, мой дорогой домашний пользователь Linux, вы, больше за вашей машиной никого нет! — должен много читать, размышлять, пытаясь проникнуть в суть происходящего, и принимать мудрые решения.
Удачи, и да будут все ваши зависимости разрешены. 🙂
Источник: www.i2r.ru
Установка программ в Linux
Из готового тарбола (если он учитывает все нужные патчи) можно получить исполняемые программы с помощью следующих команд:
1 разархивировать тарбол:
Создаем папку, куда будем разархивировать тарбол,
mkdir
Копируем туда тарбол
Непосредственно разархивируем в папку:
tat xfzv
— разархивация архивов типа tar.gz и tgz
tat xfjv
— разархивация архивов типа tar.bz и tbz файлы разархивируются в текущую папку (для работы с архивами очень удобно использовать Midnight Commander — MC — свободный клон NC) Переходим в папку с разархивированным тарболом
cd _Имя_папки_
2 конфигурим пакет
./configure
(в тяжелых случаях нужно будет в параметрах указать пути для всех необходимых библиотек и header-файлов — но к счастью, обычно на близких системах они лежат одинакого и сам скрипт configure их находит, также параметы могут потребоваться, если пакет будет распологаться не в том месте, где предполагал разработчик программы, а в каком-либо другом )
3 Создаем пакет:
make
4 Устанавливаем пакет
make install
(последний этап можно теоретически сделать и в ручную скопировав файлы в нужные места) Хочу подчеркнуть, что это наиболее опасный этап — перед ним желательно позаботится о том, как восстановить старый пакет, если в новом есть ошибки.
7.2 Установка программ из сорца (.src.rpm)
Программисты создают проект программы (например с помощью Kdevelop), в котором есть все makefile и файлы конфигурации (configure), а потом упаковывают их в тарболы. В случае доработки пакета создаются Patch-и к исходным текстам, которые заменяют одни строки текста программ на другие.
Тарболы и прикладываемые к ним patch-и упаковываются в пакеты-сорцы (.SRC.RPM)(бывают и другие системы пакетов — но я говорю о дистрибутивах на основе RPM — Red Hat, Mandrake, SuSe). RPM-пакет — это особо организованный архив, в который помимо данных (тарбола и патчей — для сырца, необходимых программ — для бинарного RPM) упакованы скрипты установки и обновления.
C помощью сорца можно создать бинарный RPM — т.е. такой RPM, в котором упакованы исполняемые пакеты. Причем, если RPM создан на текущей машине, он теоретически будет наилучшим образом подходить к текущей конфигурации пакетов (именно поэтому многие администраторы наиболее важные пакеты собирают из сырцов заново на своей машине). В результате установки сорца- в директорию /usr/src/RPM/source помещаются все необходимые тарболы (обычно один) и патчи (может быть много, а может быть и не одного — все зависит от разработчика и составителя конкретного RPM). — В директорию /usr/src/RPM/spec помещается установочный скрипт (файл с расширением spec) в котором разработчик RPM помещает все действия по установке пакета — разархивирование тарбола, накладывания патчей, транслирование и т.д. Разработано уже много макросов для spec-файлов. . При построении пакета все операции с исходным текстом программ обычно (но не всегда) помещаются в /usr/src/RPM/builder, а новые полученные пакеты (новый сырец и новый бинарник) помещаются соответственно в /usr/src/RPM/RPMS и /usr/src/RPM/SRPMS. Получить из установленного сорца соответствующий пакет можно с помощью команды
rpm -ba packet. spec
7.3 Установка программ из пакетов .RPM
- имя — bash,
- номер версии — 2.0.5,
- номер релиза — alt2,
- архитектура — i586.
Чем больше номер версии (или при одинаковых номерах версии — чем больше номер релиза), тем, соответственно, новее пакет. Управлять пакетами можно из командной строки при помощи программы rpm, которая имеет следующий синтаксис:
rpm -options rpm_package_name
Далее приводятся возможные параметры.
Установка пакета.
Вы можете установить программу, используя опцию -i (опции -v и -h выставлены здесь для того, чтобы включить визуальное отображение процесса установки). Например, для того, чтобы установить klyx, наберите:
rpm -ivh klyx-0.10.9-ipl6mdk.i586.rpm
(настоящее имя зависит от версии программы на доступном носитеое). Заметим, что ipl6mdk означает, что пакет был модифицирован ALT Linux Team (ранее — IPLabs Linux Team) для русской редакции, это его шестая сборка, он входит в дистрибутив Mandrake. i586 указывает на то, что он скомпилирован для процессоров не ниже Pentium(tm). Наличие в имени пакета аббревиатуры alt2 означает, что пакет был собран ALT Linux Team и это его вторая сборка.
Обновление пакета.
Для того чтобы обновить программу (с целью установки более свежей версии), нужно использовать опцию -U, вместо -i, это позволит сохранить все текущие конфигурационные файлы. Если пакета ранее не было в системе, то он будет установлен.
Удаление пакета.
Если вы желаете удалить пакет из системы, внимательно введите:
# rpm -e имя_пакета_без_номера_версии_и_релиза
то есть, например, для пакета klyx:
# rpm -e klyx
Если в процессе удаления пакета произойдет нарушение зависимостей, программа rpm сообщит об этом.
Информация о пакете.
Вы можете запросить у rpm ряд полезной информации о пакете, не устанавливая его — например, бывает удобно просмотреть список всех файлов пакета или краткое описание его возможностей. Для этого используйте опцию -q (query, запрос). -qi используется для получения некоторой информации о ранее установленном пакете; -qip используется для еще не установленных пакетов. В этом случае вы должны указать полный путь и имя пакета (например, /mnt/cdrom/Mandrake/RPMS/klyx-0.10.9-ipl6mdk.i586.rpm); -ql используется для того, чтобы просмотреть список файлов пакета. Добавьте p, если пакет еще не был установлен; -qa выдает список всех установленных пакетов (не нужно указывать имя пакета).
Будьте осторожны с опцией —force — ее можно употреблять только в тех случаях, когда вы хорошо знаете, что делаете.
Если надо установить два или более пакетов, зависящих друг от друга, то установите их одновременно:
# rpm -ihv foo-1.1-3mdk.rpm libfoo-1.5-2mdk.rpm
Часто бывает удобнее, однако, применять программы специально созданные для данного дистрибутива, например, rpmdrake, разработанную MandrakeSoft, kpackage из KDE, gnorpm из GNOME или систему apt (AltLinux).
В дистрибутивах, родственных Mandrake удобнее управлять пакетами через графическую оболочку rpmdrake, которую можно запустить через панель управления DrakConf (находящуюся на рабочем столе). Можно выбрать два режима работы — установка или удаление — при помощи кнопок в правом верхнем углу.
Выделив пакет, можно получить информацию о нем, входящих в его комплект файлах, а также некоторую другую. Нажав кнопку «Удалить выбранное» или «Установить выбранное», можно удалить или установить выбранные пакеты.
Часто бывает так, что требуемый пакет для нормального функционирования требует другие; в этом случае программа предложит вам установить или удалить еще несколько пакетов. При удалении пакетов необходимо соблюдать осторожность, чтобы не удалить важные части системы, например пакеты kernel или glibc.
Для использования функции обновления пакетов необходимо указать программе через меню Файл|Настройки дополнительный источник пакетов, в качестве которого может выступать как ресурс Internet, так и локальный каталог или диск CD-ROM. Установку пакетов весьма удобно выполнять и через консольную программу urpmi — с тем отличием, что все действия будут выполняться менее наглядно. Для установки пакетов, поставляемых ALT Linux Team, можно даже запускать программу urpmi не от имени суперпользователя, а от обычного пользователя; единственное, что необходимо сделать для этого ? добавить его в группу urpmi. Для получения дополнительной информации наберите man rpm.
Источник: www.oszone.net
Дневничок системного программиста
Администрирование, программирование и всего понемногу.
четверг, 12 апреля 2012 г.
Установка программ из тарбола (.tar.gz, .tgz).
Из готового тарбола (если он учитывает все нужные патчи) можно получить исполняемые программы с помощью следующих команд:
1 разархивировать тарбол:
Создаем папку, куда будем разархивировать тарбол,
Копируем туда тарбол
Непосредственно разархивируем в папку:
— разархивация архивов типа tar.gz и tgz
— разархивация архивов типа tar.bz и tbz
файлы разархивируются в текущую папку (для работы с архивами очень удобно использовать Midnight Commander — MC — свободный клон NC)
Переходим в папку с разархивированным тарболом
cd _Имя_папки_
2 конфигурим пакет
(в тяжелых случаях нужно будет в параметрах указать пути для всех необходимых библиотек и header-файлов — но к счастью, обычно на близких системах они лежат одинакого и сам скрипт configure их находит, также параметы могут потребоваться, если пакет будет распологаться не в том месте, где предполагал разработчик программы, а в каком-либо другом )
3 Создаем пакет:
make
4 Устанавливаем пакет
(последний этап можно теоретически сделать и в ручную скопировав файлы в нужные места) Хочу подчеркнуть, что это наиболее опасный этап — перед ним желательно позаботится о том, как восстановить старый пакет, если в новом есть ошибки.
Источник: avcherka.blogspot.com