Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия Последняя версия Следующая версия справа и слева | ||
wiki:programs_installation [2012/05/29 20:32] [Сборка пакета] |
wiki:programs_installation [2012/11/11 11:28] [Неправильная установка] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Компиляция и установка программ из исходных текстов====== | + | ====== Компиляция и установка программ из исходников====== |
Не редко необходимые пакеты можно найти только в виде исходных текстов, в данной статье описывается метод установки пакета из исходных текстов. | Не редко необходимые пакеты можно найти только в виде исходных текстов, в данной статье описывается метод установки пакета из исходных текстов. | ||
======Распаковка====== | ======Распаковка====== | ||
Строка 13: | Строка 13: | ||
Например, команда <code bash>tar -xvf <some_app_name>.tar.gz</code>сразу распакует и разархивирует. Отличие файлов с расширениями<code><some_app_name>.tar.gz</code>и<code><some_app_name>.tar.bz2</code>лишь в том, что использовались разные упаковщики, программа **tar** определяет метод сжатия автоматически и дополнительных опций в данном случае не требуется. | Например, команда <code bash>tar -xvf <some_app_name>.tar.gz</code>сразу распакует и разархивирует. Отличие файлов с расширениями<code><some_app_name>.tar.gz</code>и<code><some_app_name>.tar.bz2</code>лишь в том, что использовались разные упаковщики, программа **tar** определяет метод сжатия автоматически и дополнительных опций в данном случае не требуется. | ||
+ | После распаковки необходимо перейти в полученный каталог, все описываемые ниже команды выполняются в каталоге с исходными текстами пакета. | ||
+ | <code bash>cd <имя_пакета>*</code> | ||
======Сборка пакета====== | ======Сборка пакета====== | ||
Для сборки программ в GNU/Linux используется (в основном) программа **make**, которая запускает инструкции из **Makefile**, но поскольку дистрибутивов GNU/Linux много, и они все разные, то для того чтобы собрать программу, нужно для каждого дистрибутива отдельно прописывать пути,где какие лежат библиотеки и заголовочные файлы. Программисты не могут изучать каждый дистрибутив и для каждого отдельно создавать **Makefile**. Поэтому придумали конфигураторы, которые "изучают" систему, и в соответствии с полученными знаниями создают **Makefile**. Но на конфигураторе они не остановились и придумали конфигураторы конфигураторов =)...на этом они остановились :-) | Для сборки программ в GNU/Linux используется (в основном) программа **make**, которая запускает инструкции из **Makefile**, но поскольку дистрибутивов GNU/Linux много, и они все разные, то для того чтобы собрать программу, нужно для каждого дистрибутива отдельно прописывать пути,где какие лежат библиотеки и заголовочные файлы. Программисты не могут изучать каждый дистрибутив и для каждого отдельно создавать **Makefile**. Поэтому придумали конфигураторы, которые "изучают" систему, и в соответствии с полученными знаниями создают **Makefile**. Но на конфигураторе они не остановились и придумали конфигураторы конфигураторов =)...на этом они остановились :-) | ||
Строка 29: | Строка 31: | ||
======Установка====== | ======Установка====== | ||
Усилия потраченные на ''Правильную установку'' в последствии с лихвой окупятся в случае удаления или обновления устанавливаемого программного обеспечения. | Усилия потраченные на ''Правильную установку'' в последствии с лихвой окупятся в случае удаления или обновления устанавливаемого программного обеспечения. | ||
- | =====Правильная установка(checkinstall)===== | + | =====Правильная установка(Вариант №1)===== |
- | <note important>Данная утилита, будучи запущенной вместо make install задаст несколько вопросов, после чего сама соберёт и установит deb-пакет. При обновлении никаких проблем с вычисткой старого хлама у вас не будет. | + | Установка при помощи утилиты **checkinstall**. Для установки выполните |
- | Минус данного способа: **checkinstall** понимает не все исходники, поскольку автор программы может написать особые скрипты по установке и **checkinstall** их не поймёт.</note> | + | <code bash>sudo apt-get install checkinstall</code> |
+ | <note important>Минус данного способа: **checkinstall** понимает не все исходники, поскольку автор программы может написать особые скрипты по установке и **checkinstall** их не поймёт.</note> | ||
Для создания и установки deb-пакета необходимо выполнить | Для создания и установки deb-пакета необходимо выполнить | ||
- | <code bash>checkinstall</code> | + | <code bash>sudo checkinstall</code> |
- | =====Правильная установка(создание deb-пакета в ручную)===== | + | =====Правильная установка(Вариант №2)===== |
- | <note important>Основное отличие от предыдущего способа заключается в том, что в данном случае вы создаете пакет вручную и отслеживаете все вносимые изменения. Так же этот способ подойдет вам, если исходники не поддерживают сборку пакета с checkinstall.</note> | + | Быстрое создание deb-пакета "вручную". |
+ | <note important>Основное отличие от предыдущего способа заключается в том, что в данном случае вы создаете пакет вручную и отслеживаете все вносимые изменения. Так же этот способ подойдет вам, если исходники не поддерживают сборку пакета с **checkinstall**.</note> | ||
* Производим установку во временную директорию, где получаем весь набор устанавливаемых файлов: | * Производим установку во временную директорию, где получаем весь набор устанавливаемых файлов: | ||
<code bash>fakeroot | <code bash>fakeroot | ||
Строка 56: | Строка 60: | ||
* Получаем на выходе tempinstall.deb, который и устанавливаем | * Получаем на выходе tempinstall.deb, который и устанавливаем | ||
<code bash>sudo dpkg -i tempinstall.deb</code> | <code bash>sudo dpkg -i tempinstall.deb</code> | ||
+ | =====Установка (вариант №3)===== | ||
+ | Процедура создания deb-пакета подробно описана в данной [[wiki:создание_deb_пакетов|статье]]. | ||
=====Неправильная установка===== | =====Неправильная установка===== | ||
- | <note important>Минус данного способа заключается в том, что если вы устанавливаете напрямую через make install, то нормально удалить или обновить пакет вы, скорее всего, не сможете. Более того, установка новой версии поверх старой, скорее всего, затрёт ваши изменения в конфигах. make install делает ровно то, что ему сказано — производит установку файлов в нужные места, игнорируя тот факт, что там что-то уже есть. После этого процесса совершенно никакой информации о том, что и куда ставилось, получить в удобоваримом виде невозможно. Иногда, конечно, Makefile поддерживает действие uninstall, но это встречается не так часто, да и не факт, что корректно работает. Кроме того, вам будет необходимо хранить для деинсталяции распакованное дерево исходников и правил сборки.</note> | + | <note warning>Минус данного способа заключается в том, что если вы устанавливаете напрямую через make install, то нормально удалить или обновить пакет вы, скорее всего, не сможете. Более того, установка новой версии поверх старой, скорее всего, затрёт ваши изменения в конфигах. make install делает ровно то, что ему сказано — производит установку файлов в нужные места, игнорируя тот факт, что там что-то уже есть. После этого процесса совершенно никакой информации о том, что и куда ставилось, получить в удобоваримом виде невозможно. Иногда, конечно, Makefile поддерживает действие uninstall, но это встречается не так часто, да и не факт, что корректно работает. Кроме того, вам будет необходимо хранить для деинсталяции распакованное дерево исходников и правил сборки.</note> |
Для установки необходимо выполнить | Для установки необходимо выполнить | ||
<code bash>sudo make install</code> | <code bash>sudo make install</code> | ||
Для удаления пакета, установленного данным способом необходимо выполнить в корневой директории исходников программы (там где вы запускали make install). | Для удаления пакета, установленного данным способом необходимо выполнить в корневой директории исходников программы (там где вы запускали make install). | ||
- | <code bash>make uninstall</code> | + | <code bash>sudo make uninstall</code> |
======Ошибки====== | ======Ошибки====== | ||
Часто на этапе конфигурации конфигуратор сообщает, что нехватает той или иной библиотеки. Название библиотеки, которое он сообщает, не всегда соответствует названию пакета в Ubuntu. Из собственного опыта могу посоветовать поискать в [[wiki:synaptic|Синаптике]] нужный пакет, исключив префикс lib, если нашлось несколько пакетов различающихся приставкой -dev в названии, то вам нужно установить именно -dev пакет (обычно он тянет за собой и не -dev пакет). | Часто на этапе конфигурации конфигуратор сообщает, что нехватает той или иной библиотеки. Название библиотеки, которое он сообщает, не всегда соответствует названию пакета в Ubuntu. Из собственного опыта могу посоветовать поискать в [[wiki:synaptic|Синаптике]] нужный пакет, исключив префикс lib, если нашлось несколько пакетов различающихся приставкой -dev в названии, то вам нужно установить именно -dev пакет (обычно он тянет за собой и не -dev пакет). | ||
Строка 91: | Строка 97: | ||
====== Ссылки ====== | ====== Ссылки ====== | ||
- | Обсуждение проблем с компиляцией и установкой программ в Ubuntu на форуме [[http://forum.ubuntu.ru/index.php?board=13.0|forum.ubuntu.ru]] | + | * Обсуждение проблем с компиляцией и установкой программ в Ubuntu на форуме [[http://forum.ubuntu.ru/index.php?board=13.0|forum.ubuntu.ru]] |
+ | * Внесены изменения по мотивам [[http://habrahabr.ru/post/130868/|Хабрахабр]] | ||
- | {{tag>Howto установка компиляция программирование}} | + | {{tag>Howto установка компиляция программирование исходники}} |