Un gestore di pacchetti dovrebbe modificare il file .bashrc?


9

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


7
Riesci a fare in modo che qualcosa si comporti meglio, rimuovendo la dipendenza dalla variabile d'ambiente (ad esempio, usando invece un file di configurazione)? .bashrcPenso che sarebbe preferibile confezionare hack o confondere .

Certo, ma diciamo ai fini di questa domanda che la modifica dell'applicazione non è un'opzione.
David Cowden,

1
Cosa succede se l'utente non è in esecuzione bash? Esistono molte shell alternative disponibili con un'ampia varietà di file di avvio. Consiglio seriamente di trovare qualche soluzione alternativa qui.
Jules,

10
Quindi scrivi un involucro attorno ad esso. Vedi, ad esempio, tomcatche ha bisogno di diverse variabili d'ambiente per funzionare correttamente; sono tutti impostati da uno script di avvio che viene eseguito invece di eseguire direttamente il suo binario.
Jules,

1
@Valità che conosco. La proposta di Jules è già stata suggerita. Sto facendo il facetious - prendendo in giro la logica circolare coinvolta per prima cosa per sostenere che dovrei avere una soluzione agnostica di shell poi procedere a suggerire che io usi uno script di shell come soluzione. È uno scherzo (;
David Cowden,

Risposte:


18

Il passaggio di installazione di un gestore pacchetti dovrebbe modificare l'ambiente di un utente o semplicemente richiedere all'utente di farlo da solo?

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

Gli ambienti Unixy possono contenere file di configurazione che vengono letti ogni volta che un utente avvia una shell di accesso. Per le shell Bourne e C, è possibile inserire la configurazione in /etc/profilee /etc/csh.cshrcrispettivamente. (Non dimenticare di rimuoverlo quando si disinstalla.)

Molti sistemi supportano anche questo utilizzando singoli file, il che rende più semplice aggiungere e rimuovere bit di configurazione senza dover trascinare il testo in un posto arbitrario in un file. (Offre inoltre tutti i vantaggi di controllo e responsabilità che si ottengono da un gestore di pacchetti.) Alcune distribuzioni configureranno la /etc/profilelettura di tutti i file corrispondenti /etc/profile.d/*.sh.


1
Storicamente, rcin un nome di script deriva da CTSSruncom (Run Commands), ma da allora ha ampliato l'ambito per includere altri significati.
Jeffrey Hantin,

1
@JeffreyHantin: Touché. Rimosso.
Blrfl,

1
Odio continuare a raccogliere, ma profile.dnon è incorporato in bash, è un hook comunemente fornito da (di solito la base della distro) /etc/profile. ;)
Jeffrey Hantin

1
@JeffreyHantin: Abbastanza vero, anche se non ci saranno critiche sul mio uso della parola "Unixy". :-)
Blrfl,

14

Non è mai accettabile modificare la /homestruttura di un utente dal gestore pacchetti a meno che quella modifica non sia l'intero punto.

Gli approcci principali a questo sono:

  • Avvisare l'utente che è necessario configurarlo.
  • Fornire le impostazioni predefinite, quindi non è necessario
  • Comprimere uno script di avvio che imposta i valori in modo appropriato
  • (Se la distribuzione lo supporta) Rilasciare un file esportando la variabile di ambiente all'interno /etc/profile.d. Su alcuni sistemi Linux, tutti gli script in questa directory provengono dall'impostazione della shell predefinita, quindi puoi tranquillamente impostare la variabile lì.

7

Domanda Il passaggio di installazione di un gestore pacchetti dovrebbe 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 devono essere considerati sacri da un gestore di pacchetti?

Domanda Il passaggio di installazione di un gestore pacchetti dovrebbe semplicemente richiedere all'utente di farlo da solo?

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

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


Ho preso in considerazione anche questa idea. Il progetto è giovane e arriverà al punto in cui ciò non dovrebbe essere necessario.
David Cowden,

@ GlenH7 ho aggiornato la mia risposta. Spero che la risposta aggiornata sia più della risposta che stai cercando.
R Sahu,

@ GlenH7: questa domanda è essenzialmente un problema XY: meta.stackexchange.com/questions/66377/what-is-the-xy-problem , dove la necessità di variabili d'ambiente è il vero problema da risolvere.
whatsisname

Inoltre, il suggerimento di questa risposta di creare uno script wrapper è l'unica risposta che funzionerà per tutte le shell.
whatsisname

1
@MattThomason che la realizzazione è ciò che mi ha spinto a porre effettivamente la domanda (;
David Cowden,

5

Ti manca la foresta per gli alberi. Ovviamente è più conveniente eseguire il cambiamento di ambiente per l'utente, ma è anche più rischioso e in qualche modo invasivo. Dovresti combinare il meglio di entrambi i mondi chiedendo all'utente se l'installatore dovrebbe modificare il proprio .bashrc, e in alternativa dare istruzioni su come dovrebbero farlo da soli.


Grazie per il consiglio. Non ho mai scritto un pacchetto pubblico prima e voglio solo assicurarmi di non fare qualcosa di tabù.
David Cowden,

Ecco come l'SDK cloud di Google gestisce questo oggi. Chiede se si desidera modificare i file di avvio.
jmq

1

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

Stai assumendo che puoi persino trovare la home directory dell'utente. Se gli utenti sono gestiti tramite LDAP, potrebbe non essere nemmeno possibile ottenere un elenco di tutti gli utenti validi. Le home directory potrebbero non essere in / home; possono essere montati dinamicamente dalla rete. La home directory dell'utente potrebbe essere crittografata e la chiave inaccessibile mentre non sono connessi.

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


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 .bashrcfile dell'utente, invece dovresti aggiungere uno script a /etc/profile.d .

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.