Собираем программы из исходников(.tar.gz)

Сборку программы можно сравнить с выпечкой пирога. Чаще всего, вначале надо взять все необходимые ингридиенты (исходники),потом смешать их в нужном порядке (подготовить исходники к сборке, ./configure), а затем залить в форму и поставить в печь (запустить сборку, make). Спустя некоторое время из печи можно вынимать готовый к употреблению пирог (устанавливать готовую программу, make install).

Следует отметить, что в данном случае для выпечки необходима кухня и печь. Также и для сборки программы необходимы инструменты разработчика. Обычно это включает в себя как минимум компилятор и сопутствующие ему программы, как например утилита make. Это и есть "печь". Потребуется и место, где можно всем этим заняться -- командная строка (терминал) ("кухня"). Если у вас есть и кухня, и печь, то можете начинать готовить.

Итак, все свободные программы доступны в виде исходного кода. Это полуфабрикат программы. Из него легко можно собрать саму программу, а можно и использовать для создания какой-нибудь новой программы. По-английски исходный код называется source code.

Шаг 1: берём исходники

Необходимо скачать и распаковать архив с исходным кодом программы. Например, можно скачать программу hello-2.1.1. Обычно исходники следует брать с сайта разработчиков программы.

Распаковать архив можно так:
tar zxvf hello-2.1.1.tar.gz

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

Перейдите в каталог с исходным кодом:
cd hello-2.1.1

Шаг 2: configure (месим тесто)

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

В большинстве случае для подготовки исходников к сборке потребуется выполнить только одну команду:
hello-2.1.1$ ./configure

Она проверит наличие всех необходимых условий (библиотек и других программ) в Вашей системе, и приготовит исходный код к их использованию. Обратите внимание на символы "./" в начале команды. Они указывают, что необходимо выполнить команду configure из текущего каталога, то есть команду configure поставляемую вместе с исходным текстом программы, которую мы собираем.

На этом же этапе можно указать и куда именно надо ставить программу. Хотя в большинстве случаев рекомендуется ставить "самосборные" программы в каталог /usr/local, иногда это невозможно. Так, если у пользователя нет прав администратора, например на общественном компьютере, то установить программу можно только в свой домашний каталог. Чтобы установить программу в домашний каталог нужно указать дополнительный параметр команде configure:
hello-2.1.1$ ./configure --prefix=$HOME

Внимательно читайте что пишется на экране при подготовке исходников. Если всё нормально, то закончится она должна чем-нибудь вроде
config.status: creating Makefile
config.status: creating contrib/Makefile
config.status: creating doc/Makefile
config.status: creating intl/Makefile

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

Шаг 3: make (в печь!)

Если предыдущая стадия закончилась нормально, то теперь можно ставить наш полуфабрикат в печь. То есть запускать процесс сборки программы. Обычно он происходит автоматически и управляется командой make:
hello-2.1.1$ make

Для больших программ этот процесс может занимать довольно много времени. Однако наша программа-пример hello должна собраться быстро.

Если сборка закончилась сообщением вроде этого:

make: *** [all] Ошибка 2

то значит, что-то пошло не так, и сборка не получилась. Однако чаще всего сборка заканчивается без ошибок.

Шаг 4: make install (кушать подано!)

Собственно всё. Пирог можно подавать к столу, а собранную программу устанавливать в систему. Делается это так:

hello-2.1.1$ make install

Если на шаге подготовки исходников Вы выбрали вариант установки в домашний каталог (как я), то не забудьте добавить подкаталог ~/bin в переменную PATH:

export PATH=$HOME/bin:$PATH

Можете запускать собранную программу:

hello

Здравствуй, мир!

Она пишет на экран "Здравствуй, мир!". Всё ОК.

Надеюсь, что эти инструкции будут понятны даже совсем начинающим пользователям линукс. Мне в своё время не хватало таких инструкций :)

P.S. Хочу, однако, заметить, что сборка из исходников несёт с собой целый ряд неудобств. Первое и наиболее существенное из них -- удалять такую программу гораздо хлопотнее. В случае с hello это можно сделать с помощью команды

hello-2.1.1$ make uninstall

в каталоге с её исходным кодом, но не всегда этот каталог сохраняется в целостности, да и не все авторы программ должным образом готовят исходные тексты к make uninstall

Поэтому лучше пользоваться готовыми пакетами, поставляемые с Вашим дистрибутивом. Так, чтобы установить программу hello в Debian GNU/Linux достаточно всего одной команды:

sudo aptitude install hello

Оригинал статьи

