- Распаковка архива с исходниками
- Создание конфигурации и компиляция
- Установка
- Неправильная установка и ошибки
- Пример
Программное обеспечение ОС 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: | |
---|---|---|
X | libx11-dev | libx11-6 |
GlibMM | libglibmm-2.4-dev | libglibmm-2.4-1c2a |
GTK+ | libgtk2.0-dev,gtk-doc-tools | libgtk2.0-0 |
GTKMM | libgtkmm-2.4-dev | libgtkmm-2.4-1c2a |
Glade | libglade2-dev | libglade2-0 |
GladeMM | libglademm-2.4-dev | libglademm-2.4-1c2a |
XML | libxml2-dev | libxml2 |
XML++ | libxml++2.6-dev | libxml++2.6c2a |
DBus | libdbus-1-dev,libdbus-glib-1-dev | libdbus-1-2,libdbus-glib-1-2 |
Alsa | libasound2-dev | libasound2 |
HAL | libhal-dev,libhal-storage-dev | libhal1,libhal-storage1 |
Gamin | libgamin-dev | libgamin0 |
Neon | libneon25-dev | libneon25 |
TagLib | libtagc0-dev | libtagc0 |
Startup-Notify | libstartup-notification0-dev | libstartup-notification0 |
Boost | libboost-dev,libboost-filesystem-dev | libboost-filesystem1.33.1 |
MusicBrainz | libmusicbrainz4-dev | libmusicbrainz4c2a |
GStreamer | libgstreamer0.10-dev,libgstreamer-plugins-base0.10-dev | libgstreamer0.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
Готово
Добавить комментарий