- Установка программ tar bz2, из исходных кодов в Linux
- Для чего нужно построение пакетов из исходного кода?
- Общий порядок сборки пакетов — утилита make
- Ручная сборка
- Автоматическая сборка — написание Make-файлов
- Как скомпилировать и установить файлы TAR GZ и TAR BZ2 в Ubuntu Linux
- Тарболы из стали
- Подготовка вашей системы
- экстракт конфигурировать
- строить устанавливать
Установка программ tar bz2, из исходных кодов в Linux
Linux-системы неразрывно связаны с концепцией GNU – проекта, поддерживающего и развивающего философию свободно распространяемого программного обеспечения (ПО), в том числе и в виде исходного кода. А поскольку систем на базе ядра Linux существует великое множество и разработчики дистрибутивов всегда для своих систем используют исходный код ПО при сборке комплектов утилит, пакетов, да и самого ядра, то, очевидно, что использование исходных кодов ПО — это неотъемлемый аспект в эксплуатации Linux-систем. По крайней мере, любому пользователю, достаточно хорошо освоившему UNIX-подобные системы, рано или поздно приходится сталкиваться со сборкой ПО из исходных кодов.
Самым распространённым случаем, когда приходится собирать ПО из «исходников» является ситуация, когда в свет выходит новая версия какого-либо пакета с устранением критической уязвимости в системе безопасности или с добавлением важного функционала. Но поскольку системы Linux, как правило, снабжены хранилищами пакетов (репозиториями), из которых происходит загрузка, установка и обновление ПО, то часто бывает так, что разработчики дистрибутива, которые и поддерживают репозитории, ещё не успели сформировать новые пакеты ПО, для которых уже выпущено обновление. В этом случае можно прибегнуть к самостоятельной сборке требуемых пакетов из исходного кода.
Для чего нужно построение пакетов из исходного кода?
Как уже отмечалось ранее, это необходимо, в первую очередь для устранения брешей в безопасности. Часто новые версии ПО выпускаются в результате внедрения новых подходов и технологий при разработке и оптимизации программного кода, что существенно может сказаться на производительности ПО, и это также довольно частая причина обновления программных пакетов путём их сборки из исходных текстов.
Владельцы и администраторы хостинг-площадок предпочитают также устанавливать в качестве веб-серверов, PHP-интерпретаторов и серверов баз данных (БД) предварительно собранные на целевом оборудовании соответствующие программные пакеты. Это позволяет добиться максимальной совместимости ПО с оборудованием, на котором предполагается его работа и, как следствие — стабильности, что для веб-хостинга очень важно.
Для программистов навыки по построению исполняемых файлов из исходного кода являются ключевыми, несмотря даже на то, что с этой задачей прекрасно справляются все современные интегрированные среды разработки (IDE), однако, как показывает практика, часто приходится производить сборку ПО без применения IDE.
Общий порядок сборки пакетов — утилита make
Для облегчения сборки ПО из исходных кодов существует свободная утилита make. Она применяется во всех UNIX-подобных системах для подавляющего большинства утилит. При сборке пакета очень полезно изучать информацию, содержащуюся, как правило, в файлах README или INSTALL, входящих в пакет. В этих файлах разработчики ПО указывают инструкции и специфические мероприятия для успешной сборки пакетов. Здесь также можно найти и системные требования для работы ПО и описания необходимых зависимостей, без которых собрать пакет будет невозможно.
Общий порядок сборки выглядит так:
- Распаковка архива tar bz2, содержащего исходные коды (обычно именно так «исходники» и распространяются).
- Переход в директорию с распакованными исходными текстами.
- Конфигурирование предстоящей сборки (указание директорий установки, сторонних библиотек, архитектуры, дополнительных компонентов и т.д.). Для этого обычно используются служебные скрипты.
- Непосредственно, сама сборка — команда make.
- Установка (распространение) построенного ПО — команда make install.
Ниже будет приведена эта процедура на примере с FTP-клиентом FileZilla, итак распаковка архива с «исходниками»:
В результате, в домашнем каталоге пользователя в поддиректории Builds появится директория filezilla-3.38.1. Нужно перейти в неё:
Просмотрев содержимое этой директории можно заметить файл INSTALL, в котором приведены инструкции для сборки/установки FileZilla:
Посмотрим этот файл
Раздел «Compilation» из файла INSTALL:
Теперь, согласно этой инструкции, нужно создать директорию compile и перейти в неё:
Далее, для успешной сборки и работы пакета необходимо проверить существующую конфигурацию системы на наличие требуемых зависимостей, библиотек и настроек, а также сконфигурировать сборку, запустив соответствующий скрипт configure.
Подобные скрипты создаются разработчиками ПО для облегчения процесса сборки/установки. Символы ../ означают переход в каталог на уровень вверх — именно там
по отношению к недавно созданной директории compile находится служебный скрипт configure.
Вывод этого скрипта показывает , готов ли данный пакет к сборке:
В данном случае для сборки необходима библиотека libfilezilla более свежей версии, чем имеющаяся на данный момент в системе. По указанному адресу её можно скачать и собрать отдельно:
Здесь также присутствует файл INSTALL с указанием порядка сборки библиотеки libfilezilla-0.15.0
Изучив вывод скрипта configure, можно сделать вывод о том, стоит ли далее приступать к сборке пакета. Обычно о критических ошибках сообщается фразами «configure: error». Убедившись, что всё нормально, можно приступать к построению:
Далее в консоль будет направлен вывод, отображающий ход сборки, после успешного окончания которого можно произвести установку пакета:
В выводе этой команды при успешном завершении обычно присутствует сообщения вида:
Сборка и установка библиотеки завершена, можно приступать к построению пакета FileZilla:
По-умолчанию установка будет произведена в директорию /usr/bin. Для изменения директории установки следует использовать опцию —prefix=каталог:
Сборка FTP-клиента FileZilla из исходных кодов на этом завершена. Следует отметить, что для FileZilla требуются также сторонние библиотеки инструментов, обеспечивающие работу с криптографическими алгоритмами (nettle), а также для отрисовки графического пользовательского интерфейса (GUI) — wxWidgets. Специфические требования всегда указываются разработчиками ПО в файлах README или INSTALL, входящих в архив пакета или исходных кодов.
Помимо установленных в системе требуемых пакетов, удовлетворяющим зависимостям для сборки, также необходимо, зачастую, устанавливать версии этих пакетов для разработки.
Обычно такие пакеты имеют идентичные с оригинальными наименования, но оканчивающиеся на «dev», к примеру nettle-3.1-dev или wx-gtk-base-dev. В данном примере предполагается, что данные пакеты установлены и правильно настроены.
Ручная сборка
Ручная сборка из исходных кодов выполняется следующим образом:
Для кода на процедурном C:
Здесь «program» — это собранный исполняемый файл, который можно теперь запускать:
Теперь стоит рассмотреть чуть более сложный вариант. Например, исходный код приложения состоит из классов, содержащихся в отдельных файлах. Класс BaseClass, заголовочный файл BaseClass.h:
Реализация, файл BaseClass.cpp:
Класс ChildClass, заголовочный файл ChildClass.h:
Файл с функцией main, main.cpp:
Пусть все приведённые файлы находятся в директории «HelloWorld», причём заголовочные файлы в поддиректории «include», а файлы реализаций *.cpp — в «src». Чтобы построить исполняемый файл в данном случае нужно выполнить следующие команды:
Определите аргументы программы! Пример: ./program 5.25
Автоматическая сборка — написание Make-файлов
Конечно, для больших проектов ручная сборка — это крайне неудобно. Именно поэтому и была когда-то давно разработана утилита make, позволяющая производить построение проектов любой сложности. Она выполняет инструкции и правила по автоматизации процесса сборки, хранящиеся в специальных Make-файлах.
Синтаксис Makefile’а следующий:
Это описание цели, в котором указываются зависимости dependencies, команды для достижения цели system command, а также сама цель target. Символ табуляции [tab] является обязательным и только этим символом обозначаются команды для достижения целей. Например, для данного примера, одна из целей будет иметь следующее описание:
Эта запись означает, что для получения объектного файла BaseClass.o нужно использовать исходный код из файла src/BaseClass.cpp, использовав команду g++, которой, в свою очередь, передаются соответствующие параметры.
Для вышеупомянутого проекта HelloWorld Make-файл будет иметь следующий вид:
Make-фалы обычно имеют имя Makefile. Это, своего рода унификация для того, чтобы утилита make самостоятельно отыскивала и распознавала Make-файлы без надобности явно их ей передавать в качестве аргумента в командной оболочке.
Теперь нужно выполнить команду make и запустить построенный исполняемый файл:
Но даже и такой вариант для больших проектов не подойдёт, поскольку придётся обрабатывать практически каждый файл отдельно, задавая для них описания целей. Используя правила implicit rules, а также predrfined implicit rules можно заставить Make-файл автоматически обрабатывать содержимое проекта и генерировать описания целей для его компонентов. Для того, чтобы составлять универсальные Make-файлы нужно придерживаться определённых правил или даже стандартов, определяющих структуру всего проекта, например:
- Имя конечного исполняемого файла должно совпадать с папкой проекта.
- Заголовочные файлы и файлы реализаций находятся в отдельных (include и src соответственно) поддиректориях.
- Функция main находится в отдельном файле, расположенном в корне проекта над директориями src и include.
- Объектные файлы должны создаваться в отдельной поддиректории, например obj.
- Конечный исполняемый файл должен создаваться в отдельной поддиректории, например build.
Make-файл, удовлетворяющий этим требованиям для данного проекта HelloWorld может иметь такой вид:
Обращение к переменным производится с помощью конструкции $(VALUE). Запись SOURCES=$(wildcard $(MAIN) $(SRC)/*.cpp) указывает, что исходные тексты будут искаться в поддиректории src по маске *.cpp и в файле main.cpp. А конструкция:
описывает, как будут генерироваться цели для создания объектных файлов в каталоге obj из исходных текстов файлов в каталоге src. Цель clean подразумевает удаление всего, что связано с предыдущими сборками. Функция filter-out, присутствующая в списке команд для этой цели, нужна для того, чтобы при очистке не удалились нужные файлы, в данном случае — main.cpp. Цель .PHONY описывает зависимости, не связанные напрямую с файлами.
Теперь, после выполнения команды make:
исполняемый файл будет в директории build:
Объектные файлы — в директории obj:
Следует отметить, что грамотное составление универсальных Make-файлов требует предварительно и внимательного изучения соответствующей документации, например по адресу http://www.gnu.org/software/make/manual/, где можно найти исчерпывающее описание для более подробного изучения данной темы.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Как скомпилировать и установить файлы TAR GZ и TAR BZ2 в Ubuntu Linux
В отличие от Windows, установка программного обеспечения в Linux может быть немного более сложной. Если выбранное вами программное обеспечение уже не находится в форме пакета или не находится в хранилище
и может быть установлен с простой строкой текста, скорее всего, вам понадобится скомпилировать и установить файл .TAR.GZ или .TAR.BZ2.
Это может быть кошмаром, но если вы придерживаетесь правил, этого не должно быть. Если у вас есть надоедливый архив, который нужно установить, следующий метод создаст пакет, установит указанный пакет и предоставит хороший чистый способ удаления программного обеспечения через менеджер пакетов. Командные строки на готовом, глубокое дыхание, пожалуйста …
Тарболы из стали
Файл .TAR.GZ / BZ2 представляет собой сжатый тарбол (несжатое расширение — .TAR), который содержит исходный код для выбранного вами приложения. Установка требует, чтобы эти файлы были скомпилированы, обработаны и связаны так, чтобы Ubuntu могла затем выполнить программу.
Формат tarball был стандартизирован в 1988 году (и снова в 2001 году) и продолжает широко использоваться в Linux и Windows для распространения программного обеспечения. Изначально тарболы были разработаны для облегчения резервного копирования данных
на ленточные устройства, а не то, что вы будете делать это.
Если вы не использовали командную строку Linux до того, как вам не о чем беспокоиться, команды будут простыми и понятными.
Подготовка вашей системы
Вам нужно установить пакет под названием build-essential для создания пакета из исходного кода и проверить установку, чтобы добавить его в менеджер пакетов для легкого удаления. Это можно сделать быстро через консоль, просто откройте Терминал (Приложения, Аксессуары, Терминал) и введите:
Выделите время для их загрузки и установки, и после этого вы можете также установить программное обеспечение для управления версиями для обновлений, хотя вы всегда можете сделать это позже. В любом случае, эти три сделают свое дело:
Затем вы захотите использовать общий каталог для сборки этих пакетов. Технически вы можете поместить это где угодно, если это доступно для записи. Официальная документация Ubuntu рекомендует
поэтому мы будем придерживаться этого:
Затем убедитесь, что это доступно для записи:
Наконец, мы также установим apt-файл, который используется для решения любых проблем с зависимостями:
Вы, вероятно, получите всплывающее окно с сообщением о необходимости обновить apt-файл, если не выполните следующую команду и дайте ей закончить:
После того, как вы это сделаете, вам больше не нужно будет делать это снова, так как ваша система будет готова к любым тарболам, которые вы бросаете в нее.
экстракт конфигурировать
Предполагая, что вы уже загрузили загадочный файл .TAR.GZ, вам сначала нужно будет переместить его в указанную папку сборки (я использовал
). Вы можете сделать это с помощью обычного файлового браузера.
и, когда закончите, откройте новый терминал.
Перейдите в папку сборки, набрав:
Далее распакуйте архив. За .TAR.GZ тип файлов:
И для .tar.bz2 тип файлов:
Если все прошло хорошо, вы увидите длинный список извлеченных файлов, как на скриншоте выше. Не закрывайте терминал, мы еще не закончили.
Именно в этот момент я побуждать Перейдите к папке, в которой только что создан ваш архив (с помощью обычного файлового браузера), и откройте либо README, либо INSTALL, если файлы существуют. Если вашему конкретному программному обеспечению требуется метод, отличный от того, к которому я собираюсь обратиться, этот файл будет содержать ключ. Вы можете сохранить себя много хлопот, делая это.
Вы также можете выбрать различные варианты установки в зависимости от программного обеспечения, и INSTALL или README определят, что это такое. Файлы могут не иметь расширения, но являются простым текстом и должны открываться в Gedit или любом текстовом редакторе, который вы выберете.
Как правило, следующие команды устанавливают программное обеспечение с методом установки по умолчанию.
Ваш tarball будет извлечен в папку с тем же именем, что и файл, поэтому перейдите в эту папку с помощью команды cd, которую вы использовали ранее, например так:
Замените на имя папки созданного архива. Затем вам нужно настроить исходные файлы, набрав:
Замечания: Если в вашем программном обеспечении нет файла конфигурации, попробуйте перейти прямо к строить устанавливать раздел этой статьи, хотя сначала обратитесь к документации INSTALL или README.
Если вы получите сообщение об ошибке, относящееся к autoconf, вам нужно будет установить его, набрав:
Эта команда проверит наличие всех установленных пакетов, необходимых для использования вашего программного обеспечения. Вы можете использовать apt-файл, который вы установили ранее, чтобы заполнить пробелы.
Если вы получаете ошибку (что-то вроде
) найдите файл, не найденный над сообщением об ошибке, затем выполните поиск по apt-файлу, набрав:
Это скажет вам, в каком пакете находится файл, который вам нужен, поэтому вы можете скачать его, используя:
Это не всегда происходит, но очень полезно, если у вас нет необходимых зависимостей.
Когда вы убедитесь, что у вас есть пакеты (если они вам нужны), запустите
Если все прошло хорошо, вы увидите
— поздравляю, вы почти у цели! Многие люди сдаются, прежде чем они достигнут этой точки, но вы лучше, чем это.
строить устанавливать
В тот же тип окна терминала:
Расслабьтесь, возьмите кофе и вдохните на секунду. В зависимости от размера вашей установки это может занять некоторое время.
Теперь вы можете установить программу с помощью следующей команды:
Следуйте инструкциям на экране, добавьте описание своего программного обеспечения и нажмите Enter на этом экране:
Если все прошло хорошо, вы увидите, что установка прошла успешно. Погладить себя по спине. Вы хорошо сделали.
Ваше программное обеспечение должно быть установлено в
и вы сможете запустить его оттуда без проблем.
Вы сделали это до конца? Не проще ли просто подождать пакет или получить его из репозитория? Может быть, вы нашли это … легко? Дайте нам знать об этом в комментариях.
Источник