Donnerstag, 6. Dezember 2007

Windows Batch Backup Script

ich stand vor kurzem vor dem problem geplanter backups in ner arztpraxis.

auslöser war nämlich, daß in der praxis nur eine person weiß, wie ein backup gemacht wird (via gekaufter software), diese person aber nicht jeden tag da ist, um zu sichern. und prompt kam es zum headcrash und zum datenverlust (3 tage).

ziel:
wenns geht kostenfreie backuplösung
am besten 2x täglich
benutzer (rezeption) soll nichts dazu tun müssen

naheliegend wären ja die geplanten tasks, aber beim aufruf der "Sicherung" (start > programme > zubehör > systemprogramme > Sicherung) muss der benutzer dann doch wieder ran.
ergo: die gute alte batch muß her.

mein script benötigt einmalig (per texteditor; anfang des scripts) das verzeichniss, in dem das backup erstellt werden soll, und den pfad zu einer filterdatei, in der steht, welche verzeichnisse gesichert werden sollen (wird mit "Sicherung" erstellt, indem man im reiter "Sichern" die verzeichnisse anwählt und dann die auswahl via Auswahl > Auswahl speichern ... in einer .bks datei speichert).

nach aufruf des scritpts passiert folgendes:
das script erstellt bei bedarf das backup verzeichniss und wechselt dorthin.
dann wird geprüft, ob ein ordner 'morgens' existiert, bei bedarf erstellt und ein backup inselbigem erstellt.
gibts den ordner 'morgens' schon, wird ein verzeichniss 'abends' gesucht. existiert es nicht, wird es erstellt, hineingewechselt und darin das backup erstellt.
gibts den order 'abends' schon, haben wir (theoretisch) schon zwei backups gemacht und können aufhören.

und das ganze in batch:


@echo off
rem *********************************** Start VARIABLEN
set BACKUPDIR=d:\backup
set FILTER=d:\filter.bks
rem *********************************** Ende VARIABLEN

rem *********************************** Start ANFANGSBILDSCHIRM
cls
echo Willkommen zu Ihrem lieblings Backup Programm:
echo ==============================================
echo.
echo.
rem *********************************** Ende ANFANGSBILDSCHIRM

rem *********************************** Start VERZEICHNISSE
echo Suche Verzeichniss "%BACKUPDIR%" ...
IF not exist %BACKUPDIR%. (
echo Verzeichniss existiert noch nicht. Wird erstellt ...
mkdir %BACKUPDIR%
)

echo Wechseln zu %BACKUPDIR% ...
cd %BACKUPDIR%

echo Suche Verzeichniss "%DATE%" ...
set DATEDIR=%DATE%
IF not exist %DATEDIR%. (
echo Verzeichniss existiert noch nicht. Wird erstellt ...
mkdir %DATEDIR%
)

echo Wechseln in Verzeichniss %DATEDIR% ...
cd %DATEDIR%

echo Suche Verzeichniss "morgens" ...
IF not exist morgens. (
echo Verzeichniss ecistiert noch nicht. Wird erstellt ...
mkdir morgens
echo Wechseln in Verzeichniss "morgens" ...
cd morgens
) ELSE (
echo Heute morgen wurde schon gesichert.
echo Suche Verzeichniss "abends" ...
IF not exist abends. (
echo Verzeichniss nicht gefunden. Wird erstellt ...
mkdir abends
echo Wechseln in Verzeichniss "abends" ...
cd abends
) ELSE (
echo Heute wurde bereits zwei mal gesichert. Gut so!
goto ende
)
)
rem *********************************** Ende VERZEICHNISSE

rem *********************************** Start BACKUP
echo Erstelle BACKUP in %CD% ...
ntbackup.exe backup "@%FILTER%" /v:yes /r:no /rs:no /hc:off /m normal /j "Sicherung" /l:n /f "%CD%\Sicherung_%DATE%.bkf"
echo Geschafft.
rem *********************************** Ende BACKUP

:ENDE
pause

(link)

