Linux book/Install and configure

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Содержание

Установка и настройка ПО

Поиск ПО: где брать?

Одной из насущных проблем сразу после установки операционной системы является установка и настройка ПО для решения конкретных задач. Возникает вопрос: какое ПО существует и откуда его брать? Самый простой (но и наименее информативный) ответ на этот вопрос дает команда apt-cache show *. Но это не единственный вариант. Подходить к поиску ПО (как и к любой другой задаче) можно по-разному. Рассмотрим некий виртуальный пример, который, тем не менее, довольно часто встречается в реальной жизни:

Приходит человек и говорит: «У меня вот Photoshop, а что у вас в Линуксе есть?». Ему, как правило, отвечают: «А у нас есть GIMP». После чего человек уходит, а через некоторое время возвращается и говорит, что в GIMP нет ничего из того, что ему надо. Это самый плохой подход — подход от названия.

Более сложный и обстоятельный способ — подход от инструмента. Он популярен у людей, которые в определённой мере ориентируются в предметной области. В данном примере, поскольку Photoshop — программа, связанная с графикой, можно рассмотреть инструменты, связанные с графикой. Выделяют два основных вида графики -- векторную и растровую. Векторная графика, в свою очередь, делится на плакатную, макетную и диаграммы. Для плакатной графики используются Inkskape, Xara Xtreeme, Kontour и ещё добрый десяток различных приложений. Про печатные макеты можно прочитать на Википедии, и, например, узнать, что программы на PostScript редактировать не надо (PostScript -- это язык. На нём даже вирус можно написать). Для работы с диаграммами есть Dia, Xfig, OpenOffice.org Draw. Что касается растровой графики, то есть программы для обработки фотографий — GIMP, Krita. Есть аналоги MS Paint — их бесконечно много, один хуже проще другого. Из них можно вспомнить Tux Paint, Kolourpaint. Также существуют пакетные преобразователи, позволяющие писать разнообразные скрипты, преобразующие картинки. Ярким примером подобного инструмента является ImageMagick. Можно вспомнить ещё про 3D-графику — Blender, POV-RAY. При таком подходе на пришедшего с вопросом человека в итоге сваливается 200 названий, человек уходит,а когда возвращается, говорит, что Linux ужасно крут, но не умеет делать то, что ему надо.

И, наконец, третий подход — это подход от задачи. Если расспросить человека о том, что ему нужно, возможно, окажется, что у него есть фотоаппарат и он хочет управлять каталогом фотографий, назначать им теги, убирать красные глаза, и так далее. В этом случае сразу появляется решение — DigiKam, и, возможно, ещё gfoto2, если у камеры специфический драйвер.

Таким образом, получаем три подхода:

  • от названия
  • от инструмента
  • от задачи

Обычно пользуются первым, реже вторым. Но правильный — третий. Сначала необходимо определить круг решаемых задач. После определения круга задач возникает вопрос, где искать инструменты(то есть, программы) для их решения.

Откуда вообще берутся программы под Linux? Надо дать достаточно точный и полный ответ, ибо обычно ответ звучит как «лежат на диске» или «скачиваются из сети». Рассмотрим то, где на самом деле берут ПО для Linux.

Дистрибутив и репозиторий

Дистрибутив — скомпонованный и отлаженный набор подготовленных к использованию программ. Эти программы взяты из некоего большего, чем сам дистрибутив, хранилища. То есть, существует хранилище, где имеется большое количество ПО (на самом деле таких хранилищ, «репозиториев», несколько), и его часть используется для создания дистрибутива. В этом хранилище находятся одни из самых последних версий большого количества программ, и, если человек какую-то программу в нём не находит, он, при достаточной квалификации, может добавить недостающую программу (найденную другими путями, которые будут рассмотрены далее) в хранилище. При этом, поскольку полное тестирование всего добавляемого и обновляемого ПО не проводится, то возможна несовместимость между различными приложениями и невозможность использования отдельных программ на некоторых конфигурациях. Как следствие, комфортно использовать ПО из репозитория (а не из дистрибутива) можно только при достаточной квалификации.

