adb "Erlaubnis verweigert", um eine "./configure"-Datei auszuführen

Ich muss eine configureDatei auf meinem Android-Telefon ausführen, daher denke ich, dass der beste Weg, dies zu tun, darin besteht, den adb shellBefehl zu verwenden.

Ich führe einen Android-Emulator auf einer Windows-7-Plattform aus und führe dort den adb shellBefehl in einem DOS-Fenster aus. Mit dem cdBefehl wechsle ich in das Verzeichnis, in dem sich meine configureDatei befindet, und führe dann den folgenden Befehl aus: ./configure. Ich erhalte folgenden Fehler:

./configure: permission denied

Also versuche ich, adb im Root-Modus mit auszuführen adb root- aber anscheinend ist mein Adb bereits im Root-Modus (Außerdem habe ich das Zeichen "#" vor jeder Zeile meiner Adb-Shell).

Ich habe auch versucht zu verwenden chmod, aber ich sehe keinen Unterschied vor und nach der Ausführung dieses Befehls ( ls -la), also liegt das Problem vielleicht hier (Wie kann ich den chmodBefehl ausführen?).

Vielleicht kann mir hier jemand bei meinem Problem helfen, und wenn Sie auch eine Erklärung haben, warum ich nicht die Berechtigung habe, meine configureDatei auszuführen, wäre das großartig.

Vielen Dank.

PS: Mein Ziel hier ist es, das net-snmp-Paket auf einer Android-Plattform zu verwenden, indem ich die Quellen dieses Projekts direkt auf der Plattform kompiliere.

Wo im Dateisystem des Android-Emulators befindet sich die Konfigurationsdatei? dh was ist der Pfad zu der Datei?
Der Pfad der Datei ist /sdcard/net-snmp-5.7.2/configure
chmod 0777 ./configureversuchen Sie das, dann versuchen Sie es auszuführen.
Das ist wahrscheinlich das Problem. /sdcardwird normalerweise mit dem noexecFlag in Android gemountet, sodass Sie keine Binärdateien daraus ausführen können. Ich würde empfehlen, es an einen anderen Ort zu verschieben ( /data/localwird oft für solche Dinge verwendet). Sehen Sie, ob das das Problem löst.
Kopieren Sie es auch in das /usr/local/tmpVerzeichnis (das gesamte net-snmp-5.7.2Verzeichnis in /sdcard.
Danke für deinen Kommentar, aber es funktioniert nicht. Vor chmod 0777 : "----rwxr-x [...] configure" und nach chmod 0777 : "----rwxr-x [...] configure". Aus diesem Grund sage ich, dass mein Problem möglicherweise beim Befehl "chmod" liegt.
@grattmandu03 Es liegt daran, dass es sich auf der SD-Karte befindet - SD-Karten unterstützen keine Dateiberechtigungen :)
OK richtig. Also habe ich versucht, das net-snmp-Verzeichnis in /data/local/tmp zu kopieren, dann habe ich direkt versucht, meine Konfigurationsdatei auszuführen, aber ich bekomme eine Berechtigung verweigert. Also verwende ich den Befehl "chmod 0777". Und jetzt habe ich etwas Seltsames, wenn ich meine Konfigurationsdatei erneut ausführe, erhalte ich "Datei nicht gefunden", aber ich kann diese Datei immer noch im Verzeichnis /data/local/tmp sehen. Was mache ich falsch??
Was ist der Inhalt des configureSkripts? Es sucht nach einer auszuführenden Datei.... Sind Sie sicher, dass Sie wissen, was Sie tun? Wofür configure? Diese Angaben fehlen in der Frage! :)
Die Datei „configure“ ist das Konfigurationsskript, das vom net-snmp-Quellenpaket bereitgestellt wird. Ich versuche, das net-snmp-Paket in ein Android-Telefon zu portieren. Im Moment verwende ich das busybox-Skript, um das Konfigurationsskript auszuführen, und es scheint zu funktionieren (ich habe nur einige Fehler, weil ein Linux-System nicht wie ein Android-System ist, aber das, wonach ich suche). Vielen Dank an euch alle.
Bauen Sie es auf der Linux-Box, nicht auf Android .... das hätten Sie von Anfang an sagen sollen! :)
Ja, das habe ich getan, aber ich denke, dass die Architektur zwischen einem Linux-System und einem Android-Telefon unterschiedlich ist, sodass ich das Linux-Ergebnis nicht direkt in meinem Android-Telefon verwenden kann. Übrigens, ich weiß, dass es einige Java-Bibliotheken gibt, um net-snmp zu verwenden, aber mein Chef möchte, dass die Originalquellen von net-snmp auf einer Android-Plattform kompiliert werden.
Schlüsselwörter Kreuzkompilierung unter Linux, die auf die ARM-Chipsatzunterstützung abzielen ...
So wie es jetzt aussieht und sich herausstellt, ist das eher eine Entwicklungsfrage! Abstimmung zum Schließen, da dies nicht zum Thema gehört.
@ t0mm13b Ich bin mir nicht ganz sicher, ob dies nicht zum Thema gehört, da es für Personen nützlich sein könnte, die eine Datei auf ihrem Gerät ausführen müssen, z. B. einen Root-Exploit.
@LiamW Offensichtlich hat das OP versucht, auf Android aufzubauen, indem es ein entwicklungsbezogenes configureSkript ausführte und insgesamt den falschen Ansatz verfolgte!
OK danke. Meine Frage hier war mehr darüber, wie ich ein Skript sh mit der Adb-Shell ausführen kann, als eine Entwicklungsfrage. Aber jetzt habe ich die Lösung: "/ sdcard ist mit dem noexec-Flag gemountet", also wenn eldarerathis oder Liam W ihren Kommentar in eine echte Antwort einfügen wollen, werde ich es validieren. Oder können Sie mir vielleicht erklären, wie ich meine Frage schließen kann?
@grattmandu03 habe ich schon ;)

