Dlaczego apt-get wymaga sudo?

12

To chyba głupie pytanie, ale ostatnio zdałem sobie sprawę, że nie mam pojęcia, dlaczego w apt-get nie ma funkcji dla jednego użytkownika.

Odpowiedzi, których nie szukam:

  • „To dlatego, że apt zapisuje do katalogów na poziomie systemu”. To dlaczego na poziomie powierzchni, ale szukam poziomu głębszego. Czy istnieje coś, co zasadniczo blokuje środowisko dla jednego użytkownika (la pip + virtualenv)?
  • „Możesz po prostu budować ze źródła”. Jest to obejście, ale nie odnosi się do mojego pytania. Nie chcę naprawiać problemu krótkoterminowego, a mimo to mam dostęp do roota na wszystkich moich komputerach.
PattimusPrime
źródło
Mam nadzieję, że wiesz, że możesz zbudować dowolny pakiet ze źródła w swoim katalogu domowym.
jobin
Zgadza się, ale szukam przyczyny leżącej u podstaw ograniczenia apt-get. Budowanie ze źródła nie odpowiada na to.
PattimusPrime
1
Myślę, że pytanie, które naprawdę zadajesz, brzmi: „Dlaczego większość oprogramowania Linux nie można przenosić?”. Byłoby całkowicie możliwe, aby zezwolić apt-get na instalowanie oprogramowania w lokalnych katalogach użytkowników, ale ponieważ większość oprogramowania tego nie obsługuje, nie ma sensu tego robić.

Odpowiedzi:

10

Dlaczego apt-get wymaga sudo?

Nie zawsze. Możesz doskonale używać apt-getbez sudo. Są sytuacje, w których wcale nie potrzebujesz, sudona przykład użycie tego, apt-get downloadktóry pobiera pakiet do bieżącego katalogu , apt-get sourcektóry pobiera pliki źródłowe debiana do bieżącego katalogu, changelogktóry pobiera i drukuje dziennik zmian danego pakietu oraz dowolne polecenie, które ma --simulate/ --dry-run/ --no-act(w przypadku installNależy również --no-download).

Wynika to z faktu, że te akcje / polecenia nie wymagają zapisywania katalogów systemowych.

Dlaczego teraz apt-getpotrzebuje sudo? W rzeczywistości tak nie jest. Możesz porzucić apt-get, pobrać pakiet wgeti użyć go dpkg --extracti rozpakować w dowolnym katalogu. Są też takie, --instdirktóre powinny działać dla pakietu tylko binarnego.

Dlaczego to nie jest domyślne? Ponieważ to ból. Aby zrobić to, co chcesz, musielibyśmy ponownie zapakować każdą paczkę dwa razy, jeden we właściwy sposób, a drugi, aby zrobić to, co chcesz. Podczas kompilacji pliki binarne zwykle muszą wiedzieć, gdzie są potrzebne pliki i biblioteki (w niektórych przypadkach jest to zakodowane podczas kompilacji).

Co możesz zamiast tego zrobić? Po prostu chroot jakieś środowisko a la virtualenv, w którym możesz instalować pakiety bez rootowania.

Podsumowując, nie jest to sposób, w jaki apt-get miał być używany, i nie znam innego menedżera pakietów podobnego do apt-get, który pozwala ci to zrobić. Na koniec dnia apt-getjest tylko front-endem dla dpkg, który mógłby zrobić część tego.

Braiam
źródło
3

Informacje w samym pakiecie określają, gdzie pliki zostaną zainstalowane, więc musisz sudozarówno pisać do, jak /i zmieniać bazę danych pakietu.

Podczas instalowania pakietów instalowane są wstępnie skompilowane pliki binarne oraz powiązane pliki konfiguracyjne i meta oraz skrypty, które są niezbędnymi częściami pakietu. Te skrypty i pliki konfiguracyjne są ściśle powiązane z zależnościami i resztą systemu. Nie chciałbyś ich lekko zmieniać, chyba że dokładnie wiesz, co robisz.

Jeśli jesteś w systemie, powiedzmy w pracy, gdzie nie masz sudodostępu, możesz skompilować ze źródła i ustawić katalog instalacyjny na dom. Zatem nie ma takiej potrzeby sudo. Podczas instalacji ze źródła zazwyczaj nie zmieniasz bazy danych pakietów.