jetzt muß nur noch via 'geplante Tasks' ein job erstellt werden, der täglich (werktags) morgens und abends einmal unser script aufruft und wir habens geschafft (=

Fonera zerflashen

hab soeben meine Fonera zum dritten mal erfolgreich geflasht und bin jetzt denkich mal soweit, meine erfahrungen mit euch zu teilen ^^

ACHTUNG: DAS HIER IST IM GROßEN UND GANZEN NICHT AUF MEINEM EIGENEN MIST GEWACHSEN UND BLOß EIN RESUMÉE DESSEN, WAS BEI MIR FUNKTIONIERT HAT (SIEHE QUELLEN). FÜR ETWAIGE SCHÄDEN SEID IHR SELBST VERANTWORTLICH!!!

zunächst ein paar fakten:

  • auf der fonera läuft von haus aus openwrt
    (mit hübchem, aber sehr beschnittenem webinterface)

  • sobald das gerät eingeschaltet wird und internet zugang hat, verbindet es sich mit seiner heimat, um firmwareupdates und konfigurationen automatisch einzuspielen
    (funktioniert anstandslos, ist aber für unsre zwecke eher hinderlich)



unser erstes ziel: SSH freischalten
dazu benötigen wir:

(eigentlich benötigen wir für SSH bloß die sshenable.htm. aber da wir unter umständen zwichenzeitlich kein internet haben, sollten alle files vorher auf der platte sein ^^)

als erstes trennen wir die fonera vom internet (weil wir die alte firmware der werkseinstellungen brauchen) und drücken mit dem bleistift den resetknopf auf der unterseite der fonera für 20 sekunden. danach sollten die wlan- und die internet-led kurz erlöschen, was signalisiert, daß die fonera neu startet.
von nun an hat die fonera die firmware 7.1r1 (aber bloß, bis sie wieder internet hat), welche eine lücke im webfrontend hat, die es gestattet den ssh-server zu starten (ist nämlich bereits drauf). dazu muß das netzwerk wie folgt eingestellt werden:
ip: 169.254.255.2
mask: 255.255.0.0
gateway: 169.254.255.1
dns: 169.254.255.1
da die fonera am ethernetport vorübergehend die adresse 169.254.255.1 hat. nun rufen wir via browser die auf dem webserver hinterlegte datei sshenable.htm auf und bestätigen den dialog.
nach kurzer zeit sollte das webui der fonera erscheinen (http://169.254.255.1/...) und die fonera via sh erreichbar sein.



nächstes ziel: Redboot
ssh ist zwar schön, aber flash0rn geht aus redboot; alo los!
jetzt gehts mit ssh (root:admin) auf die fonera, von wo aus ihr euch via wget in /tmp die dateien openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma organisiert:


cd /tmp

wget http://169.254.255.2/openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma


die enthält ein gepatchtes rootfs und wird mit:


mtd -e vmlinux.bin.l7 write openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma vmlinux.bin.l7


ins flash geschrieben. die fonera sollte jetzt neu gestartet werden:


reboot


(oder reset ...)
wieder mit ssh auf die fonera und wieder in /tmp. jetzt die out.hex besorgen:


wget http://169.254.255.1/out.hex


geflasht wird mit:


mtd -e "RedBoot config" write out.hex "RedBoot config"


und wieder:


reboot


ab sofort sollte die fonera kurz nach dem anschalten für ca. 10 sekunden über telnet erreichbar sein, also strom raus.
bei den netzwerk einstellungen sollte jetzt die ip auf 192.168.1.111 gessetzt werden. wir öffnen zwei terminals, wobei das eine die 192.168.1.254 pingt, und das andre mit


telnet 192.168.1.254 9000


im anschlag auf eine antwort des pings wartet, also strom wieder rein.
der kurz darauf erscheinende dialog wird mit ^C abgebrochen und ihr seid im bootloader ^^.

für MacOSX/BSD Systeme:
es hat mich einige zeit gekostet, um rauszufinden, daß BSD systeme ein 'falsches' zeichen als BREAK senden. daher muß vorher auf der konsole:


echo -e "\0377\0364\0377\0375\0006" > break


eingegeben werden. und telnet startet ihr mit:


nc -vvv 192.168.1.254 9000 < break ; telnet 192.168.1.254 9000


und auf zum dritten ziel: anderes system
für openwrt benötigen wir 2 dateien auf einem tftp server:

zuerst gehts mit telnet in redboot (s.o.). von dort aus werden nun nacheinander folgende befehle eingegeben:

RedBoot> ip_addr -h 192.168.1.111 -l 192.168.1.254/24

RedBoot> fis init

RedBoot> load -r -v -b %{FREEMEMLO} openwrt-atheros-2.6-root.jffs2-64k

RedBoot> fis create -f 0xA8030000 -l 0x006f0000 rootfs

RedBoot> load -r -v -b %{FREEMEMLO} openwrt-atheros-2.6-vmlinux.lzma

RedBoot> fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7

RedBoot> fis load -l vmlinux.bin.l7


mit 'ip_address' wird die locale ip und die des std. servers (z.B. für tftp) gesetzt.
'fis init' löscht das flash.
'load -r ...' lädt eine datei über tftp als image an eine freie telle im ram.
'fis create ...' schreibt ein image aus dem ram ins flash.
'fis load ...' lädt ein image aus dem flash in den speicher (zum ausführen; in unsrem fall den kernel).
'exec' startet das zuvor geladene image.
der erste 'fis create ...' dauert etwa eine viertel stunde und sollte wegen timeout nach ein paar minuten durch die eingabe von 'ip' gefolgt werden (beim prompt dann wieder einmal enter, damit der befehl ausgeführt wird; zeigt die ip konfiguration der fonera an).
ab sofort sollte openwrt auf der fonera (192.168.1.1) installiert sein; eine schöne grundlage für weitere spielereien ... =)



sollte jemand wieder die original firmware benötigen, folge er folgendem kleinen auszug aus der wiki von dd-wrt:

1) Download the firmware:
Download and unzip a pre-converted zip file:
7.1.1 version (Enable-SSH hole is OPEN in this version)
(http://rapidshare.com/files/18083671/fo ... d.zip.html)
7.1.2 versions (Enable-SSH hole has been patched in this version)
(http://uselesshacks.com/files/fonera_0.7.1.2.zip)
If you want the firmware directly from FON, download it here: Fon.com (http://www.fon.com/)
(Direct link (http://downloads.fon.com/firmware/curre ... .7.1.3.fon) ) then follow these
steps to convert it to usable files:
1.a) Remove the first 520 bytes of the downloaded file.
On Linux, Mac OS X (or other *nixes):



tail --bytes +520 fonera_0.7.1.3.fon > fonera_0.7.1.3.tar.gz


Windows: Use the mirrored zip files which are already converted.
1.b) Change the extension of the resulting file to .tar.gz and untar it.
2) You need 2 files from the steps above, kernel.lzma and rootfs.squashfs. Put these in your TFTP
server root directory. If you don't have a TFTP server, go back the beginning of this document and
set one up.
3) Connect to the RedBoot prompt and type in the following commands:


RedBoot> ip_address -l 192.168.1.254/24 -h 192.168.1.111
RedBoot> fis init
RedBoot> load -r -v -b 0x80040450 rootfs.squashfs
RedBoot> fis create -b 0x80040450 -f 0xA8030000 -l 0x00700000 -e 0x00000000 rootfs
RedBoot> load -r -b %{FREEMEMLO} kernel.lzma
RedBoot> fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7
RedBoot> fis load -l vmlinux.bin.l7
RedBoot> exec



nach einem reboot sollte die original firmware wieder einsatzbereit sein.


wer statdessen dd-wrt installieren möchte (hat ein sehr umfasendes webui), dem sei es freigestellt, sich die 4 files aus der downloadsektion (LINK > beta > fonera > ...) herunter zu laden und der fonera_flashing.txt zu folgen =)

quellen:

http://google.com

http://uselesshacks.com/?p=23 (für die sache mit ssh&co)

http://www.dd-wrt.com/wiki/index.php/La ... e_Flashing (original firmware wiederherstellen)

http://www.dd-wrt.com/phpBB2/viewtopic.php?t=8858

http://wiki.chaostreff-dortmund.de/wiki/La_Fonera