Unix-way → Сборка или компиляция программ из исходников в linux

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

Тема собственно родилась по просьбе одного хорошего человека, который попросил вынести в отдельный топик. Буду собирать для примера geany на голом только что установленном дистрибутиве Debian squeeze с Gnome на борту. «Почему geany? Он же есть в репозитории.» — спросите вы. Просто это первая программа которую собрал в linux, так сказать ностальгия.

Readme

Так к чему я это? К тому что обычно пишется «как собрать» в файле Readme или Install, прежде чем делать что-то посмотрите в этот файл, наверняка там написан не только процесс установки, но и зависимости которые нужны для пакета.

Обычно все сводится к выполнению

$ ./configure
$ make
# make install

или

$ ./configure
$ make
# checkinstall -[D][R][S]


Скачиваем geany

Можно скачать по ссылке, а можно воспользоваться консольной утилитой wget, если вы не выполняли команду «cd» до этого, то скачается в ваш корневой каталог пользователя /home/user.

$ wget -c http://download.geany.org/geany-0.20.tar.bz2


Распаковываем

Можно распаковать как угодно, и каким угодно «архиватором», предлагаю сделать это так

Для tar.bz2
$ tar -xvjf geany*.tar.bz2

Для tar.bz
$ tar -xvfz geany*.tar.bz


Переходим в распакованную директорию
$ cd geany*


Установка необходимых пакетов для сборки

В дальнейшем ставить уже не надо будет

# apt-get update && apt-get install build-essential -y


Сборка классическим make, make install


Конфигурация

Не буду описывать различные префиксы, их можно посмотреть в help, но если вы собираете впервые, то оно вам не нужно.
./configure --help. В большинстве случаев достаточно ./configure без префиксов.

Можно установить все сразу, но буду показывать процесс конфигурации т. к. не всегда очевидны все необходимые пакеты. Этот процесс может занять достаточно много времени, к этому надо быть готовым. Не всегда можно скомпилировать программу под любой дистрибутив т.к. можно упереться в цепь неразрешенных зависимостей, а иногда приходится их тоже собирать.

Выполняем
$ ./configure


На данном этапе мы получили сообщение

configure

Гуглим «ошибку» или ищем сразу в репозитории. Тут нужно поставить девелоперский пакет libgtk.

Выполняем поиск и смотрим список
$ apt-cache search gtk 2.0


Устанавливаем
# apt-get install libgtk2.0-dev -y


Теперь повторяем опять
$ ./configure


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

configure

Сборка и установка

Переходим непосредственно к самой сборке, выполнив для компиляции

$ make

Получили примерно вот такой лог

make

Если с ошибкой, значит гуглим ошибку, потом повторяем. Но на этом этапе ошибки возможны как правило только с еще сильно нестабильным софтом, тут скорей всего помочь может только багрепорт разработчику.

Если все хорошо, теперь можно выполнить от root, или с префиксом sudo

# make install

или

$ sudo make install


Смотрим наш только что установленный редактор

make install

На этом все. Архив tar.gz2 и каталог geany который был извлечен из архива можно удалить, выполнив последовательно

Перейти в корень /home/user
$ cd

Удалить geany-0.20.tar.bz2
$ rm -rf geany-0.20.tar.bz2

Удалить geany-0.20
$ rm -rf  geany-0.20


Сборка пакетов для установки при помощи пакетного менеджера


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

Для решения этих проблем есть утилита checkinstall которая сначала создает пакет .deb, .rpm, а потом его уже устанавливает. После сборки пакета при помощи checkinstall не желательно давать его кому-то еще, эта утилита сделана исключительно для удобства работы на отдельно взятом компьютере.

Выполняем все то же, что и в классическом варианте, но с некоторыми изменениями.

Сheckinstall

Ставим сначала пакет checkinstall для сборки

# apt-get install checkinstall -y


Конфигурация

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

$ ./configure


Собираем пакет и устанавливаем

Выполняем
$ make

Теперь вместо make install выполняем checkinstall, конечно тоже от root или с префиксом sudo.

Для .deb
# checkinstall -D

Для .rpm
# checkinstall -R

Для TGZ(Slackware)
# checkinstall -S

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

1. Enter
2. Enter
3. Заполняем, уточню, это не обязательные поля, можно смело пропустить, если пакет больше использоваться не будет.

  • [0] Maintainer — пишем ваш email
  • [10] Requires — Зависимости пакета, тут нужно указать не девелоперские пакеты (!-dev), в нашем случае это libgtk2.0 для любой другой программы этот список может быть достаточно большим.
    checkinstall

4. Если решили что все в порядке, продолжаем нажав «Enter». Новый созданный пакет будет лежать в этой же директории, в нашем случае ~/geany-0.20, а так же установлен в системе.



NOTE: Для checkinstall мне пришлось поставить еще apt-build т.к. его не было в системе.
FAQ по checkinstall

