Software und Binaries über USB-Stick laden

J

Joe3

Guest
Edit DM41:
abgetrennt aus dem HOWTO-Thread.
---


Hallo,
ich bin seit heute neu in diesem Forum und möchte über meine Softwaremodifikation berichten.
Die neuen FRITZ!Boxen besitzen eine USB-Anschluss. Nun bietet es sich an, Binaries, Scripte oder Zusatzsoftware nicht von einem Web-Server im lokalen LAN per "wget" zu laden, sonder von einem USB-Stick, der an die FRITZ!Box angesteckt wird. Dazu müssen nicht einmal Software oder Binaries auf die FRITZ!Box kopiert werden, sonder es können auch Links angelegt werden, die von der Fritz!Box auf Dateien auf dem USB-Stick verweisen.
Dies vermindert das Risiko, dass der Speicherplatz auf der FRITZ!Box zuläuft.
Die Erweiterungen in der "/var/flash/debug.cfg" können minimiert werden, da die Softwareerweiterungen beim Neustart der FRITZ!Box über einen boot-Script auf dem USB-Stick ausgeführt werden.
Es können sich damit in der "debug.cfg" weniger Fehler einschleichen.
Der gesteckte USB-Speicherstick wird bei meiner FRITZ!Box 7170 im folgenden Pfad eingebunden (laut 'mount'):

/var/media/ftp/XXX-0-1/

"xxx" ist die Bezeichnung (Name) des USB-Stick, der von der Fritz!Box automatisch beim "Mounten" erkannt wird.
Je nach Marke oder Hersteller des Stick, ist die Bezeichnung "xxx" im Mountpoint unterschiedlich.

Funktion meines Mods:
Über die modifizierte "debug.cfg" wird auf dem USB-Stick im Ordner "fritz!box" das Scritpt "boot" ausgeführt.
Es wird auf dem USB-Stick nach einer Datei "boot", die sich in einem Ordner "fritz!box" befindet gesucht.
Ist die Datei "boot" vorhanden, dann wird sie von der "debug.cfg" ausgeführt.
Wird "boot" nicht gefunden, weil z.B. der USB-Stick abgezogen wurde, funktioniert die Fritz!Box wie vorher, ohne Modifikation, abgesehen von der Änderung der "debug.cfg".
Die folgenden Zeilen die ich mit dem "nvi" in die "/var/flash/debug.cfg" eingetragen habe, dienen der Ermittlung des Pfades (Mountpoint) des USB-Stick, auf dem sich das boot-Script befindet. Dieses wird dann ausgeführt.

debug.cfg:
Code:
# Info-LED blinken lassen
echo 7,3>/var/led

# warten bis USB-Stick mountet
sleep 60

# evtl. vorhandenes Script "boot" 
# auf evtl. vorhandenen USB-Sticks ausfuehren

