Возможно, это глупый вопрос, но недавно я понял, что понятия не имею, почему с apt-get нет однопользовательской функциональности.
Ответы, которые я не ищу:
- «Это потому, что apt пишет в каталоги системного уровня». Это поверхностный уровень, почему, но я ищу уровень глубже. Есть ли что-то принципиально блокирующее однопользовательскую среду (a la pip + virtualenv)?
- «Вы можете просто построить из источника». Это обходной путь, но не решает мой вопрос. Я не хочу исправлять кратковременную проблему, и у меня все равно есть root-доступ на всех моих машинах.
Ответы:
Не всегда. Вы можете прекрасно использовать
apt-get
безsudo
. Есть случаи, когда вам вообще не нужноsudo
, например, использование,apt-get download
которое загружает пакет в ваш текущий каталог ,apt-get source
которое загружает исходные файлы debian в ваш текущий каталог,changelog
которое загружает и печатает журнал изменений данного пакета, и любую команду, которая имеет--simulate
/--dry-run
/--no-act
(в случаеinstall
вам нужно также--no-download
).Это потому, что эти действия / команды не требуют записи системных каталогов.
Теперь зачем это
apt-get
нужноsudo
? На самом деле это не так. Вы можете отказаться от apt-get, скачать пакетwget
и использовать егоdpkg --extract
и распаковать в любой каталог, который вам нравится. Там также,--instdir
который должен работать только для двоичного пакета.Теперь, почему это не по умолчанию? Потому что это боль. Чтобы сделать то, что вы хотите, нам нужно будет дважды упаковать каждый пакет, один для правильного пути, а другой - для того, что вы хотите. При сборке бинарные файлы обычно должны знать, где находятся файлы и библиотеки, которые им нужны (в некоторых случаях это жестко запрограммировано при компиляции).
Теперь, что вы можете сделать вместо этого? Просто сделайте chroot для некоторой среды в стиле virtualenv, где вы можете устанавливать пакеты без рута.
Подводя итог, это не тот способ, которым предназначалось apt-get, и я не знаю другого менеджера пакетов, подобного apt-get, который бы позволял вам это делать. В конце концов,
apt-get
это всего лишь интерфейс для dpkg, который может сделать что-то из этого.источник
Информация в самом пакете определяет, куда будут устанавливаться файлы, поэтому вам нужно
sudo
как писать, так/
и изменять базу данных пакета.При установке пакетов вы устанавливаете предварительно созданные двоичные файлы и связанные с ними конфигурационные и метафайлы и сценарии, которые являются важными частями пакета. Эти сценарии и файлы конфигурации тесно связаны с зависимостями и остальной частью системы. Вы не захотите изменить это слегка, если не будете точно знать, что делаете.
Если вы работаете в системе, скажем, на работе, к которой у вас нет
sudo
доступа, вы можете скомпилировать из исходного кода и установить каталог установки на свой домашний компьютер. Тогда нет необходимостиsudo
. При установке из исходного кода вы, как правило, не изменяете базу данных пакетов.источник
Это не глупый вопрос.
Уровни привилегий в операционной системе
Ubuntu - и даже любая современная операционная система - имеет концепцию разных уровней привилегий для разных программ. Программное обеспечение, инициированное пользователями, обычно работает с уровнем привилегий на основе пользователя, который по соображениям безопасности не имеет необходимого доступа для изменения системы - он может изменять только файлы, принадлежащие этому пользователю.
Чтобы выполнить любую модификацию операционной системы, которая может повлиять на систему в целом, а не только на файлы пользователя, требуется более высокий уровень привилегий, который в Linux называется привилегиями «суперпользователя» (или обычно называется "корень"). Этот уровень привилегий имеет беспрепятственный доступ ко всей операционной системе, что позволяет ей изменять или уничтожать все файлы для всех пользователей.
Роль apt-get
Когда вы устанавливаете программное обеспечение через apt-get, вы устанавливаете программное обеспечение, которое будет доступно для всей системы . Таким образом, программное обеспечение будет не просто помещаться в домашний каталог пользователя для запуска только этим пользователем, но оно будет установлено в общесистемном каталоге приложения (например, в / usr, / etc, / var и т. Д.). ) для запуска всеми пользователями. Чтобы изменить эти каталоги, вам нужны привилегии суперпользователя. Ни один непривилегированный пользователь не может изменять эти каталоги, потому что в противном случае непривилегированное программное обеспечение может связываться с системой.
Если вы попытаетесь установить что-либо, используя apt-get, не предоставляя apt-get привилегии суперпользователя, первое препятствие, которое он не сможет преодолеть, - это получить блокировку для записи в свой собственный каталог программного обеспечения. Являясь общесистемной утилитой, apt-get поддерживает каталог установленного программного обеспечения, который, естественно, требует прав суперпользователя для редактирования, чтобы непривилегированное программное обеспечение не могло связываться с ним. Но даже если бы вы могли как-то преодолеть это препятствие (например, изменив права доступа к файлам), многие дальнейшие шаги по установке программного обеспечения все равно не будут выполнены, поскольку процедура установки будет зависеть от записи в несколько системных каталогов.
Используя Linux, можно устанавливать программное обеспечение без привилегий суперпользователя, но вам нужно написать его самостоятельно (например, сценарии оболочки) или скомпилировать его самостоятельно и запустить скомпилированные исполняемые файлы напрямую. Проще установить его для всей системы, используя apt-get (и другие утилиты на основе APT, такие как aptitude, synaptic или Ubuntu software center), если у вас есть для этого доступ.
источник
Почему apt-get по умолчанию устанавливается в / (или аналогичные) каталоги?
Простая причина этого заключается в том,
apt-get
что не решается, куда устанавливать программное обеспечение. Это решается разработчиками и кодируется внутри самого приложения.Могу ли я установить в другие каталоги?
Да, вы можете установить в другие каталоги. Для программного обеспечения с открытым исходным кодом получите исходный код, измените каталог установки, скомпилируйте, соберите и установите его. Обычно включенный
configure
сценарий содержит параметр , позволяющий указать, куда устанавливать. Это обычно--prefix
.Но я настаиваю на использовании apt-get. Что делать сейчас?
ОК. Есть еще способ сделать это с помощью apt-get, хотя для конечного пользователя это будет слишком много. Следуйте шагам.
$HOME
.sudo apt-get update
.apt-get install package
.Это было слишком легко / сложно. Можно ли выбрать каталог во время установки?
Да и нет.
Да, потому что это возможно, некоторые программы используют этот метод, единственный, который я знаю, это
Qt5
. У него есть файл .run, который при выполнении запрашивает каталог установки среди многих других входных данных.Нет, потому что этот метод не использует
apt-get
.Могу ли я сделать это легко когда-нибудь, с
apt-get
?Я не думаю, что разработчики
apt-get
и / или разработчики программного обеспечения были бы заинтересованы в этом, но может быть разработано какое-то программное обеспечение, которое будет выполнять этапы исходного кода, изменения, компиляции, сборки и установки , просто запрашивая каталог установки.Мое шестое чувство говорит мне, что команда будет
источник
apt-get
разработчикам сделать это. Кроме того, многие существующие программы зависят от других программ, и они ищут их в каталоге / usr. Реализация такой функциональности потребует изменений во всех существующих программах, которые имеют зависимости (это не касается тысяч)./opt/package
вместо этого каталог chmod.$HOME/opt/
если у них нет необходимых прав для установки пакетов в/opt/
..Потому что это редактирование файлов, которые chmodded, так что вы не можете их использовать. Вы можете быть в состоянии chmod их, так что вы не можете, я не рекомендую делать это, хотя
источник