iSH für Apple iOS – Das iPhone wird Linux-tauglich

Apple hat sein Smartphone-Betriebssystem iOS – in den ersten drei Majorreleases noch unter dem Namen iPhone OS vermarktet – von Anfang an so abgeschottet, dass es einem als User und Entwickler nicht möglich ist, mit Dateien in einem Dateisystem App-übergreifend arbeiten zu können, sowie mit einer Applikation weitere Programme sich auf das Gerät installieren zu können. – Auch unter dem Begriff Sideloading bekannt. – Jede Applikation soll ausschließlich separat über den Apple-eigenen iOS App Store auf iPhone oder iPad bezogen und installiert werden. Dies ist von Apple auch in den Regularien für App-Entwickler vorgeschrieben und wird vor der Veröffentlichung in einem Review-Prozess kontrolliert. Apple begründet dies damit, dass Nutzer so vor schädlicher Malware geschützt werden sollen. Der Nachteil dabei ist aber, dass die Smartphones und Tablets von Apple in der Nutzungsmöglichkeit weitaus unflexibler als die Geräte für Googles Android oder den Apple-eigenen Laptops, also Computern sind. Besonders ärgerlich ist dies am größten bei den iPads, weil selbst Apple diese spätestens seit dem iPad Pro auch inzwischen als Computer-Kategorie vermarktet, die einem klassischen Laptop – also Apples eigene MacBook (Air/Pro) ersetzen können sollen. Mit den Smart-Keybords bietet Apple selber auch Peripherie für ihre Tablets an, die das Handling eines klassischen Laptops ermöglicht – dazu aber zusätzlich ein Touch-Display für die Bedienung mit Fingergesten und Stift direkt auf das Display.
Apple hat mit der eigenen Files-Apps für iOS und iPadOS ein Programm für den Umgang mit Dateien inzwischen implementiert, aber an die Möglichkeiten die der Finder auf den Macs oder der Datei-Explorer unter Windows bietet, kommt diese App nicht im Ansatz heran.
Apple hatte aber bereits nun vor über sechs Jahren das Unternehmen Burstly übernommen gehabt, mit deren App Testflight einem es möglich war, auch Apps im Rahmen von Beta-Tests von Entwicklern außerhalb des Apple-eigenen App Stores sich auf iPhone oder iPad installieren zu können. Das machte es sehr interessant, eine iOS-Applikation für einen wirklich sehr begrenzten Umfang an Benutzern entwickeln und ausrollen zu können, ohne die App durch Apples Review-Prozess hindurch in den App Store veröffentlichen zu müssen. Zum Beispiel für eine selbstgebaute Smarthome-Steuerung für weniger als 100 iOS-Usern in einem Verein oder MakerSpace. Die angenommenen 100 User hätte man einfach als die Beta-Tester deklariert.

Alpine Linux

Vor zwei Jahren hatte dann der Softwareentwickler Theodore Dubois das Projekt iSH auf GitHub veröffentlicht gehabt, mit dessen es dann möglich war, sich ein emuliertes Linux auf das iDevice installieren zu können. Bei iSH handelt es sich dabei um eine iOS-App, in der im Usermode des Darwin-Systems – also der Betriebssystemunterbau von iOS auf Basis des BSD-Unix von Apple – ein Emulator zu Ausführung von Maschinenbefehlen der x86_32 Architektur läuft mit einem Alpine-Linux. Alpine-Linux ist wiederum eine auf BusyBox basierende Linux-Distribution, die in erster Linie für „Power-User entwickelt wurde, die Sicherheit, Einfachheit und Ressourceneffizienz schätzen“. Das Alpine-Linux verwendet als eigenes Paketverwaltungssystem apk-tools. Somit ließ sich weitere quelloffene Software aus der GNU-Linux-Welt mit zum ersten mal außerhalb Apples App Store auf iPhone beziehungsweise iPad installieren. Möglich war dies, weil Apple vor rund zwei Jahren selber mit der Swift-Playground App für iOS eine einfache und spielerische Möglichkeit geschaffen hat, auf iPhone und iPad anhand ihrer eigenen Programmiersprache Swift das Programmieren zu erlernen. Und es ist in Testflight für Entwickler möglich, für App-Tester Programmteile aus dessen Quellen nachinstallieren zu können. Über die Testflight-App musste man sich automatisch zu einem Beta-Tester für iSH aktivieren und schon konnte man für jede „Testversion“ von iSH für einen vorher definierten Zeitraum die Testversion benutzen. Allerdings war aber die Anzahl der Beta-Tester auf maximal 10.000 User begrenzt.

