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...
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?
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 ;-)
Außer das Skript löscht die Datei, anstatt sie zu bearbeiten.
Das wäre natürlich der "worst case".
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.
cat /etc/profile.tmp | sed '/openwin/ a\ /opt/xfce4/bin \\' > /etc/profile
Erstens: Useless use of cat!
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. 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... 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. 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.
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.
Für das Lösche habe ich mir in %postun folgendes eingetragen.
mv /etc/profile /etc/profile.tmp cat /etc/profile.tmp | sed '/\/opt\/xfce4\/bin/ d' > /etc/profile rm /etc/bash.bashrc.tmp /etc/profile.tmp
Grundsätzlich gelten bezüglich des Programmierstils meine obigen Vorschläge. Allerdings stört mich der sed-Befehl: Es werden alle Zeilen gelöscht, die /opt/xfce4/bin enthalten. In der von SuSE gelieferten Datei kommt dieser Text nicht vor, aber mir persönlich wäre das Risiko zu groß, dass zuviel erwischt wird (und wehe, $admin findet heraus, dass Dein Paket schuld war...) Kurzfassung: Ganz so einfach, wie man zuerst denkt, ist es nicht ;-) Ich denke, nach der Lektüre dieser Mail kannst Du Dir denken, warum ich vom ungefragten, scriptgesteuerten Modifizieren einer Datei nichts halte... Gruß Christian Boltz 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. -- never touch a running system ----> for windows: never touch the keyboard of a running system