-
Notifications
You must be signed in to change notification settings - Fork 13
/
BOOTSELECTION.ger
183 lines (147 loc) · 10.8 KB
/
BOOTSELECTION.ger
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
Sollte die FRITZ!Box aus irgendeinem Grund mit dem neuen System nicht erfolgreich gestartet werden,
kann man mit einem einfachen FTP-Client jederzeit wieder auf das System in dem zweiten Satz von
Partitionen umschalten.
Die FRITZ!Box-Modelle, für die "modfs" funktioniert, haben alle jeweils eine aktive und eine inaktive
Partition für den "harten Kern" des Betriebssystems (die Kernfunktionen - oder auf englisch: den
"kernel") und ebenso eine aktive und eine inaktive Partition für das "Dateisystem" (im Englischen
"filesystem"), in dem die diversen Programme, Einstellungen und auch die Dateien für das Benutzer-
interface enthalten sind.
Die Auswahl zwischen diesen beiden "Sätzen" von Partitionen (es gehören immer ein "kernel" und ein
"filesystem" zusammen) erfolgt über eine Variable mit dem Namen "linux_fs_start" in der "Umgebung"
(englisch "environment") des Bootloaders.
Dieser nennt sich (in Anlehnung an das ursprünglich mal von der Firma Texas Instruments vor sehr
langer Zeit entwickelte Original mit dem Namen ADAM) bei AVM inzwischen EVA ... wenn also jemand
vom Zugriff auf "EVA" schreibt oder spricht, meint er im Kontext einer FRITZ!Box in der Regel diesen
Bootloader, den man entweder über eine serielle Schnittstelle steuern kann (das braucht entsprechende
Lötarbeiten und Bauteile (Pegelwandler), weil diese Schnittstelle bei einer FRITZ!Box normalerweise
nicht bestückt ist und man sogar erst die passende Steckerleiste anbringen müßte, wenn man nicht
direkt das Kabel für die Schnittstelle fest anlöten will) oder - und das ist die leichtere Alternative
- in den ersten 5 Sekunden nach dem "Einschalten" der FRITZ!Box (das ist ja in aller Regel das
Einstecken der Stromversorgung) reagiert dieser Teil des Bootloaders auch auf den Start einer
FTP-Sitzung über ein LAN-Kabel. Dabei ist es egal, an welchem LAN-Port das Kabel angeschlossen wird,
zu diesem Zeitpunkt wird da noch nicht in "Gastnetz" oder "VPN-Zugang" (ipsecbrX) oder "LAN"
unterschieden.
Es ist zwar nicht ganz simpel, das richtige Timing für den Start so einer FTP-Sitzung zu finden, aber
das muß man auch nicht unbedingt "von Hand" machen. Bei der Verwendung eines Windows-PCs bietet es
sich an, für diesen Zweck ein Recovery-Programm von AVM zu "mißbrauchen" und zwar eines, das nicht
zum Modell der eigenen FRITZ!Box paßt. Dieses Recovery-Programm leitet dann auch den ungeübten
Benutzer ziemlich gut durch die Vorbereitungsarbeiten (es gibt auch passende Erläuterungen bei AVM
im Internet) und es streicht erst dann die Segel, wenn es in der erfolgreich aufgebauten FTP-
Sitzung zur FRITZ!Box dann feststellen kann, daß es sich nicht um das richtige Modell handelt.
Netterweise bleibt aber die FRITZ!Box anschließend im "FTP-Modus" stehen und man hat anstelle der
bereits angesprochenen fünf Sekunden nun alle Zeit der Welt für die eigenen Aktivitäten.
Wer anstelle eines Windows-PCs nur einen Linux-Host sein eigen nennt oder zu den Kunden der Firma
mit der angebissenen Ananas gehört, der kann auf das Shell-Skript "eva_discover" unter der URL
https://github.com/PeterPawn/YourFritz/blob/master/eva_tools/eva_discover zurückgreifen, das außer
einer passenden Shell und dem Programm "socat" (http://www.dest-unreach.org/socat/), das es mit
hoher Wahrscheinlichkeit auch fertig für das Zielsystem gibt, keine weiteren Voraussetzungen
benötigt ... außer natürlich ebenfalls eine kabelbasierte LAN-Verbindung zu der betreffenden
FRITZ!Box. Nach dem Start des Skripts (Genaueres steht dann im GitHub-Repository) dann einfach
die Box durch Einstecken der Stromversorgung starten und wenn dann die FRITZ!Box gefunden wurde,
bleibt sie (bei geeigneter Parametrierung von "eva_discover") genauso im FTP-Modus stehen, wie bei
der Verwendung des falschen Recovery-Programms ... und hier treffen die beiden "Zweige" dann auch
wieder aufeinander und es geht identisch weiter.
Jetzt geht man hin und startet (bei Windows aus einer "Eingabeaufforderung" heraus, was eine - für
meine Begriffe jedenfalls - ziemlich schwache Übersetzung für "command prompt" ist und bei den
anderen Systemen eben aus einer "command shell" heraus) eine FTP-Sitzung zur FRITZ!Box. Die
konkrete IP-Adresse entnimmt man entweder den letzten Zuckungen des Fensters im Recovery-Programm
von AVM oder der Anzeige von "eva_discover".
ftp 192.168.178.1
Wer ohnehin unter Linux oder OS X arbeitet, kann auch gleich auf "nc" oder erneut auf "socat"
zurückgreifen (letzteres hat ja "eva_discover" auch schon verwendet). Das wäre dann ein Aufruf von
nc 192.168.178.1 21
oder
socat STDIN TCP:192.168.178.1:21
Egal was man auch verwendet, irgendwie sollte die Anzeige der Antworten von der FRITZ!Box u.a. die
Zeichenkette
220 ADAM2 FTP Server ready
enthalten. Sieht man diese, ist die Box im FTP-Modus und man kann mit der Anmeldung fortfahren.
Die ist eher "pro forma", aber irgendjemand hielt das wohl (A) für notwendig und (B) für eine gute
Idee. Mir ist allerdings bis heute noch nicht klar, was damit bezweckt wird ... ein echter Schutz
vor unberechtigtem Zugriff kann es kaum sein, der dürfte ja dann nicht mit solchen "Standardwerten"
arbeiten.
Der Einfachheit halber (und weil Windows-Benutzer meist etwas unbeholfener sind an dieser Stelle
als Linux-User - nur Ananas-Benutzer sind da meist noch schlimmer als die Fenstergucker) nehmen
wir mal an, wir würden die Windows-Variante mit dem FTP-Client von Microsoft verwenden.
=====================================================
C:\Windows\system32>ftp 192.168.178.1
Connected to 192.168.178.1.
220 ADAM2 FTP Server ready
User (192.168.178.1:(none)): adam2
331 Password required for adam2
Password:
230 User adam2 successfully logged in
ftp> quote GETENV linux_fs_start
linux_fs_start 1
200 GETENV command successful
ftp> quote SETENV linux_fs_start 0
200 SETENV command successful
ftp> quote REBOOT
221 Thank you for using the FTP service on ADAM2
221 Goodbye.
Connection closed by remote host.
ftp> bye
C:\Windows\system32>
=====================================================
Wir sehen also nach dem Start des FTP-Clients die Antworten der FRITZ!Box, die u.a. darauf
hinweisen, daß eine Anmeldung erforderlich wäre, woraus der FTP-Client die aufdringliche
Frage nach dem Benutzernamen ableitet. Dieser ist einfach "adam2" und das ist auch das super-
geheime Kennwort, das anschließend noch abgefragt wird.
Im Anschluß kann man hingehen und mit dem GETENV-Kommando den aktuellen Wert der Einstellung
"linux_fs_start" auslesen. Wir hatten diese schon weiter oben erwähnt, als es um die Auswahl
von Kernel und Dateisystem des zu startenden Systems ging. Da so eine FRITZ!Box (zumindest
derzeit) nur zwei verschiedene Systeme verwalten kann, hat diese Variable entweder den Wert
0 oder den Wert 1 - sollte sie aus irgendeinem Grund mal nicht gesetzt sein, wäre das gleich-
bedeutend mit dem Wert 0.
Will man nun auf das andere System umschalten, muß man den Kopf etwas anstrengen und versuchen
zu ermitteln, was der jeweils andere Wert denn sein könnte. Diesen gibt man dann einfach in
einem SETENV-Kommando an und startet anschließend die FRITZ!Box durch das REBOOT-Kommando neu.
Diese merkwürdigen "quote"-Kommandos vor dem eigentlichen Befehl an die FRITZ!Box sind nur der
Tatsache geschuldet, daß wir im oben stehenden Beispiel einen FTP-Client verwenden und der
seinerseits eigene "lokale Kommandos" kennt, aus denen er dann passende Kommandos für den
(entfernten) FTP-Server ableitet. Da der Client aber unsere Kommandos an den Server ohnehin
nicht versteht, senden wir diese in unserer Beispielsitzung mit dem "quote"-Kommando direkt
an den Server. Wer gleich mit "nc" oder "socat" arbeitet, der muß zwar die Anmeldung "von
Hand" machen ("USER adam2", gefolgt von "PASS adam2"), aber als Entschädigung darf er dann
wieder diese "quote"-Ansagen auslassen und die Kommandos direkt eingeben.
Nun ist es sogar ein leichtes, dieses "Umschalten" der Variablen auch noch zu automatisieren,
denn zur der Entscheidung, aus einer "0" eine "1" zu machen oder aus einer "1" eben eine "0",
ist auch ein Computer problemlos in der Lage.
Sollte ich jemals das "eva_discover"-Skript inkl. aller Parameter-Auswertungen zu einem Ende
bringen, mache ich daraus sicherlich noch ein zweites Skript, das dann gleich die notwendigen
FTP-Kommandos auch noch ausführt und auch das Erstellen eines passenden PowerShell-Skripts,
das praktisch jede Windows-Version seit Windows 8 ausführen kann, ist eigentlich keine große
Kunst ... das kostet halt nur alles Zeit und wäre ja sowas von großartig geeignet für "erste
Schritte", wenn jemand programmieren lernen will ... vielleicht findet sich ja jemand - an
Unterstützung bei Fragen soll es nicht scheitern.
=============================================================================================
Update 26.04.2016
Unter der URL https://github.com/PeterPawn/YourFritz/blob/master/eva_tools kann man als
Linux-Benutzer ein paar Skript-Dateien laden, die einem die Umschaltung des Systems in einer
FRITZ!Box abnehmen können. Dazu benötigt man die folgenden Dateien in einem gemeinsamen
Verzeichnis auf seinem Linux-System:
https://github.com/PeterPawn/YourFritz/raw/master/eva_tools/eva_discover
https://github.com/PeterPawn/YourFritz/raw/master/eva_tools/eva_switch_system
https://github.com/PeterPawn/YourFritz/raw/master/helpers/yourfritz_helpers
Anschließend kann man (bei ausgeschalteter FRITZ!Box - also bei ausgestecktem Netzteil) das
Kommando
eva_switch_system <interface> <ip address>
starten (vorausgesetzt, man hat das aktuelle Verzeichnis in der PATH-Variablen, sonst muß
man den Aufruf von "eva_discover" in der Datei "eva_switch_system" noch anpassen). Der
erste Parameter gibt den Namen des LAN-Interfaces an, an dem die FRITZ!Box gesucht werden
soll und der zweite legt die IP-Adresse fest, die der Bootloader der FRITZ!Box benutzen
soll. Hier kann man irgendeine beliebige IP-Adresse angeben, die zum eigenen LAN-Segment
paßt ... man muß also nicht unbedingt seine Netzwerk-Interfaces auf irgendwelche Adressen
aus 192.168.178.0/24 umstellen.
Wenn das Kommando dann läuft (es wartet bis zu 120 Sekunden auf das "Erscheinen" der Box),
wird die FRITZ!Box mit Strom versorgt und dann sollte innerhalb der nächsten fünf Sekunden
die FRITZ!Box auch gefunden werden. Ist das der Fall, wird der Inhalt von "linux_fs_start"
ausgelesen, angezeigt, der neue Wert ermittelt und gesetzt. Anschließend wird die FRITZ!Box
neu gestartet und das Ergebnis der Kommunikation mit der FRITZ!Box in der Datei mit dem
Namen "eva_switch_system.log" im aktuellen Verzeichnis abgelegt.
=============================================================================================
Update 09.05.2018
Auch für Windows-Benutzer gibt es (seit langem) etwas Unterstützung beim Ändern von Variablen
im Urlader-Environment. Dazu kann man das PowerShell-Skript "EVA-FTP-Client.ps1" aus dem o.a.
Verzeichnis im "YourFritz"-Repository auf GitHub benutzen ... wie das genau geht, findet man
in einem Thread im IPPF.