На этом все, спасибо за внимание.
  • avatar
  • makenskiy
  • 10966
  • +22
  • 16 апреля 2011, 18:28

Комментариум (30)

RSS свернуть / развернуть
+
+5
avatar

Droden

  • 16 апреля 2011, 18:58

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Вот спасибо, а то Я не знал с какой стороны checkinstall ковырять,))) Я ему и фамилию говорил и паспорт показывал, а checkinstall не хотел работать )))) ;)
+
+4
avatar

VirtaVik

  • 16 апреля 2011, 20:25

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
… спасибо ОГРОМНОЕ!!! очень нужно и супер-полезно для начинающих…
+
+3
avatar

Anonymous

  • 16 апреля 2011, 21:37

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
После абзаца про чтение Readme, остальное можно было не писать.
+
+4
avatar

Droden

  • 17 апреля 2011, 08:04

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Для начала тебе надо выйти из анонимного, а патом советовать, что нужно писать, что нет.
+
0
avatar

Anonymous

  • 17 апреля 2011, 12:09

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Для начала подучи русский язык, а пАтом мне советуй.
+
+2
avatar

Droden

  • 17 апреля 2011, 14:33

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
А тебе видно совсем нечего сказать, только цепляешься к словам, сам то аноним — пустышка, даже зарегистрироваться не может, а ещё учит. Если такой умный выложи свой топик, а хотя, не затрудняй себя, это тебе не по силам.
+
+3
avatar

Anonymous

  • 16 апреля 2011, 21:52

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Согласен с предыдущем комментатором, хорошо что это в самом начале. Если у человека есть моск он догадается что дальше делать.
+
+3
avatar

pashtuun

  • 17 апреля 2011, 12:48

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Не всегда «моск» может сразу понять что делать, когда виден полный процесс это проще! Не уж то вы хотите сказать что как только сели за «linux» не нуждались в примерах?
+
+4
avatar

terra

  • 16 апреля 2011, 22:17

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Помимо Autotools есть еще и более новые системы сборки SCons и CMake.
+
+4
avatar

terra

  • 16 апреля 2011, 22:29

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Седня компилировал Wine-1.3.18, часа полтора make его мурыжил, интересно сколько-же полноценная сборка генты занимает .
+
+4
avatar

Anonymous

  • 16 апреля 2011, 22:53

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Неделя установки базового функционала и месяц юзерского, на все про все.
+
+4
avatar

raxp

  • 17 апреля 2011, 12:28

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Смотря какое железо.
Я генту с гномом пилил чуть меньше недели.
Потом несколько месяцев запиливал программы и решал насущные проблемы :)
Железо мое было таким
Сейчас Core i5+4GB RAM — пробовал, база с гномом запилилась за 1,5 дня. Настраивать не стал, был епичный фэйл с невнимательностью и полной потерей всех данных на харде
+
+1
avatar

bill_god

  • 18 апреля 2011, 02:33

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
вот оно извращенсво «линукс в массы» чтобы поставить новую программу в бубен по бей пару часов!
+
+5
avatar

terra

  • 18 апреля 2011, 12:44

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Это называется опенсорс, а не Линукс! Опенсорс есть и в винде, как не удивительно это для тебя будет звучать, и его активно используют продвинутые маздай-пользователи!
А в лине любой новичок, не утруждая себя поиском по варезникам, может в пару кликов установить бинарный пакет любой программы с репозитория за несколько секунд!!!
+
+5
avatar

terra

  • 18 апреля 2011, 12:54

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Да и приведенная здесь методика относиться по большей части к самым новым версиям ПО, что говорит об их «сырой» природе. После отладки оный софт помещаются в виде скомпилированных пакетов в репозитории. А «сырыми» они мало подходят для «планктона»;).
+
0
avatar

bill_god

  • 21 апреля 2011, 03:27

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
ага в пару кликов ну ну

в линукс
1. найди сорцы новой программы
2. сконфигурируй установив тыщу зависимостей
3. скомпилируй
4. установи

в виндовс
1. найди инсталер
2. установи

и того? — для установки новой программы в линукс побей в бубен пару часов
+
+4
avatar

terra

  • 21 апреля 2011, 08:01

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Итого в винде: после такой установки: долго лечиться от вирусов, переустанавливать винду и восстанавливать пароль от своих ящиков. Конечно всё проще!
+
+3
avatar

raxp

  • 21 апреля 2011, 13:30

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
в виндовс
1. найди инсталер
2. установи

Установка GTA IV:
You need Microsoft .NET Framework 3.0 or later.
You need xlive.dll (И как хочешь понимай, что это такое и где его взять)
You need Games For Windows Live
You need DirectX 10 or later
You need Rockstar Games Social Club
You need Windows Media Encoder
You need Windows XP Service Pack 3 or Windows Vista Service Pack 1
You need UMDF

