bash findet file nicht?

_dp

New Member
Wie kann das denn sein.. Bin ich blind?

Code:
root@servername:/home/radon/ut2k4/arenamaster/System# ./ucc-bin [TAB TAB]
ucc-bin                       ucc-bin.FIX                   ucc-bin-linux-amd64           ucc-bin-linux-amd64_ORIGINAL  ucc-bin-macosx
root@servername:/home/radon/ut2k4/arenamaster/System# ./ucc-bin
-bash: ./ucc-bin: No such file or directory
root@servername:/home/radon/ut2k4/arenamaster/System#

File existiert: Jap, 100% positive.

Code:
-rwxr-xr-x  1 radon radon 14394132 Sep 15  2008 ucc-bin

Ausführrechte sehen gut aus... wtf? :confused: Was mach ich falsch?

//e: ach ja, Debian, aktuellstes von letzter Woche.
 
Last edited by a moderator:
Du versuchst ein 32bit Tool auf einem 64bit System auszuführen ohne die entsprechenden 32bit Libs installiert zu haben.
Entweder die Libs nachinstallieren oder mal mit der 64bit Variante versuchen, die ja im gleichen Verzeichnis zu liegen scheint.
 
hm, und da gibt es dann so eine doofe Fehlermeldung?

Hab jetzt die richtigen 32libs gefunden. (ia32-libs)

//e: Äh ja. genau die von dem post der vor meinem noch nicht da war :)
 
Zum Rausfinden der Datei, die da nicht gefunden wurde, eignet sich z.B. strace.
Gegen welche Libraries ein Binary gelinkt ist, erfährt man mit Hilfe von ld.
 
Code:
ucc-bin-linux-amd64

Anstatt jetzt sofort die ia32libs zu installieren, solltest du zuerst die 64-Bit-Version des Servers testen.

Der Befehlt file kann Auskunft geben, ob das Programm mit 32 oder 64 Bit läuft:
Code:
file ucc-bin-linux-amd64
Die Namensgebung lässt auf jeden Fall darauf schließen.

Die Bin direkt zu starten wird aber für ein weiteres Problem sorgen. Das Programm findet die Libs dann nicht.

Schau dir die ucc-bin oder ucc-bin.FIX an. Wahrscheinlich ist es die ucc-bin.FIX. Das sollte ein einfaches Shell-Script sein, dass vor dem Aufruf des Programms LD_LIBRARY_PATH exportiert.

Ansonsten kannst du auch selbst das Script schreiben:
Code:
export LD_LIBRARY_PATH=.
./ucc-bin-linux-amd64

Nicht immer ist der einfachste Weg der Beste. Wieso auf einem 64-Bittigen System einen Server im 32-Bit-Modus ausführen, wenn er auch nativ 64 Bit unterstützt. Wenn du noch andere Gameserver installieren willst, wirst du ohnehin nicht um die 32-Bit-Libs herum kommen. Die wenigsten haben ein 64-Bit-Kompilat.

EDIT:
Wie der Vorposter schon geschrieben hat, kann strace hilfreich sein. Das Tool zeigt die Syscalls an. Es lässt sich nur in Verbindung von ausführbaren Binärdateien nutzen. Shell-Scripts kann man z.B. damit nicht aufrufen, was auch irgendwie logisch ist.

Ein anderes Tool um zu prüfen, ob alle Libs vorhanden sind, ist ldd

Code:
ldd ucc-bin-linux-amd64 #ohne die Libs im lokalen Verzeichnis
LD_LIBRARY_PATH=. ldd ucc-bin-linux-amd64 #mit Libs im lokalen Verzeichnis

Wenn du z.B. mit strace sehen willst, was der Server so für Versuche macht um jede Art von Libs zu öffnen, kannst du stderr von strace auch in eine Datei umleiten. Dann kann man sich entspannt die Ausgabe ansehen, nachdem man den Server beendet hat.

Code:
strace ucc-bin-linux-amd64 PARAMETER_DES_GAMESERVERS 2> strace_log.txt #ohne Libs...
LD_LIBRARY_PATH=. strace ucc-bin-linux-amd64 PARAMETER_DES_GAMESERVERS 2> strace_log.txt #mit Libs...

Wenn du die Ausgaben mal vergleichst, wirst du auch feststellen, warum es unter Linux nicht so toll ist LD_LIBRARY_PATH zu verwenden. Die Entwickler der Gameserver lassen dem Anwender aber leider keine andere Wahl.
 
Last edited by a moderator:
Back
Top