Freifunk Event Installation mit LTE – Verkleinerung

Ich weiß noch nicht, ob das, was ich vor habe, funktioniert.

Die bisherige Freifunk Event Installation besteht aus zwei großen Event Cases. Eine FritzBox liefert Netz mit LTE, ein Futro wird als Offloader eingesetzt, ein überdimensionierter Switch verteilt an die Freifunk Router. Die Technik liefert etwa 80 MBits Durchsatz für ca. 250 Clients.

Eine neue Box soll es werden:

Es soll kleiner und schneller werden. Die Idee, ein Mini Computer mit LTE Modem Karte soll mit VirtualBox eine Offloader VM bekommen und das Mesh Netzwerk am LAN ausgeben. Meine FritzBox hat nur Cat 3 LTE und weil das Mini-Micro-Nano Sim Adapter Gedöns verkeilt war, ist diese kaputt.  Für Freifunk wurde eine Cat 6 LTE Card gesponsort, eine Sierra Wireless MC7455 (EM 7455), die 300MBit schafft. Der Offloader in der VM sollte auch mehr schaffen, als der Futro.

Ich dachte, auch eine WLAN Karte einzubauen, da aber über VirtualBox diese nur als “normale” Netzwerkkarte weitergegeben wird. habe ich diese weggelassen. Wäre schön gewesen, Freifunk über eine direkte W-LAN Steckkarte ausstralen zu können. Wäre dann 3in1 gewesen.

Nun brauchte es noch einen Sim Karten Adapter.

Das Freifunk Offloader VirtualBox Image hat den Vorteil, nicht den Murks mit den Treibern zu haben.

Dann gab es zwei Tage Probleme, eingesetzt Debian, Ubuntu und Fedora. Die Karte wurde nicht erkannt.  Auch das Modul aus der Fritzbox wollte nicht.

Stopp! Mehrere Anleitungen habe ich gelesen. Sie funktionierten alle nicht. Ein Tipp hat geholfen:

https://techship.com/faq/sierra-wireless-mc74-series-module-is-not-detected-by-the-operating-system/

Ja, richtig gelesen, Pins abkleben. Ich musste dann feststellen, das auch der Sim Adapter abgeklebt werden musste.

Mit Ubuntu 18.04 und dem Network-Manager ging die Box sofort online.

Der D2700 Prozessor ist jetzt nicht so toll für virtuelle Maschinen, kann nur 32 Bit VMs laufen lassen. Das 32Bit Offloader Image stürzt mit Kernel Panic ab.

Ich habe noch die Laptop Variante gebaut. LTE Stick -> Offloader VM – LAN – Freifunk Router.

Die 64 Bit Version funktioniert, die 32 Bit geht auf zwei Computern nicht. Eventuell probiere ich die Test Version. Sonst muss ich die Technik in Aachen fragen.

Nachtrag 14.07.2018

Ich war dann zweimal in Aachen. Zunächst war ein Versuch, mit KVM es hin zu bekommen. Tatsächlich startet das 64 Bit Image. Es ist jedoch extremst langsam, nicht funktional und die Netzwerkkonfiguration war nicht ganz richtig.

Das experimental Image mit 32 Bit startet dann endlich mit Virtualbox. Es ist wieder Lede, statt Gluon mit Einstellungsmöglichkeiten statt eines langsamen sicheren VPN ein performance Mode gibt.

Tagelang ging es wieder nicht weiter.  Das LAN Mesh machte Probleme. Es war die Netzwerkkarte on Board, die den benötigten Bridge Modus verweigerte, Mit einer anderen Karte funktionierte endlich das Projekt.

Zu beachten beim Bau eines LTE Offloaders

  • Wenn der Offloader als VM laufen soll, sollte die CPU VT unterstützen und eher die 64 Bit Variante genutzt werden.
  • Die Netzwerkkarte muss den Bridge Modus unterstützen
  • Bei Virtualbox muss der erste Netzwerkport die LAN Karte im Bridge Modus mit erlaubten Promiscuous sein
  • Der zweite Netzwerkport ist einfach NAT

Mobiler Freifunk Router mit LTE Stick – kleine Variante

Seit längerer Zeit habe Freifunk2go realisiert, das mit einer Power Bank oder mit einem Solarpanel mit Strom versorgt wird und einen LTE Uplink nutzt. Das ganze war umständlich mit zwei Routern und LTE Stick gemacht. Der Stick hing an einem “normalen” Router und mit einem sehr kurzen LAN Kabel war der Freifunk Router verbunden. Damit konnten 30 Clients klar kommen, selbst im Bus und in der Bahn hat das funktioniert mit freiem WLAN. Ab 120 km/h war aber zu Ende. Freifunk München hat jedoch eine Anleitung, wie ich ein Router sparen kann und der LTE Stick direkt am Freifunk Router hängt.

https://ffmuc.net/wiki/p/Freifunk_mit_USB-Tethering_(LTE-Router)

Diese Anleitung hat mit einem gl-ar150 mit Freifunk Aachen Firmware funktioniert. Leider bricht die LTE Verbindung nach einer kurzen Zeit ab und verbindet sich nicht erneut.