for f in /var/media/ftp/*/fritz!box/boot
do
	$f
done

# Info-LED blinken aus
echo 7,1>/var/led

Relevante Auszüge aus Datei "boot" im Ordner "fritz!box" auf dem USB-Stick:

Code:
#####################################################################################
### Dieser Script wird nach dem Starten der Fritz!Box ausgefuehrt.                  #
### Voraussetzung ist eine Aenderung des /var/flash/debug.cfg.                      #
### Von der debug.cfg aus wird dieser Script                                        #
### ueber "/var/media/ftp/..../fritz!box/boot" aufgerufen. (.... je nach USB-Stick) #
#####################################################################################

# Info-LED blinken, bis Script ausgefuehrt ist
echo 7,3>/var/led

#####################################################################################
### Start des Telnet-Daemon 
### Der unsichere telnetd kann dann spaeter auskommentiert werden.
### Bei der neueren Fritz!Box Fon kann der telnetd auch ueber
### Telefon eingeschaltet werden (#96*7* -> ein, #96*8* -> aus)
### Statt dem telnetd sollte besser der sichere sshd laufen.
 
#/usr/sbin/telnetd -l /sbin/ar7login &

#####################################################################################
### Pfad fuer Softwareerweiterung in die Variable $USBSTICK abgelegen 

# Der Pfad des Scriptes hier wird ermittelt, egal von wo aus das Script
# aufgerufen wird. Wenn das Script über den vollständigen Pfad aufgerufen wird
# dann wuerde auch genuegen
# USBSTICK=${0%/*}

USBSTICK=`cd ${0%/*} 2>/dev/null && pwd || echo ${0%/*}`

# Hier kaemen nun je nach Bedarf, die Softwareerweiterung wie ssh, crond, WOL, WOC, 
# modifizierter Web-Server zum Starten und Stoppen des dsld über cgi
# usw.
#...


#####################################################################################
### USB-Stick sync, damit dieser ggf. abgezogen werden kann.
### Der sshd funktioniert dann noch.
### Aber alles was verlinkt ist, funktioniert dann nicht mehr.

sync
sleep 3
sync
sleep 3

# Script ist durch, Info-LED ausschalten
echo 7,1>/var/led

Noch wichtige Tips !!!

Eine Modifikation der Firmware kann die FRITZ!Box lahm legen und muss jeder selber verantworten !!!
Wie es um die Gewährleitungsansprüche steht, kann man sich denken.
Die Mod funktionierte auf meiner FRITZ!Box 7170 mit Firmware 29.04.03-3452 (beta) und läuft jetzt auch unter der
aktuellen Firmware-Version 29.04.06.
Ob die Mod mit anderen Boxen und anderer Firmware läuft, weis ich nicht.
Ein sicherer Umgang mit dem "vi" bzw. "nvi" und Grundkenntnisse von Linux sind Voraussetzung für die Modifikationen.

Bitte auf die verschiedenen Hochkommas (' `) in der "debug.cfg" achten.

Zum Editieren der "debug.cfg" mit dem "nvi" sollte man eine 2. Telnet-Session oder ssh-Session öffnen.
Die 1. Session benützt die Fritz!Box für die Standardausgabe von Meldungen, diese würden dann beim Editieren stören.
Zum Thema "telnet" und "ssh" gibt es bereits andere Forenbeiträge.

Vorsicht beim Editieren der betreffenden Dateien !
Grunsätzlich habe auch ich die Dateien auf dem USB-Stick mit vi oder nvi bearbeiten. Wegen unterschiedlicher Zeichensätze, habe ich die Dateien auf dem USB-Stick nicht mit einem Windows-Editor bearbeitet. Nur als Hinweis, falls jemand auf die Idee käme, den USB-Stick zu ziehen und an einem Windows-PC anzustecken.

Sicher kann der aufgeführte Script noch verbessert werden, da ich kein Profi bin, was Shell-Scripte anbelangt.
Auf weitere Fragen zu meinem Beitrag kann ich leider nicht immer gleich antworten.
Bitte um Nachsicht und viel Spaß beim Moding ! :)


Change-Log:
27.05.2006 Vereinfachung der Shellscripte "boot" und "debug.cfg" aufgrund der Tips von "jojo-schmitz".

Gruß

Joe3
 
Zuletzt bearbeitet von einem Moderator:
Die Idee ist schon ziemlich genial! Endlich kein wget mehr, das Generieren von Keys für dropbear fällt flach und Samba macht sowieso nur Sinn mir USB-Disk.

Die Box lässt übrigens maximal 3 USB-Platten zu, eine 4. wird schlicht nicht mehr gemounted.

Ich habe debug.cfg mal etwas vereinfacht:
Code:
# Info-LED blinken lassen
echo 7,3>/var/led

# warten bis USB-Sticks mounten (per Log dauert's ca. >40s)
sleep 60

# evtl. vorhandenes Script "boot" 
# auf evtl. vorhandenen USB-Sticks ausfuehren

for f in /var/media/ftp/*/fritz!box/boot
do
        $f