Vor 3 Tagen ging dann die Meldung durch die IT-Tech-Presse, dass von iSH die Version 1.0 von Apple im App Store zum Download freigegeben wurde. Die Frage ist aber, wie ist das möglich, wenn die Regularien des App Stores das Sideloading von weiteren Programmen aus einer App verbietet? Die Antwort ist: Das Kommandozeilenprogramm apk ist nicht mehr Teil von iSH, so dass keine weiteren Programmpakete erst einmal nachgeladen werden können. Dass es aber über einen kleinen Umweg möglich ist, werde ich am Ende noch kurz dokumentieren.

Zuvor aber noch ein paar Worte zu iSH, wie es bereits seit der zuvor zweijährigen Testflight-Beta gibt und verhält.:
Das Alpine-Linux in iSH enthält bereits eine Reihe gängiger Kommandozeilenprogramme wie wget, curl und den Texteditor vi. Alpine setzt nach wie vor auf das einfache und leichte OpenRC als Init-System. Allerdings funktionieren nicht alle Pakete. Darunter zum Beispiel nicht ifconfig, ip, nmap, arp, dpkg, lighthttpd und weitere andere.
Die Linux-Umgebung mitsamt Kernel ist nur wenige Megabyte groß. Über eine File-Provider-Extension lässt sich iSH auch in Apples vorinstallierte Dateien-App integrieren und erlaubt so einen Zugriff auf das eigene Dateisystem – um das Kopieren von Dateien in andere iOS-Apps zu ermöglichen.

Da ich derzeit ein iPhone 8 mit 256 Gigabyte Flssh-Speicher besitze, steht also der gesamte noch verfügbare Flash-Speicher für die Erweiterung des Linux mit Programmen, Bibliotheken und Daten zur Verfügung. Das heißt aber auch im Umkehrschluss, dass in das Alpine Linux nachinstallierte Programmpakete und Bibliotheken seitens des iOS als Nutzer-Daten und Dokumente angesehen werden. Der Nachteil: Mein iPhone-Backup fällt auch entsprechend im Laufe der Nutzung größer auf meinen Backup-Medien aus. Der Vorteil ist aber, dass im Fall eines iPhone-Wechsels das gesamte System auf das neue Gerät mit der Migration des iPhone-Backups in einem Rutsch mit kopiert wird. – Allerdings sofern die Gesamtkapazität des neuen Gerätes nicht die Größe des Backups unterschreitet.

Midnight Commander in iSH