Stark verkürzte Anleitung

Autoupdate deaktivieren

uci set autoupdater.settings.enabled='0'
uci commi

USB LTE Stick nutzbar machen

opkg update
opkg install kmod-usb-core kmod-usb2 libusb-1.0 usb-modeswitch usbreset

Neustart

reboot && exit

cdc-ether

opkg update
opkg install kmod-mii kmod-usb-net kmod-usb-net-rndis kmod-usb-net-cdc-ether

Neustart

reboot && exit

Mit vi bearbeiten (a für Eingabemodus eingeben)

/etc/config/network
config interface 'wan' ÄNDERN config interface 'wan2'

Am Ende hinzufügen:

config interface 'wan'
        option igmp_snooping '0'
        option proto 'dhcp'
        option ifname 'eth2'
        option type 'bridge'
        option peerdns '0'
        option auto '1'

Vi mit ESC und !wq speichern und beenden.


Ab hier weiß ich nicht, ob das noch gebraucht wird:

opkg update

opkg install kmod-usb2 kmod-usb-net kmod-nls-base kmod-usb-net-rndis kmod-usb-net-cdc-ether

# WAN-Interface auf USB-Schnittstelle legen:

uci del network.wan

uci set network.wan=interface

uci set network.wan.ifname=usb0

uci set network.wan.proto=dhcp

uci set network.wan.type=bridge

uci set network.wan.igmp_snooping=0

uci set network.wan.peerdns=0

uci set network.wan.auto=1

uci commit network
reboot & exit

Eigenes WordPress DSGVO komform gestalten

Ob mit oder ohne Aufregung, Webseiten müssen jetzt mit dem Datenschutz übereinstimmen. Die uralten html Webseiten waren dem schon sehr nahe, meine WordPress Webseiten hingegen nicht. Ich hatte Google, Youtube, Twitter und andere eingebettet externe Inhalte eingebunden. Mit dem Firefox Elemente Untersuchen Netzwerk wurden noch andere externe Abrufe sichtbar. Es gibt Leute, die meinen, wenn diese externen Services in der Datenschutzerklärung aufgelistet sind, sei alle okay. Da die DSGVO tendenziell  so ausgerichtet ist, nur wenn es unbedingt sein muss, Daten verarbeitet werden sollen, sind diese Einbettungen fragwürdig. Diese Services können aber verlinkt werden, idealerweise mit einem Hinweis auf einen externen Link. Mit so Lösungen, wie Embetty, die gerade entstehen, lassen sich externe Inhalte wieder einbinden. Diese Proxy Server Lösung, die selbst gehostet werden können, leitet keine Daten an die Dienste weiter, die Informationen werden im Prinzip wie die Webseite nur vom eigenen Server abgerufen.

Auf der Such nach Themes und Plugins, die externe Inhalte laden

Mit Tools wie in Firefox Elemente untersuchen, ist sichtbar, was von wo abgerufen wird. In WordPress dann das verantwortliche Theme oder Plugin zu finden, ist aufwändiger. Mir hat ein sehr guter Freund gestern geholfen.

Die URLs müssen ja irgendwie im php Code vorhanden sein. Also war naheliegend, per SSH Terminal zum WordPress Verzeichnis zu gehen und alle Dateien zu durchsuchen, so ungefähr:

grep -R bootstrapcdn . | less
 grep -R fonts\.gstatic\.com . | less
 grep -R fonts\.googleapis\.com . | less

Es stellte sich heraus,  dass die beiden von mir verwendeten Themes Twentyfourteen und Twentyseventeen externes Zeugs laden.  Ohne Programmierkenntnisse wäre für mich hier zu Ende gewesen.

Die functions.php jeweils konnte entsprechen modifiziert werden:

Achtung, nutze den unten stehenden Code nur, wenn du weist, was du machst.  Uns war ein kleiner Fehler passiert, sodass Front- und Backend nicht mehr aufrufbar war und per SSH Terminal korrigiert werden musste.


// Remove Google Fonts
 add_action('wp_print_styles', 'dequeue_google_fonts_style');

function dequeue_google_fonts_style() {
  wp_dequeue_style('twentyfourteen-lato');
 }

// Remove Google Fonts
 add_action('wp_print_styles', 'dequeue_google_fonts_style');

function dequeue_google_fonts_style() {
  wp_dequeue_style('twentyseventeen-fonts');
 }

Später fand ich selbst noch heraus, dass diese Emjois auch extern geladen werden. Ebenfalls in der functions.php kann dies abgestellt werden:


// Remove Emojis
 function disable_emojis() {
         remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
         remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
         remove_action( 'wp_print_styles', 'print_emoji_styles' );
         remove_action( 'admin_print_styles', 'print_emoji_styles' );    
         remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
         remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );      
         remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
         add_filter( 'tiny_mce_plugins', 'disable_emojis_tinymce' );
 }
 add_action( 'init', 'disable_emojis' );

function disable_emojis_tinymce( $plugins ) {
         if ( is_array( $plugins ) ) {
                 return array_diff( $plugins, array( 'wpemoji' ) );
         } else {
                 return array();
         }
 }

