Defektes Teasi One 3 extend wiederherstellen

Mein Schwiegervater hat ein Fischer E-Bike und zumindest eine Zeit lang hatten die als Fahrradcomputer ein Tahuna Teasi One 3 extend mit dabei. Das Teil ist ein Windows CE PocketPC mit Touch Screen und da drauf läuft Tahuna, was quasi ein Open Streetmap Client mit Spezialisierung auf Fahrrad fahren ist. Der Hersteller dieses Gerätes ist vor einer Zeit insolvent gegangen und es gab noch ein letztes Update für das System, wo dann wohl auch alle Länderkarten freigeschaltet wurden (die vorher Geld gekostet haben). Und dieses Update funktionierte wohl noch bis Ende 2023 und damit zu spät für mich. Da noch ein zweites Teasi mit einer neueren Software vorhanden war, dachte ich, dass ich das System einfach rüber kopieren kann (das Gerät verhält sich wie ein USB Stick am Rechner). Dummerweise ging das zwar, allerdings wollte das Tahuna dann einen Lizenzschlüssel, der natürlich nicht vorhanden war. Und ganz blöderweise ging in diesem Moment der USB Stick Modus nicht mehr, sodass das Gerät quasi festgefahren war.

Weder möglicher Support Dienstleister noch das was von der Firma übrig war konnten mir weiterhelfen bzw. waren überhaupt erreichbar. Auf den noch online verfügbaren Seiten des Herstellers war die Rede von einem Wiederherstellungsimage, welches man auf eine Micro SD Karte kopieren konnte und damit das Gerät auf Werkseinstellungen bekommen konnte. Ja, aber leider waren die Links bereits tot. Also klapperte ich diverse Blogs und Foren ab, um dann irgendwann beim Forum von mtb-news.de zu landen. Dort fand ich einen Thread und ein User namens Holger hatte genau das gleiche Teasi wie ich und sprach auch von dem Wiederherstellungs-Image. Also kontaktierte ich ihn, er meldete sich, fand noch die alte Micro-SD Karte von seiner Wiederherstellung und konnte dank einer Anleitung von mir eine Kopie der Karte als Image anfertigen. Nachdem er mir die Datei dann zugeschickt hatte, spielte ich sie auf die Karte und es funktionierte direkt auf Anhieb – sie formatierte das Teasi komplett und nach einem Neustart ging es direkt in den USB Stick Modus.

Und GLÜCKLICHERWEISE hatte ich vor meiner Herumkopiererrei eine komplette Sicherheitskopie des Systems gezogen, welche ich anschließend wieder auf das Gerät kopieren konnte – und es funktionierte.

Da ich vielleicht nicht der letzte mit diesem Problem bin, möchte ich die Datei zur Verfügung stellen und hoffe jemandem damit genauso zu helfen wie Holger es mit mir getan hat.

WICHTIG: dieses Image formatiert mehr oder weniger einfach nur den internen Speicher des Teasi One 3 Extend (ich vermute es geht auch mit den anderen Versionen, kann das aber nicht verifizieren!). Das bedeutet, nachdem diese SD Karte in das Gerät eingelegt wird beginnt SOFORT die Formatierung, alle Daten auf dem Teasi sind direkt gelöscht! Wenn das Gerät nicht eingeschaltet ist dann passiert die Formatierung erst nach dem Einschalten mit der eingelegten Karte.

ACHTUNG!!!! ACHTUNG!!!! ACHTUNG!!!!

Die Teasi Update Server sind offline, ihr könnt das original System NICHT wiederherstellen!!!!

HABT IHR ALSO KEINE KOMPLETTE SICHERHEITSKOPIE EURES “BikeNav” ORDNERS VOM TEASI, DANN LEGT KEINESFALLS!!!!! EINE MICRO-SD MIT DIESEM IMAGE IN DAS GERÄT EIN!!!!!!