kolby
źródło
Dzięki za odpowiedź! Znam obejścia i korzystam z nich, ale staram się dowiedzieć, dlaczego ich używam. Uważam, że mówisz, że problem polega na tym, że ścieżka instalacji jest zapisana na stałe przez opiekunów pakietów - dlaczego nie można tego zmienić?
PattimusPrime
2

To nie jest głupie pytanie.

Poziomy uprawnień w systemie operacyjnym

Ubuntu - a właściwie każdy nowoczesny system operacyjny - ma koncepcję różnych poziomów uprawnień dla różnych programów. Oprogramowanie inicjowane przez użytkowników zwykle działa na poziomie uprawnień użytkownika, który ze względów bezpieczeństwa nie ma wymaganego dostępu do modyfikacji systemu - może jedynie modyfikować pliki należące do tego użytkownika.

W celu wprowadzenia jakichkolwiek modyfikacji w systemie operacyjnym, które mogłyby mieć wpływ na system jako całość, a nie tylko na pliki użytkownika, wymagany jest wyższy poziom uprawnień, który w Linuksie jest nazywany uprawnieniami „superużytkownika” (lub często o nazwie „root”). Ten poziom uprawnień ma nieograniczony dostęp do całego systemu operacyjnego, umożliwiając mu modyfikację - lub zniszczenie - wszystkich plików dla wszystkich użytkowników.

Rola apt-get

Podczas instalowania oprogramowania przez apt-get instalujesz oprogramowanie, które będzie dostępne w całym systemie . Oznacza to, że oprogramowanie nie tylko zostanie umieszczone w katalogu osobistym użytkownika, aby mogło być uruchomione tylko przez tego użytkownika, ale zostanie zainstalowane w ogólnosystemowym katalogu aplikacji (takim jak / usr, / etc, / var i tak dalej) ) do uruchomienia przez wszystkich użytkowników. Aby zmodyfikować te katalogi, potrzebujesz uprawnień administratora. Żaden nieuprzywilejowany użytkownik nie może modyfikować tych katalogów, ponieważ w przeciwnym razie nieuprzywilejowane oprogramowanie może zepsuć się z systemem.

Jeśli spróbujesz zainstalować coś przy użyciu apt-get bez nadawania uprawnień superużytkownikowi apt-get, pierwszą przeszkodą, której nie uda się pokonać, jest uzyskanie blokady zapisu do własnego katalogu oprogramowania. Będąc narzędziem ogólnosystemowym, apt-get prowadzi katalog zainstalowanego oprogramowania, które oczywiście wymaga uprawnień administratora do edycji, aby nieuprzywilejowane oprogramowanie nie mogło z nim zadzierać. Ale nawet jeśli uda ci się jakoś pokonać tę przeszkodę (na przykład zmieniając uprawnienia do plików), wiele dalszych kroków podczas instalacji oprogramowania nadal nie powiedzie się, ponieważ procedura instalacji będzie zależeć od zapisu w kilku katalogach systemowych.

Korzystając z Linuksa można instalować oprogramowanie bez uprawnień administratora, ale musisz napisać je samodzielnie (np. Skrypty powłoki) lub samodzielnie skompilować i uruchomić bezpośrednio skompilowane pliki wykonywalne. Łatwiej jest go zainstalować w całym systemie za pomocą apt-get (i innych narzędzi opartych na APT, takich jak aptitude, synaptic lub centrum oprogramowania Ubuntu), jeśli masz do tego dostęp.

thomasrutter
źródło
Dzięki za odpowiedź i za dokładność. Rozumiem ogólnosystemowy charakter apt-get, ale staram się zrozumieć, dlaczego tak musi być.
PattimusPrime
1
Nie musiało tak być. Tak się składa, że ​​tak właśnie zaprojektowano Ubuntu (i Debian). Nic nie powstrzymałoby kogoś, kto zaprojektowałby system operacyjny, w którym normalny sposób instalowania oprogramowania przypadał na użytkownika.
thomasrutter
1

Dlaczego apt-get domyślnie instaluje się w katalogach / (lub podobnych)?

Prostym powodem jest to, że apt-getnie decyduje, gdzie zainstalować oprogramowanie. Decyzja jest ustalana przez programistów i zakodowana w samej aplikacji.

Czy mogę zainstalować w innych katalogach?

