[Gelöst] Fritzbox ignoriert eigenes ps - Busybox startet stattdessen

molfi

Neuer User
Mitglied seit
17 Okt 2006
Beiträge
142
Punkte für Reaktionen
0
Punkte
16
Hallo.

In meinem Freetz Image habe ich /bin/ps->busybox gelöscht und stattdessen ein vorkompiliertes ps binary dort hineingelegt.

Wenn ich es in /bin mittels ./ps aufrufe funktioniert es einwandfrei.
Rufe ich es allerdings mittels ps auf, startet stattdessen die Busybox mit dem einkompilierten ps.

"Find / -name ps" findet allerdings nur das von mir bereitgestellte /bin/ps.

PATH beinhaltet auf jeden Fall /bin. Ein "strace -o trace ps" hilft nicht, da hierbei merkwürdigerweise doch mein vorkompiliertes ps ausgeführt wird, ... merkwürdig.

Weiß jemand, warum beim Aufruf von ps immer noch die Busybox ausgeführt wird? Gibts da irgendeine Konfigurationsdatei? Oder muss ich die Busybox config anpassen (ps entfernen), bevor das Image erstellt wird?


Dank und Gruß
molfi
 
Zuletzt bearbeitet:
Wenn du das BB-ps deaktivierst (geht das überhaupt?) dann sollte wirklich deins genutzt werdne. Ansonstne liegt die Antwort tatsächlich an der BB an sich, schau halt mal ein bisschen, dann findest du sachen wie "multi-call-binary" und ähnliche Konstrukte.

Alternativ kannst du eine andere Shell nutzen (bash bietet sich an), dann sollte dein "ps" tatsächlich genutzt werden.
 
Silent-Tears, ich habe gedacht, dass man ps rauspatchen kann.

Habs kurzerhand mal mittels make busybox-menuconfig entsprechend konfiguriert und das busybox Binary auf der Fritzbox ersetzt.

Nun wirft der Befehl ps folgende Fehlermeldung aus:
Code:
/bin # ps
ps: applet not found
/bin #

Google hat leider noch nichts Brauchbares zu Tage gefördert.

Hat jemand evtl noch eine Idee?

Gruß
molfi
 
Ruf es mal mit "/bin/ps" auf.
 
Jo, das klappt

Code:
/bin # /bin/ps --help
********* simple selection *********  ********* selection by list *********
-A all processes                      -C by command name
-N negate selection                   -G by real group ID (supports names)
-a all w/ tty except session leaders  -U by real user ID (supports names)
-d all except session leaders         -g by session OR by effective group name
-e all processes                      -p by process ID
T  all processes on this terminal     -s processes in the sessions given
a  all w/ tty, including other users  -t by tty
g  OBSOLETE -- DO NOT USE             -u by effective user ID (supports names)
r  only running processes             U  processes for specified users
x  processes w/o controlling ttys     t  by tty
*********** output format **********  *********** long options ***********
-o,o user-defined  -f full            --Group --User --pid --cols --ppid
-j,j job control   s  signal          --group --user --sid --rows --info
-O,O preloaded -o  v  virtual memory  --cumulative --format --deselect
-l,l long          u  user-oriented   --sort --tty --forest --version
-F   extra full    X  registers       --heading --no-heading --context
                    ********* misc options *********
-V,V  show version      L  list format codes  f  ASCII art forest
-m,m,-L,-T,H  threads   S  children in sum    -y change -l format
-M,Z  security data     c  true command name  -c scheduling class
-w,w  wide output       n  numeric WCHAN,UID  -H process hierarchy
/bin #

Nur ein einfaches ps will einfach nicht.

Jetzt reichen meine Linuxkenntnisse einfach nicht weit genug, um das zu verstehen.


Dank und Gruß
molfi
 
Wiederum eine "Besonderheit" der BB. Wie ich oben schon schrieb.
 
Anscheinend versucht die Shell, ps als Applet und nicht als externes Programm aufzurufen, sogar nachdem es aus der Konfiguration entfernt ist. Vielleicht hat das auch nicht ganz geklappt und Du solltest noch make busybox-dirclean ausführen.
Beim strace dagegen wird das externe Programm aufgerufen, schon weil strace keinen Bezug zur Busybox und deren Applets hat. Du könntest "strace sh -c ps" ausführen, um die Shell dazu zu bringen, ps auszuführen.
 
Danke Silent-Teras für den Tipp mit dem multiple-binary.
RalfFriedl, deine Einschätzung bzgl der Applets war richtig.


Hierin liegt der Schlüssel zum Erfolg:
make busybox-menuconfig -> Busybox Settings -> General Configuration -> uncheck exec prefers applets

Config speichern und make busybox-precompiled ausführen.

Dann die Busybox ersetzen auf der Fritzbox:
Code:
/bin # ps
 PID TTY          TIME CMD
