Установка программ в Linux из исходников

от автора

в

Программное обеспечение ОС Linux в форме исходного кода (исходных текстов) хранится на многих узлах интернета. В основном загрузка исходников происходит с помощью git clone, wget или браузера по типу Mozilla FireFox.

Распаковка

Программы обычно распространяются в упакованных архивах, это файлы с расширениями

<some_app_name>.tar.gz  (иногда .tgz)
<some_app_name>.tar.bz2 

Нужно понимать отличие между архиватором и упаковщиком.

Для архивации директорий и файлов используется программа tar; результатом её работы является файл с расширением .tar. Грубо говоря, это копия файловой системы — директорий и файлов с их атрибутами и правами доступа, помещённая в один файл.

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

Программа tar умеет распаковывать, поэтому не нужно вызывать gunzip, а можно просто указать программе tar, что файл нужно cначала распаковать. Например, команда

tar -xvf <some_app_name>.tar.gz

сразу распакует и разархивирует. Отличие файлов с расширениями

<some_app_name>.tar.gz

и

<some_app_name>.tar.bz2

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

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

cd <имя_пакета>*

Сборка пакета

Для сборки программ в GNU/Linux используется (в основном) программа make, которая запускает инструкции из Makefile, но поскольку дистрибутивов GNU/Linux много, и они все разные, то для того чтобы собрать программу, нужно для каждого дистрибутива отдельно прописывать пути,где какие лежат библиотеки и заголовочные файлы. Программисты не могут изучать каждый дистрибутив и для каждого отдельно создавать Makefile. Поэтому придумали конфигураторы, которые «изучают» систему, и в соответствии с полученными знаниями создают Makefile. Но на конфигураторе они не остановились и придумали конфигураторы конфигураторов =)…на этом они остановились :-)

Для сборки нам нужны компиляторы: они прописаны в зависимостях пакета build-essential, так что достаточно установить его со всеми зависимостями. Ещё нужны autoconf и automake.

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

./bootstrap

или

./autogen.sh

Если таких скриптов в архиве не оказалось, то можно выполнить последовательно следующие команды:

aclocal
autoheader
automake --gnu --add-missing --copy --foreign
autoconf -f -Wall

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

./configure

Конфигуратор построит Makefile основываясь на полученных знаниях и файле makefile.am. Можно передать конфигуратору опции, предусмотренные в исходниках программы, которые позволяют включать/отключать те или иные возможности программы, обычно узнать о них можно командой

./configure --help

Также есть набор стандартных опций, вроде

--prefix=

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

--prefix=/usr

или

--prefix=/usr/local

БЕЗ слеша в конце! Теперь можно запустить процесс сборки самой программы командой

make

Для сборки достаточно привилегий обычного пользователя. Окончанием сборки можно считать момент, когда команды в консоли перестанут «беспорядочно» выполняться и не будет слова error. Теперь всё скомпилировано и готово для установки.

Установка

Усилия потраченные на Правильную установку в последствии с лихвой окупятся в случае удаления или обновления устанавливаемого программного обеспечения.

Правильная установка(Вариант №1)

Установка при помощи утилиты checkinstall. Для установки выполните

sudo apt-get install checkinstall

Минус данного способа: checkinstall понимает не все исходники, поскольку автор программы может написать особые скрипты по установке и checkinstall их не поймёт.

Для создания и установки deb-пакета необходимо выполнить

sudo checkinstall

Правильная установка(Вариант №2)

Быстрое создание deb-пакета «вручную».

Основное отличие от предыдущего способа заключается в том, что в данном случае вы создаете пакет вручную и отслеживаете все вносимые изменения. Так же этот способ подойдет вам, если исходники не поддерживают сборку пакета с checkinstall.

  • Производим установку во временную директорию, где получаем весь набор устанавливаемых файлов:
fakeroot
make install DESTDIR=`pwd`/tempinstall
  • Создадим в «корне пакета» директорию DEBIAN и сложим в DEBIAN/conffiles список всех файлов, которые должны попасть в /etc:
сd tempinstall
mkdir DEBIAN
find etc | sed "s/^/\//" > DEBIAN/conffiles
  • После чего создаём файл DEBIAN/control следующего содержания:
Package: имя_пакета
Version: 1.2.3
Architecture: amd64/i386/armel/all
Maintainer: Можете вписать своё имя, можете дребедень, но если оставить пустым, то dpkg будет ругаться
Depends: Тут можно вписать список пакетов через запятую.
Priority: optional
Description: Тоже надо что-нибудь вписать, чтобы не кидало предупреждения
  • При необходимости там же можно создать скрипты preinst, postinst, prerm и postrm.
  • Создаем deb-пакет, для чего выполняем:
dpkg -b tempinstall
  • Получаем на выходе tempinstall.deb, который и устанавливаем
sudo dpkg -i tempinstall.deb

Установка (вариант №3)

Процедура создания deb-пакета подробно описана в данной статье.

Неправильная установка