Mit der Entfernung der eingebetten Dinge und Änderung der php Datei, waren meine WordPress Seiten DSGVO komform.

Ich werde nach und nach externe Links als solche noch genauer kennzeichnen.

Wie eine Datenschutzerklärung für meine selbst gehosteten Dienste Mediawiki, Murmur, Etherpad, Ethercalc, ejabberd, NextCloud, GNU social, Wekan, YOURLS undGitLab aussehen muss, ist noch eine große Frage für mich.

Neuer Internetanschluss, eigentlich ohne IPV6, eigentlich ohne Telefon

Ich hatte bisher einen Business Anschluss von Unitymedia mit 150 MBits down und 10 MBits upload mit einer statischen IPV4 Adresse und Telefon. Jetzt wurde ein Upgrade auf Company Internet durchgeführt und nun habe ich einen reinen Datenanschluss mit 200 MBits down und 15 MBits upload, fünf feste IPV4 Adressen. Die Fritzbox 6360, die eigentlich nur als Modem fungierte, wurde durch ein Hitron Router ersetzt, ebenfalls nur als Modem. Was sehr erfreulich ist, da die Ping Zeiten teilweise auf ein Drittel reduziert werden konnte, z.B. nach Google mit 11ms.

Die alte Fritzbox machte noch Telefon und mit Sipgate war noch meine uralte Telefonnummer, sowie die Freifunk Düren Nr. aufgeschaltet. Alle Nr. wurden an meine Festnetznummer auf dem Mobiltelefon weitergeleitet. Die Nr. 401312 ist nun dauerhaft deaktiviert und ich habe den Leuten jetzt direkt die Festnetzhandynummer gegeben. Die beiden Sip Nummern leiten direkt auf eine VoIP App auf dem Handy weiter, wenn es WLAN hat. Eventuell werde ich in der DMZ ein Gerät hängen, was per VoIP Telefon und Fax anbindet.

Die Fritzbox war auch in der Lage, einen 6in4 IPV6 Tunnel zu Hurican Electrics, einen Tunnelbroker zu machen. Da der eigentliche Router, ein Computer mit Smoothwall nur IPV4 konnte und auch keinen Tunnel aufmachen konnte, war ab der Fritzbox ein separates IPV6 Netzwerk und der Server hatte dafür eine zweite Netzwerkkarte.

Die Smootwall habe ich durch ipSense ersetzt. ipSense kann selbst den 6in4 Tunnel aufbauen. Somit habe ich jetzt hinter dem Router Computer echtes Dual Stack. Den Umweg über die zweite Netzwerkkarte am Server ist nicht mehr notwendig. Eigentlich bietet Unitymedia bei festen IPV4 Adressen kein Dualstack an, aber mit den Tunnel klappt das trotzdem.

Ein Vorhaben ist, einen zwar schmalbandigen, aber für Lernzwecke ausreichenden Freifunk Supernode einzurichten. Dafür werden die weiteren IP Adressen benötigt. Ich habe für die neue Konfiguration ein paar Tage gebrauch und bleibe motiviert.

Neues Windows Update und der alte PC wird nicht mehr unterstützt

Ab und dann kann es nach einem Microsoft Windows 10 Update vorkommen, dass der Rechner nicht mehr unterstützt wird. Bei Hardware und Peripherie kennen wir das seit bald 35 Jahren. Doch immer häufiger wäre der Computer von der Leistung noch fähig, die aktuelle Version zu bedienen.

Vor ein paar Tagen habe ich eine interessante Entdeckung gemacht, für Profis nichts neues.

Als Hostsystem ein Linux installieren und Windows in einer virtuellen Maschine laufen lassen. Wenn das System 6 GB Ram hat und zwei bis vier Kerne hat, kann das gut funktionieren.

So läuft das aktuelle Windows dann doch noch auf einem nicht mehr unterstützten PC.

Meine uralte QBasic Programme (1994-1996)

Ich habe als Teenager mal programmiert. Ab der vierten Klasse mit zehn Jahren zuerst Amiga Basic. Diese Programme gingen alle verloren. Als ich 14 Jahre alt war, nutzte ich einen 486er. Da gibt es ein paar wenige QBasic Programme noch. Ich könnte mal den 8088er von 1990 starten. Da sind eine Hand voll mehr Programme, falls ich die da wieder raus bekomme. Ich war jung, hatte noch weniger Ahnung als heute und hatte GNU noch nicht gekannt. Verzeiht mir diese schlechten Programme, die ich jetzt veröffentliche. 2003 sollte bei meiner Ausbildung zum Technischen Zeichner*in zu einer Projektarbeit eine Präsentation erstellt werden. Ich weigerte mich das mit Powerpoint zu mache (konnte das entscheiden) und bastelte eine CD mit Autostart (das ging damals), die den Browser für eine html Präsentation öffnete. Es war sogar Video mit drin. Für den Autostart hatte ich ein neun Zeilen Programm in Visual Basic 6 geschrieben und sechs Stunden im Netz gesucht. Es blendete auch einen Banner ein, dass das Team von dem Projekt zeigte.

