Чому для apt-get потрібен судо?


12

Це, мабуть, дурне питання, але я нещодавно зрозумів, що не маю уявлення, чому немає жодної користувацької функціональності з apt-get.

Відповіді я не шукаю:

  • "Це тому, що apt пише в каталоги на системному рівні". Це саме на рівні поверхні, але я шукаю рівень глибший. Чи щось принципово блокує середовище для одного користувача (a la pip + virtualenv)?
  • Msgstr "Ви можете просто створити з джерела". Це вирішення, але не стосується мого питання. Я не хочу вирішувати короткочасну проблему, і в будь-якому випадку у мене є кореневий доступ до всіх моїх машин.

Я сподіваюся, що ви знаєте, що зможете створити будь-який пакет із джерела у своєму домашньому каталозі.
jobin

Правильно, але я шукаю, чому лежить в основі обмеження apt-get. Будівництво з джерела не відповідає на це.
PattimusPrime

1
Я думаю, що питання, яке ви насправді ставите, - це "Чому більшість програмного забезпечення Linux не переїжджає?". Було б цілком можливо дозволити apt-get встановлювати програмне забезпечення в локальні каталоги користувачів, але оскільки більшість програмного забезпечення не підтримує це, було б мало сенсу робити це.

Відповіді:


10

Чому для apt-get потрібен судо?

Не завжди. Ви бездоганно можете використовувати 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 деяке середовище a la virtualenv, де ви можете встановлювати пакети без root.

Підсумовуючи, це не спосіб, яким потрібно було використовувати apt-get, і я не знаю іншого менеджера пакунків, схожого на apt-get, який дозволяє це робити. Зрештою, apt-getце просто передній кінець dpkg, який міг би зробити щось із цього.


3

Інформація в самому пакеті визначає, де будуть встановлені файли, тому потрібно sudoяк писати, так /і змінювати базу даних пакета.

Під час встановлення пакетів ви встановлюєте заздалегідь вбудовані двійкові файли та пов’язані з ними конфігураційні та мета-файли та сценарії, які є важливою частиною пакету. Ці сценарії та конфігураційні файли тісно пов'язані із залежностями та іншою частиною системи. Ви б не хотіли змінити це легко, якщо ви точно не знали, що робите.

Якщо ви перебуваєте в системі, скажімо, на роботі, де ви не маєте sudoдоступу, ви можете зібрати з джерела і встановити каталог встановлення до свого будинку. Тоді, в цьому немає потреби sudo. Коли ви встановлюєте з джерела, ви, як правило, не змінюєте базу даних пакетів.


Дякуємо за відповідь! Я знаю і використовую обхідні шляхи, але те, що я намагаюся з'ясувати, це те, чому я їх використовую. Я вважаю, ви говорите, що проблема полягає в тому, що інсталятори пакету жорстко кодують шлях встановлення - чому це не можна змінити?
PattimusPrime

2

Це не дурне питання.

Рівні привілеїв в операційній системі

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

Для того, щоб здійснити будь-які зміни в операційній системі, які могли б вплинути на систему в цілому, а не тільки на файли користувача, потрібен більш високий рівень привілеїв, який в Linux називають привілеями "суперпользователя" (або зазвичай називається «корінь»). Цей рівень привілеїв має безперешкодний доступ до всієї операційної системи, що дозволяє їй змінювати - або знищувати - всі файли для всіх користувачів.

Роль apt-get

Коли ви встановлюєте програмне забезпечення через apt-get, ви встановлюєте програмне забезпечення, яке буде доступне в усьому світі . Тобто, програмне забезпечення не буде просто розміщене у домашній довідці користувача для роботи лише цим користувачем, але воно буде встановлено у загальносистемному каталозі програм (наприклад, у / usr, / тощо, / var тощо) ) для запуску всіма користувачами. Для зміни цих каталогів вам потрібні привілеї суперпользователя. Жоден непривілейований користувач не може змінювати ці каталоги, оскільки в іншому випадку непривілейоване програмне забезпечення може зіпсуватись із системою.

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

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


Дякую за відповідь і дякую за ретельність. Я розумію загальносистемний характер apt-get, але те, що я намагаюся зрозуміти, це тому, що воно повинно бути таким.
ПаттімПример

1
Це не повинно бути таким. Це просто так, як були розроблені Ubuntu (і Debian). Ніхто не зупинить когось, хто розробляє операційну систему там, де звичайний спосіб встановлення програмного забезпечення був на кожного користувача.
thomasrutter

1

Чому встановлення apt-get за замовчуванням встановлює / / або подібні до нього каталоги?

Проста причина цього - те, apt-getщо не вирішує, де встановити програмне забезпечення. Це вирішують розробники і кодуються всередині самої програми.

Чи можу я встановити в інші каталоги?

Так, ви можете встановити в інші каталоги. Для програмного забезпечення з відкритим кодом дістаньте джерело, змініть інсталяційний каталог, компілюйте, складіть та встановіть його. Зазвичай існує опція для включеного configureсценарію, яка дозволяє вам вказати, де встановити. Зазвичай це --prefix.

Але я наполягаю на застосуванні apt-get. Що ж тепер робити?

ДОБРЕ. Існує ще спосіб зробити це за допомогою apt-get, хоча це буде занадто багато для кінцевого користувача. Виконайте дії.

  1. Отримайте джерело.
  2. Змініть інсталяційний каталог на щось подібне $HOME.
  3. Компілюйте та будуйте.
  4. упакувати його в .deb файл .
  5. Створіть обліковий запис стартової панелі.
  6. Підпишіть код поведінки ubuntu (я не впевнений, чи потрібен цей).
  7. створити для себе ППА .
  8. Завантажте пакет деб на 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 ...

Дякую за відповідь - це ґрунтовно і вирішує моє запитання. Я не розумію, чому не було б інтересу до розвитку функцій для одного користувача в apt-get, однак. Схоже, що функціональність була б дуже корисною у певних випадках використання.
PattimusPrime

Хороша інформація, але формат запитань у питаннях і відповідей ...? :) Idk, можливо, вам слід редагувати у стандартний формат? Просто думка.
chaskes

@PattimusPrime Такі випадки в основному рідкісні, оскільки в більшості випадків адміністратори встановлюють все необхідне програмне забезпечення, а іншим не потрібно встановлювати програмне забезпечення. Також факти, що створювати з джерела дуже просто і що реалізація такої функціональності буде марною, доки розробники програмного забезпечення не реалізують її там, де власне програмне забезпечення перестане apt-getрозробникам цього робити. Крім того, багато існуючих програм залежать від інших програм, і вони шукають їх у каталозі / usr. Впровадження такої функціональності потребує змін у всіх існуючих програмних забезпеченнях, які мають залежність (це не стосується тисяч).
Зареєстрований користувач

Це порушення політики Debian для встановлення файлів у $ HOME. Ти ніколи цього не повинен робити. Якщо що-небудь, використовуйте /opt/packageта chmod каталог.
Брайам

@Braiam: Я бачив, як люди рекомендують встановлювати пакунки, $HOME/opt/якщо вони не потребують привілеїв для встановлення пакунків у /opt/..
Aditya

-1

Виконуйте це редагування файлів, які є незмінними, щоб ви не могли їх використовувати. Ви можете змогти їх chmod, щоб ви не могли рекомендувати це робити, хоча


Дякую за відповідь. Я шукаю, чому він редагує лише chmodded файли. Мені здається, що функціонал для одного користувача був би легким у впровадженні та надзвичайно корисним у деяких областях (наприклад, кластери суперкомп'ютерних
обчислень
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.