Systemweite Konfiguration

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
olfibits
User
Beiträge: 7
Registriert: Montag 1. Januar 2018, 21:53

Hallo zusammen,

dieses Problem hat zwar nicht so viel direkt mit Python zu tun, trotzdem die Frage mal hier: momentan arbeite ich an einem Python-Projekt, nur bin ich mir momentan noch nicht ganz im Klaren, wie ich für Linux und für Mac systemweite Konfigurationen speichern kann. Für Linux habe ich /etc als mögliche Lösung gefunden, nur hat der normale User da keine Schreibrechte.
Wie machen es denn Frameworks wie Qt, wenn systemweite Settings gesetzt werden sollen? Irgendwie müssen die ja auch irgendwo landen. Gibt es da irgendeine Lösung oder bleibt mir nichts anderes übrig, als z.B. für Linux bei der Installation ein sudo-Skript ausführen zu lassen, dass in /etc einen config-Ordner erstellt und für alle in diesem Ordner Lese- und Schreibrechte gewährt?

Vielen Dank schonmal für eure Ideen. :-)
Benutzeravatar
__blackjack__
User
Beiträge: 13082
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@olfibits: Ich sehe das Problem gerade irgendwie nicht. Natürlich hat für eine systemweite Konfiguration kein normaler Benutzer die Rechte. Und warum willst Du die bei deinem Programm jedem geben? Dann könnte ja jeder Benutzer Änderungen an der Konfiguration vornehmen, die dann auch für *mich* gelten. Das ist ja nun irgendwie nicht der Sinn des ganzen.

Um etwas systemweit zu installieren, brauchst Du sowieso schon die entsprechenden Rechte, also auch kein zusätzliches sudo-Skript um Konfiguration unter `/etc/` zu erstellen. Und wie schon gesagt, sollte da kein normaler Benutzer dann Schreibrechte drauf bekommen. Da gehört systemweite Konfiguration hin, die vom Systemadministrator für alle angepasst werden kann. Was Benutzer ändern können, gehört in deren Heimatverzeichnis in die entsprechenden Verzeichnisse.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Unter dem Mac liegen solche Einstellungen auch gerne unter ~/Library und dann zb application Support oder Preferences oder so. Die Klasse NSUserDefaults erlaubt einem, da Schlüssel/Werte Paare anzulegen.

Wahrscheinlich ist der Ort für systemweite Einstellungen dann /Library, zur sinnhaftigkeit sagte BJ ja schon was.
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Ich bin mir auch gerade unsicher, ob es passt, aber ich kann mal erzählen, was ich gemacht habe. Ich hatte vor einiger Zeit mal eine vergleichbare Anfrage gestellt und letztlich kann man Konfiguration über zwei Wege realisieren, ein ini file, wozu Python ein Modul hat, dass die files lesen kann oder aber ein Python-Skript, was importiert wird und dann die Konfiguration liefert. In php würde man so etwas m. E. gerne machen, in Python hatte man mir seinerzeit zur ini-Lösung geraten.

Ich habe mich für ein Python-Skript entschieden, dass ich als Modul settings2 (2, um Namenskonflikte in Skripten zu vermeiden) installiert und jetzt überall in meinen Skripten importiere und verwende. Letztlich wird von da ein dictionary eingebunden, was Pfadangaben enthält. Ich habe diesen Monat meine Software migrieren müssen und die Pfadangaben haben sich dadurch geändert. Wenn so etwas noch mal passiert, kopiere ich jetzt meine Daten rüber, ändere die Pfade in settings2 und installiere alle Tools: Fertig. Für mich ist relevant, dass die Tools laufen, ich habe keine "Kunden", die selbst Änderungen an den Pfaden vornehmen sollen.

Wenn ich das noch mal machen müsste, dann würde ich wahrscheinlich statt des Wörterbuchs eine Klasse basteln, weil ich dann über Dekoratoren bzw. Methoden noch Deprecation warnings bzw. zugehörige Funktionalität unterbringen könnte. Also, wenn es mal eine dritte Version der Software gibt, dann ist das mit einer Klasse realisiert.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

@olfibits: eine systemweite Konfiguration legst Du sinnvollerweise irgendwo an, wo außer dem Admin keiner dran kommt. Je nach OS liegt die an unterschiedlichen Stellen und wird üblicherweise auch nur lesend genutzt. Außer der Admin greift ein. Dann könnte eine weitere Konfigurationsdatei im Homeverzeichnis des Users liegen (oder im Library-Verzeichnis) sowie im dem Verzeichnis, wo das Programm selbst läuft. Gesucht werden diese Dateien in umgekehrter Reihenfolge. Oder es werden alle vorhandenen gelesen, so dass benutzerspezifisch systemweite Vorgaben anpassbar sind. Wobei ein Programm auch einschränken könnte, welche Einstellungen anpassbar sind. Da sind viele Möglichkeiten denkbar.
Antworten