Antworten (2)

Das liegt an 2 Dingen:

  1. Die Datei hat keine Ausführungsberechtigungen [UND]
  2. Die Datei kann keine Ausführungsberechtigungen erhalten, da sie sich auf der SD-Karte befindet. Das Dateisystem der SD-Karte kann Dateiberechtigungen akzeptieren, wird jedoch mit dem noexecFlag gemountet, wie in einem Kommentar angegeben. Dies stoppt die Ausführung von Dateien.

Lösung:

  1. Kopieren Sie das net-snmp-5.7.2Verzeichnis in das /data/local/tmpVerzeichnis als root.
  2. Legen Sie fest, dass die configureDatei ausführbar ist, indem Sie sie chmod 0777 /data/local/tmp/net-snmp-5.7.2/configureals root ausführen.
  3. Sie sollten jetzt in der Lage sein, das Konfigurationsskript auszuführen, indem Sie eingeben /data/local/tmp/net-snmp-5.7.2/configureund die Eingabetaste drücken.

Notiz

Dies sollte alles als Root-Benutzer erfolgen :)

Ich bekomme: /system/bin/sh: /data/local.../filename: No such file or directory.

Wie in den Kommentaren und der Antwort von Liam erläutert , liegt dies an dem noexecFlag, das das System beim Mounten der SD-Karte verwendet. Wenn es sich bei Ihrer configureDatei um ein Shell-Skript handelt (wie es normalerweise der Fall ist), können Sie es trotzdem austricksen, damit es ausgeführt wird:

cdin das Verzeichnis, wie Sie es oben beschrieben haben, und führen Sie dann aus sh configure.

shist der Shell-Interpreter, und diese Binärdatei sollte sich in befinden /system/bin, wo Dateien ausführbar sind . Wenn Sie Ihr Skript als erstes Argument übergeben, wird ein neuer Shell-Prozess geöffnet, der Ihr configureSkript ausführt.

Danke für deine Antwort. Das sh configuremacht den Trick.
Danke für die Bestätigung! Und froh, dass ich helfen konnte. Ich verwende diesen Trick von Zeit zu Zeit auf Linux/Unix-Rechnern :)