Linux: Установка программ не входящих в дистрибутив при помощи менеджера xstow

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

В дальнейшем, для определенности, предполагаем, что мы используем Linux, дистрибутив Ubuntu или Debian.

Установка пакета из исходников, обычный способ

Классический для свободного софта путь распространения, распространение в исходных текстах. В таком виде программа представляет собой архив с именем вида:

  name-version.tar.gz

Установка такого софта производится выполнением набора несложных команд:

  tar -xzvf name-version.tar.gz
  cd name-version
  ./configure
  make
  sudo make install

Расшифровка действий:

ШагКомандаЧто делает
1tar -xzvf name-version.tar.gzРаспаковка архива
2cd name-versionПереходим в полученный после распаковки директорий
3./configureНастройка исходников на нашу систему
4makeКомпиляция
5sudo make installУстановка

Проблемы

Проблема 1: Отсутствие нужных библиотек

Очень часто все не идет так гладко, а на шаге 3, команда configure на что-то жалуется. А жалуется она как правило на отсутствие нужных библиотек, или заголовков библиотек. Рассматриваем внимательно выход, который выдала команда configure на консоль и устанавливаем недостающие библиотеки и заголовки. Заголовки для Debian-подобных дистрибутивов, в том числе и для Ubuntu находятся в пакетах с суффиксом -dev в названии пакета.

Предположим мы увидели, что configure жалуется на библиотеку, устанавливаем ее в систему:

  sudo apt-get install name

Запускаем configure опять. Теперь жалуется на заголовки этой же библиотеки. Устанавливаем и их:

  sudo apt-get install name-dev

Ну наконец, установили все нужное, откомпилировали, работаем и получаем удовольствие. Казалось бы, счастье, вот оно. Но нет, вырисовывается проблема 2:

Проблема 2: Бардак в системе

Предположим, мы установили одну программу из исходников, другую, третью. И вдруг нам понадобилось удалить первую, или заменить ее версию. А мы, оказывается не знаем, какие файлы относятся к этой программе и где они. Одни программы устанавливают свои файлы в иерархию /usr/local , другие вообще в /usr . В общем, мы не знаем, как вычистить файлы, относящиеся к пакету.

Отступление: Стандартная иерархия файловой системы Linux (File System Hierarchy Standard)

В Linux есть стандарт на размещение файлов в системе. Ссылки приведены в разделе Литература. По этому стандарту, в иерархии директорий /usr должны храниться файлы используемые пользователями, в том числе и пользователям с других компьютеров. В иерархии директорий /usr/local - файлы используемые локальными пользователями. Таким образом нам нужно наши программы ставить в иерархию /usr/local, и при этом избежать бардака.

Улучшеный способ установки: менеджер пакетов xstow

Сделать это нам поможет менеджер пакетов xstow. Можно пользоваться также менеджером stow, xstow - это расширенная версия. Что он делает? Очень простую вещь. Мы устанавливаем наши программы в иерархию /usr/local/stow, каждую программу в свою директорию, а потом менеджер xstow создает символьные линки на наши файлы из иерархии /usr/local. Устанавливаем xstow:

  sudo apt-get install xstow

Теперь последовательность операций при установке пакета с использованием менеджера xstow.

tar -xzvf name-version.tar.gz
cd name-version
./configure --prefix=/usr/local/stow/name-version
make
sudo make install
cd /usr/local/stow/
sudo xstow name-version

Расшифровка действий:

ШагКомандаЧто делает
1tar -xzvf name-version.tar.gzРаспаковка архива
2cd name-versionПереходим в полученный после распаковки директорий
3./configureНастройка исходников на нашу систему
4makeКомпиляция
5sudo make installУстановка
6cd /usr/local/stow/Переходим в директорий, где лежат программы
7sudo xstow name-versionСоздаем символьные линки в иерархию /usr/local

Команда:

sudo xstow -D name-version

Удаляет символьные ссылки. После удаления ссылок директорию с файлами программы, находящуюся в /usr/local/stow/ можно удалять.

Заключение

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

Литература

[1] Стандартная иерархия файловой системы Linux (File System Hierarchy Standard)
[2] Filesystem Hierarchy Standard

Опубликовано: January 20, 2011

Комментарии:


Имя: keedhost

Как то оно все запутано...



Имя: evgeny

В общем-то все достаточно просто и логично, хотя с первого раза может показаться, что сложно.



Имя: tark

Метод с инстал-префиксом не совсем по назначению используется.
Тогда можно просто сделать каталог /usr/local/compiled_software
и ставить все туда, добавив /usr/local/compiled_software/bin в PATH ну и либы если надо. Это логичнее и без каких-либо симлинков.
А самый нормальный вариант - checkinstall.
./configure
make
checkinstall -D //для того же дебиана
и имеем деб пакет для нашего пакетного менеджера. Аналогично для других систем.



Имя: evgeny

> можно просто сделать каталог /usr/local/compiled_software

Можно, но сразу получаем конфликты имен для разных версий одного и того же софта.

> checkinstall -D //для того же дебиана

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

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



Имя: Max

Собрал последнюю версию (1.0.0) xstow из исходников, опакетил в deb и установил пакет.
Вот дерево установленных файлов
http://farm02.photoload.ru/data/67/bc/74/67bc74c622e9281545b69b984bc7fa5c.png?h=GWy9b6oYBuLgW_4DLaiT9g&t=1372431851

Но вот почему то там нет каталога /usr/local/stow/ куда согласно вашей статьи надо устанавливать будущие программы
Подскажите, в чем тут дело ?
И еще - в дереве присутствуют 3 версии xstow - как с этим управляться ?
Я должен работать с версией xstow (без приставок)?



Комментировать:

Имя:

Комментарий: