Hallo, Am Wed, 28 Apr 2004, Marcus Habermehl schrieb:
Am Di, 2004-04-27 um 23.12 schrieb Christian Boltz:
Am Dienstag, 27. April 2004 18:33 schrieb Marcus Habermehl: [..] 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.
Find ich ok. Man muss halt einen Kompromiss zwischen symlinks und nem aufgeblaehten PATH finden. Ich finde, so ab 15-20 Dateien lohnt sich die Aufnahme in PATH.
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.
Die ld.so.conf kann man ja nun wirklich einfach neu erstellen. Oder nachinstallieren. Oder sich eine mailen lassen. Ich arbeite hier uebrigens lieber mit nem wrapper-script, dass dann LD_LIBRARY_PATH setzt, so z.B. fuer mein "sX" script (startX), das dann fuer WindowMaker (meinem normalen WM, sX wird dann als swmaker aufgerufen, oder auch als sX wmaker) folgendes macht: ==== function conf_wmaker() { WMVERSION="0.80" WMROOT="/opt/WMaker" export GNUSTEP_USER_ROOT="~/GNUstep-${WMVERSION}" export GNUSTEP_LOCAL_ROOT="$WMROOT" export GNUSTEP_SYSTEM_ROOT="/opt/WMaker/GNUstep" LD_LIBRARY_PATH="${WMROOT}/lib:$LD_LIBRARY_PATH" LD_LIBRARY_PATH=`echo $LD_LIBRARY_PATH | sed 's/^://;s/:$//'` export LD_LIBRARY_PATH export PATH="${WMROOT}/bin:$PATH" export MANPATH="${WMROOT}/man:$MANPATH" if ! test -d ~/GNUstep || test -L ~/GNUstep; then if test "x`readlink ~/GNUstep`" != "x${HOME}/GNUstep-${WMVERSION}" then rm ~/GNUstep ln -s ~/GNUstep-${WMVERSION} ~/GNUstep fi fi } ==== Analoges mache ich auch mit anderen Sachen, sowas macht z.B. das Mozilla-Startscript, IIRC das startkde-script u.v.a.m...
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.
ACK.
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.
=> help trap
Da bin ich gerade dabei, Sicherungen einzubauen. Aber an meiner /etc/ld.so.conf (s. o.) sieht man, dass das noch nicht läuft. ;-)
==== CONFIG="/etc/foo" TMPFILE="`mktemp \"/tmp/${CONFIG}.$$.XXXXXX\"`" || exit 1 trap rm -f "${TMPFILE}" 1 2 3 13 14 15 EXIT sed 's/foo/bar/' < "$CONFIG" > "${TMPFILE}" \ && mv "${TMPFILE}" "${CONFIG}" ==== Das sollte hinreichend sicher sein.
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.
*tsk* Ich glaub, wir muessen dich mal einer Gehirnwaesche unterziehen...
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...
ACK. Sowas muss man sehr gut testen. Bzw. das Muster auf die komplette Zeile erweitern, und mittels ^ und $ verankern.
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. ;-)
Solltest du. s.o. und meine anderen Mails.
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.
Jep. Besser waere aber u.U. ein wrapper-script in /usr/local/bin, das die diversen Variablen setzt und dann xfce aufruft (s.o.).
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.
s.o.
Wahr für wahr. *heul* Ich könnt immer noch wegen meiner ld.so.conf schreien.
Naja, die laesst sich ja wirklich einfach leicht wiederherstellen. Zur Not per rpm2cpio glibc-2...rpm | bunzip -c | cpio -i /etc/ld.so.conf (Disclaimer: die Syntax von cpio hab ich jetzt nicht im Kopf!) -dnh -- If you haven't got time to RTFM, you haven't got time to whine on this mailing list.