Ich schreibe ein Paket für etwas, für das eine Umgebungsvariable festgelegt werden muss, damit es ordnungsgemäß ausgeführt werden kann. Sollte der Installationsschritt eines Paketmanagers die Umgebung eines Benutzers ändern oder den Benutzer einfach dazu auffordern? Meine Intuition wäre die letztere, aber ich kann Argumente für die erstere sehen.
installer
environment
package-managers
David Cowden
quelle
quelle
.bashrc
meiner Meinung nach dem Verpacken von Hacks oder dem Mist vorzuziehen .bash
? Es gibt viele alternative Shells mit einer Vielzahl von Startdateien. Ich schlage ernsthaft vor, hier eine alternative Lösung zu finden.tomcat
dass mehrere Umgebungsvariablen benötigt werden, um korrekt zu funktionieren. Sie werden alle von einem Startskript festgelegt, das ausgeführt wird, anstatt die Binärdatei direkt auszuführen.Antworten:
Weder. Paketinstallationsprogramme sollten niemals etwas in einem Home-Verzeichnis für ein Konto berühren, das das Paket nicht besitzt. Pakete sollten sich auch so konfigurieren, dass sie bei Installation ohne besonderen Aufwand des Benutzers verwendet werden können. (Es gibt Ausnahmefälle, in denen Sie dies nicht tun möchten, aber es gibt nur wenige.)
In Unixy-Umgebungen können Konfigurationsdateien abgelegt werden, die gelesen werden, wenn ein Benutzer eine Anmeldeshell startet. Für die Bourne und C - Shells können Sie Ihre Konfiguration in einfügen
/etc/profile
und/etc/csh.cshrc
jeweils. (Vergessen Sie nicht, es bei der Deinstallation zu entfernen.)Viele Systeme unterstützen dies auch mithilfe einzelner Dateien, wodurch das Hinzufügen und Entfernen von Konfigurationselementen vereinfacht wird, ohne dass Text an einer beliebigen Stelle in einer Datei abgelegt werden muss. (Es bietet Ihnen auch alle Kontroll- und Verantwortlichkeitsvorteile, die Sie von einem Paketmanager erhalten.) Einige Distributionen konfigurieren das
/etc/profile
Lesen aller übereinstimmenden Dateien/etc/profile.d/*.sh
.quelle
rc
Name eines Skripts von CTSSruncom
(Run Commands) ab, wurde jedoch seitdem um weitere Bedeutungen erweitert.profile.d
ist nicht in Bash eingebaut, es ist ein Haken, der normalerweise von (normalerweise der Basis der Distribution) bereitgestellt wird/etc/profile
. ;)Es ist niemals akzeptabel, die
/home
Struktur eines Benutzers über den Paketmanager zu ändern, es sei denn, diese Änderung ist der springende Punkt.Die wichtigsten Ansätze hierfür sind:
/etc/profile.d
. Auf einigen Linux-Systemen werden alle Skripte in diesem Verzeichnis vom Standard-Shell-Setup bezogen, sodass Sie die Variable dort sicher festlegen können.quelle
Frage Sollte der Installationsschritt eines Paketmanagers die Umgebung eines Benutzers ändern?
Antwort Nein. Es ist eine schlechte Idee, die Daten eines Benutzers zu ändern, in diesem Fall die .bashrc-Datei. Benutzerdaten sollten von einem Paketmanager als heilig angesehen werden.
Frage Sollte der Installationsschritt eines Paketmanagers den Benutzer einfach dazu auffordern, dies selbst zu tun?
Antwort Dies ist eine viel schmackhaftere Lösung, aber immer noch nicht ideal.
Ich denke, Sie sollten ein Wrapper-Shell-Skript erstellen, in dem Sie die erforderlichen Umgebungsvariablen festlegen und anschließend die ausführbare Datei ausführen können.
quelle
Sie vermissen den Wald vor lauter Bäumen. Natürlich ist es bequemer, die Umgebungsänderung für den Benutzer durchzuführen, aber es ist auch riskanter und etwas invasiver. Sie sollten das Beste aus beiden Welten kombinieren, indem Sie den Benutzer fragen, ob das Installationsprogramm seine ändern soll
.bashrc
, und ansonsten Anweisungen geben, wie er es selbst tun soll.quelle
Sie gehen davon aus, dass "Benutzer" Singular ist. Was passiert, wenn ich Tausende von Benutzern auf diesem System habe?
Sie gehen davon aus, dass Sie sogar das Home-Verzeichnis des Benutzers finden können. Wenn Benutzer über z. B. LDAP verwaltet werden, können Sie möglicherweise nicht einmal eine Liste aller gültigen Benutzer abrufen. Die Home-Verzeichnisse befinden sich möglicherweise nicht in / home. Sie können dynamisch aus dem Netzwerk bereitgestellt werden. Das Home-Verzeichnis des Benutzers ist möglicherweise verschlüsselt und der Schlüssel ist nicht zugänglich, solange er nicht angemeldet ist.
Es gibt keine Möglichkeit, dies in jeder möglichen Situation zuverlässig zu tun. Verwenden Sie den Mechanismus der Distribution, um Umgebungsvariablen für Benutzer festzulegen, die sich anmelden oder Shells erzeugen. Wenn das nicht funktioniert, schreiben Sie einen Wrapper. (Der Wrapper kann bei Bedarf auch eine Binärdatei sein, um das Argument in Kommentaren zu adressieren.)
quelle
Das Festlegen einer globalen Variablen in einem Paket ist akzeptabel, wenn es sich um eine Variable handelt, die von Ihrem eigenen Projekt definiert wurde (und das bedeutet, dass der Name des Projekts Teil des Variablennamens ist!). Selbst dann sollten Sie die
.bashrc
Datei des Benutzers nicht berühren, sondern /etc/profile.d ein Skript hinzufügen .quelle