Установка программ tar bz2, из исходных кодов в Linux
Linux-системы неразрывно связаны с концепцией GNU – проекта, поддерживающего и развивающего философию свободно распространяемого программного обеспечения (ПО), в том числе и в виде исходного кода. А поскольку систем на базе ядра Linux существует великое множество и разработчики дистрибутивов всегда для своих систем используют исходный код ПО при сборке комплектов утилит, пакетов, да и самого ядра, то, очевидно, что использование исходных кодов ПО — это неотъемлемый аспект в эксплуатации Linux-систем. По крайней мере, любому пользователю, достаточно хорошо освоившему UNIX-подобные системы, рано или поздно приходится сталкиваться со сборкой ПО из исходных кодов.
Самым распространённым случаем, когда приходится собирать ПО из «исходников» является ситуация, когда в свет выходит новая версия какого-либо пакета с устранением критической уязвимости в системе безопасности или с добавлением важного функционала. Но поскольку системы Linux, как правило, снабжены хранилищами пакетов (репозиториями), из которых происходит загрузка, установка и обновление ПО, то часто бывает так, что разработчики дистрибутива, которые и поддерживают репозитории, ещё не успели сформировать новые пакеты ПО, для которых уже выпущено обновление. В этом случае можно прибегнуть к самостоятельной сборке требуемых пакетов из исходного кода.
Для чего нужно построение пакетов из исходного кода?
Как уже отмечалось ранее, это необходимо, в первую очередь для устранения брешей в безопасности. Часто новые версии ПО выпускаются в результате внедрения новых подходов и технологий при разработке и оптимизации программного кода, что существенно может сказаться на производительности ПО, и это также довольно частая причина обновления программных пакетов путём их сборки из исходных текстов.
Владельцы и администраторы хостинг-площадок предпочитают также устанавливать в качестве веб-серверов, PHP-интерпретаторов и серверов баз данных (БД) предварительно собранные на целевом оборудовании соответствующие программные пакеты. Это позволяет добиться максимальной совместимости ПО с оборудованием, на котором предполагается его работа и, как следствие — стабильности, что для веб-хостинга очень важно.
Для программистов навыки по построению исполняемых файлов из исходного кода являются ключевыми, несмотря даже на то, что с этой задачей прекрасно справляются все современные интегрированные среды разработки (IDE), однако, как показывает практика, часто приходится производить сборку ПО без применения IDE.
Общий порядок сборки пакетов — утилита make
Для облегчения сборки ПО из исходных кодов существует свободная утилита make. Она применяется во всех UNIX-подобных системах для подавляющего большинства утилит. При сборке пакета очень полезно изучать информацию, содержащуюся, как правило, в файлах README или INSTALL, входящих в пакет. В этих файлах разработчики ПО указывают инструкции и специфические мероприятия для успешной сборки пакетов. Здесь также можно найти и системные требования для работы ПО и описания необходимых зависимостей, без которых собрать пакет будет невозможно.
Общий порядок сборки выглядит так:
- Распаковка архива tar bz2, содержащего исходные коды (обычно именно так «исходники» и распространяются).
- Переход в директорию с распакованными исходными текстами.
- Конфигурирование предстоящей сборки (указание директорий установки, сторонних библиотек, архитектуры, дополнительных компонентов и т.д.). Для этого обычно используются служебные скрипты.
- Непосредственно, сама сборка — команда make.
- Установка (распространение) построенного ПО — команда make install.
Ниже будет приведена эта процедура на примере с FTP-клиентом FileZilla, итак распаковка архива с «исходниками»:
$ tar -jxvf FileZilla_3.38.1_src.tar.bz2 -C ~/Builds
В результате, в домашнем каталоге пользователя в поддиректории Builds появится директория filezilla-3.38.1. Нужно перейти в неё:
$ cd ~/Builds/filezilla-3.38.1
Просмотрев содержимое этой директории можно заметить файл INSTALL, в котором приведены инструкции для сборки/установки FileZilla:

