«— У меня под окнами НЛО висит.

Хакер, злобно, не отрываясь от компьютера:

— Надо было под Linux ставить, тогда бы не висело».

Из анекдота

После некоторого времени, проведенного со свежеустановленной операционной системой, появляется необходимость в доустановке или обновлении существующих программ. Давайте попробуем разобраться, как сделать это под Linux. А действительно, как же под Linux'ом устанавливать программы? Пользователь, только что скачавший какую-нибудь программу, не увидит привычного «setup», да и само расширение файла может быть разным — либо .rpm, либо .deb, либо tar.gz (.tgz). Кроме того, многопользовательская природа Linux требует, чтобы после установки к нему могли обращаться несколько пользователей одновременно. Также необходимо учитывать, что Linux, если так можно выразиться, бывает разный —Mandrake, Slackware, ASP Linux, Alt Linux — вдобавок, все эти варианты имеют по несколько разных версий. Вспомните, ведь не под всякий Windows встанет иная программа, а тут такое многообразие дистрибутивов!

Впрочем, я все же надеюсь, что после прочтения данной статьи у вас будет меньше вопросов по поводу установки программ. Для начала давайте разберемся с расширениями.

Расширение *.rpm используются в дистрибутивах-клонах Red Hat и Caldera, SuSE и KSI Linux; название произошло от сокращения Red Hat Packadge Manager. Расширение *.deb, как вы, я думаю, уже догадались, используются в Debian, а tar.gz — основной формат Slackware. По причине наибольшей распространенности клонов Red Hat, а точнее, Mandrake — из-за просто отличной поддержки им разных локализаций, в данной статье будет рассматриваться установка пакетов именно для них.

Существует две основных формы распространения ПО: в исходных текстах и в виде исполняемых модулей.

И в том и в другом случае пакет ПО может поставляться либо в виде rpm-пакета, либо в виде tar.gz-архива.

Проще всего установить ПО, представленное в виде rpm-пакета, содержащего исполняемые файлы, этот способ и рассмотрим первым.

Для инсталляции новых пакетов вы должны войти в систему как пользователь root Рис. 1(Рис. 1).

Формат rpm-пакетов следующий: openoffice-ru-638-alt1.i586.rpm, где openoffice-ru — название программы, 638 — версия, alt1 — выпуск (может быть цифра, дистрибутив и т. д.), i586 — архитектура компьютера (может быть и i386 — это указывает на исполняемые файлы, а если стоит src, то это исходные тексты, которые еще надо компилировать). В Интернете и на компакт-дисках исполняемые файлы располагаются в каталоге RPMS, а rpm-пакеты с исходными текстами (сырцами) — в каталоге SRPMS. Также на ftp-серверах программы для установки могут находится в подкаталоге с именем дистрибутива, для которого собран данный пакет. Почему же проще устанавливать именно rpm-пакеты? Дело в том, что при установке необходимо проверить зависимости от уже установленных (или не установленных) в системе программ, библиотек. Проверяется, чтобы версии пакетов были не ниже уже установленных в системе, необходимо также создать каталоги для программ и распределить по ним файлы, создать ссылки в конфигурационных файлах. Так вот, программа rpm делает все это автоматически. Она имеет шесть режимов работы: инсталляция, деинсталляция, обновление, запрос, проверка и построение пакета. Первые пять из них доступны как из командной строки, так и из X-window, шестой — только из командной строки.

Давайте сначала рассмотрим самый «легкий» вариант, т. е. установку под X-Window. Итак, для установки rpm-пакетов под X-Window в составе дистрибутива предусмотрены четыре программы: MandrakeUpdate, rpmdrake, GnoRPM и Менеджер пакетов (kpackage). Найти вы их можете в К > Настройка > Управление пакетами. Давайте по порядку рассмотрим каждый из них.

MandrakeUpdate — как явствует из названия, предназначен для автоматического обновления пакетов. Интерфейс понятен (Рис. 2), затруднений не должен вызвать. В пункте меню Файл > Настройки вы можете установить источник, откуда будут обновляться пакеты (файл или сеть) (Рис. 3), получить информацию о пакете, настроить прокси; есть и настройки безопасности, которые предупредят вас о возможных нежелательных изменениях в пакете. Честно говоря, при наших скоростях доступа обновлять лучше всего с локального диска, а для этого есть более удобные программы.

Следующая программа rpmdrake при запуске проверяет наличие всех установленных пакетов в системе и выдает их по группам (Рис. 4), что очень удобно: можно искать пакеты по назначению. В программе есть возможность автоматического поиска. Дальше все как и у предыдущего: выбор источника, описание пакета. Добавлен только пункт Список Файлов. В принципе, все просто и понятно.

Рис. 2 Рис. 3 Рис. 4

