sonnenblen.de - Das unabhängige Sun User Forum
Betriebssysteme => Solaris => Thema gestartet von: socs am 02. Juli 2007, 15:09:50
-
Halllo zusammen,
ich will mir ein patchscript erstellen...bekomme aber immer einen Fehler.
Ich möchte einige patche auf mein system updaten...habe aber nicht die lust dazu alle einzeln einzutippen.
Die Patche liegen im Verzeichnis /var/update/patch1.tgz usw.
script
#!bin/bash
for i in *.tgz; do tar xzf $i; rm -f $i; done
esxupdate -n -r file:/var/update/ESX-patch1 update
esxupdate -n -r file:/var/update/ESX-patch2 update
#ende
Das script hat den Namen update und liegt im Verzeichnis /var/update
nach aufruf des script mit ./update bekomme ich immer den Fehler : bad interpreter: No such file or directory
Waran kann das denn liegen ??
-
Hi,
versuch mal das script mit folgendem zu beginnen.
#!/bin/bash
Starting Off With a Sha-Bang
http://tldp.org/LDP/abs/html/sha-bang.html (http://tldp.org/LDP/abs/html/sha-bang.html)
ct,
-
oh hab mich verschrieben habe natürlich im Script #!/bin/bash
-
oh hab mich verschrieben habe natürlich im Script #!/bin/bash
Bei mir (Solaris 9, SPARC) war die Bash nicht standardmäßig mitinstalliert (musste sie manuell nachinstallieren) und dann war sie in /usr/bin/bash anstatt in /bin/bash
Teste also mal, ob die Bash bei dir wirklich als /bin/bash vorhanden ist...
-
oh hab mich verschrieben habe natürlich im Script #!/bin/bash
Bei mir (Solaris 9, SPARC) war die Bash nicht standardmäßig mitinstalliert (musste sie manuell nachinstallieren) und dann war sie in /usr/bin/bash anstatt in /bin/bash
Teste also mal, ob die Bash bei dir wirklich als /bin/bash vorhanden ist...
root@******[/]#which bash
/usr/bin/bash
Hab das auf einem Solaris 10 Server eingegeben und afair war der Pfad unter 9 auch so.
-
Moin,
welche Solaris Version benutzt du denn?
Der Fehler sagt eindeutig, dass dein Script bereits beim Start von /bin/bash scheitert (warum ueberhaupt bash statt sh?). Schau mal nach ob es /bin/bash auf deinem System gibt und ob sich die starten laesst. Sollte das der Fall sein, so schau mal nach ob in der ersten Zeile bei dir wirklich nur ein #!/bin/bash steht (nicht das da am Ende noch ein CTRL-M oder aehnliches folgt...).
Selbst wenn du das in den Griff bekommen hast, so wird dein Script trotzdem nicht klappen weil zu "tar xzf" benutzt und Solaris tar keine z Option kennt (die gibt es nur beim GNU tar). Also entweder hier gtar (GNU tar) verwenden oder aus dem "tar xzf" zwei Befehle machen ("gzcat filename.tar.gz | tar xf -").
Als naechstes loescht du einfach die Einagbedateien ohne zu Wissen ob das Auspacken geklappt hat (und wie gerade erwaehnt wird das eh nicht klappen). Besser: den rm Befehl nur ausfuehren, wenn der tar geklappt hat...
#!/bin/sh
for i in *.tgz; do
gzcat $i | tar xf - && rm -f $i
done
esxupdate -n -r file:/var/update/ESX-patch1 update
esxupdate -n -r file:/var/update/ESX-patch2 update
Tschau,
Drusus.
-
Hab das auf einem Solaris 10 Server eingegeben und afair war der Pfad unter 9 auch so.
Naja, aber beim Kollegen socs scheint es ja schon beim Aufrufen der Bash zu klemmen, denn schliesslich bekommt er ja den Fehler "bad interpreter: No such file or directory", deswegen wollte ich ihn mal testen lassen, obs bei ihm wirklich ne bash unter /bin gibt.
Stimme aber auch Drusus zu, könnte evtl. auch ein ^M oder so am Zeilenende sein - sind gemein, die Dinger (vor allem, wenn vi & Co. sie nicht anzeigen...)
Gruss,
Alex
-
Stimme aber auch Drusus zu, könnte evtl. auch ein ^M oder so am Zeilenende sein - sind gemein, die Dinger (vor allem, wenn vi & Co. sie nicht anzeigen...)
Der vi-Editor zeigt die ^M sehr wohl an.
Andreas
-
Hi,
als ich meine erste antwort los lies, wollte ich ebenfalls schon anmerken, dass die bash im /usr/bin verzeichnis liegt. ich habe dann nochmal bei mir auf zwei kisten nachgesehen. einmal sol10 und einmal sol9. und siehe da:
odin~$ which bash
/usr/bin/bash
odin~$ /bin/bash
odin~$ exit
exit
odin~$
das bringt mich zu der frage: wie bekomme ich raus ob /bin/bash nicht ein 'hardlink' ist?
ct,
-
das bringt mich zu der frage: wie bekomme ich raus ob /bin/bash nicht ein 'hardlink' ist?
ls zeigt ja an, wieviele Links auf einen Inode existieren (dritte Spalte), mit der Option -i zeigt ls sogar noch die Nummer des Inodes an:
# ls -li /usr/bin/bash
24896 -r-xr-xr-x 1 root bin 578964 Mar 2 2002 /usr/bin/bash
# ls -li /bin/bash
24896 -r-xr-xr-x 1 root bin 578964 Mar 2 2002 /bin/bash
#
Also haben den gleichen Inode in /bin und /usr/bin, aber angeblich nur einen Verzeichniseintrag, der auf diesen Inode 24896 zeigt.
Na, wer kann diesen scheinbaren Widerspruch erklären? :-)
-
Also haben den gleichen Inode in /bin und /usr/bin, aber angeblich nur einen Verzeichniseintrag, der auf diesen Inode 24896 zeigt.
Na, wer kann diesen scheinbaren Widerspruch erklären? :-)
Ich glaube du möchtest im Singleuser mal ein fsck auf deine Platte loslassen.
Andi
-
Der vi-Editor zeigt die ^M sehr wohl an.
Andreas
Kann ich so nicht bestätigen...
Hatte ich (unter Sol9/Sparc) schon öfters, dass ich im vi
:%s/^M//g
(wobei ^M == CRTL-V, CTRL-M ist) einmal ohne Fehlermeldung ausführen konnte, also müssten ja ^M Characters da gewesen sein, sehe ich das richtig?
-
Dann mach mal folgendes:
echo "huhu" | unis2dos > /tmp/xxx ; vi /tmp/xxx
Hier, Sol9/SPARC, sehe ich dann sehr wohl das ^M im vi Editor.
Geg. spielt das Terminal noch eine Rolle. Ich benutze dtterm unter CDE.
Andi
-
Dann mach mal folgendes:
echo "huhu" | unis2dos > /tmp/xxx ; vi /tmp/xxx
Hier, Sol9/SPARC, sehe ich dann sehr wohl das ^M im vi Editor.
Geg. spielt das Terminal noch eine Rolle. Ich benutze dtterm unter CDE.
Igitt, nen grafischen Desktop auf ner Sun??
Headless rult
(jaja, ich weiss, da kann man dann trotzdem mit xdmcp usw. remote einloggen etc, war auch nur ein Joke ;))
Ich wollte das mit dem ^M halt nur mal dem Kollegen socs sagen, er war/ist vermutlich um jede Hilfe froh (wär ich zumindest in seiner Situation)...
Gruss,
Alex
-
Also haben den gleichen Inode in /bin und /usr/bin, aber angeblich nur einen Verzeichniseintrag, der auf diesen Inode 24896 zeigt.
Na, wer kann diesen scheinbaren Widerspruch erklären? :-)
Ich glaube du möchtest im Singleuser mal ein fsck auf deine Platte loslassen.
Andi
Entweder muss ich meinen Ironiedetektor neu justieren oder du möchtest mal folgenden Befehl absetzen:
ls -l /bin
Das sollte dir klar machen, warum diese scheinbare Unmöglichkeit auf jedem Solaris-System existiert und warum man deswegen keinen fsck machen muss.
:-)
-
Treffer, versenkt *g*
-
ok, hab ich verstanden. /bin ist ein link auf /usr/bin. warum aber gibt es /sbin und /usr/sbin?
ct,
-
ok, hab ich verstanden. /bin ist ein link auf /usr/bin. warum aber gibt es /sbin und /usr/sbin?
Das kommt AFAIK noch aus den Zeiten, wo / und /usr auf getrennten Dateisystemen lagen. Das Root-Dateisystem muss alles enthalten, was zum Booten nötig ist. Die paar Binaries in /sbin, eine minimale Shell, mount und fsck, waren deswegen alle statisch gelinkt. Und gleichzeitig läßt sich durch einen Symlink auch das metaphysische Problem lösen, ob Programme nach /bin oder /usr/bin gehören. :-)