Die Neben-Story meines derzeitigen iPhones ist ja, dass ich vor genau drei Jahren bei dem Wechsel von meinem bis dahin genutzten iPhone 5 mit 32 GB Flashspeicher nicht abschätzen konnte, welche Speicherkonfiguration des damals neu angebotenen iPhone 8 für mich die richtige ist. Mein Ziel seit damals ist ja, dass ich das Gerät auch wieder mindestens 5 Jahre durchgängig nutzen möchte. Voraussetzung war aber, dass ich alle Apps und Daten des restlos vollen 32 Gigabyte Gerätes mit auf das damals neue iPhone 8 migriere und übernehme. Das Problem bestand aber darin, dass ich dachte, die weiteren 32 Gigabyte auf die 64 Gigabyte in der kleinsten Konfiguration könne für die immer größer werdenden Apps nicht für die 5 kommenden Jahre reichen. Apple hat cleverer weise dann kein 128 Gigabyte Modell angeboten, weil sie genau wussten, dass der unsichere Kunde wie ich im Zweifel sowieso gleich auf die nächsthöhere Speicherkonfiguration zurückgreifen wird, und haben für weitere 170,- Euro dann nur noch die 256 Gigabyte-Variante angeboten. – Um nun auf den Punkt zu kommen: Von den unterschätzten 64 Gigabyte sind nun nach drei Jahren noch 6,4 Gigabyte frei, und die insgesamt noch verfügbaren 198,4 Gigabyte machen nun für mich endlich richtig Sinn.
Anstatt furchtbarer HTML-WebApps um Audio-/Video-Dateien bearbeiten und konvertieren zu können, jetzt die Kraft von FFmpeg auf der Shell. Statt herumfummeln mit Browser und Apps wie Documents, Dateien mit wget herunterladen. Oder anstatt Geld für eine grafische App zahlen zu müssen, um Python-Code in einem Interpreter ausführen zu können, mit der Gefahr, dass numerische Ergebnisse ungewöhnlich ausgegeben werden, der originale Interpreter wie ich ihn von jeder Unix-Konsole her kenne.

Apple! – Dafür dass Ihr berechtigterweise es tatsächlich geschafft habt, mich für 192 Gigabyte zusätzlichen Flashspeicher um weitere 170,- Euro über den Tisch zu ziehen, verzeihe ich euch dafür ein wenig, weil ihr euch bezüglich des Sideloading-Verbotes von Theodore Dubois austricksen habt lassen. – Ich hoffe, ihr überlegt es euch nicht noch einmal anders und schmeißt iSH eben nicht wieder dafür aus dem App Store!

Jetzt noch zum Schluss das kurze HowTo, wie sich nach dem Download von iSH weitere Linux-Pakete installieren lassen.:

  1. wget http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86/apk-tools-static-2.10.5-r1.apk
  2. tar xf apk-tools-static-2.10.5-r1.apk sbin/apk.static
  3. ./sbin/apk.static add apk-tools
  4. rm sbin/apk.static

Links:
https://ish.app
iSH auf GitHub
iSH im Apple iOS App Store
Alpine Linux (engl. Wikipedia)
Projektseite Alpine Linux
Übernahme von TestFlight durch Apple (TechCrunch)
FFmpeg (engl. Wikipedia)
Wget (engl. Wikipedia)
Python (engl. Wikipedia)

Netzwerk-Bridge unter Linux mit TUN/TAP

Seit längerem trage ich bereits das Projekt in meinem Kopf herum, einen Mainframe-Computer der VAX-Reihe von Digital Equipment Corporation (kurz DEC) zu emulieren und auf diesem emulierten System wiederum das auch von DEC dazu entwickelte ‚Virtual Memory System‘ (kurz VMS später OpenVMS) als Betriebssystem zu installieren um damit ein wenig herum zu spielen. Ich habe aber bereits NetBSD, das ebenfalls von DEC entwickelte und proprietäre Unix Ultrix, als auch OpenVMS auf die emulierte Maschine kurz installiert. Nur waren diese Unternhmungen eher halbherzig, denn eine wichtige Komponente hatte ich bisher nie mit einbezogen. Nämlich die Netzwerkfähigkeit eines dieser Systeme. Ohne Netzwerk ist so eine emulierte Maschine zwar schön zum anschauen und herum probieren, aber sie verharrt weiterhin als eine Art Insellösung, wie früher, als die Computer in den häuslichen Wohnstuben noch nicht mit einem (Drahtlos-) Netzwerk verbunden waren und selbst das Internet mittels eines Modemzugangs noch teuer und keine Selbstveständlichkeit waren. Erst die Kommunikation von Computern untereinander macht sie flexibel und nochmals interessanter. Mit einer Netzwerkanbindung lassen sich Betriebssystem und Programme updaten oder gar upgraden, Dateien und Nachrichten hin und her übertragen und eigene Dienste anbieten.