А вот менеджер пакетов KPackage (рис. 5) предоставляет намного больше дополнительных опций. Это и кэширование удаленных файлов и каталогов, и установка пакетов с «неродными» расширениями —DPKG:Debian, ART:Debian, BSD, Slackware. также реализован поиск, как файлов, так и пакетов. Появилась возможность просмотра всех пакетов или только установленных, или только обновленных или только новых. Во вкладке свойства, в подразделе 'Зависит от' названия библиотек и программ реализованы в виде гиперссылок и если у Вас установлен нужный компонент, то Вы попадете на него. И самое важное: при установке пакета пользователю предоставляется ряд опций: обновить, заменить файлы, заменить пакеты, проверять зависимости (если отключить данную опцию, то пакет установится несмотря ни на что, но последствия могут быть (а могут и не быть вовсе) непредсказуемы), наконец, тест (не ставить). Осталось добавить, что именно та программа по умолчанию и будет устанавливать вам пакеты. Что и сказать, она удобна, понятна, логичный интерфейс — век бы пользовался, если бы не GnoRPM.

Нужно отметить, что внимание на него обратил я не сразу. В Mandrаke 7.0 он под KDE не запускался, а GNOME там мне определенно не нравился. Открыл я для себя его уже в восьмой версии Mandrаke, но как только разобрался, что к чему, уже другими и не пользуюсь. Понятный интерфейс, при запуске все пакеты выдаются по группам (Рис. 6) — все это знакомо. Но теперь, если указать на папку с новыми пакетами через Операции > Установить > Добавить, то все находящиеся там пакеты также будут распределены по группам (Рис. 7).

Рис. 5 Рис. 6 Рис. 7

