Un gestore di pacchetti dovrebbe modificare il file .bashrc?

9

Sto scrivendo un pacchetto per qualcosa che richiede una variabile d'ambiente da impostare per l'esecuzione corretta. La fase di installazione di un gestore di pacchetti dovrebbe modificare l'ambiente di un utente o semplicemente richiedere all'utente di farlo da sé? La mia intuizione sarebbe la seconda, ma posso vedere gli argomenti per la prima.

    
posta David Cowden 27.05.2014 - 21:08
fonte

6 risposte

18

Should the install step of a package manager modify a user's environment, or simply prompt the user to do so themselves?

Nessuno dei due. Gli installatori di pacchetti non devono mai toccare nulla in una home directory per un account che il pacchetto non possiede. I pacchetti dovrebbero anche configurarsi in modo tale che, se installati, siano utilizzabili senza particolari sforzi da parte dell'utente. (Ci sono casi eccezionali in cui non vuoi farlo, ma sono pochi e lontani tra loro.)

Gli ambienti Unix hanno un posto dove mettere i file di configurazione che vengono letti ogni volta che un utente avvia una shell di login. Per le shell Bourne e C, è possibile inserire la propria configurazione in /etc/profile e /etc/csh.cshrc rispettivamente. (Non dimenticare di rimuoverlo quando si disinstalla.)

Molti sistemi supportano anche questo facendo uso di singoli file, il che rende più facile aggiungere e rimuovere bit di configurazione senza dover trascinare del testo in qualche posto arbitrario in un unico file. (Offre anche tutti i vantaggi di controllo e responsabilità che ottieni da un gestore di pacchetti.) Alcune distribuzioni configureranno /etc/profile per leggere tutti i file che corrispondono a /etc/profile.d/*.sh .

    
risposta data 27.05.2014 - 23:04
fonte
14

È mai accettabile modificare la struttura /home di un utente dal gestore pacchetti, a meno che quella modifica non sia l'intero punto.

Gli approcci principali a questo sono:

  • notifica all'utente che è necessario configurarlo.
  • Fornisci i valori predefiniti quindi non è necessario
  • Confezione di uno script di avvio che imposta i valori in modo appropriato
  • (Se la distribuzione lo supporta) Rilascia un file esportando la variabile di ambiente in /etc/profile.d . Su alcuni sistemi Linux, tutti gli script in questa directory provengono dalla configurazione di shell predefinita, quindi puoi tranquillamente impostare la variabile lì.
risposta data 27.05.2014 - 22:49
fonte
7

Domanda il passaggio di installazione di un gestore di pacchetti può modificare l'ambiente di un utente?

Risposta No. È una cattiva idea modificare i dati di un utente, in questo caso il file .bashrc. I dati dell'utente dovrebbero essere considerati sacri da un gestore di pacchetti?

Domanda Se il passaggio di installazione di un gestore di pacchetti richiede semplicemente all'utente di farlo da sé?

Risposta Questa è una soluzione molto più appetibile ma non ancora ideale.

Penso che dovresti creare uno script di shell wrapper in cui puoi impostare le variabili di ambiente necessarie e successivamente eseguire l'eseguibile.

    
risposta data 27.05.2014 - 21:28
fonte
5

Ti manca la foresta per gli alberi. Ovviamente è più conveniente eseguire il cambiamento dell'ambiente per l'utente, ma è anche più rischioso e un po 'invasivo. Dovresti combinare il meglio di entrambi i mondi chiedendo chiedendo all'utente se il programma di installazione deve modificare il .bashrc , e altrimenti dare istruzioni su come dovrebbero farlo da soli.

    
risposta data 27.05.2014 - 21:24
fonte
1

Supponi che "utente" sia singolare. Cosa succede se ho migliaia di utenti su questo sistema?

Supponi che tu possa persino trovare la home directory dell'utente. Se gli utenti sono gestiti attraverso ad es. LDAP potrebbe non essere autorizzato a ottenere un elenco di tutti gli utenti validi. Le home directory potrebbero non essere in / home; possono essere montati dinamicamente dalla rete. La directory home dell'utente può essere crittografata e la chiave inaccessibile mentre non sono registrati.

Non c'è modo di farlo in modo affidabile in ogni situazione possibile. Usa il meccanismo della distro per impostare le variabili d'ambiente per gli utenti mentre accedono o generano shell. Se ciò non funziona, scrivi un wrapper. (Il wrapper può anche essere un binario, se necessario, per affrontare l'argomento nei commenti).

    
risposta data 28.05.2014 - 13:21
fonte
0

L'impostazione di una variabile globale in un pacchetto è accettabile se è definita dal proprio progetto (e ciò significa che il nome del progetto fa parte del nome della variabile!). Anche in questo caso, non dovresti toccare il file .bashrc dell'utente, ma dovresti aggiungere uno script a / etc / profile.d.

    
risposta data 27.05.2014 - 21:52
fonte

Leggi altre domande sui tag