Посмотрим этот файл
cat INSTALL
Раздел «Compilation» из файла INSTALL:

Теперь, согласно этой инструкции, нужно создать директорию compile и перейти в неё:
$ mkdir compile $ cd compile
Далее, для успешной сборки и работы пакета необходимо проверить существующую конфигурацию системы на наличие требуемых зависимостей, библиотек и настроек, а также сконфигурировать сборку, запустив соответствующий скрипт configure.
$../configure
Подобные скрипты создаются разработчиками ПО для облегчения процесса сборки/установки. Символы ../ означают переход в каталог на уровень вверх — именно там
по отношению к недавно созданной директории compile находится служебный скрипт configure.
Вывод этого скрипта показывает , готов ли данный пакет к сборке:
checking for libfilezilla >= 0.15.0. no configure: error: libfilezilla not found: Requested 'libfilezilla >= 0.15.0' but version of libfilezilla is 0.13.0 You may find new versions of libfilezilla at https://lib.filezilla-project.org/. You can download it from https://lib.filezilla-project.org/
В данном случае для сборки необходима библиотека libfilezilla более свежей версии, чем имеющаяся на данный момент в системе. По указанному адресу её можно скачать и собрать отдельно:
$ tar -jxvf libfilezilla-0.15.0.tar.bz2 -C ~/Builds cd ~/Builds/libfilezilla-0.15.0/ $ ll