Dieses Image bringt euch nur etwas, wenn ihr eine original Kopie des BikeNav Ordners habt!

Nach dieser Warnung, hier nun das Image: Teasi One 3 Extend Recovery Image

Wie man Jenkins Credentials wieder auslesen kann

Wie in so vielen CI/CD Tools kennt auch Jenkins das Prinzip von Secrets. Dabei kann man Benutzername/Passwort, nur Passwort, SSH Keys usw. im System hinterlegen und dann innerhalb von Build Jobs darauf zugreifen. Sollte der Inhalt des Secrets irgendwo im Build Log ausgegeben werden, ist Jenkins sogar so schlau das ganze mit **** zu maskieren. An sich also ein sehr praktisches System. Kommt man nun aber wie ich an den Punkt, dass man Secrets in Jenkins hat, aber sie dummerweise nirgendwo anders gespeichert hat, dann ist das ein Problem.

Aber es gibt eine Lösung, die ich hier gefunden habe: https://stackoverflow.com/questions/34795050/how-do-i-list-all-of-my-jenkins-credentials-in-the-script-console

Man öffnet im Jenkins einfach die Script Konsole ([JENKINS_URL]/manage/script) und fügt dort folgendes Script ein, und lässt es dann ausführen:

import java.nio.charset.StandardCharsets;
def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
      com.cloudbees.plugins.credentials.Credentials.class
)
for (c in creds) {
  println(c.id)
  if (c.properties.description) {
    println("   description: " + c.description)
  }
  if (c.properties.username) {
    println("   username: " + c.username)
  }
  if (c.properties.password) {
    println("   password: " + c.password)
  }
  if (c.properties.passphrase) {
    println("   passphrase: " + c.passphrase)
  }
  if (c.properties.secret) {
    println("   secret: " + c.secret)
  }
  if (c.properties.secretBytes) {
    println("    secretBytes: ")
    println("\n" + new String(c.secretBytes.getPlainData(), StandardCharsets.UTF_8))
    println("")
  }
  if (c.properties.privateKeySource) {
    println("   privateKey: " + c.getPrivateKey())
  }
  if (c.properties.apiToken) {
    println("   apiToken: " + c.apiToken)
  }
  if (c.properties.token) {
    println("   token: " + c.token)
  }
  if (c.properties.subscriptionId) {
    println("   subscriptionId: " + c.subscriptionId)
  }
  if (c.properties.clientId) {
    println("   clientId: " + c.clientId)
  }
  if (c.properties.tenant) {
    println("   tenant: " + c.tenant)
  }
  if (c.properties.clientSecret) {
    println("   clientSecret: " + c.clientSecret)
  }
  if (c.properties.plainClientSecret) {
    println("   plainClientSecret: " + c.plainClientSecret)
  }
  println("")
}

Anschließend werden in der Ausgabe alle Secrets mit ihrem hinterlegten Namen und ihren Inhalten ausgegeben.

Influxdb auf dem Raspberry Pi scheitert an der Compaction der Daten mit “cannot allocate memory”

Influxdb wird bei sehr vielen IoT Systemen verwendet, weil es die perfekte Datenbank für die Erfassung von Metriken ist. Wenn man dann im Sekundentakt Daten rein pumpt, dann füllt sich so eine Datenbank natürlich auch irgendwann. Und dafür gibt es dann den Mechanismus der Compaction, welcher in regelmäßigen (konfigurierbaren) Abständen die bisherigen Daten zusammenfasst, optimiert und ggf. auch reduziert.

In sehr vielen Fällen kommt als Server ein Raspberry Pi zum Einsatz, der in den meisten Fällen auf einem 32 Bit Betriebssystem betrieben wird. Und hier ist Influxdb (mittlerweile wird von denen auch 32Bit gar nicht mehr supported) eine mehr oder weniger tickende Zeitbombe. So auch bei mir. In den letzten Tagen ist die Last auf dem System auf durchschnittlich 20 und darüber gegangen, obwohl der Raspberry sonst nur eine Load von ca. 1-2 hatte.