Von weltweit Milliarden programmierenden Menschen bin ich der Schlechteste. Ich kann eigentlich nicht wirklich Programme schreiben.


Hier nun die Programme:


CODE.BAS – Die dümmste Variante etwas zu verschlüsseln:

s:
CLS
ca$ = CHR$(0)
PRINT “1 = codieren”
PRINT “2 = decodieren”
PRINT “3 = unbedingt lesen”
PRINT “4 = ENDE”
PRINT : PRINT : PRINT
INPUT “Die Wahl: “, VEgMS
IF VEgMS = 1 THEN GOTO co
IF VEgMS = 2 THEN GOTO deco
IF VEgMS = 3 THEN GOTO les
IF VEgMS = 4 THEN END
GOTO s
co:
CLS
PRINT “Geben Sie die zu codierende Nachricht ein!”
INPUT na$
FOR i = 1 TO LEN(na$)
xa$ = MID$(na$, i, 1)
ca = ASC(xa$)
IF ca = 97 THEN ca = 59
IF ca = 98 THEN ca = 45
IF ca = 99 THEN ca = 41
IF ca = 100 THEN ca = 92
IF ca = 101 THEN ca = 37
IF ca = 102 THEN ca = 33
IF ca = 103 THEN ca = 43
IF ca = 104 THEN ca = 90
IF ca = 105 THEN ca = 36
IF ca = 106 THEN ca = 65
IF ca = 107 THEN ca = 61
IF ca = 108 THEN ca = 47
IF ca = 109 THEN ca = 88
IF ca = 110 THEN ca = 60
IF ca = 111 THEN ca = 63
IF ca = 112 THEN ca = 58
IF ca = 113 THEN ca = 38
IF ca = 114 THEN ca = 42
IF ca = 115 THEN ca = 40
IF ca = 116 THEN ca = 62
IF ca = 117 THEN ca = 77
IF ca = 118 THEN ca = 89
IF ca = 119 THEN ca = 46
IF ca = 120 THEN ca = 75
IF ca = 121 THEN ca = 82
IF ca = 122 THEN ca = 44
ca$ = ca$ + CHR$(ca)
NEXT i
PRINT “Die codierte Nachricht lautet:”
PRINT ca$
PRINT : PRINT
PRINT “Wollen Sie die Nachricht drucken? 1=JA, alles andere=NEIN”
INPUT VEgMS
IF VEgMS = 1 THEN LPRINT ca$
GOTO s
deco:
CLS
PRINT “Geben Sie die zu decodierende Nachricht ein!”
INPUT na$
FOR i = 1 TO LEN(na$)
xa$ = MID$(na$, i, 1)
ca = ASC(xa$)
IF ca = 59 THEN ca = 97
IF ca = 45 THEN ca = 98
IF ca = 41 THEN ca = 99
IF ca = 92 THEN ca = 100
IF ca = 37 THEN ca = 101
IF ca = 33 THEN ca = 102
IF ca = 43 THEN ca = 103
IF ca = 90 THEN ca = 104
IF ca = 36 THEN ca = 105
IF ca = 65 THEN ca = 106
IF ca = 61 THEN ca = 107
IF ca = 47 THEN ca = 108
IF ca = 88 THEN ca = 109
IF ca = 60 THEN ca = 110
IF ca = 63 THEN ca = 111
IF ca = 58 THEN ca = 112
IF ca = 38 THEN ca = 113
IF ca = 42 THEN ca = 114
IF ca = 40 THEN ca = 115
IF ca = 62 THEN ca = 116
IF ca = 77 THEN ca = 117
IF ca = 89 THEN ca = 118
IF ca = 46 THEN ca = 119
IF ca = 75 THEN ca = 120
IF ca = 82 THEN ca = 121
IF ca = 44 THEN ca = 122
ca$ = ca$ + CHR$(ca)
NEXT i
PRINT “Die decodierte Nachricht lautet:”
PRINT ca$
PRINT : PRINT
PRINT “Wollen Sie die Nachricht drucken? 1=JA, alles andere=NEIN”
INPUT VEgMS
IF VEgMS = 1 THEN LPRINT ca$
GOTO s
les:
CLS
PRINT ” B I T T E L E S E N !”
PRINT
PRINT “Die eingegebene Nachricht darf nur aus kleinen Buchstaben bestehen.”
PRINT “Zahlen muessen auch in Buchstaben geschrieben werden. Es koennen”
PRINT “nicht mehr als 250 Zeichen benutzt werden.”
PRINT “Zum Decodieren bitte nur die angegebenen Zeichen benutzen.”
PRINT : PRINT
INPUT “Return “, VEgMS
GOTO s


MULTIPRO.BAS – Genau so dumme Verschlüsselung:

CLS
INPUT “Name: “, na$
INPUT “Alter: “, al
IF al < 5 THEN PRINT “Du bist zu jung!”: END
IF al > 120 THEN PRINT “Sie sind zu alt!”: END
IF na$ = “Matthias” THEN PRINT “Diesen Namen hat der Programmierer dieses Programmes auch.”: INPUT “Return “, j
q:
CLS
PRINT “1= Codier- und Decodiermaschiene”
PRINT “2= HF”
PRINT “10= Info”
PRINT “Alles andere = Ende”
INPUT “Die Eingabe: “, j
IF j = 1 THEN GOTO cod
IF j = 2 THEN GOTO hf
IF j = 10 THEN GOTO hel
END
cod:
INPUT “1=Codierung, 2=Decodierung,3=Hauptmenue “; j
IF j = 1 THEN GOTO co
IF j = 2 THEN GOTO deco
GOTO q
co:
CLS
PRINT na$; “, gebe die zu codierende Nachricht ein!”
INPUT n$
FOR i = 1 TO LEN(n$)
x$ = MID$(n$, i, 1)
c = ASC(x$) + al
IF c > 255 THEN c = c – 255
c$ = c$ + CHR$(c)
NEXT i
PRINT “Die codierte Nachricht lautet:”
PRINT c$
PRINT : PRINT
INPUT “1=Hauptmenue, 2=nochmal”, j
IF j = 1 THEN GOTO q
GOTO co
deco:
CLS
PRINT na$; “, gebe die codierte Nachricht ein! “
PRINT “ACHTUNG! Die Altersangabe am Anfang muss mit der Altersangabe”
PRINT “von der codierten Nachricht uebereinstimmen!!”
INPUT n$
FOR i = 1 TO LEN(n$)
x$ = MID$(n$, i, 1)
c = ASC(x$) – al
IF c < 0 THEN c = c + 255
d$ = d$ + CHR$(c)
NEXT i
PRINT “Die decodierte Nachricht lautet:”
PRINT d$
PRINT : PRINT
INPUT “1=Hauptmenue, 2=nochmal”, j
IF j = 1 THEN GOTO q
GOTO deco
hel:
CLS
PRINT ” I N F O”
PRINT
PRINT ” Die Codiermaschiene”: PRINT
PRINT “Es werden zwar alle wichtigen Sachen im Programmabschnitt”
PRINT “erwaehnt, aber es wurden noch Fehler entdeckt.”
PRINT “So ist es moeglich, noch einmal ein Nachricht einzugeben, doch”
PRINT “das Ergebnis wird einfach hinter das vorherige Ergebnis angehaengt.”
PRINT “Das Programm muss jedesmal neu gestartet werden. In der Original-“
PRINT “Version ist dieser Fehler schon behoben worden. Preis: 399,-DM”
PRINT “Fehler Nr.2, der nicht beseitigt werden kann: Die Nachricht kann nicht”
PRINT “laenger als 250 Zeichen sein. Je nach dem, welches Alter eingegeben”
PRINT “wurde (haengt von der Codierung ab), kann es vorkommen, dass bestimmte”
PRINT “Zeichen nicht lesbar sind. In der Originalversion auch behoben.”
PRINT : PRINT
PRINT ” H F”
PRINT “Teste Dein Gehoer! Wenn Du den Ton nicht mehr hoerst, druecke sofort”
PRINT “auf Pause, damit Du die Frequenz ablesen kannst. Druecke dann eine”
PRINT “beliebige Taste.”
INPUT “Return “, j
GOTO q
hf:
FOR i = 40 TO 25000
PRINT “Frequenz: “; i; ” Hz”
SOUND i, 3
i = i * 1.01
NEXT i
INPUT “Return “, j
GOTO q


MESSER.BAS – Ein sehr primitives Testprogramm zu Messen der CPU Geschwindigkeit für 8086 bis 586:

CLS
FOR i = 1 TO 25
PRINT CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); _
CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$( _
176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); _
CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176)
NEXT i
LOCATE 4, 27: PRINT “(c) 1996 by Matthias Schmidt”
LOCATE 6, 19: PRINT “G E S C H W I N D I G K E I T S M E S S E R”
LOCATE 8, 35: PRINT “fr Ihren PC”
LOCATE 16, 32: INPUT “Weiter mit RETURN”, VEgMS
start:
CLS
FOR i = 1 TO 25
PRINT CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); _
CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$( _
176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); _
CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176)
NEXT i
LOCATE 12, 17: PRINT “Ihr Computer wird nun eine Schleife ausrechnen.”
LOCATE 13, 17: PRINT “Dafr braucht er eine bestimmte Zeit. “
LOCATE 14, 17: PRINT “Die Zeit wird gez„hlt und nacher angegeben. “
LOCATE 15, 17: PRINT “Daran k”nnen sie erkennen, wie schnell ihr “
LOCATE 16, 17: PRINT “Rechner ist. “
LOCATE 18, 32: INPUT “Weiter mit RETURN”, VEgMS
CLS
a$ = TIME$
FOR i = 1 TO 10000
CLS
LOCATE 10, 25: PRINT i; ” von 10000. Bitte warten.”
NEXT i
b$ = TIME$
FOR i = 1 TO 25
PRINT CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); _
CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$( _
176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); _
CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176)
NEXT i
LOCATE 3, 28: PRINT “Zeit des Startes: “; a$
LOCATE 5, 28: PRINT “Zeit des Endes: “; b$
xa$ = MID$(a$, 1, 1)
v = ASC(xa$)
IF v = 48 THEN c = 0
IF v = 49 THEN c = 1
IF v = 50 THEN c = 2
IF v = 51 THEN c = 3
IF v = 52 THEN c = 4
IF v = 53 THEN c = 5
IF v = 54 THEN c = 6
IF v = 55 THEN c = 7
IF v = 56 THEN c = 8
IF v = 57 THEN c = 9
c = c * 10
xa$ = MID$(a$, 2, 1)
v = ASC(xa$)
IF v = 48 THEN c = c + 0
IF v = 49 THEN c = c + 1
IF v = 50 THEN c = c + 2
IF v = 51 THEN c = c + 3
IF v = 52 THEN c = c + 4
IF v = 53 THEN c = c + 5
IF v = 54 THEN c = c + 6
IF v = 55 THEN c = c + 7
IF v = 56 THEN c = c + 8
IF v = 57 THEN c = c + 9
xa$ = MID$(a$, 4, 1)
v = ASC(xa$)
IF v = 48 THEN d = 0
IF v = 49 THEN d = 1
IF v = 50 THEN d = 2
IF v = 51 THEN d = 3
IF v = 52 THEN d = 4
IF v = 53 THEN d = 5
IF v = 54 THEN d = 6
IF v = 55 THEN d = 7
IF v = 56 THEN d = 8
IF v = 57 THEN d = 9
d = d * 10
xa$ = MID$(a$, 5, 1)
v = ASC(xa$)
IF v = 48 THEN d = d + 0
IF v = 49 THEN d = d + 1
IF v = 50 THEN d = d + 2
IF v = 51 THEN d = d + 3
IF v = 52 THEN d = d + 4
IF v = 53 THEN d = d + 5
IF v = 54 THEN d = d + 6
IF v = 55 THEN d = d + 7
IF v = 56 THEN d = d + 8
IF v = 57 THEN d = d + 9
xa$ = MID$(a$, 7, 1)
v = ASC(xa$)
IF v = 48 THEN e = 0
IF v = 49 THEN e = 1
IF v = 50 THEN e = 2
IF v = 51 THEN e = 3
IF v = 52 THEN e = 4
IF v = 53 THEN e = 5
IF v = 54 THEN e = 6
IF v = 55 THEN e = 7
IF v = 56 THEN e = 8
IF v = 57 THEN e = 9
e = e * 10
xa$ = MID$(a$, 8, 1)
v = ASC(xa$)
IF v = 48 THEN e = e + 0
IF v = 49 THEN e = e + 1
IF v = 50 THEN e = e + 2
IF v = 51 THEN e = e + 3
IF v = 52 THEN e = e + 4
IF v = 53 THEN e = e + 5
IF v = 54 THEN e = e + 6
IF v = 55 THEN e = e + 7
IF v = 56 THEN e = e + 8
IF v = 57 THEN e = e + 9
xa$ = MID$(b$, 1, 1)
v = ASC(xa$)
IF v = 48 THEN cm = 0
IF v = 49 THEN cm = 1
IF v = 50 THEN cm = 2
IF v = 51 THEN cm = 3
IF v = 52 THEN cm = 4
IF v = 53 THEN cm = 5
IF v = 54 THEN cm = 6
IF v = 55 THEN cm = 7
IF v = 56 THEN cm = 8
IF v = 57 THEN cm = 9
cm = cm * 10
xa$ = MID$(b$, 2, 1)
v = ASC(xa$)
IF v = 48 THEN cm = cm + 0
IF v = 49 THEN cm = cm + 1
IF v = 50 THEN cm = cm + 2
IF v = 51 THEN cm = cm + 3
IF v = 52 THEN cm = cm + 4
IF v = 53 THEN cm = cm + 5
IF v = 54 THEN cm = cm + 6
IF v = 55 THEN cm = cm + 7
IF v = 56 THEN cm = cm + 8
IF v = 57 THEN cm = cm + 9
xa$ = MID$(b$, 4, 1)
v = ASC(xa$)
IF v = 48 THEN dm = 0
IF v = 49 THEN dm = 1
IF v = 50 THEN dm = 2
IF v = 51 THEN dm = 3
IF v = 52 THEN dm = 4
IF v = 53 THEN dm = 5
IF v = 54 THEN dm = 6
IF v = 55 THEN dm = 7
IF v = 56 THEN dm = 8
IF v = 57 THEN dm = 9
dm = dm * 10
xa$ = MID$(b$, 5, 1)
v = ASC(xa$)
IF v = 48 THEN dm = dm + 0
IF v = 49 THEN dm = dm + 1
IF v = 50 THEN dm = dm + 2
IF v = 51 THEN dm = dm + 3
IF v = 52 THEN dm = dm + 4
IF v = 53 THEN dm = dm + 5
IF v = 54 THEN dm = dm + 6
IF v = 55 THEN dm = dm + 7
IF v = 56 THEN dm = dm + 8
IF v = 57 THEN dm = dm + 9
xa$ = MID$(b$, 7, 1)
v = ASC(xa$)
IF v = 48 THEN em = 0
IF v = 49 THEN em = 1
IF v = 50 THEN em = 2
IF v = 51 THEN em = 3
IF v = 52 THEN em = 4
IF v = 53 THEN em = 5
IF v = 54 THEN em = 6
IF v = 55 THEN em = 7
IF v = 56 THEN em = 8
IF v = 57 THEN em = 9
em = em * 10
xa$ = MID$(b$, 8, 1)
v = ASC(xa$)
IF v = 48 THEN em = em + 0
IF v = 49 THEN em = em + 1
IF v = 50 THEN em = em + 2
IF v = 51 THEN em = em + 3
IF v = 52 THEN em = em + 4
IF v = 53 THEN em = em + 5
IF v = 54 THEN em = em + 6
IF v = 55 THEN em = em + 7
IF v = 56 THEN em = em + 8
IF v = 57 THEN em = em + 9
f = cm – c
g = dm – d
h = em – e
IF h < 0 THEN h = h + 60: g = g – 1
IF g < 0 THEN g = g + 60: f = f – 1
IF f < 0 THEN f = 0
LOCATE 8, 26: PRINT “Ihr System ben”tigte: “
LOCATE 10, 26: PRINT f; ” Stunden “
LOCATE 11, 26: PRINT g; ” Minuten “
LOCATE 12, 26: PRINT h; ” Sekunden, “
LOCATE 14, 26: PRINT “um die Schleife auszurechnen. “
LOCATE 17, 26: PRINT “ACHTUNG! Sekunden k”nnen sich “
LOCATE 18, 26: PRINT ” um 1 ver„ndern! “
LOCATE 20, 26: INPUT ” Weiter mit RETURN. “, VEgMS
fal:
CLS
FOR i = 1 TO 25
PRINT CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); _
CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$( _
176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); _
CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176)
NEXT i
LOCATE 10, 18: PRINT “1 = ENDE 2 = Information DRUCKEN 3 = nochmal”
LOCATE 12, 15: PRINT “Geben Sie die Zahl ein und dannach RETURN.”
LOCATE 14, 40: INPUT VEgMS
IF VEgMS = 1 THEN GOTO ende
IF VEgMS = 2 THEN GOTO druck
IF VEgMS = 3 THEN GOTO start
GOTO fal
ende:
CLS
FOR i = 1 TO 25
PRINT CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); _
CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$( _
176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); _
CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176)
NEXT i
LOCATE 10, 22: PRINT “DIESES PROGRAMM MUSS KOPIERT WERDEN!!!”
LOCATE 11, 22: PRINT “————————————–“
LOCATE 12, 22: PRINT ” “
LOCATE 13, 22: PRINT “Wenn Sie dieses Programm benutzt haben”
LOCATE 14, 22: PRINT “, máen Sie es weiter geben, damit es “
LOCATE 15, 22: PRINT “sich verbreiten kann. Durch die Ver- “
LOCATE 16, 22: PRINT “breitung mittels Kopie entf„llt die “
LOCATE 17, 22: PRINT “Zahlungspflicht. Ver. 1.1 4/96”
LOCATE 20, 26: INPUT ” Zurck zu DOS mit RETURN. “, VEgMS
PRINT
PRINT
END
druck:
CLS
FOR i = 1 TO 25
PRINT CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); _
CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$( _
176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); _
CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176); CHR$(176)
NEXT i
LOCATE 10, 26: PRINT ” Text wird gedruckt an LPT1. “
LPRINT “GESCHWINDIGKEITSMESSER FšR IHREN PC VER. 1.1 4/96 VEgMS”
LPRINT
LPRINT “*********************************************************”
LPRINT “Am “; DATE$; ” wurde ein Testlauf auf Ihrem PC gemacht.”
LPRINT
LPRINT “ERGEBNIS:”
LPRINT
LPRINT “Ihr System ben”tigte: “
LPRINT
LPRINT f; ” Stunden “
LPRINT g; ” Minuten “
LPRINT h; ” Sekunden, “
LPRINT
LPRINT “um die Schleife auszurechnen. “
LPRINT “ACHTUNG! Sekunden k”nnen sich um 1 ver„ndern”
LPRINT
LPRINT “DIESES PROGRAMM MUSS KOPIERT WERDEN!!!”
LPRINT “Wenn Sie dieses Programm benutzt haben”
LPRINT “, máen Sie es weiter geben, damit es “
LPRINT “sich verbreiten kann. Durch die Ver- “
LPRINT “breitung mittels Kopie entf„llt die “
LPRINT “Zahlungspflicht. Ver. 1.1 4/96”
LOCATE 22, 32: INPUT “Weiter mit Return!”, VEgMS
GOTO fal