И все это ты пойдешь искать в инете.
В Linux:
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following NEW packages will be installed:
fast-user-switch-applet gdm gdm-themes libdmx1
(Все зависимости данного пакета устанавливаются вместе с пакетом)
0 upgraded, 4 newly installed, 3 to remove and 0 not upgraded.
Need to get 9,003 kB of archives.
After this operation, 16.9 MB of additional disk space will be used.
Do you want to continue [Y/n]?

Опять же:
terra сказал:
Это называется опенсорс, а не Линукс! Опенсорс есть и в винде, как не удивительно это для тебя будет звучать, и его активно используют продвинутые маздай-пользователи!
А в лине любой новичок, не утруждая себя поиском по варезникам, может в пару кликов установить бинарный пакет любой программы с репозитория за несколько секунд!!!
+
+3
avatar

raxp

  • 21 апреля 2011, 14:50

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
UPD:
Пилить из исходников нужно не всегда. (Почти всегда только в генте, и то там тоже можно скачать бинарник и запустить его). И опять же ты сравниваешь две разные вещи: ты сравниваешь автоматическую установку (в винде) и из исходников (в Linux). Давай уж будем на равне — скомпилируй мне Gimp под винду. Так вот, я в бубен буду бить меньше, мне за компилятором и зависимостями, если что, недалеко идти, а вот тебе придется по сайтам пошастать.
+
+3
avatar

pashtuun

  • 21 апреля 2011, 15:03

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Можно спрогнозировать ответ bill_god, примерно так — «Зачем мне компилировать гимп есть готовый .exe новой версии, а новых версий в репозиториях не бывает про это написано в топике. Новую версию нужно собирать с бубном пару часов»

Вывод: человек не понимает — «оси разные и философия разная». Что программа сначала появляется исключительно в исходниках, а уже потом кто-то собирает в пакет для установки в пару кликов. С exe тоже самое, он сам на ровном месте не появляется, кто то его собирает.
+
-3
avatar

bill_god

  • 22 апреля 2011, 01:25

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
мысля читаешь? «Зачем мне компилировать есть готовый .exe » — в точку
+
+3
avatar

raxp

  • 22 апреля 2011, 14:29

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Ну так неинтересно!
Если на равных, то я вот дам всего одну команду в консоли, и гимп установится.
А ты и дальше ищи/качай и пользуйся своими визардами :)
+
+3
avatar

raxp

  • 18 апреля 2011, 15:19

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
sudo apt-get update && sudo apt-get upgrade && sudo apt-get install <имя программы>

Да и из исходников тоже не особо надо в бубен бить. В статье же написано, что обычно все делается стандартными командами.
wget <ссылка для скачивания> && tar xvf <имя архива> && cd <имя архива без расширения> && ./configure && make && make install

This is so hard?

З.Ы. не удержался :)
Quote bashorg #394695
<@insomnia> Нужно выполнить всего три команды, чтобы поставить Gentoo
<@insomnia> cfdisk /dev/hda && mkfs.xfs /dev/hda1 && mount /dev/hda1 /mnt/gentoo/ && chroot /mnt/gentoo/ && env-update &&. /etc/profile && emerge sync && cd /usr/portage && scripts/bootsrap.sh && emerge system && emerge vim && vi /etc/fstab && emerge gentoo-dev-sources && cd /usr/src/linux && make menuconfig && make install modules_install && emerge gnome mozilla-firefox openoffice && emerge grub && cp /boot/grub/grub.conf.sample /boot/grub/grub.conf && vi /boot/grub/grub.conf && grub && init 6
<@insomnia> это первая
+
+4
avatar

terra

  • 21 апреля 2011, 08:17

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Продвинутый маздай-юзер будет пытаться это выполнить в блокноте
+
0
avatar

bill_god

  • 22 апреля 2011, 01:26

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
разве нельзя с помощью блокнота это выполнить?
+
+3
avatar

raxp

  • 22 апреля 2011, 14:31

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Шедевральный вопрос
Ладно, это я так шучу.
Так то скрипт написать и исполнить его можно.
Правда смотря в какой системе это делается и каким редактором :)
+
+2
avatar

bill_god

  • 23 апреля 2011, 01:31

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
какая разница с каким? так или иначе при помощи блокнота))))
+
+2
avatar

raxp

  • 23 апреля 2011, 11:42

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Знаю: vi, nano, emacs, gedit, kate
Блокнот — не, не слышал :) Щютка.
Ну мы поняли, что текстовым редактором :)
+
+3
avatar

Anonymous

  • 24 апреля 2011, 23:41

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Хорошо что пишите такие посты, очень помог манульчик, спасиб!
+
+2
avatar

Anonymous

  • 11 мая 2011, 22:12

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Все правильно написано чо вы гоните?

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.