Я использую Ubuntu 12.04. Скажем, я установил package x
из репозитория (со всеми его зависимостями) в версии 1.7, но мне нужны некоторые функции, которые доступны только в версии 1.8, поэтому я загружаю исходный tar и скомпилирую его:
./configure
make
make install
- Это перезаписывает существующие двоичные файлы 1.7?
- Если существующие двоичные файлы перезаписаны, отражает ли менеджер пакетов новую версию (1.8) и может ли он
package x
быть обновлен диспетчером пакетов в будущем? - Если
package y
есть зависимостьpackage x 1.8
- будет ли она удовлетворена?
Я пытался найти хороший источник в Интернете, который объясняет это. Если у Вас есть какие-либо рекомендации, пожалуйста, дайте мне знать.
ubuntu
package-management
compiling
software-installation
Филипп д'Розарио
источник
источник
make install
. Я думаю, из ответов ясно, что, по сути, все, что происходит, - это то, что файлы копируются в каталоги внутри префикса установки (хотя оказывается, что возможно, что некоторые файлы конфигурации могут быть вставлены,/etc
а некоторые динамически изменяемые данные, представляющие исходный состояние чего то можно поставить/var
). Однако, если вы чувствуете, что это не ясно, я был бы рад отредактировать мой ответ, чтобы объяснить.Ответы:
Подавляющее большинство
.deb
пакетов, независимо от того, предоставляются они официальными репозиториями или нет, устанавливаются с префиксом/usr
.Это означает, что исполняемые файлы, предназначенные для запуска пользователем, входят
/usr/bin
или/usr/sbin
(или,/usr/games
если это игра), общие библиотеки включаются/usr/lib
, независимые от платформы общие данные включаются/usr/share
, заголовочные файлы включаются/usr/include
, а исходный код устанавливается автоматически/usr/src
.Небольшой процент пакетов используют
/
в качестве префикса. Например,bash
пакет помещаетbash
исполняемый файл/bin
, а не/usr/bin
. Это для пакетов , которые обеспечивают самое необходимое для работы в однопользовательском режиме (например, режим восстановления) и начать многопользовательский режим (но помните, что часто включает в себя функциональные возможности для монтирования некоторых видов сетевых акций ... в случае , если/usr
это удаленная файловая система).Небольшой процент
.deb
пакетов, в основном, созданных с помощью Quickly , создает папку для конкретного пакета внутри/opt
и помещает туда все свои файлы. Кроме этого, большую часть времени/opt
это местоположение, используемое программным обеспечением, которое устанавливается из исполняемого установщика, который не использует системный менеджер пакетов, но не включает компиляцию из исходного кода. (Например, если вы устанавливаете проприетарную программу, такую как MATLAB, вы, вероятно, вставите ее/opt
.)В отличие от всего этого, когда вы загружаете исходный архив (или получаете исходный код из системы контроля версий, такой как Bazaar или git), собираете его и устанавливаете его, он обычно устанавливается в префикс
/usr/local
(если вы не скажете ему сделать это). в противном случае). Это означает , что ваши исполняемые файлы идут в/usr/local/bin
,/usr/local/lib
или/usr/local/games
, ваши библиотеки/usr/local/lib
, и так далее.Есть некоторые исключения из этого - некоторые программы по умолчанию устанавливаются в
/usr
префикс и, таким образом, перезаписывают установки тех же программ из.deb
пакетов. Как правило, вы можете предотвратить это, запустив./configure --prefix=/usr/local
вместо того,./configure
чтобы создавать их. Я еще раз подчеркиваю, что обычно в этом нет необходимости.(По этой причине для вас имеет смысл поместить исходный код, который вы создаете, и который будет установлен для общесистемного использования
/usr/local/src
, которое существует для этой цели.)Предполагая, что упакованная версия установлена в
/usr
и версия, которую вы установили из источника, находится в/usr/local
:Файлы из установленного пакета не будут перезаписаны.
Обычно более новая версия запускается, когда вы вручную вызываете программу из командной строки (при условии,
/usr/local/bin
что исполняемые файлы или где они установлены, находятся вPATH
переменной среды и отображаются перед соответствующим/usr
каталогом с префиксом, например/usr/bin
).Но могут быть некоторые проблемы с тем, какие средства запуска создаются и становятся доступными через меню или поиск. Кроме того, если вы установили более одной версии библиотеки в разных местах, определить, какое программное обеспечение и какое программное обеспечение будет использоваться, будет немного сложнее.
Если вы на самом деле не используете обе версии программы или библиотеки, то часто вы должны удалить ту, которую вы не используете, хотя в ограниченных ситуациях вы можете оставить установленный пакет для удовлетворения зависимостей.
Однако, если по какой-либо причине файлы перезаписываются (например, если исходный код установлен
/usr
вместо/usr/local
):sudo make uninstall
в каталоге), а затем удалить пакет или пакеты, содержащие файлы, которые были перезаписаны (поскольку они не будут восстановлены при удалении установленной версии). из источника). Затем переустановите любую версию, которую вы хотите иметь./usr/local/src/program-or-library-name
Что касается выполнения зависимостей:
Если существует
.deb
пакет, который зависит от программного обеспечения, установленного вами из источника, и требует версии, которую вы установили из источника (или выше), этот пакет не будет успешно установлен. (Или, если быть более точным, вы можете «установить» его, но он никогда не будет «настроен», поэтому вы не сможете его использовать.) Зависимости определяются тем, какие версии пакетов установлены, а не какое программное обеспечение у вас есть на самом деле.Аналогично, программное обеспечение по крайней мере попытается установить полностью, даже если вы вручную удалили файлы, предоставленные пакетами, от которых зависит устанавливаемое программное обеспечение. (Как правило, не следует пытаться использовать это для каких-либо целей. Менеджер пакетов, работающий на основе ложной информации, почти всегда является плохой вещью.)
Поэтому, если вы не можете найти пакет, содержащий нужную вам версию программного обеспечения, вам может потребоваться создать собственный
.deb
пакет из скомпилированного вами программного обеспечения и установить его из этого пакета. Тогда менеджер пакетов узнает, что происходит. Создать пакет для собственного использования, который вам не нужен для работы на компьютерах других людей, на самом деле не очень сложно. (Но я чувствую, что это может выходить за рамки вашего вопроса, поскольку он в настоящее время сформулирован.)источник
То, что вы устанавливаете из центра программного обеспечения или с помощью команды APT (
apt-get
,aptitude
) или с помощьюdpkg
, известно системе управления пакетами.dpkg
это низкоуровневый инструмент управления пакетами, APT и его друзья - это высокоуровневые инструменты, которые вызываютdpkg
для выполнения фактической установки, а также обрабатывают зависимости и загрузки пакетов.Если вы скомпилируете программу из исходного кода, она не будет известна менеджеру пакетов. Соглашение по Linux, которому вы должны следовать из-за того, что вам трудно следить за вещами и переопределять ваши установки:
/bin
,/lib
,/sbin
,/usr
Зарезервированы для менеджера пакетов;/usr/local
это для системного администратора - соблюдайте иерархию каталогов, но вы сами управляете файлами.Смотрите лучший способ обновить vim / gvim до 7.3 в Ubuntu 10.04? для списка способов получить более свежие версии программного обеспечения. Самый простой способ - получить PPA , если он есть. Если вы получаете бинарный пакет или компиляцию из исходного кода, я рекомендую использовать stow для управления установленным вручную программным обеспечением. В качестве альтернативы, создайте свой собственный
.deb
пакет - это больше работы, но оно окупается, если вы часто обновляетесь (обычно повторная установка пакета для следующей вспомогательной версии выполняется очень быстро) или если вы развертываете на многих машинах, работающих под одним и тем же дистрибутивом.В большинстве программ, если вы запускаете
./configure && make && sudo make install
, программа устанавливается в/usr/local
. Проверьте документацию, поставляемую с источником (обычно в файле с именемREADME
илиINSTALL
), или запустите,./configure --help
чтобы убедиться, что это так. Если программа установлена в/usr/local
, она не будет мешать версии, предоставленной менеджером пакетов./usr/local/bin
на первом месте в системеPATH
. Обратите внимание, что вам нужно будет работатьmake install
от имени администратора (root); не компилировать как root. Как отмечалось выше, я рекомендую использовать stow вместо установки непосредственно в/usr/local
.источник
Это зависит от комплектации и многих других вещей
Короче говоря:
нет общего ответа. Это сильно зависит от пакета. Вы должны использовать официальные +1 PPA, если это возможно, в отличие от компиляции из исходного кода.
источник
/opt
./usr/local
является стандартным префиксом, и даже/usr
является более распространенным префиксом по умолчанию, чем/opt
./opt
чаще всего используется для программного обеспечения, которое устанавливается внутри выделенного каталога, названного для конкретного приложения (так, например, приложение с именем Foo может быть установлено со всеми его файлами внутри/opt/foo
).