MATHE.BAS – Ein kleines Programm für geometrische Berechnung (etwas sinnvoller):

SCREEN 0
anfang:
CLS
WIDTH 80, 50

LOCATE 20, 25: PRINT “Volumenberechnung “
LOCATE 21, 25: PRINT “Dreieck 1”
LOCATE 22, 25: PRINT “Rechteck 2”
LOCATE 23, 25: PRINT “Quader 3”
LOCATE 24, 25: PRINT “Pyramide 4”
LOCATE 25, 25: PRINT “ENDE e”
LOCATE 30, 25: INPUT “Bitte Ausw„hlen”; n

IF n = 1 THEN GOTO Dreieck
IF n = 2 THEN GOTO rechteck
IF n = 3 THEN GOTO quader
IF n = 4 THEN GOTO pyramide
IF n = e THEN GOTO ende

IF NOT n = 1 THEN GOTO falsch
IF NOT n = 2 THEN GOTO falsch
IF NOT n = 3 THEN GOTO falsch
IF NOT n = 4 THEN GOTO falsch
IF NOT n = e THEN GOTO falsch

Dreieck:
CLS
INPUT “L„nge”; a
INPUT “Breite”; b
INPUT “H”he”; h

rechnung = (a * b) * h / 2
PRINT “Das Ergebniss ist”; rechnung
LOCATE 40, 1: INPUT “Drcke ENTER um Fortzufahren”; enter
GOTO anfang