1809 pts/1    00:00:00 sh
3474 pts/1    00:00:00 ps
/bin #


Erklärung der Funktion:
CONFIG_FEATURE_PREFER_APPLETS: This is an experimental option which directs applets about to call 'exec' to try and find an applicable busybox applet before searching the PATH. This is typically done by exec'ing /proc/self/exe. This may affect shell, find -exec, xargs and similar applets. They will use applets even if /bin/<applet> -> busybox link is missing (or is not a link to busybox). However, this causes problems in chroot jails without mounted /proc and with ps/top (command name can be shown as 'exe' for applets started this way).

Und tatsächlich, wird /proc/self/exe auf /bin/busybox geleitet.


Die neue ps funktioniert also soweit ganz gut.

Die Links zur busybox werden auch weiterhin brav geschrieben. Somit denke ich werden auch alle nötigen Softlinks weiterhin gesetzt im Image.

Mir stellt sich jedoch nun eine Frage:
Ob es wohl jetzt nicht absehbare Auswirkungen gibt mit dem neuen ps binary? ... Ich könnte mir denken, dass irgend eine Funktionalität im Image evtl. auf dieses beschränkte ps binary der busybox bestehen könnte und nicht mit dem neuen ps binary zusammenarbeitet.


Was sagen die anderen dazu? Hat da jemand evtl eine Einschätzung parat?

Dank und Gruß
molfi
 
Daß die Shell ps als Applet ausführt, wenn PREFER_APPLETS gesetzt ist, ist klar. Aber wenn ps nicht als Applet ausgewählt ist, dann sollte die Shell eben auch nicht versuchen, ein nicht vorhandenes ps Applet zu starten. Hattest Du mal versucht, mit der Konfiguration aus Beitrag #3 die Busybox komplett neu zu erstellen?
 
Hallo RalfFriedl,

Stimmt, das Verhalten ist schon sehr merkwürdig, ist mir zu der späten Stunde gar nicht mehr aufgefallen ;-)
Und: Nein, ich habe das busybox natürlich nicht komplett neu erstellen lassen.

Nach einem
make busybox-clean && make busybox-dirclean && make busybox-menuconfig
habe ich die Konfiguration dahingehend angepasst:
Code:
CONFIG_FEATURE_PREFER_APPLETS=y
# CONFIG_PS is not set
und mit make busybox-precompiled neu erstellt.

Nun scheint es wirklich richtig zu funktionieren, wenn ich mch nicht irre.
Code:
/bin # ls -la p*
lrwxrwxrwx    1 wwwrun   1000            7 Feb  2 17:45 pidof -> busybox
lrwxrwxrwx    1 wwwrun   1000            7 Feb  2 17:45 ping -> busybox
-rwxrwxrwx    1 root     root         3991 Jul 27  2009 prepare_fwupgrade
-rwxrwxrwx    1 root     root       202296 Feb  7 00:30 ps
lrwxrwxrwx    1 wwwrun   1000            7 Feb  2 17:45 pwd -> busybox
/bin # ls -la b*
-rwxrwxrwx    1 root     root       581780 Feb  7 11:07 busybox
-rwxrwxrwx    1 root     root       581996 Feb  7 01:47 busybox_applet_not_preference
-rwxrwxrwx    1 root     root       584876 Feb  1 22:44 busybox_org
/bin # ps
 PID TTY          TIME CMD
1562 pts/0    00:00:00 sh
2747 pts/0    00:00:00 ps
/bin # busybox ps
ps: applet not found
/bin #


Ob solch ein Setup wohl negative Seiteneffekte mit sich bringt?

Dank und Gruß
molfi
 
Das spricht dafür, daß die Busybox nicht ganz sauber neu erstellt wird, wenn man da etwas an der Konfiguration ändert.

Bezieht sich die Frage nach den Seiteneffekten auf das Ersetzen von ps oder das Abschalten von PREFER_APPLETS? Ich gehe nicht davon aus, daß es zu Problemen führt. Wenn doch, wirst Du es merken.
 
Die bezieht sich eigentlich auf beide Konfigurationsänderungen.

Aber Du hast recht. Ich werde es schon merken.
Und ich habe auch schon festgestellt, dass etwas nicht läuft.

AVM WebIF und Freetz WebIF scheinen keine Probleme damit zu haben. Auch nicht die ganzen AVM eigenen Binaries sowie Freetzs packages.

Leider scheint der LCR und das fritzload Paket Schwierigkeiten mit dem neuen ps zu haben. LCR erkennt seine eigenen Prozesse nicht mehr und fritzload startet nicht mehr, weil es LCR nicht als gestartet erkennt.

Ok, aber dies sind Side effects losgelöst von AVM und Freetz.
Generell würd ich sagen, funktioniert das so. Für das jetzige Problem such ich nach anderen Lösungen.


Danke nochmal für die Hilfe

Gruß
molfi
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.