Am Di, 2004-04-27 um 23.12 schrieb Christian Boltz:
Hallo Marcus, hallo Leute,
Am Dienstag, 27. April 2004 18:33 schrieb Marcus Habermehl:
Am Mo, 2004-04-26 um 22.40 schrieb Christian Boltz:
Am Montag, 26. April 2004 07:23 schrieb Marcus Habermehl: [Wo wird $PATH gesetzt?]
Da ich mit grep PATH /etc/profile gesucht habe, wurde mir die einzelnen Pfade natürlich nicht angezeigt. Ich bin einfach davon ausgegangen, dass die alle in einer Zeile aufgelistet werden.
Jetzt muss ich mir nur noch überlegen, wie ich einen neuen Pfad per RPM hinzufügen kann.
Zeige eine Meldung an, die die User darum bittet ;-)
Bringt nichts, wenn das RPM über ein GUI installiert wird. Außer bei KPackage vielleicht.
In YaST sind mir auch schon Meldungen entgegengekommen...
Ich dachte, dass die speziell in YaST2 eingebunden wurden, oder so ähnlich. Also meinst du, wenn ich ein echo bla bla einsetze, öffnet sich auch bei YaST2 ein Meldungsfenster?
Oder lege schlicht Symlinks in /usr/bin an, die auf Dein Programm verweisen - sollte die sauberste Lösung sein.
Habe ich mir am Anfang auch überlegt. Aber irgendwie begeistert mich die Sache nicht.
Was spricht dagegen? Anders gefragt: Über wie viele Symlinks reden wir? Einen? Zehn? Hundert?
Ich hatte hier einen WM, der hat fast zehn Dateien nach /usr/local/bin installiert. Bei XFce4 wird sich auch einiges ansammeln. Mir geht es halt darum, dass ich gerne einheitliche spec Files hätte. Und bei manchen Paketen wäre das dann zu viele Links. Zumal ich die Variante mit $PATH doch stilvoller finde. Irgendwo.
BTW: Das scriptgesteuerte "Bearbeiten" einer Datei während der RPM-Installation solltest Du vermeiden. Davon abgesehen, dass es IMHO etwas nervig ist, hast Du hinterher das Problem, bei der Deinstallation Deine Einträge wieder zu löschen...
Warum wäre das nicht so gut, und wäre es nervig? Der User/Admin bekommt davon doch nichts mit.
_Genau das_ empfinde ich als nervig ;-)
Dann dürftest du dir aber auch keine SuSE-RPMs installieren. Ich denke mal, dass da auch das Eine oder Andere geändert wird.
Außer das Skript löscht die Datei, anstatt sie zu bearbeiten.
Das wäre natürlich der "worst case".
Ja. Vor allem dann, wenn es die /etc/ld.so.conf trifft. Wie bei mir vorhin.
Aber wie in der Antwort auf Davids Mail habe ich eine Lösung gefunden, die bisher funktioniert.
mv /etc/profile /etc/profile.tmp
besser cp, damit die /etc/profile garantiert auch hinterher existiert.
Mögliche Gründe für einen Fehler wären beispielsweise: - falls sed nicht installiert sein sollte, auch wenn es unwahrscheinlich ist, wird die Datei nicht wieder zurückkopiert. - falls "zufällig" (man murphy ;-) die Installation an genau dieser Stelle abgebrochen wird, wird die Datei ebenfalls nicht mehr zurückkopiert.
Da bin ich gerade dabei, Sicherungen einzubauen. Aber an meiner /etc/ld.so.conf (s. o.) sieht man, dass das noch nicht läuft. ;-)
cat /etc/profile.tmp | sed '/openwin/ a\ /opt/xfce4/bin \\' > /etc/profile
Erstens: Useless use of cat!
Jetzt, wo du es sagst. Ich benutze aber immer cat. Auch wenn ich mit grep eine Datei durchsuchen will. Keine Ahnung warum. Ich glaube, dass ich das mal am Anfang irgendwo gelesen habe, und dann hat es sich ins Hirn eingebrannt.
rm /etc/bash.bashrc.tmp /etc/profile.tmp
Zweitens: Besser wäre IMHO, die beiden Befehle mit einer UND-Verknüpfung zu verketten, damit das mv nur ausgeführt wird, wenn sed fehlerfrei lief:
sed '[...]' < /etc/profile > /etc/profile.tmp && mv /etc/profile.tmp /etc/profile
Dadurch wird der mv-Befehl nur ausgeführt, wenn sed erfolgreich war.
Daran habe ich auch schon gedacht. Jetzt, wo ich das alles lese, habe ich das Gefühl, dass ich aus der Shell wieder raus gekommen bin. :-(
Drittens: Der sed-Befehl beinhaltet ein gewisses Risiko. Derzeit kommt "openwin" zwar nur einmal in /etc/profile vor, aber das könnte sich jederzeit ändern und Dein Befehl würde Mist bauen...
Da hast du natürlich auch recht. Allerdings habe ich vor auf die .local Dateien auszuweichen. Aber natürlich könnte auch da etwas mehrfach vorkommen. Man weiß ja nie, was ein gelangweilter Admin rumwerkelt. ;-) Ich habe mir überlegt, einfach nur diese Zeile in die /etc/profile.local einzufügen. export PATH="$PATH:/opt/xfce4/bin" Beim Löschen brauche ich dann nur nach exakt dieser Zeile zu suchen und kann die dann ohne Probleme löschen. Außer ich baue Mist beim Skript.
Viertens: statt /etc/profile.tmp solltest Du einen "unwahrscheinlicheren" Namen verwenden, z. B. /etc/profile.tmp_Name-deines-Pakets_irgendwas-kryptisches (für letzteres sollte das Abstauben der Tastatur reichen ;-) Die Optimallösung wäre übrigens die Verwendung von mktemp.
mktemp habe ich noch nie verwendet. Den ersten Zeilen der Manpage hört sich das aber recht interessant an. Mir ist auch der Gedanke gekommen, die Sicherungen nach /tmp zu kopieren. Da ist die Gefahr noch geringer, dass ich etwas überschreibe.
Fünftens: /etc/profile wird bei einem Update von aaa_base überschrieben, Du solltest Dich besser an die /etc/profile.local halten, die wird garantiert nicht angetastet.
s. o.
Das Verschieben ist vielleicht unnötig. Abe als ich es mal ohne probiert habe, hatte ich dann eine leere Datei.
Glaube mir: Es ist nicht unnötig, das Resultat "leere Datei" kommt fast immer.
Wahr für wahr. *heul* Ich könnt immer noch wegen meiner ld.so.conf schreien. [...]
Ich denke, nach der Lektüre dieser Mail kannst Du Dir denken, warum ich vom ungefragten, scriptgesteuerten Modifizieren einer Datei nichts halte...
Ja. Vor allem die Fehlerquellen sind ja eigentlich gewaltig. Wenn man da nicht wirklich aufpasst, hat man dann ein Windows-Setup. ;-)
PS: Gegenvorschlag, wenn es unbedingt scriptgesteuert laufen soll: - Installation - echo ' PATH="/opt/xfce4/bin:$PATH" # added by xfce-installation export PATH # added by xfce-installation ' >> /etc/profile.local - Deinstallation - grep -v "# added by xfce-installation" \ /etc/profile.local > /etc/profile.local.tmp && \ mv /etc/profile.local.tmp /etc/profile.local Statt "added by xfce-installation" kannst Du natürlich jeden anderen Kommentar verwenden, aber er sollte lang genug sein, um nicht zufällig an anderer Stelle wieder aufzutauchen.
Muss ich mir mal durch den Kopf gehen lassen. Die Idee ist eigentlich alles andere als verkehrt. Gruß Marcus