rechteck:
CLS
INPUT “L„nge”; a
INPUT “Breite”; b
INPUT “H”he”; h

rechnung = a * b * h
PRINT “Das Ergebniss ist”; rechnung
LOCATE 40, 1: INPUT “Drcke ENTER um Fortzufahren”; enter
GOTO anfang

quader:
CLS
INPUT “L„nge”; a
rechnung = a * a * a
PRINT “Das Ergebniss ist”; rechnung
GOTO anfang

pyramide:
CLS
INPUT “L„nge”; a
INPUT “Breite”; b
INPUT “H”he”; h

rechnung = (a * b) * h / 3
PRINT “Das Ergebniss”; rechnung
LOCATE 40, 1: INPUT “Drcke ENTER um Fortzufahren”; enter
GOTO anfang

falsch:
CLS
PRINT “Falsche Eingabe”
GOTO anfang

ende:
END


 

Debian Software Raid 1 mit LVM auf HP Z600 mit 8 TB Festplatten

Ich zweifle oft an mir selbst und es kann sein, dass ich vieles falsch mache. Ich hatte die letzten Tage erhebliche Probleme, möchte jedoch nun mitteilen, wie ich das gelöst habe. Möglicherweise ist dieser Fall speziell und ich habe Fehler gemacht, oder ich habe etwas gelöst, was nicht vorgesehen war.

Das Vorhaben:

Auf einer HP Z600 Workstation mit zwei Intel Xeon E5640 Prozessoren und genug Ram sollen zwei 8TB Festplatten ein Raid 1 Array Verbund mit LVM unter GNU Debian Linux 9 haben.
Vorher war Debian auf einer 8 TB HDD.

Das Problem:

Ich hatte vor zwei Jahren schon einmal ein verschlüsseltes LVM mit Raid 1 unter Debian zum laufen gebracht und benötigte drei Abläufe wegen Unkenntnisse. Es war ein anderer Computer. Nun funktionierten so ziemlich alle Tutorials und Anleitung nicht, die unterschiedlich Partitionieren  beschrieben. Grub oder Lilo ließen sich nicht installieren, oder fanden den Raid Verbund nicht. Mal wurde Platte nicht gefunden, ein andres mal machte der Rechner eine Reboot Loop Schleife, bei etwas komischer abweichender Konfiguration.

Nach normaler Vorgehensweise konnte Grub 2 nicht installiert werden. Ich versuchte alle denkbaren Einträge:

/dev/sdX /dev/sdX1 2 usw. /dev/md0 1 usw.

Die Ursache:

Das Disk Label der beiden Platten machte Probleme, zumindest in diesem speziellen Fall auf dieser Workstation.  Damit die acht Terabyte voll genutzt werden können,  waren sie auf GPT. Komischerweise lief das System mit einer Platte als GPT. Als Raid 1 möchte Grub2 auf einer ms-dos gelabelten Platte, also den Mountpoint /boot .

Den Unterschied vom ms-dos und GPT Label ist im Menü an der Partitionen zu erkennen, z.B. pri/log bei ms-dos.
Die Label habe ich mit Gparted Live CD angepasst. Doch 8 TB in zwei Terabyte Stücken bis max. 4 TB macht kein Sinn. Doch so ist das Boot Flag setzbar. Wird normalerweise heute nicht mehr gebraucht, aber vielleicht ist diese Maschine anders.

Meine spezielle Lösung:

Eine kleine dritte Platte.

  • /dev/sda mit 250GB ms-dos
  • /dev/sdb mit 8 TB GPT
  • /dev/sdc mit 8 TB GPT

 

  • /boot und Swap Auslagerungsdatei auf /dev/sda
  • /dev/md0 mit /dev/sdb und /dev/sdc als Raid
  • LVM auf /dev/md0 mit Volumen Groupe vg0 und Logisches Volumen lv_root
  • Dateisystem ext4 auf lv_root mit Einhängepunkt /

So hat es nach zwei Tagen endlich geklappt.