Минус данного способа заключается в том, что если вы устанавливаете напрямую через make install, то нормально удалить или обновить пакет вы, скорее всего, не сможете. Более того, установка новой версии поверх старой, скорее всего, затрёт ваши изменения в конфигах. make install делает ровно то, что ему сказано — производит установку файлов в нужные места, игнорируя тот факт, что там что-то уже есть. После этого процесса совершенно никакой информации о том, что и куда ставилось, получить в удобоваримом виде невозможно. Иногда, конечно, Makefile поддерживает действие uninstall, но это встречается не так часто, да и не факт, что корректно работает. Кроме того, вам будет необходимо хранить для деинсталяции распакованное дерево исходников и правил сборки.

Для установки необходимо выполнить

sudo make install

Для удаления пакета, установленного данным способом необходимо выполнить в корневой директории исходников программы (там где вы запускали make install).

sudo make uninstall

Ошибки

Часто на этапе конфигурации конфигуратор сообщает, что не хватает той или иной библиотеки.

Название библиотеки, которое он сообщает, не всегда соответствует названию пакета в Ubuntu.

Из собственного опыта могу посоветовать поискать в Synaptic(Пакет менеджер) нужный пакет, исключив префикс lib, если нашлось несколько пакетов различающихся приставкой -dev в названии, то вам нужно установить именно -dev пакет (обычно он тянет за собой и не -dev пакет).

Можно ещё поискать с помощью http://packages.ubuntu.com/, введя имя библиотеки в поиск по содержимому пакетов, аналогично, если найдётся dev и не dev, нужны оба :-). Ну или просто поискать в Google.

Необходимое программное обеспечение

Пакеты с буквами mm в конце описания — это пакеты для C++ программ. Список для bmpx, но подойдёт почти для любой GTK2/Gnome программы. Так что если не получается собрать, то посмотрите на этот список и сверьте с тем что у вас установлено.

Compile:Runtime:
Xlibx11-devlibx11-6
GlibMMlibglibmm-2.4-devlibglibmm-2.4-1c2a
GTK+libgtk2.0-dev,gtk-doc-toolslibgtk2.0-0
GTKMMlibgtkmm-2.4-devlibgtkmm-2.4-1c2a
Gladelibglade2-devlibglade2-0
GladeMMlibglademm-2.4-devlibglademm-2.4-1c2a
XMLlibxml2-devlibxml2
XML++libxml++2.6-devlibxml++2.6c2a
DBuslibdbus-1-dev,libdbus-glib-1-devlibdbus-1-2,libdbus-glib-1-2
Alsalibasound2-devlibasound2
HALlibhal-dev,libhal-storage-devlibhal1,libhal-storage1
Gaminlibgamin-devlibgamin0
Neonlibneon25-devlibneon25
TagLiblibtagc0-devlibtagc0
Startup-Notifylibstartup-notification0-devlibstartup-notification0
Boostlibboost-dev,libboost-filesystem-devlibboost-filesystem1.33.1
MusicBrainzlibmusicbrainz4-devlibmusicbrainz4c2a
GStreamerlibgstreamer0.10-dev,libgstreamer-plugins-base0.10-devlibgstreamer0.10-0,libgstreamer-plugins-base0.10-0

Пример , Установим игру Warzone 2100 из исходников

Для начало зайдем на страничку GitHab Warzone 2100

переходим в релизы и и скачиваем нужный нам архив

wget https://github.com/Warzone2100/warzone2100/releases/download/4.4.2/warzone2100_src.tar.xz

распакуем наш файл:

tar -xvf warzone2100_src.tar.xz

перейдем в распакованный каталог

 cd warzone2100

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

откроем README.md и ищем абзаце Установки

опускаемся ниже и на ходим зависимости

в каталоге warzone2100 есть скрипт для автоматической установки зависимостей get-dependencies_linux.sh , с ключами под определенную операционную систему и конфигурацией зависимостей (build-all или build-dependencies) .

Я буду использовать скрипт

sudo ./get-dependencies_linux.sh ubuntu build-all

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

После установки всех зависимостей, читаем наш файл README.md и находим команды для компиляции кода и установки нашей игры, в нужный нам каталог:

Согласно инструкции создадим каталог build в каталоге warzone2100:

mkdir build

перейдем в этот каталог:

cd build

Создадим конфигурацию для компиляции с добавлением нужный нам параметров

(Куда установить игру параметр «-DCMAKE_INSTALL_PREFIX:PATH=~/wz/install«)

(где после -GNinja указываем каталог с исходными файлами в моем случае /home/localadmin/warzone2100 )

cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX:PATH=~/wz/install -GNinja /home/localadmin/warzone2100

после создания конфигурационных файлов в каталоге build , запускаем компилятор и процесс установки :

cmake --build . --target install

Время компиляции не быстрый процесс, он зависит от производительности вашего процессора ,ждем окончания процесса и переходим в каталог ранее установленный нами ~/wz/install

cd ~/wz/install

командой ls смотрим что установилось:

ls

посмотрим что есть в каталоге bin

ls bin

и видим исполняемый файл warzone2100 , запустим его

bin/warzone2100

осталось создать ярлык для запуска на рабочем столе :

Можно сделать так:

создаем скрипт

#!/bin/bash 
~/wz/install/bin/warzone2100

делаем его исполняемым

chmode +x warz2100.sh 

создаем символическую ссылку на рабочий стол

ln -s /home/localadmin/wz/install/bin/warz2100.sh / ~/Desktop/Warzone2100

Готово

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Аватар пользователя yuliaadmin

Об авторе


Поиск по сайту


Полезные ссылки

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