Tak, możesz zainstalować w innych katalogach. W przypadku oprogramowania typu open source pobierz źródło, zmień katalog instalacyjny, skompiluj, skompiluj i zainstaluj. Zazwyczaj w dołączonym configureskrypcie jest opcja umożliwiająca określenie miejsca instalacji. Zazwyczaj tak jest --prefix.

Ale nalegam na użycie apt-get. Co zrobić teraz?

OK. Nadal istnieje sposób, aby to zrobić za pomocą apt-get, choć byłoby to zbyt wiele dla użytkownika końcowego. Wykonaj kroki.

  1. Uzyskaj źródło.
  2. Zmień katalog instalacyjny na coś podobnego $HOME.
  3. Kompiluj i buduj.
  4. spakuj go do pliku .deb .
  5. Utwórz konto startera.
  6. Podpisz kodeks postępowania ubuntu (nie jestem pewien, czy ten kod jest konieczny).
  7. stwórz ppa dla siebie .
  8. Prześlij pakiet deb do ppa.
  9. dodaj ppa do swoich źródeł.
  10. Uruchom sudo apt-get update.
  11. Uruchom apt-get install package.

To było zbyt łatwe / trudne. Czy można wybrać katalog podczas instalacji?

Tak i nie.

Tak, ponieważ jest to możliwe, niektóre programy używają tej metody, jedyne, które znam to Qt5. Ma plik .run , który po uruchomieniu pyta o katalog instalacyjny wśród wielu innych danych wejściowych.

Nie, ponieważ ta metoda nie używa apt-get.

Czy mógłbym to zrobić kiedyś z łatwością apt-get?

Nie sądzę, aby programiści apt-geti / lub twórcy oprogramowania byliby zainteresowani tym, ale można opracować pewne oprogramowanie, które wykona kroki w zakresie źródła, zmiany, kompilacji, kompilacji, instalacji automatycznie, prosząc tylko o katalog instalacyjny.

Mój szósty zmysł mówi mi, że będzie to polecenie

apt-dont-get install pkg1 pkg2 ...
zarejestrowany użytkownik
źródło
Dzięki za odpowiedź - jest dokładna i odpowiada na moje pytanie. Nie rozumiem jednak, dlaczego nie byłoby interesu w rozwijaniu funkcji dla jednego użytkownika w apt-get. Wygląda na to, że ta funkcjonalność byłaby bardzo przydatna w niektórych przypadkach użycia.
PattimusPrime
Dobra informacja, ale format pytań i odpowiedzi w ramach pytań i odpowiedzi ...? :) Idk, może powinieneś edytować do standardowego formatu? Tylko myśl.
chaskes
@PattimusPrime Takie przypadki są najczęściej rzadkie, ponieważ w większości przypadków administratorzy instalują całe niezbędne oprogramowanie, a inni nie muszą instalować oprogramowania. Również fakt, że budowanie ze źródła jest bardzo łatwe i że implementacja takiej funkcjonalności byłaby bezużyteczna, dopóki programiści jej nie wdrożą w swoim własnym oprogramowaniu, powstrzymają apt-getprogramistów przed zrobieniem tego. Ponadto wiele istniejących programów zależy od innych programów i przeszukują je w katalogu / usr. Wdrożenie takiej funkcjonalności wymagałoby zmiany we wszystkich istniejących programach, które są zależne (nie jest to tysiące).
Zarejestrowany użytkownik
Jest naruszeniem zasad Debiana podczas instalowania plików w $ HOME. Nigdy nie powinieneś tego robić. Jeśli już, użyj /opt/packagezamiast tego katalogu i chmod.
Braiam
@Braiam: Widziałem ludzi, którzy zalecają instalowanie pakietów, $HOME/opt/jeśli nie mają wymaganych uprawnień do instalowania pakietów w /opt/..
Aditya
-1

Ponieważ edytuje pliki chmodded, więc nie możesz ich użyć. Być może uda ci się je chmod, więc nie mogę tego polecić

Zapalony
źródło
Dzięki za odpowiedź. Szukam, dlaczego edytuje tylko pliki chmodded. Wydaje mi się, że funkcja dla jednego użytkownika byłaby łatwa do wdrożenia i niezwykle przydatna w niektórych obszarach (np. Klastry superkomputerów)
PattimusPrime