done

# Info-LED blinken aus
echo 7,1>/var/led

Tschö, Jojo
 
Zuletzt bearbeitet:
Noch 'ne Vereinfachung, von der dann ...fritz!box/boot profitiert, da sie den mountpoint nicht mehr ermitteln muss:

Code:
for f in /var/media/ftp/*
do
    [ -x $f/fritz!box/boot ] && USBDISK=$f $f/fritz!box/boot
done


Und damit die Programme in ...fritz!box gefunden werden, in fritz!box/boot:
Code:
export PATH=$PATH:${0%/*}

Alternativ in debug.cfg
Code:
    [ -x $f/fritz!box/boot ] && USBDISK=$f PATH=$PATH:$f/boot $f/fritz!box/boot
 
Zuletzt bearbeitet:
Und hier dann mein Script zu automatischen Generierung der WOL Scripte für alle DHCP Clienten in LAN:
Code:
# WOL
ln -s $PWD/busybox /var/tmp/etherwake
# WOL-Scripte für alle DHCP LAN Clients erzeugen (WLAN macht wohl keinen Sinn)
if=eth0
grep '^lease' /var/flash/multid.leases | while read typ mac ip time name mac2
do
        # " loswerden und in lowercase konvertieren
        name=$(echo $name | tr -d '"' | tr '[A-Z]' '[a-z]')
        cat > /var/tmp/start_${name:=noname} <<-EOF
              #!/bin/sh
              echo "Sende WOL an $name ($mac) ..."
              /var/tmp/etherwake -i $if $mac
              echo "Warte ob/bis $name ($ip) startet"
EOF
        chmod +x /var/tmp/start_$name
done
 
Zuletzt bearbeitet:
jojo-schmitz schrieb:
Noch 'ne Vereinfachung, von der dann ...fritz!box/boot profitiert, da sie den mountpoint nicht mehr ermitteln muss:
Toller Tip. Werde meine debug.cfg mal entsprechend umstellen.

export PATH=$PATH:${0%/*}
Auch toll. Muß man aber ziemlich lange im Kofler blättern, um die Zeile zu vestehen. Häng doch mal 'ne Erklärung dran für Lernwillige.

Gruß
crusader
 
crusader schrieb:
Code:
export PATH=$PATH:${0%/*}
Auch toll. Muß man aber ziemlich lange im Kofler blättern, um die Zeile zu vestehen. Häng doch mal 'ne Erklärung dran für Lernwillige.
Es hat mich viel Arbeit gekostet, das zu verstehen, da soll es anderen auch nicht besser gehen :cool:

Na gut, will mal nicht so sein...:
${var%muster} sucht in var nach dem längsten String bis muster, sucht nach muster sozusagen von rechts nach links. ${var%/*} ermittelt somit den dirname von var
${var##muster} sucht in var nach dem kürzesten String ab muster, sucht also von links nach rechts. ${var##*/} ermittelt somit den basename von var.
Beides ohne einen neuen Prozess (dirname/basename) erzeugen zu müssen, mal abgesehen davon, dass busybox auf der Fritz!Box kein dirname eingebaut hat, nur basename
${var%%muster} und ${var#muster} funktioniert entsprechend, d.h. ermittelt kürzesten String bis bzw. längsten String ab muster.

Ich hoffe mal dass das alles so stimmt...

${0%/*} ermittelt nun also das Verzeichnis in dem $0 (das Script selbst) steht und hängt dieses Verzeichnis an PATH an. Funktioniert natürlich nur, wenn $0 mit einem absolutet Pfadnamen (beginnend mit /) aufgerufen wurde, was hier aber gegeben ist.

Tschö, Jojo
 
Zuletzt bearbeitet:
Hallo,
eine Frage an die Spezi`s. Ist es auf diese Art eventuell möglich, eine CallBack-Funktion zu integrieren??

Schönen Sonntag
 
Software und Binaries über USB-Stick laden (Änderung)

Hallo,

habe nun anhand der Tips von "jojo-schmitz" ein paar Änderungen (Optimierungen) an meinem am 09.04.2006 16:37 hier im Forum eingestellten Fritz!Box-USB-Stick-Mod durchgeführt.
Dank an "jojo-schmitz" ! :D
Hier der geänderte Shellscript "debug.cfg" im verzeichnis /var/flash.
Code:
# Info-LED blinkt
echo 7,3>/var/led

# warten bis USB-Stick mountet
sleep 60

# evtl. vorhandenes Script "boot" 
# auf evtl. vorhandenen USB-Sticks ausfuehren

for f in /var/media/ftp/*/fritz!box/boot
do
	$f
done

# Info-LED blinken aus
echo 7,1>/var/led

Hier dann noch der geänderte Script "boot" auf dem USB-Stick.
Code:
#####################################################################################
### Dieser Script wird nach dem Starten der Fritz!Box ausgefuehrt.                  #
### Voraussetzung ist eine Aenderung des /var/flash/debug.cfg.                      #
### Von der debug.cfg aus wird dieser Script ueber                                  #
### ueber "/var/media/ftp/..../fritz!box/boot" aufgerufen. (.... je nach USB-Stick) #
#####################################################################################

# Info-LED blinken, bis Script ausgefuehrt ist
echo 7,3>/var/led

#####################################################################################
### Start des Telnet-Daemon 
### Der unsichere telnetd kann dann spaeter auskommentiert werden.
### Bei der neueren Fritz!Box Fon kann der telnetd auch ueber
### Telefon eingeschaltet werden (#96*7* -> ein, #96*8* -> aus)
### Statt dem telnetd sollte der sichere sshd laufen.
 
#/usr/sbin/telnetd -l /sbin/ar7login &

#####################################################################################
### Pfad fuer Softwareerweiterung in die Variable $USBSTICK abgelegen 

currentpath=${0%/*}
USBSTICK=`cd $currentpath 2>/dev/null && pwd || echo $currentpath`


# Hier folgen nun moegliche Softwareerweiterung wie ssh, crond, WOL, WOC, 
# modifizierter Web-Server zum Starten und Stoppen des dsld über cgi
# usw. und hier nicht aufgefuehrt.
# ...


#####################################################################################
### USB-Stick sync, damit dieser ggf. abgezogen werden kann.
### Der sshd funktioniert dann noch.
### Aber alles was verlinkt ist funktioniert dann nicht mehr.

sync
sleep 3
sync
sleep 3

# Script ist durch, Info-LED ausschalten
echo 7,1>/var/led
Und nochmals die wichtigen Tips !!!

Eine Modifikation der Firmware kann die FRITZ!Box lahm legen und muss jeder selber verantworten !!!
Wie es um die Gewährleitungsansprüche steht, kann man sich denken.
Die Mod läuft auf meiner FRITZ!Box 7170 entzwischen mit Firmware 29.04.05-3711 (beta).
Ob die Mod mit anderen Boxen und anderer Firmware läuft, weis ich nicht.
Ein sicherer Umgang mit dem "vi" bzw. "nvi" und Grundkenntnisse von Linux sind Voraussetzung für die Modifikationen.

Bitte auf die verschiedenen Hochkommas (' `) in der "debug.cfg" achten.

Zum Editieren der "debug.cfg" mit dem "nvi" sollte man eine 2. Telnet-Session oder ssh-Session öffnen.
Die 1. Session benützt die Fritz!Box für die Standardausgabe von Meldungen, diese würden dann beim Editieren stören.
Zum Thema "telnet" und "ssh" gibt es bereits andere Forenbeiträge.

Vorsicht beim Editieren der betreffenden Dateien !
Grunsätzlich habe auch ich die Dateien auf dem USB-Stick mit vi oder nvi bearbeiten. Wegen unterschiedlicher Zeichensätze, habe ich die Dateien auf dem USB-Stick nicht mit einem Windows-Editor bearbeitet. Nur als Hinweis, falls jemand auf die Idee käme, den USB-Stick zu ziehen und an einem Windows-PC anzustecken.

Sicher kann der aufgeführte Script noch verbessert werden, da ich kein Profi bin, was Shell-Scripte anbelangt.
Auf weitere Fragen zu meinem Beitrag kann ich leider nicht immer gleich antworten.
Bitte um Nachsicht und viel Spaß beim Moding ! :)

Gruß

Joe3
 
Joe3 schrieb:
habe nun anhand der Tips von "jojo-schmitz" ein paar Änderungen (Optimierungen) an meinem am 09.04.2006 16:37 hier im Forum eingestellten Fritz!Box-USB-Stick-Mod durchgeführt.
Dank an "jojo-schmitz" ! :D
Gern geschehen :cool:

Joe3 schrieb:
Hier der geänderte Shellscript "debug.cfg" im verzeichnis /var/flash.
Code:
# Info-LED blinkt
echo 7,3>/var/led
...
# Info-LED blinken aus
echo 7,1>/var/led
Wegen der erweiteterten Einstellmöglichkeiten der neuesten Beta, die u.a. ermöglicht, dass die Info LED die Bereitschaft von USB-Zubehör signalisiert, habe ich diese 'echo 7,<code> >/var/led' 'rausgenommen, aus beiden Dateien, der debug.cfg und der /var/media/ftp/*/fritz!box/boot

Joe3 schrieb:
Hier dann noch der geänderte Script "boot" auf dem USB-Stick.
Code:
...
currentpath=${0%/*}
USBSTICK=`cd $currentpath 2>/dev/null && pwd || echo $currentpath`
...
Interessant... falls 'cd $currentpath' klappt, wird USBSTICK mit der Ausgabe von 'pwd' besetzt (welches wohl currentpath ergeben sollte), falls es fehlschlägt wird's mit currentpath besetzt... versteh ich nicht, erscheint mir redundant (hier als Euphemismus für 'überflüssig' zu verstehen :cool:).

Joe3 schrieb:
Code:
...
sync
sleep 3
sync
sleep 3
...
Ich meine, dass diese sync unnötig sind, die USB-Speicher werden eh mit '-o sync' gemounted.
Joe3 schrieb:
Die Mod läuft auf meiner FRITZ!Box 7170 entzwischen mit Firmware 29.04.05-3711 (beta).
Ob die Mod mit anderen Boxen und anderer Firmware läuft, weis ich nicht.
Sie läuft auch mit der neuesten Firmware (29.04.06-3825)!

Tschö, Jojo
 
Berni schrieb:
Ist es auf diese Art eventuell möglich, eine CallBack-Funktion zu integrieren??
Wüsste nichts, was dagegen spräche...

Tschö, Jojo
 
Hi,
wie kann ich den jetzt eigendlich Programme wie open vpn ausführen?
Ich mach das indem ich auf den USB Stick springe und dann das Programm starte:
cd /var/media/ftp/USBDRIVE-Partition-0-1/
./openvpn --config ./server.ovpn

Wie verwende ich den die Variable Variable $USBSTICK ???

bringt mich die in diesem Fall weiter?


# Hier folgen nun moegliche Softwareerweiterung wie ssh, crond, WOL, WOC,
# modifizierter Web-Server zum Starten und Stoppen des dsld über cgi
# usw. und hier nicht aufgefuehrt.
# ...

könntet ihr mal Posten wie ihr den die Programme startet.

Danke

gruß Robert
 
Dino75195 schrieb:
wie kann ich den jetzt eigendlich Programme wie open vpn ausführen?
Ich mach das indem ich auf den USB Stick springe und dann das Programm starte:
cd /var/media/ftp/USBDRIVE-Partition-0-1/
./openvpn --config ./server.ovpn
So in der Art. Kommt auf das jeweilige Programm an. OpenVPN habe ich selber noch nicht ans fliegen bekommen, siehe unten.

Dino75195 schrieb:
Wie verwende ich den die Variable Variable $USBSTICK ???
Ich verwende sie garnicht... (siehe unten)

Dino75195 schrieb:
könntet ihr mal Posten wie ihr den die Programme startet.
Wird gemacht:
Code:
#!/bin/sh

# statt "cd $(dirname $0)"
cd ${0%/*}

# Samba
export PATH=$PATH:
hostname Fritz!Box
[ -x nmbd ] && [ -f smb.conf ] && nmbd -D -l $PWD -s smb.conf
[ -x smbd ] && [ -f smb.conf ] && smbd -D -l $PWD -s smb.conf

# dropbear (sshd)
# Verschluesseltes Passwort des Root Users (Wichtig für SSH)
# zum Erzeugen siehe http://www.univativ.net/php/tools/crypt.html
# oder http://www.flash.net/cgi-bin/pw.pl
PASSWD='xxxxxxxxxx'
cp -p /var/tmp/shadow /var/tmp/shadow.old && \
	sed -e "/root:/s#^root:[^:]*:#root:$PASSWD:#" /var/tmp/shadow.old \
		> /var/tmp/shadow
# TODO: root's home auf /var/tmp ändern, um .ssh/ erzeugen zu können
# und dann mit Schlüsseln statt Passwortern einloggen zu können

# um auch vom WAN aus erreichbar zu sein, muss in /var/flash/ar7.cfg eine
# entsprechende Regel eingebaut werden:
# " tcp 0.0.0.0:22 0.0.0.0:22 0 # ssh - Fritz!Box"
# alternativ ein Pseudo Interface erzeugen und im WebInterface freigeben.
# "netmask 255.255.255.0" und "broadcast 192.168.178.255" sind der Default
# 192.168.178.254 auf eth0:0 bzw. lan:0 ist die Notfall-IP, in ar7.cfg
# entweder eth0:1 hier oder in debugcfg or lan:1 in ar7.cfg
# http://www.ip-phone-forum.de/showpost.php?p=593481&postcount=136
ifconfig eth0:1 192.168.178.253 up
#ifconfig lan:1 192.168.178.253 up

# scp ermöglichen, und mehr... (ssh == dbclient)
# symlinks funktionieren leider nicht auf USB-Stick, wg. FAT(32) Format
for cmd in dropbearkey scp ssh dbclient dropbearconvert
do
	ln -s $PWD/dropbear /var/tmp/$cmd
done

export PATH=$PATH:/var/tmp
# nötigenfalls Keys erzeugen
if [ ! -f dropbear_rsa_hostkey ]
then
	dropbearkey -t rsa -f dropbear_rsa_hostkey >/dev/null 2>&1
fi
if [ ! -f dropbear_dss_hostkey ]
then
	dropbearkey -t dss -f dropbear_dss_hostkey >/dev/null 2>&1
fi
# -p 22 ist der Default und den will ich...
dropbear -r $PWD/dropbear_rsa_hostkey -d $PWD/dropbear_dss_hostkey


# für ftp Zugriff ab / eigenen User/Password anlegen
echo 'jojo:yyyyyyyyyyyy:0:0:root:/:null' >> /var/tmp/passwd
# alternativ root account modifizieren?

# WOL
ln -s $PWD/busybox /var/tmp/etherwake
#ln -s $PWD/busybox /var/tmp/ether_wake
# WOL-Scripte für alle DHCP LAN Clients erzeugen (WLAN macht wohl keinen Sinn, oder?)
grep '^lease' /var/flash/multid.leases | while read typ mac ip time name mac2
do
	# " loswerden und alles in lowercase konvertieren
	name=$(echo $name | tr -d '"' | tr '[A-Z]' '[a-z]')
	cat > /var/tmp/start_${name:=noname} <<-EOF
#!/bin/sh
ping -c 1 $ip >/dev/null 2>&1
if [ \$? = 0 ]
then
	echo "$name ($ip) läuft schon"
else
	echo "Sende WOL an $name ($mac) ..."
	# -i eth0 ist Default und hier das Richtige
	$PWD/busybox etherwake $mac
	#$PWD/busybox ether_wake $mac
	echo "Warte ob/bis $name ($ip) startet"
fi
EOF
	chmod +x /var/tmp/start_$name
done

# TODO: VPN einrichten
# VPN braucht in /var/flash/ar7.cfg:
# "udp 0.0.0.0:1194 0.0.0.0:1194", # vpn"
# oder selber Trick mit Pseudo Interface wie oben bei SSH

ln -s $PWD/secret.key /var/tmp/secret.key
#openvpn --cd /var/tmp --config $PWD/server.ovpn


Tschö, Jojo
 
Zuletzt bearbeitet:
Ich würde gerne die Variable benutzen? weil der Pfad ändert sich ja jeh nach USB Stick!
Hat da jemand ne Info?

gruß dino
 
Dino75195 schrieb:
Ich würde gerne die Variable benutzen? weil der Pfad ändert sich ja jeh nach USB Stick!
Hat da jemand ne Info?
Das erschlägt bei meiner Variante folgendes:
Code:
cd ${0%/*}
Damit befinde ich mich in dem Verzeichnis, wo das Script liegt, das von /var/flash/debug.cfg aufgerufen wurde. Anschliessend steht das aktuelle Verzeichnis in der Environment Variablen PWD zur Verfügung und wird entsprechend in meinen Script verwurstet, z.B.
Code:
# scp ermöglichen, und mehr... (ssh == dbclient)
# symlinks funktionieren leider nicht auf USB-Stick, wg. FAT(32) Format
for cmd in dropbearkey scp ssh dbclient dropbearconvert
do
	ln -s $PWD/dropbear /var/tmp/$cmd
done

Natürlich hätte man statt dessen auch schreiben können:
Code:
cd $USBSTICK
...
for cmd in dropbearkey scp ssh dbclient dropbearconvert
do
	ln -s $USBSTICK/dropbear /var/tmp/$cmd
done
Ich finde meine Methode schöner, die funktioniert auch wenn die debug.cfg diese Variable nicht setzt.

Meine debug.cfg macht dementsprechend auch nur kurz und knackig:
Code:
# warten bis USB-Speicher mounted
sleep 60
# falls vorhanden entsprechende Scripte starten
for f in /var/media/ftp/*/boot
do
	$f
done

Tschö, Jojo
 
Zuletzt bearbeitet:
jojo-schmitz schrieb:
Wüsste nichts, was dagegen spräche...
Tschö, Jojo
OK, die Fragestellung war nicht korrekt. Also dann andersherum: Wer ist in der Lage eine solche Lösung anzubieten(auch gegen ein "geringes Endgeld")???

Guten Tag
 
Dino75195 schrieb:
Ich würde gerne die Variable benutzen? weil der Pfad ändert sich ja jeh nach USB Stick!
Hat da jemand ne Info?

gruß dino

Folgendes ist auch möglich:

USBSTICK=`cd ${0%/*} 2>/dev/null && pwd || echo ${0%/*}`

Der Pfad des Scriptes hier wird richtig ermittelt, egal von wo aus der Script aufgerufen wird. Wenn der Script über den vollständigen Pfad aufgerufen wird dann würde auch genügen

USBSTICK=${0%/*}

MfG
joe3
 
Joe3 schrieb:
USBSTICK=`cd ${0%/*} 2>/dev/null && pwd || echo ${0%/*}`
Geht nicht. Wenn cd fehlschlägt, wird weder das pwd noch das echo ausgeführt. Schuld ist die shortcut evaluation (wenn a schon falsch ist, braucht bei UND Verküpfung b erst garnicht geprüft zu werden, zu c kommte es dann erst Recht nicht) und die falsche (bzw. fehlende) Klammerung.

So ginge es:
Code:
USBSTICK=$((cd ${0%/*} 2>/dev/null && pwd) || echo ${0%/*})
Ich bevorzuge übrigens $(cmd) gegenüber `cmd`, sieht viel eleganter und übersichtlicher aus und läßt sich ggf. auch schachteln.

Joe3 schrieb:
Der Pfad des Scriptes hier wird richtig ermittelt, egal von wo aus das Script aufgerufen wird. Wenn das Script über den vollständigen Pfad aufgerufen wird, dann würde auch genügen

USBSTICK=${0%/*}
Stimmt, aber: USBSTICK hat dann das Versichnis zum Inhalt, in dem sich das Script befindet, das kann durchaus ein Unterverzeichnis auf dem Stick sein, es ist nicht notwendigerweise dessen Wurzelverzeichnis.

Tschö, Jojo
 
Zuletzt bearbeitet:
jojo-schmitz schrieb:
Geht nicht. Wenn cd fehlschlägt wird weder das pwd noch das echo ausgeführt. Schuld ist die shortcut evaluation (wenn a schon falsch ist, braucht bei UND Verküpfung b erst garnicht geprüft zu werden, zu c kommte es dann erst Recht nicht) bzw. die falsche (bzw. fehlende) Klammerung.

So ginge es:
Code:
USBSTICK=$((cd ${0%/*} 2>/dev/null && pwd) || echo ${0%/*})
Ich bevorzuge übrigens $(cmd) gegenüber `cmd, sieht viel eleganter und übersichtlicher aus und läßt sich ggf. auch schachteln.


Stimmt, aber: USBSTICK hat dann das Versichnis zum Inhalt in dem sich das Script befindet, das kann durchaus ein Unterverzeichnis auf dem Stick sein, es ist nicht notwendigerweise dessen Wurzelverzeichnis.

Tschö, Jojo

Danke nochmals für die Tips!
Sicherlich geht es noch einfacher, aber ich lasse es bei mir erst mal so, da es getestet und auch mit der aktuellen 7170 Firmware 29.04.06 funktioniert.
Nach dem Sinnspruch "Viele Wege führen nach Rom".
Ein paar Bytes hin oder her.

Ich werde bei Gelegenheit in meinem ersten Beitrag einen Change-Log hinzufügen mit den aktuellen Dateien boot und debug.cfg.

MfG
joe3
 
Sorry, wie kann ich Befehle oder Scripte in die debug.cfg schreiben damit die dauerhaft drin gespeichert bleiben? Wie kann ich auf die debug.cfg überhaupt zugreifen? Bin noch ein Noob im diesem Gebiet...
 
webogdal schrieb:
Sorry, wie kann ich Befehle oder Scripte in die debug.cfg schreiben damit die dauerhaft drin gespeichert bleiben? Wie kann ich auf die debug.cfg überhaupt zugreifen? Bin noch ein Noob im diesem Gebiet...
Alles in debug.cfg bleibt erhalten, das ist ja gerade der Witz.
Zum Beschreiben kann man nvi verwenden, lässt sich bedienen wie vi.
Alternativ irgend eine Datei mit
Code:
 cat somefile >/var/flash/debug.cfg
in die debug.cfg schreiben. Diese Datei kann dann durchaus auch vom USB-Speicher kommen und dort mit dem PC erstellt worden sein, darf allerdings keine LF/CR (wie unter Dos/Windows üblich) sondern nur LF als Zeilenende enthalten.

Tschö, Jojo
 
Zuletzt bearbeitet:
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.