Комментарии (18)

0
Soi-Fong - 14 Октябрь, 2009 - 17:34
Изображение пользователя Soi-Fong.

Я бы не советовал использовать "make install", лучше пользоваться утилитами типа checkinstall.

0
Гал - 19 Октябрь, 2009 - 20:34
Изображение пользователя Гал.

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

0
ktchv - 19 Октябрь, 2009 - 20:59
Изображение пользователя ktchv.

вообще ка бе есть make uninstall в противоположность install

0
Гал - 19 Октябрь, 2009 - 21:20
Изображение пользователя Гал.

вот я и говорю что не знающий человек ооочень долго будет искать установленные файлы :D

0
Soi-Fong - 20 Октябрь, 2009 - 10:26
Изображение пользователя Soi-Fong.

А как на счет коллизий? Если будут пересечения файлов разных пакетов, то можно вынести лишнего. Как говорится, простым движением make install любой дистрибутив превращается в slackware.

0
ktchv - 20 Октябрь, 2009 - 11:57
Изображение пользователя ktchv.

ну как бе make install ставит обычно в /usr/local и в теории поломать систему не должен. а внутри local ессесно уже может происходить всё, что угодно..

0
Voyageur - 20 Октябрь, 2009 - 16:48
Изображение пользователя Voyageur.

Да впринципе у конфигуратора есть опция --prefix, которая поставит куда вам угодно...правда это не совсем идеологически верно. Но я этим успешно иногда пользуюсь!

0
Soi-Fong - 20 Октябрь, 2009 - 18:38
Изображение пользователя Soi-Fong.

Это как раз идеологически верно в совокупности с тем, что ты собираешь и устанавливаешь из под юзера и в директорию юзера. Идеально для экспериментов, эдакая песочница, хоть вирусы собирай. А если еще добавить статическую линковку, то мы получим настоящий win/mac way :)

0
Voyageur - 20 Октябрь, 2009 - 19:03
Изображение пользователя Voyageur.

Это бесспорно! Дело в том, что когда я не слишком в ручной сборке разбирался, то использовал истинный win-way - собирал каждую программу в отдельный каталог))) А потом удивлялся, что это не запускается ничего, что это не компилятся новые проги, а они всего лишь требовали указать путь к библиотекам...

0
balamutick - 10 Декабрь, 2009 - 17:42
Изображение пользователя balamutick.

Тут ещё ссылочку подсказали: Собираем пакет для Debian

Посмотрите, может пригодится.

0
Гость - 9 Апрель, 2011 - 16:32

Большое спасибо

0
crosskay - 30 Июнь, 2015 - 12:20
Изображение пользователя crosskay.

а почему в сети народ советует разные комманды для распаковки *tar.gz ?
такие как : tar -xf
tar -zxvf
tar xzf
tar xjf
tar xzvf

ни гугл ни википедия не дали мне внятного ответа.

0
MacLeod - 30 Июнь, 2015 - 13:07
Изображение пользователя MacLeod.

Потому, что все внятные ответы есть в
man tar
tar -xf здесь полагаются на автоопределение типа сжатия
tar -zxvf здесь явно указывают gzip + просят показывать подробный вывод
tar xjf это для распаковки bz2
tar xzvf это то же самое, что и второй вариант, перестановка параметров местами сути не меняет

0
dyug - 30 Июнь, 2015 - 16:55

главное, чтобы f был в конце, ибо он указывает, что дальше идет имя файла.
Да, это написано в том же мане...

0
MacLeod - 30 Июнь, 2015 - 21:07
Изображение пользователя MacLeod.

А разве в приведенных примерах не в конце?

+1
dyug - 1 Июль, 2015 - 13:22

написано то в конце, но кто же ман читать то после этого будет?
а потом начнется... не работает...:-)
в моем случае я уточнил почему именно он должен быть в конце.
просто встретил слова "перестановка параметров местами сути не меняет" и уточнил.
Ибо в свое время сам наступал на эту граблю. :-)
Да, тогда я еще ман не читал внимательно.

+1
MacLeod - 2 Июль, 2015 - 02:47
Изображение пользователя MacLeod.

Да кто же советы на будущее будет слушать?
Вот не заработает - прибегут сюда, где вы, с полным парадом, под фанфары, отправите читать ман до конца =)

Прикалываюсь, да.

0
dyug - 2 Июль, 2015 - 10:14

ну вдруг в голове что-то отложится, и эту проблему они избегут...
/Да, я наивный вьюношь с сединой на голове и бороде./
уже 53 года как... :-)