Die Möglichkeit der Netzwerkkonnektivität ist aus meiner Sicht zumindest bei der Desktop-Virtualisierung eine recht einfache Sache. Denn die VMWare’s, Parallels und VirtualBox’es dieser Welt richten während ihrer Installation eine Netzwerkbridge in Software für das Wirtssystems automatisch mit ein, da sie die nötigen Treiber bereits mitbringen. So kann für eine virtuelle Maschine der Bridge-Modus zum direkten Zugriff auf ein physikalisches Netz, ein geteiltes Subnet mit NAT für mehrere virtuelle Maschinen untereinander oder eine Peer-To-Peer Verbindung zum Wirtssystem angeboten werden.

Bei der Emulationssoftware simh ist das etwas anders. Das Programm bringt keinen eigenen Treiber für eine Netzwerkbridge mit. Das Programm selber ist zwar netzwerkfähig, aber es ist nötig einen virtuellen Netzwerk-Kernel-Treiber wie TUN/TAP zu installieren, um die Netzwerkgeräte zu simulieren.

TUN simuliert dabei ein Ende-zu-Ende-Netzwerkgerät (ISO OSI-Schicht 3) und kommuniziert mit IP-Paketen mit der Software, während TAP eine Punkt-zu-Punkt-Verbindung mittels Ethernet-Gerät simuliert (ISO OSI-Schicht 2) und über Ethernet-Frames mit der Software kommuniziert.

In meinem DokuWiki habe ich einen ersten Workaround zur Erstellung einer Netzwerk-Bridge unter Linux mit TUN/TAP erstellt.:
Netzwerk-Bridge mit TUN/TAP für eine Computer-Emulation

Links:
TUN/TAP (engl. Wikipedia)
TUN/TAP (Projektseite auf source forge)
SIMH (dt. Wikipedia)
DEC VAX (engl. Wikipedia)
DEC OpenVMS (engl. Wikipedia)
Ultrix (engl. Wikipedia)
NetBSD (dt. Wikipedia)

Teletext auf dem Raspberry Pi generieren

Im Herbst 2018 veröffentlichte der Heise-Verlag zum ersten Mal das Sonderheft c’t-Retro. Neben den Themen zu alten Computern wie den ZX Spectum oder Commodore C64 sowie anderen Technik-Bereichen der IT aus der Sicht längst vergangener Tage, hatten die Redakteure ein Raspberry Pi Projekt vorgestellt, mit dem es möglich ist, selber den Fernseh-Teletxt zu erstellen und auszugeben.

Teletext, hier in Deutschland eher unter dem Begriff Videotext bekannt, ist ja das textuelle Zusatzangebot der Fernsehsender für die eigenen Programminformationen, sowie aktuelle Sportergebnisse und Nachrichten. Übertragen wird der Teletext mit dem PAL-Normsignal in der Austastlücke.

Zum Nachbau des Projektes braucht es nicht viel an Hardware. Glücklicherweise habe ich noch einen Raspberry Pi der ersten Generation mit einer Buchse für den Composite Video Cinchstecker. – Die neueren Generationen haben statt der Chinchbuchse nur einen GPIO-Pin für die analoge Videoausgabe. Mein elektronischer Aufbau ist daher recht übersichtlich.:

