Linux: Установка программ не входящих в дистрибутив при помощи менеджера xstow
Введение
Современные дистрибутивы Linux имеют в своем составе очень много софта. Проблемы с установкой/удалением/обновлением такого софта решены, можно сказать, идеально. Всем занимается менеджер пакетов. Выбрали нужный пакет, менеджер пакетов установит его. Нужно удалить — менеджер пакетов удалит и аккуратно все почистит. Но, иногда хочется, или нужно, установить программное обеспечение, не входящее в дистрибутив, или распространяющееся в исходниках, или даже в бинарниках. Как поступать в таких случаях?
В дальнейшем, для определенности, предполагаем, что мы используем Linux, дистрибутив Ubuntu или Debian.
Установка пакета из исходников
Классический для свободного софта путь распространения, распространение в исходных текстах. В таком виде программа представляет собой архив с именем вида:
name-version.tar.gz
Установка такого софта производится выполнением набора несложных команд:
tar -xzvf name-version.tar.gz cd name-version ./configure make sudo make install
Расшифровка действий:
Шаг | Команда | Что делает |
1 | tar -xzvf name-version.tar.gz | Распаковка архива |
2 | cd name-version | Переходим в полученный после распаковки директорий |
3 | ./configure | Настройка исходников на нашу систему |
4 | make | Компиляция |
5 | sudo 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
Расшифровка действий:
Шаг | Команда | Что делает |
1 | tar -xzvf name-version.tar.gz | Распаковка архива |
2 | cd name-version | Переходим в полученный после распаковки директорий |
3 | ./configure —prefix=/usr/local/stow/name-version | Настройка исходников на нашу систему так, чтобы установить в указанный директорий |
4 | make | Компиляция |
5 | sudo make install | Установка |
6 | cd /usr/local/stow/ | Переходим в директорий, где лежат программы |
7 | sudo xstow name-version | Создаем символьные линки в иерархию /usr/local |
Команда:
sudo xstow -D name-version
Удаляет символьные ссылки. После удаления ссылок директорию с файлами программы, находящуюся в /usr/local/stow/ можно удалять.
Заключение
Используя менеджер пакетов xstow можно не только поддерживать порядок в системе, можно иметь несколько версий программ одновременно и быстро переключаться между ними.
Литература
1. Стандартная иерархия файловой системы Linux (File System Hierarchy Standard)
2. Filesystem Hierarchy Standard