Perché apt-get richiede sudo?


12

Questa è probabilmente una domanda stupida, ma di recente mi sono reso conto che non ho idea del perché non ci siano funzionalità per utente singolo con apt-get.

Risposte che non cerco:

  • "È perché apt scrive nelle directory a livello di sistema". Questo è il motivo del livello superficiale, ma sto cercando un livello più profondo. Esiste qualcosa che blocca fondamentalmente un ambiente a utente singolo (a la pip + virtualenv)?
  • "Puoi semplicemente compilare dalla fonte". Questa è una soluzione alternativa, ma non risponde alla mia domanda. Non voglio risolvere un problema a breve termine e ho comunque accesso root su tutte le mie macchine.

Spero che tu sappia che puoi creare qualsiasi pacchetto dalla sorgente nella tua home directory.
jobin

Giusto, ma sto cercando il motivo alla base della limitazione apt-get. Costruire dalla fonte non risponde a questo.
PattimusPrime,

1
Penso che la domanda che stai davvero ponendo è "Perché la maggior parte dei software Linux non è trasferibile?". Sarebbe perfettamente possibile consentire a apt-get di installare il software nelle directory dell'utente-locale, ma poiché la maggior parte dei software non lo supporta, sarebbe inutile farlo.

Risposte:


10

Perché apt-get richiede sudo?

Non sempre. Puoi usarlo perfettamente apt-getsenza sudo. Ci sono casi in cui non è necessario sudo, come usare apt-get downloadquale scarica un pacchetto nella directory corrente , apt-get sourceche scarica i file dei sorgenti debian nella directory corrente, changelogche scarica e stampa il log delle modifiche di un determinato pacchetto e qualsiasi comando che ha il --simulate/ --dry-run/ --no-act(nel caso installsia necessario anche tu --no-download).

Questo perché queste azioni / comandi non richiedono la scrittura di directory di sistema.

Ora, perché ha apt-getbisogno sudo? In realtà no. Puoi abbandonare apt-get, scaricare un pacchetto con wgeted usare dpkg --extracted estrarre il pacchetto in qualunque directory ti piaccia. C'è anche --instdirche dovrebbe funzionare per il pacchetto solo binario.

Ora, perché questo non è il valore predefinito? Perché è un dolore. Per fare quello che vuoi, dovremmo riconfezionare ogni pacchetto due volte, uno nel modo giusto e un altro per fare quello che vuoi. Al momento della compilazione, i binari normalmente devono sapere dove sono i file e le librerie di cui hanno bisogno (in alcuni casi, questo è hardcoded alla compilazione).

Ora, cosa puoi fare invece? Basta chroot un ambiente alla virtualenv, dove è possibile installare pacchetti senza root.

Riepilogo, questo non è il modo in cui apt-get doveva essere usato, e non conosco un altro gestore di pacchetti simile a apt-get che ti permetta di farlo. Alla fine della giornata, apt-getè solo un front-end per dpkg che potrebbe fare un po 'di questo.


3

Le informazioni nel pacchetto stesso determinano dove verranno installati i file, quindi è necessario sudoscrivere /e modificare il database del pacchetto.

Quando si installano pacchetti, si installano file binari predefiniti e relativi file di configurazione e meta file e script che sono parti essenziali del pacchetto. Questi script e file di configurazione sono strettamente collegati alle dipendenze e al resto del sistema. Non vorrai cambiarli leggermente se non sapessi esattamente cosa stai facendo.

Se sei su un sistema, ad esempio al lavoro, a cui non hai sudoaccesso, puoi compilare dal sorgente e impostare la directory di installazione sulla tua casa. Quindi, non è necessario sudo. Quando si installa dall'origine, in genere non si modifica il database del pacchetto.


Grazie per aver risposto! Conosco e utilizzo le soluzioni alternative, ma quello che sto cercando di capire è il motivo per cui le sto usando. Credo che tu stia dicendo che il problema è che il percorso di installazione è codificato dai manutentori del pacchetto: perché non è possibile modificarlo?
PattimusPrime,

2

Non è una domanda stupida.

Livelli di privilegi in un sistema operativo

Ubuntu - e in effetti qualsiasi sistema operativo moderno - ha il concetto di diversi livelli di privilegi per diversi software. Il software avviato dagli utenti di solito viene eseguito con un livello di privilegio basato sull'utente, che per motivi di sicurezza non ha l'accesso richiesto per modificare il sistema, ma può solo modificare i file appartenenti a quell'utente.

Per eseguire qualsiasi modifica al sistema operativo che potrebbe avere un impatto sul sistema nel suo complesso, piuttosto che solo sui file dell'utente, è richiesto un livello di privilegi più elevato, che in Linux viene definito privilegio di "superutente" (o comunemente chiamato "root"). Questo livello di privilegi ha accesso illimitato all'intero sistema operativo, consentendogli di modificare o distruggere tutti i file per tutti gli utenti.

Il ruolo di apt-get

Quando si installa il software tramite apt-get, si installa un software che sarà disponibile a livello di sistema . Cioè, il software non verrà semplicemente inserito nella home directory di un utente per essere eseguito solo da quell'utente, ma verrà installato in una directory dell'applicazione a livello di sistema (come in / usr, / etc, / var e così via ) per l'esecuzione da parte di tutti gli utenti. Per modificare queste directory è necessario disporre dei privilegi di superutente. Nessun utente senza privilegi può modificare queste directory, perché altrimenti un software senza privilegi potrebbe rovinare il sistema.

