Несмотря на то, что большинство дистрибутивов Linux имеют обширные репозитории пакетов, вы можете легко установить оттуда любой пакет с помощью специального менеджера пакетов дистрибутива *nix, который автоматически выполняет компиляцию пакетов и любых необходимых зависимостей, иногда все же может потребоваться компиляция и установка программ из следующих версий, таких как наш собственный исходный код, для исправления ошибок, установки новых версий пакетов, которые еще не доступны в репозитории пакетов…
В этом уроке мы узнаем, как создавать и устанавливать программы из исходного кода в Linux.
Установите необходимые утилиты
Перед компиляцией любой программы необходимо установить необходимые утилиты, например, компилятор GCC. Инструменты разработки или необходимые инструменты сборки предоставляют по крайней мере такие утилиты для инструментов, производных от RHEL, и инструментов, производных от Debian, соответственно. Чтобы установить такие инструменты, выполните следующую команду:
Установка программ в Linux из исходников tar.gz/ Процесс полностью с ошибками и траблшутингом
О производных Debian:
# apt install build-essential
На производных RHEL:
# yum groupinstall «Development Tools»
Извлеките исходный код
В большинстве случаев программное обеспечение распространяется в виде сжатого архива, представляющего собой выпуск исходного кода для конкретной версии. Сжатый файл содержит исходный код и сценарии сборки для компиляции и установки программного обеспечения.
Наиболее распространенные методы сжатия архивов включают:gzip,bzip2Илиг. Поэтому исходный код может быть сжат вимя_пакета-версия.tar.gz,имя-пакета-версия.tar.bz2, Илиимя-пакета-версия.tar.xzсоответственно.
версия GNUутилита архивации tarЭти методы поддерживаются, так что файлы, сжатые в таких менеджерах, можно легко распаковать.
Чтобы распаковать tar-архив, сжатый gzip:
# tar zxvf pkgname-version.tar.gz
Чтобы распаковать архив, сжатый bzip2:
# tar jxvf pkgname-version.tar.bz2
Чтобы распаковать tar-архив, сжатый xz:
# tar Jxvf pkgname-version.tar.xz
Кроме того, вы можете использовать специальную утилиту для распаковки сжатого исходного кода, а затем использовать утилиту GNU tar для извлечения содержимого. Например;
Чтобы распаковать tar-архив, сжатый gzip:
# gunzip pkgname-version.tar.gz Or # gzip -d pkgname-version.tar.gz
Для архива, сжатого bzip2:
# bunzip2 pkgname-version.tar.bz2 Or # bzip2 -d pkgname-version.tar.bz2
Для сжатого архива xz:
# unxz pkgname-version.tar.xz Or # xz -d pkgname-version.tar.xz
После завершения извлечения извлеките содержимое смолой следующим образом:
# tar xvf pkgname-version.tar
Сборка пакетов из исходного кода
Утилиты, обычно используемые для создания сценариев конфигурации / сборки для пакетов исходного кода программного обеспечения, включаютАвтоматическая конфигурациясСделано автоматически.
Автоматическая конфигурацияСоздавайте сценарии, которые могут адаптировать пакеты к различным вариантам UNIX-подобных систем без вмешательства человека. Он создает сценарий конфигурации для пакета из файла шаблона, в котором перечислены функции операционной системы, которые может использовать пакет.
Научись Linux: сборка программ из исходников (эпизод 13)
Автоматическое производствоУтилиты генерируются автоматическиСоздать файлФайлы, соответствующие стандарту кодирования GNU.
Чтобы собрать программу из исходного кода, вам нужно взять исходный код и разархивировать его. Перед распаковкой пакета рекомендуется проверить содержимое архива, чтобы убедиться, что после извлечения будет создан ваш собственный каталог. Чтобы просмотреть содержимое архива, выполните следующую команду.
# tar tvf pkgname-version.tar.*
# tar tvf pkgname-1.2.3.tar.gz —output truncated— pkgname-1.2.3/configure.ac pkgname-1.2.3/Makefile.in pkgname-1.2.3/m4/
# tar tvf pkgname-4.5.6.tar.xz configure.ac Makefile.in m4/
В первом случае его можно извлечь в текущий каталог. Во втором случае вам нужно создать каталог и разархивировать архив в этот каталог, потому что при этом будет разархивировано содержимое текущего каталога.
Обратите внимание, что важно внимательно прочитать документацию проблемного пакета.Прочти менясмонтажфайл.
Настройте среду установки
После извлечения и чтения документов INSTALL и README пришло время настроить среду для компиляции и установки пакетов. Это можно сделать с помощьюКонфигурацияСкрипт, проверяющий систему на наличие программного обеспечения, необходимого для сборки программы. Он также проверит необязательные и обязательные зависимости. Если необязательная зависимость отсутствует, компиляция этой зависимости будет отключена. Если необходимые зависимости отсутствуют, он напечатает ошибку и завершит работу.
Чтобы настроить пакет, позвонитеКонфигурацияСценарий находится в каталоге исходного кода, как показано в следующем примере;
# cd pkgname-1.2.3/ # ./configure
Сценарий configure обычно принимает параметры, позволяющие установить время компиляции.
Варианты этого программного обеспечения. Однако эти параметры могут быть специфичными для пакета, поэтому, чтобы узнать больше об этом параметре, запустите команду справки.
# ./configure -h
Скомпилировать исходный код
Если вышеуказанные шаги были выполнены без ошибок, выполните следующую команду, чтобы продолжить компиляцию программного обеспечения:ДелатьКоманда также находится в каталоге исходного кода.
# make
Любые ошибки, обнаруженные во время компиляции, отображаются в консоли.
установить программное обеспечение
Если этап компиляции завершен успешно, обычно программное обеспечение, скомпилированное из исходного кода, будет установлено в/ usr / местныйИ его подкаталоги. Для установки выполните следующую команду;
# make install
Это гарантирует, что двоичные файлы, необходимые программному обеспечению, будут размещены по стандартному пути, чтобы их можно было запускать в любом месте системы.
Если программа не предоставляет цель установки для установки, а установщик, выполняющий команду make install, не устанавливает программу, вы можете скопировать двоичный файл программы по стандартному пути и установить соответствующие права собственности и разрешения. Например;
# cp pkgname /usr/local/bin/ # chmod +x /usr/local/bin/pkgname
Однако вы можете использовать следующие методы вместо самостоятельного копирования программы:УстановитьПрограмма может копировать двоичные файлы и автоматически настраивать права собственности и разрешения. Чтобы использовать программу установки, введите:
# install pkgname /usr/local/bin
Пока вы знаетеБазовыйИнформация о том, как получить, извлечь, настроить, скомпилировать и установить программы из исходного кода.
Если вам нужно удалить пакет, просто перейдите в исходный каталог и запуститеДелатьС командойУдалитьЦели следующие.
# make uninstall
Если вы удалили исходный каталог или цели удаления не поддерживаются (обычно это не так), вручную удалите файлы программы. Вам также может понадобиться запуститьОчиститьУдаляйте только файлы, созданные во время компиляции, не удаляя каталог с исходным кодом.
Источник: codepre.com
Как установить программу из исходников
Иногда нужной программы нет в репозиториях, или имеющаяся там версия слишком старая. В таком случае, можно собрать её из исходников, и, как правило, это не так уж и сложно.
Существует много способов сборки: в некоторых случаях достаточно запустить в терминале скрипт, который автоматически соберёт программу, в других используются стандартные утилиты, а в особо тяжёлых приходится править исходники. Мы рассмотрим два наиболее распространённых варианта: configure/make и scons. Также, можно собрать deb-пакет из исходников с помощью checkinstall.
Но сначала поставим мета-пакет с необходимыми программами:
sudo apt-get install build-essential
configure/make
Итак, установим новую версию текстового редактора leafpad. Для этого скачиваем архив с сайта: http://savannah.nongnu.org/download/leafpad/leafpad-0.8.16.tar.gz . Если установлена старая версия, её лучше удалить.
1. В терминале заходим в папку с архивом (у меня он находится в ~/software/source/) и распаковываем его:
cd ~/software/source/
tar xzvf leafpad-0.8.16.tar.gz
cd leafpad-0.8.16/
Или можно воспользоваться графическим менеджером архивов.
Открываем файл README:
Как правило, информации из него достаточно, но иногда приходится заходить на сайт программы.
В README ищем раздел «Installation» или что-то подобное. Прежде всего там написаны зависимости, необходимые для сборки. В данном случае, это библиотеки GTK+-2.x.x и libgnomeprintui-2.2 (причём, нам нужны версии для разработки, т.е. с суффиксом -dev). В Ubuntu это пакеты libgtk2.0-dev и libgnomeprintui2.2-dev. Устанавливаем их через менеджер пакетов или с помощью терминала:
sudo apt-get install libgtk2.0-dev libgnomeprintui2.2-dev
3. Дальше, следуя инструкциям README-файла, выполняем скрипт настройки программы под нашу систему (должна быть открыта папка с исходниками):
Если надо установить программу в какую-то определённую папку, то выполняем configure с параметром —prefix=:
Так как /usr/local является папкой установки по умолчанию, то эти две команды равнозначны.
4. Смотрим лог выполнения, и, если никаких ошибок нет, собираем программу (если она большая, этот процесс может занять много времени):
5. Устанавливаем программу (может потребоваться ввод пароля):
sudo make install
6. Запускаем установленный редактор из меню «Приложения -> Стандартные» или командой:
7. А теперь удалим программу (в терминале по-прежнему должна быть открыта папка с исходниками):
sudo make uninstall
К сожалению, иногда такое автоматическое удаление невозможно, и приходится убирать программу вручную. Это можно решить созданием deb-пакета, но о нём чуть позже.
scons
Ещё один часто встречающийся способ сборки — это scons. Для примера возьмём исходники программы LinuxDC++ 1.0.3: http://launchpad.net/linuxdcpp/1.0/1.0.3/+download/linuxdcpp-1.0.3.tar.bz2 .
1. Заходим в папку с исходниками и распаковываем их.
cd software/source/
tar xjvf linuxdcpp-1.0.3.tar.bz2
cd linuxdcpp-1.0.3/
2. Открываем файл Readme.txt:
Здесь нам нужные следующие зависимости:
-
scons >= 0.96
pkg-config
g++ >= 3.4
gtk+-2.0 >= 2.10
gthread-2.0 >= 2.4
libglade-2.0 >= 2.4
pthread
zlib
libbz2
libssl
Ищем и устанавливаем соответствующие пакеты с помощью менеджера или вводим следующую команду в терминале:
sudo apt-get install scons pkg-config g++ libgtk2.0-dev libglib2.0-dev libglade2-dev libpthread-stubs0-dev zlib1g-dev libbz2-dev libssl-dev
Увы, не всегда название пакета в дистрибутиве совпадает с его названием в readme: например, библиотека gthread-2.0 содержится в пакете libglib2.0-dev. Что, впрочем, можно легко узнать с помощью поиска в интернете по запросу: «Ubuntu gthread-2.0».
3. Теперь собираем программу (выполнять настройку отдельно в случае с scons не надо):
Или, если надо указать папку для установки, добавляем параметр PREFIX=, как написано в Readme.txt:
4. Устанавливаем программу:
sudo scons install
6. Теперь удалим её из системы:
sudo scons install -с
checkinstall
Как я уже говорил выше, иногда программу нельзя удалить автоматически, и это вызывает некоторые трудности. Попробуем создать свой deb-пакет с помощью утилиты checkinstall.
1. Установим её из репозитория:
sudo apt-get install checkinstall
2. Теперь после сборки редактора leafpad вместо:
sudo make install
sudo checkinstall -D
Параметр -D здесь означает, что мы хотим создать deb-пакет.
3. На все вопросы можно просто нажимать Enter, тогда будет выбираться ответ по умолчанию.
При желании вводим описание пакета, но это необязательно. Дальше проверяем и, если надо, изменяем параметры сборки пакета, после чего нажимаем Enter.
Небольшое пояснение к параметрам в checkinstall:
Сборщик пакета — тут можно указать своё имя.
2 — Name, 3 — Version
Название и версия пакета, которые будет показываться в базе данных.
Зависимости пакета. Здесь должны быть простые версии пакетов, а не -dev. В случае с leafpad, вписываем сюда значение:
4. Программа уже установлена, и теперь у нас есть deb-пакет.
Так как он создан под рутом, поменяем владельца (надо прописать имя и группу пользователя, под которым вы работаете):
sudo chown имя:группа leafpad_0.8.16-1_amd64.deb
5. Теперь программу можно удалить гораздо проще:
sudo apt-get remove leafpad
А если потребуется снова её установить, то заходим в папку с пакетом и выполняем:
sudo dpkg -i leafpad_0.8.16-1_amd64.deb
6. Аналогично происходит сборка пакета и для scons. Только выполняется она командой:
sudo checkinstall -D scons install
А в зависимостях нужно будет прописать также и требования к версиям:
scons (>= 0.96), pkg-config, g++ (>= 3.4), libgtk2.0-0 (>= 2.10), libglib2.0-0, libglade2-0 (>= 2.4), libpthread-stubs0, zlib1g, libbz2-1.0, libssl0.9.8
И последнее, не стоит выкладывать в сеть пакеты, собранные с помощью checkinstall, так как они далеки от стандартов, и, возможно, на другом компьютере программа вообще не запустится. Они нужны лишь для удобства установки ПО на отдельно взятой машине.
Источник: ubuntologia.ru
Информационный конспект
В этой лекции мы рассмотрим как в Linux выполнить установку программы из исходных кодов. Также говорят установить из source-кодов или “исходников“. В настоящее время для всех популярных Linux-дистибутивов программное обеспечение поставляется в виде пакетов и уже нет необходимости компилировать и устанавливать программы из source-кодов. Но все же уметь выполнять эту операцию нужно.
Как правило, исходные коды программы распространяются в архиве .tar.gz. Иногда могут встречаться другие типы архивов, но этот пока самый распространенный. Что означают символы tar.gz? Они говорят о том, что исходные коды программы были заархивированы командой tar, а затем сжаты командой gzip.
Команда tar (type archive) — одна из самых старых команд Linux. Ее задача состоит в том чтобы из любой ветки файловой системы можно было сделать архив в виде одного файла. Таким образом утилита tar не сжимает данные, а записывает их в несжатом виде в один файл. Затем, созданный tar-файл, сжимается архиватором gzip. Например, создайте каталог targz в котором создайте несколько подкаталогов и файлов:
1
2
3
4
5
6
7
8
9
10
11
12
13
$ mkdir targz
$ mkdir -p ./targz/1
$ mkdir -p ./targz/2
$ mkdir -p ./targz/3
$ mkdir -p ./targz/4
$ echo «Hello hello HELLO» > ./targz/1.txt
$ cp ./targz/1.txt ./targz/2.txt
$ cp ./targz/1.txt ./targz/3.txt
$ cp ./targz/1.txt ./targz/4.txt
$ cp ./targz/1.txt ./targz/1/1.txt
$ cp ./targz/1.txt ./targz/2/1.txt
$ cp ./targz/1.txt ./targz/3/1.txt
$ cp ./targz/1.txt ./targz/4/1.txt
Чтобы создать tar-архив (tar-файл) каталога targz выполняем команду:
$ tar -cf targz.tar ./targz/
В результате получим файл targz.tar. Чтобы распаковать tar-архив выполняем следующую команду:
$ tar -xvf targz.tar
Чтобы из tar-архива создать tar.gz-архив его нужно сжать утилитой gzip:
$ gzip targz.tar
В результате получим tar.gz-архив — targz.tar.gz. Обратите также внимание на то, что утилита gzip при сжатии удаляет исходный файл. То есть файл targz.tar будет автоматически удален после того как будет создан файлtargz.tar.gz. Чтобы распаковать gz-архив нужно воспользоваться командой gunzip:
$ gunzip targz.tar.gz
Таким образом, чтобы распаковать tar.gz-архив можно воспользоваться командами tar и gunzip:
$ gunzip targz.tar.gz
$ tar -xvf targz.tar
или использовать команду tar c дополнительным ключом — z, который автоматически вызывает команду gunzip для распаковки gz-архива:
$ tar -xvzf targz.tar.gz
В результате получим исходный каталог targz. Еще одна полезная, хотя и немного громоздкая конструкция которая позволяет вывести в консоли содержимое tar.gz-архива не распаковывая его:
$ gzip -dc targz.tar.gz 2>/dev/null | tar tvvf —
Итак, мы научились распаковывать tar.gz-архивы в которых распространяются исходные коды многих программ. Теперь посмотрим как из них скомпилировать программу и установить ее. Для примера я предлагаю воспользоваться исходными кодами http-сервера — mini_httpd. Скачать можно отсюда.
Давайте познакомимся с основными служебными файлами, которые как правило содержаться в source-кодах. Распаковываем tar.gz-архив:
$ tar -xzvf mini_httpd-1.19.tar.gz
Переходим в каталог с исходниками и смотрим его содержимое:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ cd ./mini_httpd-1.19/
$ ls -l
итого 192
drwxr-xr-x 3 igor igor 4096 2003-12-20 06:05 contrib
-r—r—r— 1 igor igor 340 2001-12-22 20:54 FILES
-r—r—r— 1 igor igor 414 1999-09-28 21:49 htpasswd.1
-r—r—r— 1 igor igor 4959 2001-12-19 02:08 htpasswd.c
-r—r—r— 1 igor igor 326 2005-06-29 20:32 index.html
-rw-r—r— 1 igor igor 3140 2002-11-02 01:02 Makefile
-r—r—r— 1 igor igor 2661 2005-06-29 20:31 match.c
-r—r—r— 1 igor igor 1679 2005-06-29 20:31 match.h
-rw-r—r— 1 igor igor 199 2001-12-23 22:09 mime_encodings.txt
-rw-r—r— 1 igor igor 4632 2003-10-26 19:00 mime_types.txt
-r—r—r— 1 igor igor 16625 2005-06-29 20:31 mini_httpd.8
-r—r—r— 1 igor igor 88322 2005-06-29 20:31 mini_httpd.c
-r—r—r— 1 igor igor 1132 2001-12-20 09:14 mini_httpd.cnf
-r—r—r— 1 igor igor 2249 2002-07-30 21:45 port.h
-r—r—r— 1 igor igor 2157 2005-06-29 20:31 README
drwxr-xr-x 2 igor igor 4096 2003-12-20 06:05 scripts
-r—r—r— 1 igor igor 8284 2005-06-29 20:31 tdate_parse.c
-r—r—r— 1 igor igor 1575 2005-06-29 20:31 tdate_parse.h
-r—r—r— 1 igor igor 231 2003-12-20 06:03 version.h
Правилом хорошего тона является наличие в исходных кодах файла README в котором разработчики описывают, для чего нужен пакет, что он выполняет, предназначение основных исходных файлов, условия компиляции и прочую информацию, которую разработчики считают необходимой написать.
Следующий важный файл — это файл Makefile. Этот файл предназначен для утилиты make. Утилита makeпредназначена для того, чтобы реализовать в автоматическом режиме некий алгоритм действий, необходимый для компиляции или установки приложения. Этот алгоритм действий и описан в файле Makefile.
Будем говорить, что утилита make реализует цель описанную в файле Makefile. Целей может быть несколько. Откроем командой less Makefile и посмотрим часть его содержимого:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
…..
BINDIR = /usr/local/sbin
MANDIR = /usr/local/man
CC = gcc
CDEFS = $ $
CFLAGS = -O $
#CFLAGS = -g $
LDFLAGS = -s
#LDFLAGS = -g
LDLIBS = $ $ $all: mini_httpd htpasswd
mini_httpd: mini_httpd.o match.o tdate_parse.o
$ $ $ mini_httpd.o match.o tdate_parse.o $ -o mini_httpd
mini_httpd.o: mini_httpd.c version.h port.h match.h tdate_parse.h mime_encodings.h mime_types.h
$ $ -c mini_httpd.c
match.o: match.c match.h
$ $ -c match.c
tdate_parse.o: tdate_parse.c tdate_parse.h
$ $ -c tdate_parse.c
…..
В самом начале идет инициализация переменных, которые будут использоваться в Makefile. Например, переменная BINDIR = /usr/local/sbin. Затем идет вот такая конструкция:
all: mini_httpd htpasswd
all — это и есть имя цели. Справа от двоеточия идет условие выполнения этой цели. Эта строка читается так: цель all будет достигнута тогда, когда будут достигнуты цели mini_httpd и htpasswd. Давайте посмотрим на цель mini_httpd:
mini_httpd: mini_httpd.o match.o tdate_parse.o
$ $ $ mini_httpd.o match.o tdate_parse.o $ -o mini_httpd
Цель mini_httpd в свою очередь будет достигнута тогда когда будет успешно выполнена команда $ $ $ mini_httpd.o match.o tdate_parse.o $ -o mini_httpd в результате которой должен скомпилироваться бинарный файл mini_httpd. Но, чтобы файл был успешно скомпилирован должны быть достигнуты цели mini_httpd.o, match.o и tdate_parse.o. И так далее по цепочке. Одна цель зависит от другой.
Как следует понимать строку $ $ $ mini_httpd.o match.o tdate_parse.o $ -o mini_httpd? Очень просто. Путем подстановки значений переменных, она преобразуется к виду:
gcc -s mini_httpd.o match.o tdate_parse.o -lcrypt -o mini_httpd
gcc — это стандартный компилятор Linux для языков С/С++. То есть если в командной строке набрать make mini_httpd, то будет выполнена цепочка действий описанных в файле Makefile, после которых в случае успеха будет создан бинарный файл в каталоге с исходными кодами.
Другие цели которые есть в Makefile это install, clean и tar. Цель clean очищает каталок с исходными кодами от промежуточных файлов компиляции оставляя только исходники. Цель tar создает tar.gz-архив. А цель installвыполняет установку приложения в систему:
1
2
3
4
5
6
7
8
9
install: all
rm -f $/mini_httpd $/htpasswd
-mkdir -p $
cp mini_httpd htpasswd $
rm -f $/man8/mini_httpd.8 $/man1/htpasswd.1
-mkdir -p $/man8
cp mini_httpd.8 $/man8
-mkdir -p $/man1
cp htpasswd.1 $/man1
Как видите для того чтобы цель install была успешно выполнена, необходимо, чтобы была выполнена цель all, а установка подразумевает под собой простую операцию копирования скомпилированных файлов в соответствующие каталоги файловой системы.
Таким образом, если в каталоге с исходными файлами присутствует Makefile, то можно приступать к компиляции. По умолчанию команда make без указания цели будет выполнять цель all. То есть makeравносильно make all. После успешного выполнения команды make можно выполнять команду make install, которая завершить установку программы в системе.
Если в каталоге с исходниками нет файла Makefile, а есть файл Makefile.in, значит должен быть скрипт config. Скрипт config проверяет систему и создает файл Makefile. Таким образом в общем случае команды для установки программы из исходных кодов при отсутствии файла Makefile будут такими:
$ ./config
$ make
$ make install
Если выполнить команду make в каталоге ./mini_httpd-1.19/, то получим ошибку компиляции целиhtpasswd.o, соответственно цель all не может быть реализована. В файле README написано, что утилитаhtpasswd предназначена для смены пароля. Основной же файл это mini_httpd. Поэтому, чтобы установить сервер, хотя бы частично можно написать так:
$ make clean
$ make mini_httpd
Компиляция проходит без ошибок и в результате будет скомпилирован файл mini_httpd. Если запустить этот файл от имени рута, затем открыть бразузер и набрать в нем http://localhost, то мы увидим сообщение о том, что mini_httpd-сервер работает. Останется только скопировать файл в каталог с бинарными файлами.
В качестве домашнего задания попробуйте изменить в файле Makefile цель install таким образом, чтобыmini_httpd мог работать в вашем дистрибутиве и управляться стандартными командами /etc/init.d/mini_httpd start|stop|restart.
Источник: infaman.wordpress.com