Если же вам необходимо установить только сетевые пакеты, то вы не будете перебирать их все вручную (ведь из названия пакета не всегда понятно, к какой группе он принадлежит). Реализована проверка уже установленных в системе пакетов на наличие конфликтов; также имеется поиск пакетов, с множеством опций. Во вкладке Операции > Предпочтения вы найдете множество разных опций. По умолчанию, например, более новые версии пакетов печатаются синим шрифтом, вообще не установленные — черным, уже установленные в системе — зеленым, более старая версия будет напечатана коричневым цветом (во вкладке Окно установки вы можете сменить цвета шрифта так, как вам нравится; здесь же можно назначить путь для поиска пакетов по умолчанию). Также при выборе пакетов для установки реализован фильтр, чтобы не перегружать вывод: можно выбрать вывод всех пакетов, только удаленных, только новых, или же новых и удаленных вместе. Опций много, и они, я думаю, удовлетворят самых взыскательных пользователей. От себя еще добавлю, что пользуюсь я только им и командной строкой. И еще: вы можете под X-Window простым щелчком клавиши мыши на пакете в каком-нибудь файловом менеджере (например, в konqreror (Рис. 8) установить его. Для этого, чтобы запускалась нужная вам программа для установки пакетов, зайдите в K > Настройка > KDE > Файловый менеджер > Ассоциации файлов, выберите application и для rpm установите нужную программу в окне Приоритет приложений (Рис. 9).

Рис. 8 Рис. 9

Теперь давайте поговорим о более «трудном» способе установки пакетов, т. е. из командной строки.

Синтаксис использования RPM из командной строки такой

rpm [опции] имя_пакета опции (один или несколько флагов, используемых RPM, для работы с пакетами)

С флагами давайте разберемся по порядку. Если вы хотите установить пакет, то воспользуйтесь следующей командой:

rpm -i package_name

Не забывайте про автодополнение (клавиша ТАВ_)_, чтобы не ошибиться при наборе, а также про использование масок, Например, набрав rpm -i perl*, вы установите все программы, чье имя начинается с «perl». Флаг -i молчалив, с ним вы не увидите никакой информации при установке. Чтобы ее немного разговорить, добавьте флаг -v и -h — для статус-бара.

Команда для установки выглядит так:

rpm -ivh package_name.

Но необходимо учитывать возможный апгрейд — если у вас более старая версия, то вы получите сообщение о том, что пакет уже установлен, после чего установка прервется. Поэтому всегда я использую опцию -U (upgrade) при установке, т. е.

rpm -Uvh package_name

В этом случае если пакет есть, он апгрейдится, а если нет, то устанавливается.

Вы также можете устанавливать данной командой пакеты с ftp-серверов:

rpm -Uvh ftp://path/to/file

Но если необходимо сохранить и старые, и новые файлы, и библиотеки, то пользуйтесь -ivh. Бывают ситуации, когда пакет не устанавливается, особенно такая ситуация характерна при переинсталяции пакета (система попросту не хочет устанавливать его заново). Если не хватает каких-нибудь библиотек, воспользуйтесь опцией --force. Правда, иногда использование ее может привести к тому, что программа не будет работать или будут повреждены важные системные файлы — это, конечно, зависит от того, что именно Вы устанавливаете.

Поэтому рекомендую сначала разобраться, а потом уже устанавливать таким способом. У меня один раз проблема решилась просто — созданием символической ссылки (ln -s) с более новой версии библиотеки на требуемую программой установки.

Для удаления пакета воспользуйтесь командой:

rpm -e package_name

При этом достаточно указать только имя (например, MySQL) — и его как не бывало. Как и при инсталляции, опция -v (а лучше -vv) покажет вам процесс удаления пакета, а если есть необходимость в безоговорочной, деинсталляции, т. е. не смотря на наличие в системе зависимых пакетов, то воспользуйтесь дополнительно опцией -nodeps. Чтобы узнать информацию обо все установленных в системе пакетах, наберите rpm -qa, об отдельном пакете —rpm -q package_name. Но наиболее полную информацию вы получите, набрав rpm -qpi, а список файлов, которые установит пакет, вы можете посмотреть командой rpm -qpl (кстати, то же можно проделать и в программе mc, установив курсор на файл и нажав F3 (просмотр) (Рис. 10). Для тех, кто знаком с английским, проще запомнить по первым буквам слов: q — query (запрос), p — package (пакет), i — information (информация), Рис. 10l — list.

Последний рассматриваемый режим работы программы rpm —проверка целостности пакета.

Для этого набираем

rpm -V package_name (V — verify)

а для проверки всех пакетов в системе воспользуйтесь опцией -a (all), т. е. команда будет выглядеть так: rpm -Va. Чтобы узнать, к какому пакету принадлежит попавшийся файл, наберите:

rpm — qf file_name.

Например, rpm -qf gzip — и вы получите что-то вроде этого: gzip-1.3-ipl4mdk (правда, для этого вы должны находиться в одной директории с файлом).

Как видите, с командной строки можно довольно гибко управлять режимами работы программы RPM. Опций программы много — для дальнейшей информации советую обратиться к RPM-HOWTO, странице man rpm, а также info.

В некоторых случаях уже откомпилированные исполняемые модули распространяются в виде tar.gz-архива — для их инсталляции требуется всего лишь разархивировать их, и они уже будут готовы к работе. Наиболее интересный случай установки программы — это когда программа поставляется в исходных текстах. Кстати, говорят, что большинство linux'оидов устанавливают свои программы именно так. При такой установке есть свои преимущества — если вы знакомы с языком Си, вы можете изменить ряд параметров каталогов, куда устанавливается программа (поддержка специфических настроек — кодировка, графический интерфейс и т. д.) Сразу привожу пример из файла README программы установки SEChat (о ней МК уже писал — это программа для чата в локальной сети, есть версия и под Windows, и под Linux, к тому же совместимые между собой):

По умолчанию файлы чата будут установлены в подкаталоги каталога /usr/local (в /usr/local/bin, /local/doc и т. д.)

Для того чтобы установить в другой каталог используйте для configure аргумент

--prefix=/нужный/каталог

Программа рассчитана на использование кодировки koi8-r.Если у вас кодировка cp-1251, то замените функцию

QCString Main::Convert(QCString s,int type) { .... }

на

QCString Main::Convert(QCString s,int type) { return s; }

Как правило, все программы имеют README или еще INSTALL-файлы, из которых можно почерпнуть достаточно информации. Когда вы уже настроили файлы установки (или оставили все по умолчанию), то выполните следующие команды:

./configure make make install

Первая из них осуществляет конфигурирование программы в соответствии с вашей системой, make компилирует пакет, а последняя команда устанавливает его вместе с документацией и файлами данных. Иногда может также понадобиться на промежуточном этапе после команды make запустить команду make check для запуска процедур самотестирования, а после завершения инсталляции —make clean для очистки диска от промежуточных файлов.

Если процесс по какой-либо причине завершился, выполните то, что программа инсталляции требует, и так до победного конца. У меня программа SEChat наотрез отказалась компилироваться в AltLinux, выдавала ошибку в какой-то линии, но в восьмом Mandrake откомпилировалась без проблем, и я ее уже откомпилированную перенес на другой компьютер. Так что экспериментируйте. Не забывайте еще об одном преимуществе этого способа установки — у вас есть исходные тексты программы, и вы можете изучить, как она работает. И напоследок, некоторые программы (как правило офисные; StarOffice — яркий пример) допускают установку под обычным пользователем — естественно, другие пользователи системы доступа к ней иметь не будут. Остается пожелать вам удачных инсталляций и... Linux forever.

P.S. Однажды мне приходилось устанавливать web-сервер Apache на Alt Linux; скачивать с Интернета не было смысла, так как у меня уже был rpm-пакет с дистрибутива Mandrake 8.0. При установке программы затребовала более старую версию библиотеки, чем та, которая была в дистрибутиве. Принудительная установка повредила систему (перестал работать Perl-интерпретатор). Вопрос решился созданием символической ссылки на библиотеку (ln -s) c требуемым названием.