Когда принимается решение о создании очередного дистрибутива, то создаётся замороженная копия репозитория, в которой обновления производятся только для исправления критических ошибок. Эта замороженная копия тестируется, отлаживается. В последствии на основании этой проверенной копии делается собственно дистрибутив. В результате, если ставить программу из дистрибутива, то, в идеале, ничего нештатного произойти не должно.

Другие варианты

Не исключена ситуация, при которой нужного приложения в используемом репозитории не оказывается. Так как хранилищ существует несколько, то при отсутствии искомой программы в том хранилище, на котором базируется используемый вами дистрибутив, можно попробовать поискать в других репозиториях. Где ещё можно попытаться найти интересующее ПО: существуют специализированные сайты, такие как SourceForge.net, где разработчикам предоставляются средства для ведения разработки, а пользователям — средства поиска по имеющимся проектам. Кроме этого, существуют независимые сайты разработчиков, где программы могут распространяться как в виде исходных текстов, так и в собранном виде.

Рецепт: как искать программы под Linux

В результате выстраивается некая схема поиска ПО:

  • Искать в дистрибутиве
  • Искать в репозитории
  • Искать в чужом дистрибутиве.
  • Поиск по специализированным сайтам (sourceforge, savannah (http://savannah.gnu.org/, http://savannah.nongnu.org/), freshmeat)
  • Поиск в google на предмет сайта разработчика
  • Если всё это проделали, и результатов нет, то не значит, что приложения не существует. Очень хороший источник информации — сообщество.
    • Официальные информационные ресурсы (документация, сайт, wiki)
    • Списки рассылки
    • IRC, форумы
    Сообщество на последнем месте (несмотря на свою достаточно высокую эффективность) потому, что до этого на поиск тратятся только собственное время, а в сообществе тратят своё время другие люди.

Установка ПО

Установку программ в Linux лучше делать в рамках своего репозитория, но можно выделить ряд других способов установки ПО:

  • Установка из чужого дистрибутива/репозитория
  • Сборка из исходных кодов
  • Бинарный инсталлятор

Перед тем, как подробно рассматривать каждую из указанных возможностей, определим ряд понятий, которые нам при этом потребуются.

FHS

В Linux существует строгая иерархия каталогов (File Hierachy System, FHS), которая описывает структуру каталогов и их семантику. Подробно FHS описан в учебнике Курячего Г. В. «Операционная система Linux». Так, в соответствии с FHS, существует 4 места для ПО, 2 каталога для разделяемых библиотек, 1 каталог для документации, и так далее. Каждая программа, состоящая из многих файлов, размещает их в соответствии с их предназначением в соответствующие каталоги в ФС.

Пример размещения некоторых типичных файлов абстрактной программы:

  • /usr/bin/prog — исполняемый файл программы
  • /usr/share/doc/prog/README — файл-описание программы
  • /usr/share/man/1/prog.tgz — страница руководства по программе

И всё это входит в один программный продукт.

В Linux достаточно аккуратно проделано разделение прав доступа, и пользователь не имеет права доступа на запись к большей части файловой системы (за исключением своей домашней директории и /tmp/). Тем не менее, процессы, запущенные под суперпользователем игнорируют ограничения доступа. Поэтому установка ПО обычно делается под root'ом (поскольку при этом создаются файлы в каталогах, которые закрыты на запись для простых пользователей), и установку программ, кроме как в свой каталог, обычный пользователь, в отличие от root'а, осуществить не может.

Пакет

Одной из основополагающих единиц в процессе работы с хранилищем программного обеспечения является пакет.

Пакет — файл, содержащий всё необходимое для установки и удаления программного продукта.

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

Рассмотрим подробно, что представляет собой пакет:

  • Пакет — архив, содержащий файлы программного продукта. Причём, архив вполне известной структуры. Достаточно ли просто его разархивировать? Нет.
  • Пакет обеспечивает регистрацию программного продукта в системе. Должен быть зарегистрирован список устанавливаемых файлов, а также некая метаинформация, такая как имя пакета, его версия, и так далее.
  • Пакет обеспечивает первичную настройку программного продукта, то есть, запуск программы, специфичной для данного пакета — некоего установочного скрипта. Таких скриптов может быть несколько.

В связи с этим возникает ряд вопросов:

  • Что делать, если одни пакеты зависят от других (например, один программный продукт и использует в своей работе другой)?
  • Как разрешать конфликты, то есть, те случаи, когда при попытке установить файл из архива оказывается, что такой файл есть, и создан он не пользователем, а другим пакетом?

Зависимости

Перед рассмотрением проблемы зависимостей введём понятие разделяемой библиотеки.

Разделяемая библиотека — самостоятельный набор библиотек, используемый другими программными продуктами.

Преимущества использования разделяемых библиотек:

  • При использовании библиотек программы занимают меньше места, так как экземпляр библиотеки один, а не отдельные экземпляры для каждого программного продукта, её использующего.
  • Библиотека загружается в память один раз
  • Для разделяемой библиотеки не нужно даже иметь место в swap — swap'ом этого файла будет файл на диске
  • Если в библиотеке есть ошибка, то её быстро найдут, поскольку она используется во многих программах, и, как следствие, интенсивно тестируется

Но, при всех достоинствах разделяемых библиотек, появляется проблема -- задача разрешения зависимостей. Разделяемые библиотеки не входят в пакет. Каждая группа библиотек находится в отдельном пакете. Перед установкой программного продукта необходимо установить все библиотеки, которые им используются, то есть, удовлетворить его зависимости. Получается палка о двух концах: с одной стороны, использование разделяемых библиотек упрощает и ускоряет разработку; с другой стороны, усложняется порядок установки программ — необходимо скачать и установить в правильном порядке всё дерево (точнее, ациклический орграф) зависимостей. В большинстве дистрибутивов Linux для автоматизации удовлетворения зависимостей существуют две программы — установщик и менеджер пакетов, которые подробно рассмотрены далее.

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

Конфликты

Иногда при установке очередного пакета может возникнуть так называемый конфликт.

Конфликт — ситуация, при которой файлы из разных пакетов должны иметь одинаковые абсолютные имена/*абсолютное имя – откуда термин?не лучше ли «полностью одинаковые имена и пути»*/.

Пример конфликта: пакеты с различными вариантами vi: vi, vim-minimal, mvi пытаются установить бинарный файл /usr/bin/vi.

Существует метод, позволяющий разрешать конфликты — альтернатива. Для каждого пакета выбираются свои уникальные имена (в данном примере — /usr/bin/vi.original, /usr/bin/vim, /usr/bin/mvi). Кроме этого, создаётся файл с конфликтным именем (/usr/bin/vi), но он является символической ссылкой на один из файлов, боровшихся за данное имя. То, куда будет указывать символическая ссылка, решается при помощи отдельного механизма(например назначением пакетам некоторых весов и ссылкой на файлы пакета с наибольшим весом).

Установщик пакетов

Как сказано выше, единицей ПО считается пакет. Пакет обладает массой свойств — это не только распаковка, но и регистрация в системе, запуск некоторых сценариев при установке/удалении. Работой с отдельным пакетом занимается установщик.

Установщик — утилита, которая позволяет управлять отдельным пакетом. Сюда входят установка и удаление, проверка пакета на различные свойства, просмотр различий в версиях пакета, проверка зависимостей, и так далее.

По историческим причинам, в список обязаннстей установщика пакетов входит также их сборка пакетов из их исходных версий. В исходную версию пакета (src package) входит вся инфрмация, необходимая для его сборки.

Важно отметить, что установщик пакетов работает только с отдельными файлами, а не с репозиторием. Этот факт подробнее будет рассмотрен далее.

На данный момент существует определённое количество форматов пакетов и утилит по работе с ними. Наиболее популярными являются два следующих формата:

* RPM, RedHat Package Manager. Изначально появился в дистрибутиве RedHat. На данный момент используется в большом колоичестве RedHat-based (и не только) дистрибутивов, в число которых (косвенно, посредством Mandrake Linux) входит и ALT Linux. Установщиком для данного формата пакетов является дноимённая утилита rpm[1]
Личные инструменты
Разделы