Am Composite-Ausgang des Raspberry Pi’s geht ein Chinchkabel auf den Adapter für S-Video und Composite meines Elgato TV-Hybrid DVB-T USB-Sticks. Der DVB-T Stick ist also der „Fernseher“, der mit seiner Fernseh-Software EyeTV das PAL-Signal wieder als Bild ausgibt.
Der Raspberry Pi selber besitzt in seiner jetzigen finalen Aufbaustufe eine SD-Karte mit einem Respbian-Linux für die Teletext-Software und einen kleinen USB-WiFi-Dongel, um sich auf ihn über W-LAN zu administrativen Zwecken mittels SSH verbinden zu können.

Ist der Raspberry Pi so konfiguriert, dass die Bildschirmausgabe über das PAL-Signal an den „Fernseher“ geht und eine USB-Tastatur direkt am Raspberry Pi angeschlossen ist, dann fällt direkt die enorme Latenz auf, die durch den analogen Umweg entsteht. Ist der Raspberry Pi über seinen HDMI-Ausgang an einem gewöhnlichen Computerbildschirm angebunden, besteht die enorme Latenz nicht.
Wird dann der Teletext-Dienst VBit2 gestartet, so ist über die Teletext-Taste des „Empfangsgerätes“ der Videotext, der aus den vorinstallierten Tafeln besteht, zu sehen und es lässt sich wie bei den klassischen Fernsehsendern durch ihn hindurch navigieren.
Es gibt aber bereits eine Teletext-Tafel, in der die Temperatur des ARM-Chips und die lokale IP-Adresse des Rasperry Pi’s ausgelesen und angezeigt werden.
Die c’t-Redaktion hatte sich dann entsprechende Tafeln erstellt, mit denen die Meldungen und Nachrichten aus dem Heise-Newsticker als Teletxt abgerufen werden können.

In meinem Wiki habe ich eine entsprechende Installationsanleitung erstellt, wie die Software VBit2 auf dem Raspbian zu installieren ist.
Link: http://sommteck.net/wiki/doku.php?id=linux:vbit2_teletext-generator

Sobald ich meine ersten eigenen Gehversuche bei dem Erzeugen eigener Teletext-Tafeln erfolgreich durchschritten habe, werde ich dazu ein Update schreiben.

Update 05. April 16:05 Uhr:

Von der genannten Teletext-Tafel, in der die Temperatur des ARM-Chips und die lokale IP-Adresse des Rasperry Pi’s ausgelesen und angezeigt werden kann, gibt es natürlich auch ein Foto. Ich habe alle Bilder in einer eigenem Album.:
Link Fotoalbum VBit2

Links:
Heise c’t-Artikel: Teletext auf dem Raspberry Pi generieren
Links Teletext auf dem Raspberry Pi generieren
Projekt Heise Raspi Newstext (Github)
Teletext Page Editor im Browser
Teletext (dt. Wikipedia)
Raspberry Pi (dt. Wikipedia)
Composite Video (dt. Wikipedia)
Geniatech EyeTV (ehemals Elgato)

Kurzeinstieg zum ed-Editor

Nachdem ich vor ungefähr 11 bis 12 Jahren begann, mich mit der Bedienung des Texteditors vi für BSD-Unix und Linux anzufreunden, ist dieser auf einer Shell inzwischen auch für mich der Texteditor erster Wahl. Im Kontext einer Linux User Group hatte ich bereits damals mitbekommen, dass dieser Texteditor – sowie dessen weiterentwickelter Nachfolger vim – bei durchaus langjährigen Linux-Anwendern beziehungsweise -Administartoren sehr geschätzt wird, während Neulinge durch das ungewohnte Bedienungskonzept eher erst einmal irritiert und verschreckt reagieren und ihn dann mit Unverständnis begegnen.
Es ist durchaus interessant zu wissen, dass der vi zu einer Zeit entwickelt wurde, in der Computererminals mit einer Tastatur ausgestattet waren, die im Umfang an verfügbaren Tasten noch Schreibmachinen glichen und es eben noch keine Cursor-Tasten gab, um im Text zeilen- und spaltenweise den Cursor zu navigieren. Er arbeitet stattdessen kontextbasiert. Mit einem Befehlsmodus, einem Einfügemodus, bei dem der Text direkt bearbeitet werden kann, sowie dem Kommandozeilenmodus.