Se provi a installare qualcosa usando apt-get senza dare i privilegi di superutente a apt-get, il primo ostacolo che non riuscirà a superare è quello di ottenere un blocco per scrivere nel suo catalogo software. Essendo un'utilità a livello di sistema, apt-get mantiene un catalogo di software installato, che richiede naturalmente i privilegi di superutente per la modifica in modo che il software senza privilegi non possa interferire con esso. Ma anche se in qualche modo riuscissi a superare questo ostacolo (ad esempio, modificando le autorizzazioni dei file), molti altri passaggi lungo la procedura di installazione del software falliranno comunque, poiché la routine di installazione dipenderà dalla scrittura in diverse directory di sistema.

Usando Linux è possibile installare software senza i privilegi di superutente, ma è necessario scriverlo da soli (ad esempio, script di shell) o compilarlo da soli ed eseguire direttamente gli eseguibili compilati. È più semplice installarlo a livello di sistema usando apt-get (e altre utilità basate su APT come aptitude, synaptic o il centro software Ubuntu) se si ha accesso a farlo.


Grazie per la risposta e grazie per l'accuratezza. Capisco la natura a livello di sistema di apt-get, ma quello che sto cercando di capire è perché deve essere così.
PattimusPrime,

1
Non doveva essere così. Capita solo che siano stati progettati Ubuntu (e Debian). Non ci sarebbe nulla che impedisca a qualcuno di progettare un sistema operativo in cui il modo normale di installare software era per utente.
thomasrutter,

1

Perché apt-get installa in / (o simili) directory di default?

La semplice ragione di ciò è che apt-getnon decide dove installare il software. È deciso dagli sviluppatori e codificato all'interno dell'applicazione stessa.

Posso installare su altre directory?

Sì, è possibile installare in altre directory. Per software open source, ottenere il sorgente, modificare la directory di installazione, compilare, compilare e installarlo. Di solito esiste un'opzione per lo configurescript incluso che consente di specificare dove installare. Questo è di solito --prefix.

Ma insisto per usare apt-get. Cosa fare adesso?

OK. C'è ancora un modo per farlo con apt-get, anche se sarebbe troppo per un utente finale. Segui i passi.

  1. Ottieni la fonte.
  2. Cambia la directory di installazione in qualcosa del genere $HOME.
  3. Compila e compila.
  4. impacchettarlo in un file .deb .
  5. Crea un account launchpad.
  6. Firma il codice di condotta di Ubuntu (non sono sicuro che questo sia necessario).
  7. crea un ppa per te stesso .
  8. Carica il pacchetto deb su ppa.
  9. aggiungi il ppa alle tue fonti.
  10. Corri sudo apt-get update.
  11. Corri apt-get install package.

È stato troppo facile / difficile. È possibile selezionare la directory durante l'installazione?

Sì e no.

Sì perché è possibile, alcuni software usano questo metodo, l'unico che io conosca è Qt5. Ha un file .run che, quando eseguito, richiede la directory di installazione tra molti altri input.

No perché questo metodo non utilizza apt-get.

Potrei farlo facilmente un giorno, con apt-get?

Non penso che gli sviluppatori di apt-gete / o gli sviluppatori di software sarebbero interessati a farlo, ma alcuni software possono essere sviluppati che eseguiranno automaticamente i passaggi di origine, modifica, compilazione, costruzione, installazione chiedendo solo la directory di installazione.

Il mio sesto senso mi dice che il comando sarebbe

apt-dont-get install pkg1 pkg2 ...

Grazie per la risposta: è approfondita e risponde alla mia domanda. Tuttavia, non capisco perché non ci sarebbe interesse a sviluppare funzionalità per utente singolo in apt-get. Sembra che la funzionalità sarebbe molto utile in alcuni casi d'uso.
PattimusPrime,

Buone informazioni, ma un formato di domande e risposte all'interno delle Domande e risposte ...? :) Idk, forse dovresti modificarlo in un formato standard? Solo un pensiero.
Chaskes,

@PattimusPrime Tali casi sono per lo più rari, perché nella maggior parte dei casi gli amministratori installano tutto il software necessario e gli altri non devono installare software. Anche i fatti che costruire dalla fonte è molto semplice e che l'implementazione di una tale funzionalità sarebbe inutile fintanto che gli sviluppatori di software non la implementano nel proprio software impedirà agli apt-getsviluppatori di farlo. Inoltre, molti programmi esistenti dipendono da altri programmi e li cercano nella directory / usr. L'implementazione di tale funzionalità richiederebbe il cambiamento in tutti i software esistenti che hanno dipendenze (questo non vale per migliaia).
Utente registrato

È una violazione della politica Debian per installare i file in $ HOME. Non dovresti mai farlo. Semmai, usa /opt/packagee chmod invece la directory.
Braiam,

@Braiam: ho visto persone raccomandare di installare i pacchetti $HOME/opt/se non hanno avuto il privilegio di installare pacchetti in /opt/..
Aditya

-1

Causa la modifica dei file che sono chmodded in modo da non poterli usare. Potresti essere in grado di modificarli in modo da non poterti consigliare di farlo


Grazie per aver risposto. Sto cercando il motivo per cui modifica solo i file chmodded. Mi sembra che una funzionalità per utente singolo sarebbe facile da implementare e immensamente utile in alcune aree (ad esempio cluster di supercalcolo)
PattimusPrime
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.