Почему apt-get требует sudo?

7

Это, наверное, глупый вопрос, но я недавно понял, что понятия не имею why нет однопользовательских функций с apt-get.

Ответы, которые я не ищу:

  • «Это потому, что apt записывает в системные каталоги». Это поверхностный уровень, но я ищу уровень глубже. Есть ли что-то принципиально блокирующее однопользовательскую среду (a la pip + virtualenv)?
  • «Вы можете просто построить из источника». Это обходное решение, но не затрагивает мой вопрос. Я не хочу исправлять кратковременную проблему, и у меня есть root-доступ на всех моих машинах.
задан PattimusPrime 28.03.2014 в 02:20
источник

5 ответов

7
  

Почему apt-get требует sudo?

Не всегда. Вы можете отлично использовать 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 , которое должно работать только для двоичного пакета.

Теперь, почему это не по умолчанию? Потому что это боль. Чтобы сделать то, что вы хотите, нам нужно будет переупаковать каждый пакет дважды, один для правильного пути, а другой - делать то, что вы хотите. В сборке двоичные файлы обычно должны знать, где находятся файлы и библиотеки, в которых они нуждаются (в некоторых случаях это жестко запрограммировано при компиляции).

Теперь, что вы можете сделать вместо этого? Просто запустите окружение a la virtualenv, где вы можете установить пакеты без root.

Сводка: это не тот способ, которым apt-get предназначался для использования, и я не знаю другого менеджера пакетов, подобного apt-get, который позволяет вам это делать. В конце дня apt-get является только интерфейсом к dpkg, который мог бы сделать некоторые из этого.

    
ответ дан Braiam 29.03.2014 в 15:45
источник
3

Информация в самом пакете определяет, где будут установлены файлы, поэтому вам нужно sudo для записи в / и для изменения базы данных пакета.

Когда вы устанавливаете пакеты, вы устанавливаете предварительно созданные двоичные файлы и связанные с ними конфигурационные и метафайлы и скрипты, которые являются неотъемлемыми частями пакета. Эти сценарии и файлы конфигурации тесно связаны с зависимостями и остальной частью системы. Вы не хотели бы менять их легко, если не знаете точно, что делаете.

Если вы находитесь в системе, скажите на работе, где у вас нет доступа sudo , вы можете скомпилировать исходный код и установить каталог установки в свой дом. Тогда нет необходимости в sudo . Когда вы устанавливаете источник, вы обычно не меняете базу данных пакета.

    
ответ дан chaskes 28.03.2014 в 02:28
2

Это не глупый вопрос.

Уровни привилегий в операционной системе

Ubuntu - и даже любая современная операционная система - имеет концепцию разных уровней привилегий для разных программ. Программное обеспечение, инициированное пользователями, обычно работает под уровнем привилегий пользователя, который по соображениям безопасности не имеет необходимого доступа для изменения системы - он может изменять только файлы, принадлежащие этому пользователю.

Чтобы выполнить любую модификацию операционной системы, которая может повлиять на систему в целом, а не только на файлы пользователя, требуется более высокий уровень привилегий, который в Linux называется привилегиями «суперпользователя» (или обычно называемый «root»). Этот уровень привилегий имеет неограниченный доступ ко всей операционной системе, позволяя ему изменять или уничтожать все файлы для всех пользователей.

Роль apt-get

Когда вы устанавливаете программное обеспечение через apt-get, вы устанавливаете программное обеспечение, доступное в общесистемной системе . То есть, программное обеспечение не просто будет помещено в домашний каталог пользователя только для работы этого пользователя, но будет установлено в общесистемном каталоге приложений (например, в / usr, / etc, / var и т. Д. ) для всех пользователей. Чтобы изменить эти каталоги, вам нужны привилегии суперпользователя. Ни один непривилегированный пользователь не может изменять эти каталоги, поскольку в противном случае непривилегированное программное обеспечение может конфликтовать с системой.

Если вы пытаетесь установить что-то с помощью apt-get, не предоставляя привилегии суперпользователя apt-get, первое препятствие, которое он не сможет преодолеть, - это получить блокировку для записи в свой собственный каталог программного обеспечения. Будучи общесистемной утилитой, apt-get поддерживает каталог установленного программного обеспечения, который, естественно, требует прав суперпользователя, чтобы редактировать, чтобы непривилегированное программное обеспечение не могло с ним поработать. Но даже если вы каким-то образом преодолеете это препятствие (например, изменив права доступа к файлам), многие дальнейшие шаги по пути установки программного обеспечения будут по-прежнему терпеть неудачу, поскольку процедура установки будет зависеть от записи в несколько системных каталогов.

Использование Linux возможно для установки программного обеспечения без привилегий суперпользователя, но вам нужно написать его самостоятельно (например, скрипты оболочки) или скомпилировать его самостоятельно и напрямую выполнить скомпилированные исполняемые файлы. Легче просто установить его в системном масштабе с помощью apt-get (и других утилит APT, таких как aptitude, synaptic или программный центр Ubuntu), если у вас есть доступ к этому.

    
ответ дан thomasrutter 28.03.2014 в 03:15
1

Почему apt-get устанавливает в / (или подобные) каталоги по умолчанию?

Простая причина этого в том, что apt-get не определяет, где устанавливать программное обеспечение. Он определяется разработчиками и кодируется внутри самого приложения.

Можно ли установить в другие каталоги?

Да, вы можете установить на другие каталоги. Для программного обеспечения с открытым исходным кодом, получить источник, изменить каталог установки, скомпилировать, построить и установить его. Как правило, есть опция для включенного скрипта configure , который позволяет указать, где устанавливать. Обычно это --prefix .

Но я настаиваю на использовании apt-get. Что теперь делать?

OK. Есть еще способ сделать это с помощью apt-get, хотя это будет слишком много для конечного пользователя. Выполните шаги.

  1. Получить источник.
  2. Измените каталог установки на что-то вроде $HOME .
  3. Скомпилировать и построить.
  4. упакуйте его в файл .deb .
  5. Создайте учетную запись для запуска.
  6. Подпишите код поведения ubuntu (я не уверен, что это необходимо).
  7. создайте ppa для себя .
  8. Загрузите пакет deb в ppa.
  9. добавить ppa к вашим источникам.
  10. Запустить sudo apt-get update .
  11. Запустить apt-get install package .

Это было слишком просто / сложно. Можно ли выбрать каталог во время установки?

Да и нет.

Да, потому что это возможно, некоторые программные средства используют этот метод, единственное, что я знаю, это Qt5 . У него есть файл .run , который, когда выполняется, запрашивает каталог установки среди многих других входы.

Нет, потому что этот метод не использует apt-get .

Могу ли я сделать это легко когда-нибудь с apt-get ?

Я не думаю, что разработчики apt-get и / или разработчиков программного обеспечения были бы заинтересованы в этом, но может быть разработано некоторое программное обеспечение, которое будет использовать источник, изменение, компиляцию, сборку, установку , автоматически запрашивая только установочный каталог.

Мой шестой смысл подсказывает мне, что команда будет

apt-dont-get install pkg1 pkg2 ...
    
ответ дан Registered User 28.03.2014 в 06:58
-1

Потому что он редактирует файлы, которые chmodded, поэтому вы не можете их использовать. Возможно, вы сможете chmod их, поэтому вы не можете сделать это, хотя

    
ответ дан Raring 28.03.2014 в 02:53

Ознакомьтесь с другими вопросами по меткам