Здесь также присутствует файл INSTALL с указанием порядка сборки библиотеки libfilezilla-0.15.0
$ mkdir compile $ cd compile $ ../configure
Изучив вывод скрипта configure, можно сделать вывод о том, стоит ли далее приступать к сборке пакета. Обычно о критических ошибках сообщается фразами «configure: error». Убедившись, что всё нормально, можно приступать к построению:
$ make
Далее в консоль будет направлен вывод, отображающий ход сборки, после успешного окончания которого можно произвести установку пакета:
$ sudo make install
В выводе этой команды при успешном завершении обычно присутствует сообщения вида:
Libraries have been installed in: /usr/local/lib
Сборка и установка библиотеки завершена, можно приступать к построению пакета FileZilla:
$ make $ sudo make install
По-умолчанию установка будет произведена в директорию /usr/bin. Для изменения директории установки следует использовать опцию —prefix=каталог:
$ ../configure --prefix=~/bin
Сборка FTP-клиента FileZilla из исходных кодов на этом завершена. Следует отметить, что для FileZilla требуются также сторонние библиотеки инструментов, обеспечивающие работу с криптографическими алгоритмами (nettle), а также для отрисовки графического пользовательского интерфейса (GUI) — wxWidgets. Специфические требования всегда указываются разработчиками ПО в файлах README или INSTALL, входящих в архив пакета или исходных кодов.
Помимо установленных в системе требуемых пакетов, удовлетворяющим зависимостям для сборки, также необходимо, зачастую, устанавливать версии этих пакетов для разработки.
Обычно такие пакеты имеют идентичные с оригинальными наименования, но оканчивающиеся на «dev», к примеру nettle-3.1-dev или wx-gtk-base-dev. В данном примере предполагается, что данные пакеты установлены и правильно настроены.
Ручная сборка
Ручная сборка из исходных кодов выполняется следующим образом:
$ g++ -o program program.cpp
Для кода на процедурном C:
$ gcc -o program program.c
Здесь «program» — это собранный исполняемый файл, который можно теперь запускать:
$ ./program
Теперь стоит рассмотреть чуть более сложный вариант. Например, исходный код приложения состоит из классов, содержащихся в отдельных файлах. Класс BaseClass, заголовочный файл BaseClass.h:
#ifndef BASECLASS_H #define BASECLASS_H class BaseClass < public: BaseClass(); BaseClass(char* input[]); void showValue(); virtual ~BaseClass(); protected: float value; private: >; #endif // BASECLASS_H
Реализация, файл BaseClass.cpp:
#include "../include/BaseClass.h" #include #include using namespace std; BaseClass::BaseClass() < //ctor //this->tmp = 0.0; //value = 0.0; > BaseClass::BaseClass(char* input[]) < this->value = strtof(input[1], NULL); > void BaseClass::showValue() < cout BaseClass::~BaseClass() < //dtor >
Класс ChildClass, заголовочный файл ChildClass.h:
#ifndef CHILDCLASS_H #define CHILDCLASS_H #include "BaseClass.h" class ChildClass : public BaseClass < public: ChildClass(); ChildClass(char* inputBase[]); void valueSqr(); virtual ~ChildClass(); protected: private: >; #endif // CHILDCLASS_H Файл ChildClass.cpp, реализация: #include "../include/ChildClass.h" ChildClass::ChildClass() : BaseClass() < //ctor >ChildClass::ChildClass(char* inputBase[]) : BaseClass(inputBase) < >void ChildClass::valueSqr() < value *= value; >ChildClass::~ChildClass() < //dtor >
Файл с функцией main, main.cpp:
#include #include #include «include/BaseClass.h» #include «include/ChildClass.h» using namespace std; int main(int argc, char* argv[], char* argp[]) < setlocale(LC_ALL, "rus"); if(argc cout
Пусть все приведённые файлы находятся в директории «HelloWorld», причём заголовочные файлы в поддиректории «include», а файлы реализаций *.cpp — в «src». Чтобы построить исполняемый файл в данном случае нужно выполнить следующие команды:
$ g++ -c -o HelloWorld.o main.cpp $ g++ -c -o BaseClass.o src/BaseClass.cpp $ g++ -c -o ChildClass.o src/ChildClass.cpp $ g++ -o HelloWorld HelloWorld.o BaseClass.o ChildClass.o $ ls BaseClass.o ChildClass.o HelloWorld HelloWorld.o include main.cpp src $ ./HelloWorld
Определите аргументы программы! Пример: ./program 5.25
$./HelloWorld 5.25 Hello world! Значения BaseObject: Это value: 5.250000 Значения ChildObject (возведение в квадрат): Это value: 27.562500
Автоматическая сборка — написание Make-файлов
Конечно, для больших проектов ручная сборка — это крайне неудобно. Именно поэтому и была когда-то давно разработана утилита make, позволяющая производить построение проектов любой сложности. Она выполняет инструкции и правила по автоматизации процесса сборки, хранящиеся в специальных Make-файлах.
Синтаксис Makefile’а следующий:
target: dependencies [tab] system command
Это описание цели, в котором указываются зависимости dependencies, команды для достижения цели system command, а также сама цель target. Символ табуляции [tab] является обязательным и только этим символом обозначаются команды для достижения целей. Например, для данного примера, одна из целей будет иметь следующее описание:
BaseClass.o: src/BaseClass.cpp g++ -c -o BaseClass.o src/BaseClass.cpp
Эта запись означает, что для получения объектного файла BaseClass.o нужно использовать исходный код из файла src/BaseClass.cpp, использовав команду g++, которой, в свою очередь, передаются соответствующие параметры.
Для вышеупомянутого проекта HelloWorld Make-файл будет иметь следующий вид:
all: HelloWorld HelloWorld: HelloWorld.o BaseClass.o ChildClass.o g++ -o HelloWorld HelloWorld.o BaseClass.o ChildClass.o HelloWorld.o: main.cpp g++ -c -o HelloWorld.o main.cpp BaseClass.o: src/BaseClass.cpp g++ -c -o BaseClass.o src/BaseClass.cpp ChildClass.o: src/ChildClass.cpp g++ -c -o ChildClass.o src/ChildClass.cpp
Make-фалы обычно имеют имя Makefile. Это, своего рода унификация для того, чтобы утилита make самостоятельно отыскивала и распознавала Make-файлы без надобности явно их ей передавать в качестве аргумента в командной оболочке.
Теперь нужно выполнить команду make и запустить построенный исполняемый файл:
$ make $./HelloWorld 5.25
Но даже и такой вариант для больших проектов не подойдёт, поскольку придётся обрабатывать практически каждый файл отдельно, задавая для них описания целей. Используя правила implicit rules, а также predrfined implicit rules можно заставить Make-файл автоматически обрабатывать содержимое проекта и генерировать описания целей для его компонентов. Для того, чтобы составлять универсальные Make-файлы нужно придерживаться определённых правил или даже стандартов, определяющих структуру всего проекта, например:
- Имя конечного исполняемого файла должно совпадать с папкой проекта.
- Заголовочные файлы и файлы реализаций находятся в отдельных (include и src соответственно) поддиректориях.
- Функция main находится в отдельном файле, расположенном в корне проекта над директориями src и include.
- Объектные файлы должны создаваться в отдельной поддиректории, например obj.
- Конечный исполняемый файл должен создаваться в отдельной поддиректории, например build.
Make-файл, удовлетворяющий этим требованиям для данного проекта HelloWorld может иметь такой вид:
SRC=src OBJ=obj BIN=build MAIN=./main.cpp TARGET=$(BIN)/$(shell basename `pwd`) SOURCES=$(wildcard $(MAIN) $(SRC)/*.cpp) OBJECTS=$(SOURCES:$(SRC)%.cpp=$(OBJ)%.o) $(OBJ)/%.o: $(SRC)/%.cpp $(CXX) -c $(CFLAGS) $(CXXFLAGS) $(CPPFLAGS) -o $@ $< all: $(TARGET) $(OBJECTS): $(SOURCES) $(TARGET): $(OBJECTS) $(CXX) -o $(TARGET) $(LDFLAGS) $(OBJECTS) $(LOADLIBES) $(LDLIBS) clean: $(RM) $(filter-out $(MAIN),$(OBJECTS)) $(TARGET) .PHONY: all clean
Обращение к переменным производится с помощью конструкции $(VALUE). Запись SOURCES=$(wildcard $(MAIN) $(SRC)/*.cpp) указывает, что исходные тексты будут искаться в поддиректории src по маске *.cpp и в файле main.cpp. А конструкция:
$(OBJ)/%.o: $(SRC)/%.cpp $(CXX) -c $(CFLAGS) $(CXXFLAGS) $(CPPFLAGS) -o $@ $описывает, как будут генерироваться цели для создания объектных файлов в каталоге obj из исходных текстов файлов в каталоге src. Цель clean подразумевает удаление всего, что связано с предыдущими сборками. Функция filter-out, присутствующая в списке команд для этой цели, нужна для того, чтобы при очистке не удалились нужные файлы, в данном случае — main.cpp. Цель .PHONY описывает зависимости, не связанные напрямую с файлами.
Теперь, после выполнения команды make:
$ makeисполняемый файл будет в директории build:
$ ls build HelloWorldОбъектные файлы — в директории obj:
$ ls obj BaseClass.o ChildClass.oСледует отметить, что грамотное составление универсальных Make-файлов требует предварительно и внимательного изучения соответствующей документации, например по адресу http://www.gnu.org/software/make/manual/, где можно найти исчерпывающее описание для более подробного изучения данной темы.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Похожие записи:
- настройка сервера для учёта интернет-трафика по netflow
- Как запустить программу в фоне, без привязки к терминалу
- Отслеживание состояния сети в Linux – команда netstat
- Параметры дисков в Linux – команда hdparm
Как установить программу tar.xz tar.bz2 tar.gz на ubuntu?
Здравствуйте, скачал три программы , но у них разные расширения такие как tar.gz, tar.xz, tar.bz2. Можно инструкции как установить эти программы для каждого расширения? Я просто чайник ( пока-что ) в этом.
Заранее благодарен
- Вопрос задан более двух лет назад
- 10728 просмотров
1 комментарий
Средний 1 комментарий
Так делать не надо.
Решения вопроса 0
Ответы на вопрос 4
лучше все-таки мануал прочитать о том, как устанавливать. файлы с такими расширениями не программы, а архивы, распаковать их можно командой tar xvf <название файла>
а еще лучше найти репозитории этих программназвание>
Ответ написан более двух лет назад
Комментировать
Нравится Комментировать

justhostRU @justhostRU
как правило архив с сырцами ставится в три этапа
1. распаковка
2. ./configure настройка и доустановка требуемых либ
3. make -jN компиляция,
make install - установка в систему.
. Важно. в пакетных дистрибутивах 'make install' лучше не выполнять чтобы не захламлять систему, а запускать собранную программу напрямую из домашнего каталога пользователя
Ответ написан более двух лет назад

Часто просто распаковываешь в нужную директорию и уже готово к работе.

Александр Карабанов @karabanov Куратор тега Linux
Системный администратор
Воспользуйтесь готовыми бинарными пакетами, не стоит связываться со сборкой из исходных текстов если не понимаете, как это может помочь вам.
Ответ написан более двух лет назад
Комментировать
Нравится Комментировать

сисадмин-энтузиаст
Похоже, что вы скачали исходные коды программ. tar.xz, tar.bz2, tar.gz это всего лишь форматы архивов. С каждым из них умеет работать утилита tar. Архивы откроются также стандартным менеджером архивов Ubuntu.
Так как вы начинающий, то проще будет найти это программы в репозитории и установить через пакетный менеджер. Привыкайте к нему, это гораздо удобней. Например:
sudo apt install firefox
Узнать есть ли программа в репозитории можно на сайте: https://packages.ubuntu.com/
Или выполнив поиск в терминале:
apt search firefox
Команда покажет список пакетов, если такие можно установить.
Некоторые программы, которые распространяются в виде архивов могут работать сразу после распаковки, но чаще необходимо выполнить компиляцию программы. В таком случае ищите инструкцию на сайте откуда скачали архив с программой.
Как установить файл из архива tar.bz2
Таким способом распаковать получается и после создается папка с файлами. Там программа открывается и даже могу пользоваться, но в Главном меню ее нету. Как мне правильно распаковать и установить программу на Ubuntu?
Отслеживать
задан 9 сен 2018 в 1:29
317 2 2 серебряных знака 11 11 бронзовых знаков
А deb-пакетов вообще нету?
9 сен 2018 в 19:12
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Вам нужно создать файл в ~/.local/share/applications для текущего пользователя или в /usr/share/applications для всех пользователей (во втором случае нужны права root), с любым именем и расширением .desktop .
Файл должен начинаться строкой [Desktop Entry] ; все строки, начинающиеся с # , считаются комментариями.
Затем нужно заполнить его следующей информацией в формате ключ=значение :
Обязательные поля
Type – тип лаунчера: Application, Link или Directory (в вашем случае Application).
Name – отображаемое имя.
Exec – команда запуска.
Дополнительные поля
Version – версия.
Encoding – кодировка.
GenericName – общее имя.
NoDisplay – булево (true/false). Если true, то запись не будет отображаться в меню.
Hidden – булево (true/false). Если true, то помечает запись как удалённую и не просто скрывает из меню, а полностью игнорирует её существование.
Comment – комментарий, который будет выводиться в меню и всплывающих подсказках.
Icon – путь к иконке.
OnlyShowIn – если вы используете несколько DE, то можете указать, в какой именно запись будет отображаться.
NotShowIn – если указать, то будет отображаться во всех DE, кроме указанной.
Path – путь к директории, из которой будет запускаться команда.
Terminal – булево (true/false). Если true, запускает команду через эмулятор терминала.
MimeType – здесь можно указать mime-типы, с которыми ваша запись будет по умолчанию ассоциироваться.
Categories – имена категорий, в которых запись будет отображаться (через точку с запятой). Корректные имена можете посмотреть здесь.
Пример .desktop файла
[Desktop Entry] Encoding=UTF-8 Type=Application Path=$HOME/MyApp Exec=$HOME/MyApp/MyApp.sh Name=My Application Icon=$HOME/Icons/MyIcon.png
Как установить пакет из файла .tar.gz или .tar.bz2 в Linux?
A архиватор файлов используется для хранения нескольких файлов в одном файле архива. И утилита сжатия файлов используется для уменьшения размера этих файлов. Архивирование и сжатие файлов упрощает и ускоряет работу с файлами для передачи по сети или Интернету.
Linux предоставляет различные инструменты архивирования, одним из которых является tar. Кроме того, он предоставляет инструменты сжатия файлов, такие как gzip, bzip2, xz, lzma и т. д. Эти инструменты архивирования и сжатия используются вместе для распространения пакетов программного обеспечения в Linux.
Как правило, этот архив содержит исходный код пакета, и каждый из них использует свой подход к установке. В этой статье мы обсудим командный метод установки программного обеспечения с .tar.gz or .tar.bz2 пакет.
Как извлечь пакет .tar.gz
Предположим, у нас есть пакет с именем пакет-1.2.3.tar.gz и мы должны установить его. Чтобы установить этот пакет, сначала нам нужно его извлечь. Выполните следующие шаги, чтобы извлечь его:
1. Откройте терминал, нажав ctrl+alt+t
2. Перейдите к месту, где пакет-1.2.3.tar.gz сохраняется, предположим, что он находится в каталоге загрузок, затем используйте –
cd Downloads
3. Теперь выполните следующую команду, чтобы извлечь его:
tar xzvf package-1.2.3.tar.gz
z- Тип сжатия, т.е. gzip
f- Далее идет имя файла
Как извлечь пакет .tar.bz2
Точно так же, если у вас есть пакет с именем package.tar.bz2, то для его извлечения сначала откройте терминал и перейдите в правильный каталог, где находится файл. А затем выполните следующую команду, чтобы извлечь его.
tar xjvf package-1.2.3.tar.bz2
Где вариант j используется для сжатия bzip2.
Установите извлеченный пакет
Теперь сначала перейдите в извлеченный каталог с именем Пакет-1.2.3
компакт-диск пакет-1.2.3
Обязательно прочтите файл с именем INSTALL.txt или README. Вы можете проверить эти файлы, используя ls команда в вашем терминале. Используйте следующие команды, если –
1. Вы находите файл с именем configure, затем используете —
. / Настроить
Если не удается выполнить, предоставьте ему исполняемое разрешение с помощью –
chmod +x настроить
сделать
sudo make install
Вам также может понадобиться установить некоторые зависимости, если, например, работает configure может предложить вам список ошибок, которые вам не хватает.
2. И если вы найдете файл с именем install.sh, используйте —
./install.sh
судо ./install.sh
3. Вы находите файл с именем install.sh, затем используете —
./install
судо ./установить
4. Если файла конфигурации нет, используйте –
сделать
sudo make install
5. Если вы все еще не можете найти необходимые файлы для установки, перейдите в специальный каталог с именем бункер и повторите тот же процесс.
Мы рекомендуем вам прочитать INSTALL.txt или README, который содержит полную инструкцию по установке конкретного пакета. Вы должны прочитать это, потому что могут быть разные инструкции для правильной установки этого файла.
Теперь я надеюсь, что с помощью данных шагов вы сможете установить программное обеспечение в своей системе. Тем не менее, если вы обнаружите проблему при установке программного обеспечения, не забудьте написать нам в комментариях ниже.