J'écris un package pour quelque chose qui nécessite qu'une variable d'environnement soit définie pour s'exécuter correctement. L'étape d'installation d'un gestionnaire de packages doit-elle modifier l'environnement d'un utilisateur ou simplement inviter l'utilisateur à le faire lui-même? Mon intuition serait la seconde, mais je peux voir des arguments pour la première.
installer
environment
package-managers
David Cowden
la source
la source
.bashrc
, je pense.bash
? Il existe de nombreux shells alternatifs disponibles avec une grande variété de fichiers de démarrage. Je suggère sérieusement de trouver une autre solution ici.tomcat
qui a besoin de plusieurs variables d'environnement pour fonctionner correctement; ils sont tous définis par un script de démarrage qui est exécuté au lieu d'exécuter directement son binaire.Réponses:
Ni. Les installateurs de packages ne doivent jamais toucher quoi que ce soit dans un répertoire personnel pour un compte que le package ne possède pas. Les packages doivent également se configurer de sorte que s'ils sont installés, ils soient utilisables sans effort particulier de la part de l'utilisateur. (Il y a des cas exceptionnels où vous ne voulez pas faire cela, mais ils sont rares.)
Les environnements Unixy ont une place pour mettre des fichiers de configuration qui sont lus chaque fois qu'un utilisateur démarre un shell de connexion. Pour les shells Bourne et C, vous pouvez insérer votre configuration dans
/etc/profile
et/etc/csh.cshrc
respectivement. (N'oubliez pas de le supprimer lors de la désinstallation.)De nombreux systèmes prennent également en charge cette opération à l'aide de fichiers individuels, ce qui facilite l'ajout et la suppression de bits de configuration sans avoir à déposer du texte à un endroit arbitraire dans un fichier. (Il vous offre également tous les avantages de contrôle et de responsabilité que vous obtenez d'un gestionnaire de packages.) Certaines distributions configurent la
/etc/profile
lecture de tous les fichiers correspondants/etc/profile.d/*.sh
.la source
rc
dans un script, le nom dérive de CTSSruncom
(Run Commands), mais a depuis élargi sa portée pour inclure d'autres significations.profile.d
n'est pas intégré à bash, c'est un crochet généralement fourni par (généralement la base de la distribution)/etc/profile
. ;)Il n'est jamais acceptable de modifier la
/home
structure d' un utilisateur à partir du gestionnaire de packages, sauf si cette modification est le point entier.Les principales approches en la matière sont les suivantes:
/etc/profile.d
. Sur certains systèmes Linux, tous les scripts de ce répertoire proviennent de la configuration par défaut du shell, vous pouvez donc y définir la variable en toute sécurité.la source
Question L'étape d'installation d'un gestionnaire de packages doit-elle modifier l'environnement d'un utilisateur?
Réponse Non. C'est une mauvaise idée de modifier les données d'un utilisateur, dans ce cas le fichier .bashrc. Les données de l'utilisateur doivent être considérées comme sacrées par un gestionnaire de paquets?
Question L'étape d'installation d'un gestionnaire de packages doit-elle simplement inviter l'utilisateur à le faire lui-même?
Réponse C'est une solution beaucoup plus agréable au goût mais pas toujours idéale.
Je pense que vous devriez créer un script shell wrapper où vous pouvez définir les variables d'environnement nécessaires et les exécuter après cela.
la source
Vous manquez la forêt pour les arbres. Évidemment, il est plus pratique d'effectuer le changement d'environnement pour l'utilisateur, mais c'est aussi plus risqué et quelque peu invasif. Vous devez combiner le meilleur des deux mondes en demandant à l'utilisateur si l'installateur doit modifier le leur
.bashrc
, et sinon donner des instructions sur la façon de le faire lui-même.la source
Vous supposez que "utilisateur" est singulier. Que se passe-t-il si j'ai des milliers d'utilisateurs sur ce système?
Vous supposez que vous pouvez même trouver le répertoire personnel de l'utilisateur. Si les utilisateurs sont gérés par exemple par LDAP, il se peut que vous ne soyez même pas autorisé à obtenir une liste de tous les utilisateurs valides. Les répertoires personnels peuvent ne pas se trouver dans / home; ils peuvent être montés dynamiquement à partir du réseau. Le répertoire personnel de l'utilisateur peut être crypté et la clé inaccessible tant qu'il n'est pas connecté.
Il n'y a aucun moyen de le faire de manière fiable dans toutes les situations possibles. Utilisez le mécanisme de la distribution pour définir des variables d'environnement pour les utilisateurs lorsqu'ils se connectent ou génèrent des shells. Si cela ne fonctionne pas, écrivez un wrapper. (Le wrapper peut également être un binaire si nécessaire, pour traiter l'argument dans les commentaires).
la source
La définition d'une variable globale dans un package est acceptable si elle est définie par votre propre projet (et cela signifie que le nom du projet fait partie du nom de la variable!). Même dans ce cas, vous ne devez pas toucher le
.bashrc
fichier de l'utilisateur - vous devez plutôt ajouter un script à /etc/profile.d .la source