Zur Zeit beschäftige ich mich zunehmend mal mit Unix-Versionen, die inzwischen einen historischen Status genießen. Bei diesen ist zum einen vermutlich aus Speicherplatzgründen des Installationsmediums, und in einem anderen Fall auf Grund des enormen Alters der Unix-Version, kein vi vorhanden und stattdessen als einziger Texteditor der ed verfügbar.

Bei dem ed handelt es sich auch wie beim vi um einen kontextbasierten Texteditor. Allerdings arbeitet Dieser nicht Seitenbasiert mit den Text-Dateien, sondern nur zeilenorientiert. Das liegt daran, dass er natürlich älter als der vi ist, und zu einer Zeit Anfang der 1970er Jahre von Ken Thompson mit Unix mit entwickelt wurde, als die Programmierer die Computer noch mit einem Fernschreiber als Ein- und Ausgabegerät bedienten und noch keine elektrischen Bildschirmterminals zur Verfügung standen, die Dateien seitenweise ausgeben konnten.

Vor vielen Jahren bin ich dann beim Durchstöbern des Internets auf eine ISO-Datei gestoßen, die für einen normalen PC bootfähig ist und einen etwa 10 Megabyte großen Emulator zur Ausführung des ‚Unix Time-Sharing System Seventh Edition (V7)‘ vom Januar 1979 beinhaltet. Bei dem Emulator habe ich dann damals recht schnell wieder das Handtuch geworfen, weil ich trotz meiner bereits bestenenden Erfahrung hinsichtlich der Bedienung des vi’s zusätzlich nur mit der zeilenweisen Ausgabe einer Textdatei nicht zurecht kam.

Vor ein paar Tagen habe ich schließlich noch einmal einen Versuch erfolgreich gestartet und mich mit den wichtigsten Befehlen – beziehungsweise dessen Kommandozeilenmodus vertraut gemacht. Als Einstieg hat mir dabei auch der Beitrag „Eine Anleitung für Anfänger zur Verwendung des ed Editor unter Linux“ des Blog’s HowtoForge geholfen.

Die wichtigsten Kommandos und Befehle habe ich mir auch noch einmal zusätzlich in eine eigen kleine Tabelle ins Wiki gestellt.
Link: – Kurzübersicht ed Editorkommandos (eigenes Wiki)

Weitere Links:
Ersterfahrungen mit NetBSD (Blog-Artikel vom 25. Oktober 2008)
Texteditor vi (dt. Wikipedia)
Texteditor vim (dt. Wikipedia)
Texteditor ed (dt. Wikipedia)
Eine Anleitung für Anfänger zur Verwendung des ed Editor unter Linux (HowtoForge)

Grundkonfiguration vom DHCP-Client unter (Debian-) Linux

Im Schnitt passiert es mir ungefähr einmal im Jahr, dass ein Datenträger mit einer Linux-Installation denn Computer wechselt. Auch wenn dabei bei allen betroffenen Systemen eine dynamische Zuordnung der IP-Adressen in den Netzwerken stattfindet, ist das Problem, dass das Linux – im meinen Fällen Debian-Derivate – die Schnittstelle an der festen MAC-Adresse des Ursprungssystem fest macht. Ergo ist nach dem Einbau des Datenträgers im neuen Host trotz aktiviertem DHCP-Client erst einmal keine Verbindung mit dem Netz möglich. Es muss wieder dazu gebracht werden, eine neue IP-Adresse vom DHCP-Server anzufordern.

Dazu Anlass für mich genug, meine Linux-Grundkenntnisse um die Lektion der manuellen Grundkonfiguration einer Netzwerkschnittstelle auszubauen.

Link zum eigenen Wiki-Eintrag Grundkonfiguration DHCP-Client