Im Log konnte ich dann sehen, dass Influxdb alle 15 Sekunden versucht hat, die Daten zu compacten, aber immer wieder scheiterte – weil der RAM nicht ausreichte. “cannot allocate memory” konnte ich dann immer wieder im Log lesen, und der Spaß ging von vorne los.

Das Problem hier ist: Influxdb lädt alle Daten erstmal in den RAM, um sie dann zu compacten. Es benötigt für seine Arbeiten dann ungefähr das 2-3 fache der Datenbankgrö0e an RAM. Sobald man diese Grenze einmal überschreitet, passiert der Fehler wie bei mir und ist nicht wirklich zu lösen.

Ein User hat sich dann hingesetzt und das Problem analysiert und auch einen Fix gebastelt, der aber leider nicht gemerged wurde. Aber man kann den Fix selbst einbauen oder dankenswerterweise direkt das fertige Docker Image mit dem Patch nutzen:

https://github.com/terjesannum/docker-influxdb-arm32/pkgs/container/influxdb-arm32

docker pull ghcr.io/terjesannum/influxdb-arm32:1.8.10-1

Zusätzlich solltest du in deiner Influxdb Config folgendes einstellen:

[data]

index-version = “tsi1”
tsm-use-seek = true

Der zweite Parameter sollte nur gesetzt werden, wenn deine Influx DB auf einer SSD liegt, da im Prinzip auf in-Memory Sachen verzichtet wird und stattdessen die Platte genutzt wird. Das ist bei Low-Memory Systemen wie derm Raspberry Pi vorteilhafter. Wenn du den Raspberry Pi allerdings nur mit der SD Karte betreibst, dann schalte das keineswegs an!

Wenn du nun Influxdb startest, dann sollte die Compaction der Datenbank ohne Probleme durchlaufen.

Wie man sich in Whatsapp selber schreiben kann und das Ganze als Datenaustausch nutzt

“Warum sollte man das wollen?” dachte ich mir auch, als ich diese Funktion das erste mal im Chatprogramm Slack gesehen hatte. Aber wenn man etwas drüber nachdenkt, ist es gar nicht so blöd. Man kann sich über mehrere Geräte hinweg relativ einfach Notizen schreiben oder Dateien austauschen, und man kann auch einfach Dinge wie Formatierungen, Emoticons usw. ausprobieren bevor man sie jemand anderem schickt.

In Whatsapp geht das so erstmal nicht, man kann sich aber eines Tricks bedienen. Dazu legt man eine neue Gruppe an, und lädt (zwangsweise) irgendeine Person in diese Gruppe ein. Sobald die Gruppe angelegt ist, schmeißt man diese Person wieder aus der Gruppe heraus und ist ab diesem Moment alleine in der Gruppe. Und das war es schon – das ist nun euer Chat, in dem ihr euch selbst schreiben könnt bzw. den nur ihr sehen könnt.

Wenn man nun noch https://web.whatsapp.com verwendet, dann kann man so relativ leicht auch Daten zwischen mehreren Computern austauschen – und das ohne irgendeine Software auf den entsprechenden Rechnern zu installieren. Einfach im Browser die Adresse aufrufen, einmalig mit der Whatsapp App auf dem Handy den QR-Code Scannen und schon kann man auf diesem Rechner Whatsapp nutzen und somit auch in die eben angelegte Gruppe schreiben sowie Dateien hochladen.

PS: Wenn ihr das Ganze nutzt um Bilder zu versenden, dann beachtet bitte, dass Whatsapp die Bilder die ihr sendet verkleinert. Wollt ihr originale versenden, dann müsst ihr z.B. zip Dateien verwenden.

Wie man die komplette Wikipedia auf einen Raspberry Pi bekommt

