[gelöst] Backupfunktion: Dateinamen generieren

cuma

Aktives Mitglied
Mitglied seit
16 Dez 2006
Beiträge
2,756
Punkte für Reaktionen
7
Punkte
38
Hab versucht, für die Backupfunktion einen Dateinamen mit Firmwareversion usw analog zum Export der AVM-Einstelungen zu generieren.
Dies habe ich mit "Haserl" leider nicht hinbekommen, vielleicht kennt sich da jemand aus

momentaner Dateiname: var_flash.tar.gz
falls möglich zB: FRITZ.Box_Fon_WLAN_7170_29.04.70freetz-devel-C3181_3186_21.03.09_1722.tar.gz
mittles
Code:
x=`echo ${CONFIG_PRODUKT_NAME}|sed 's/ /_/g;s/!/./'`_`/etc/version -v``/etc/version -vsub``date '+_%d.%m.%y_%H%M.tar.gz'`

unveränderte /usr/mww/cgi-bin/do_backup.cgi

Code:
#!/usr/bin/haserl -u 10000 -U /var/tmp
Content-Type: application/x-gzip
Content-Disposition: attachment; filename="[COLOR="Red"]var_flash.tar.gz[/COLOR]"

<?
# Create backup of all config files in /var/flash
#
# Make sure that no command accidentally writes stdout or stderr stuff into the
# output stream = gzipped tar archive. This is why you see so much output
# redirection here.

# Set working dir so tar can use relative path names
cd /var/tmp > /dev/null 2>&1

# Create empty temp-dir for backup
export BACKUP_DIR='var_flash' > /dev/null 2>&1
rm -rf $BACKUP_DIR > /dev/null 2>&1
mkdir $BACKUP_DIR > /dev/null 2>&1

# Create temporary copies of those character streams in /var/flash
for file in $(ls /var/flash); do
  cat /var/flash/$file > $BACKUP_DIR/$file 2> /dev/null
done

# Create backup and send it to client via stdout
tar cz $BACKUP_DIR/ 2> /dev/null

# Clean up
rm -rf $BACKUP_DIR > /dev/null 2>&1
?>
 
Zuletzt bearbeitet:
Ist die Frage, wie Du das $x an die Stelle bekommt, wo der Dateiname steht?

Ich kenne mich zwar nicht mit haserl aus, würde es aber so versuchen:
Code:
#!/usr/bin/haserl -u 10000 -U /var/tmp
Content-Type: application/x-gzip
<?
x=...
echo "Content-Disposition: attachment; filename=\"$x\""
echo

# Create backup of all config files in /var/flash
#
# Make sure that no command accidentally writes stdout or stderr stuff into the
# output stream = gzipped tar archive. This is why you see so much output
# redirection here.

# Set working dir so tar can use relative path names
...
?>
 
Ja ganau, das ist das Problem. Diese Variante und viele andere hatte ich auch ausprobiert. Falls eine Datei zum Download angeboten wurde, war diese keine gültige tgz. Vermutlich gehört dieser Teil dann nicht mehr zum HTML-Header sonder kommt mit in die Datei
 
Dann probiere erstmal das:
Code:
#!/usr/bin/haserl -u 10000 -U /var/tmp
Content-Type: application/x-gzip
<?
x=test.tgz
echo "Content-Disposition: attachment; filename=\"$x\""
echo

#
echo "Dies ist ein Test"
?>

Was passiert, wenn Du das im Browser aufrufst?
Was passiert, wenn Du es direkt von der Kommandozeile aufrufst?
 
Hm, genau das was soll! Die Lösung ist das "echo". Weshalb kamst du auf die Idee dieses dort zu platzieren???
 
Zuletzt bearbeitet:
Hm, genau das was soll! Die Lösung ist das "echo". Weshalb kamst du auf die Idee dieses dort zu platzieren???

Findet sich wahrscheinlich im Header wieder. Hier HTML:

Code:
Content-type: text/html\n\n

Man beachte die 2 newlines.
 
Die Lösung ist das "echo". Weshalb kamst du auf die Idee dieses dort zu platzieren?

Weil ich weiß, daß es dort hin gehört. Deswegen hatte ich es auch schon in Beitrag #2 stehen.

Die HTTP-Antwort muß eine Leerzeile zwischen Header und Inhalt haben. Die Leerzeile ist es, die den Inhalt vom Header trennt. Wenn Du die Leerzeile wegläßt, wird der Browser alles als Header betrachten, zumindest bis zur ersten Leerzeile im regulären Inhalt.
 
Danke, wieder was gelernt. Die Leerzeile im Original hatte ich übersehen, ich ging davon aus dass die nur der Lesbarkeit wegen da ist.
Hier noch ein funktionierender Patch:
 
Zuletzt bearbeitet:
Sollte aus dem Namen nicht auch hervorgehen, dass es sich um eine Sicherung der Konfiguration handelt?

MfG Oliver
 
Hm, wie wärs statt .tar.gz mit .freetz, analog zum .export von avm? Beim Einspielen ist das kein Problem, da wird der Inhalt geprüft
 
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.