Für Gegenden mit schlechter Internetanbindung oder aber für den Katastrophenfall wäre es doch ganz nett, wenn man die komplette Wikipedia offline auf einem kleinen Raspberry Pi vorhalten könnte. Mittels der Kiwix Software ist dies möglich.

Und so setzt du das Ganze auf:

Lade dir unter

https://download.kiwix.org/release/kiwix-tools/

das entsprechende tar herunter – für Raspberry Pi wäre das dann aktuell

kiwix-tools_linux-armhf-3.1.2-4.tar.gz

und entpacke das Ganze in einen beliebigen Ordner auf dem Raspberry Pi.

Unter

https://wiki.kiwix.org/wiki/Content_in_all_languages

findest du die offline Dumps der jeweiligen Wikipedia Sprachen in unterschiedlichsten Varianten. Die (englische) Erklärung zu den Varianten (min, max, usw.) findest du hier: https://download.kiwix.org/zim/README

Für die meisten Leute dürften folgende Links relevant sein (und auf eine 128gb Karte inkl. Betriebssystem passen):

Wikipedia Deutsch (komplett)

Wikipedia Englisch (ohne Bilder)

Neben diesen kompletten Dumps gibt es auch die Möglichkeit, nur einzelne Unterbereiche/Themenbereiche der jeweiligen Sprache zu laden. Man kann beliebig viele Pakete laden und auf den Raspberry Pi werfen, die Kiwix Software macht dann alles zusammen verfügbar.

Leg die heruntergeladenen zim Dateien in einen beliebigen Ordner auf dem Raspberry Pi.

Anschließend legst du eine systemd Startdatei für den Kiwix Server unter

/etc/systemd/system/kiwix.service

mit folgendem Inhalt an:

[Unit]
Description=kiwix

[Service]
User=kiwix
Group=kiwix
ExecStart=/[PFAD_ZUM_ENTPACKTEN_TAR]/kiwix-serve -p 8080 /[PFAD_ZU_DEN_HERUNTERGELADENEN_ZIM_DATEIEN]/wikipedia_de_all_maxi.zim /[PFAD_ZU_DEN_HERUNTERGELADENEN_ZIM_DATEIEN]/wikipedia_en_all_nopic.zim
Restart=on-failure
RestartSec=30s
TimeoutSec=30s

[Install]
WantedBy=multi-user.target

Und schließlich aktivierst du den neu erstellten Service noch:

systemctl daemon-reload
systemctl enable kiwix.service
systemctl start kiwix.service

Damit wird der Server so eingerichtet, dass er jedes mal automatisch startet, sobald der Raspberry Pi gestartet wird.

Im Anschluss kannst du unter der IP des Raspberry Pi auf Port 8080 bzw. auf ihm selbst mit http://127.0.0.1:8080 auf die Wikipedia zugreifen – und das völlig offline.

Um die Daten auf den neuesten Stand zu bringen reicht es, einfach die neuen zim Dateien zu laden und den Server einmal neu zu starten.

Das schöne Dresden – eine mittles K.I. aufbereitete Doku über Dresden aus dem Jahre 1936

Es handelt sich um eine private Dokumentation der Stadt Dresden aus dem Jahre 1936, welche per künstlicher Intelligenz deutlich aufgewertet wurde – aus schwarz-weiss wurde Farbe, aus den verwackelten und damals üblichen ruckeligen Aufnahmen werden ruhige Kamerabilder mit flüssigen Bewegungen. Wenn man sich das Original anschaut, dann ist es wirklich krass was man dort mittels Computer und moderner Technik rausholen konnte.

PS: Der Film selbst startet ab Minute 1.

Das Video wurde leider mittlerweile gesperrt, man findet hier aber eine ähnliche Variante:

Gedreht wurde das Video damals von Dr. Gerhard Schneider. Das Original ist hier zu finden:
http://mediathek.slub-dresden.de/vid90000810.html