Linux op je iPhone met iSH Shell

Noud van Kruysbergen
2

Inhoudsopgave

    Inleiding

    De gratis app iSH Shell breidt de functionaliteit van de iPhones en iPads van Apple uit met een geëmuleerde Linux-omgeving. Dat is vooral nuttig voor ontwikkelaars en beheerders – als je de juiste functies geïnstalleerd hebt.

    iSH SHell

    Het gebeurt in c’t niet zo vaak dat we een iOS-app wat meer aandacht geven in een iets uitgebreider artikel. Meestal leggen we alleen op de online-pagina kort uit wat zo’n app kan en welke functies hij heeft. Maar de opensource-app iSH Shell, die sinds oktober beschikbaar is in de App Store, is dan ook geen gewone iOS-app. Hij opent de deur naar volledig nieuwe toepassingen op een iOS-apparaat. De ontwikkelaar Theodore Dubois is erin geslaagd om een x86-Linux-emulator in de App Store te krijgen. De app draait een Alpine-Linux zonder grafische gebruikersinterface. Veel Linux-applicaties werken al, maar op sommige plekken is het nog behelpen.

    Na een paar weken gebruik te maken van deze app wordt zeker met voldoende inspiratie eigenlijk pas goed duidelijk wat er mogelijk is met Linux op een iOS-apparaat. Als typische iOS-gebruiker moet je daarbij wel leren om op een andere manier te denken. We hopen dat je daar door dit artikel genoeg inspiratie voor krijgt.

    Eindelijk code uitvoeren

    Tot nu toe kon je als ontwikkelaar niet veel doen met een iPad. Er waren wel code-editors, maar je kon de geschreven programma’s niet uitproberen. Er was geen compiler, geen webserver-app en geen Node.js-app voor wat lokale experimenten. Velen probeerden het te doen met een externe server door de code dan in te typen op de iPad en die met een SSH-app op de server te zetten. Maar met het ICE-framework werkte dat goede idee al niet lekker door onderbrekingen in de internetverbinding en werd de iPad gediskwalificeerd als ontwikkelaarstool.

    iSH Shell breidt het toepassingsgebied van het mobiele apparaat uit voor mobiel ontwikkelen. Om te beginnen heb je een iOS-apparaat nodig met minimaal iOS 11. De gratis app heet ‘iSH Shell’ en is verkrijgbaar in de Apple Store. Je hoeft je ook geen zorgen te maken over in-app aankopen. De app is gemaakt als een hobbyproject en is volledig opensource. De applicatie draait op een iPad en iPhone – maar is op die laatste niet zo leuk vanwege het kleinere scherm.

    Er zit niet veel franje in de app. Na het starten ervan beland je onmiddellijk op de commandline. Linux hoeft niet eerst minutenlang op te starten. Net zoals Microsoft bij het Windows Subsystem for Linux (WSL) of de ontwikkelaars van Wine het voor elkaar hebben gekregen, start iSH geen virtuele machine op, maar maakt het geëmuleerde systeemaanroepen van Linux-toepassingen.

    Volgens de ontwikkelaar heeft het feit dat een x86-Linux wordt geëmuleerd op de ARM-telefoon geen negatief effect op de prestaties. Hij moest sowieso ergens een emulatielaag inbouwen, want Apple staat geen toegang tot de virtualisatietechnologie toe. De emulator, die de ontwikkelaar zelf classificeert als JIT (‘just in time compiler’), is grotendeels direct in assembler geschreven. Een gedetailleerde technische uitleg in de documentatie is nog in bewerking.

    De interface is snel uit te leggen: boven het virtuele toetsenbord zitten de belangrijke toetsen voor het gebruik van de commandline. De ^ staat voor de Ctrl-toets, rechts daarvan zit de Esc-toets. Het pijlkruis kan het beste worden gebruikt met veeggebaren. Probeer niet de toets ingedrukt te houden en dan te vegen. Een veeggebaar naar boven laat daarbij dan het laatste commando uit de history zien.

    Als je de app per toeval in de Store zou ontdekken en installeren, zou je op het eerste gezicht bijna denken dat hij nutteloos is. De informatie die het commando uptime laat zien, geeft echter al aan dat er meer mee kan. Je krijgt dan te zien hoe lang het iOS-apparaat al draait. Maar de eenvoudigste Linux-commando’s zoals curl worden niet gevonden en zelfs een SSH-client zit er niet in. Je kunt ook geen pakketten downloaden, want de Alpine-pakketmanager apk ontbreekt. Dat komt door Apples restrictieve beleid voor de App Store. Men vindt het bij Apple blijkbaar niet leuk als apps code willen downloaden. De poort naar de wijde wereld kan echter geopend worden met een wget-commando, dat je ook kunt vinden en kopiëren vanuit de wiki van het project op GitHub:

    wget -qO- http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86/apk-tools-static-2.10.5-r1.apk | tar -xz sbin/apk.static && ./sbin/apk.static add apk-tools && rm sbin/apk.static

    Daarna werkt het commando apk en kun je de meest noodzakelijke dingen binnenhalen, bijvoorbeeld:

    apk add curl openssh nano

    Bestandsinterface

    Met apk add youtube-dl is onder meer de kleine tool youtube-dl beschikbaar, die video’s van verschillende videoplatforms kan downloaden. Als je bijvoorbeeld een bepaalde vlog wilt bekijken die dat ondersteunt, hoef je daarvan alleen maar de url te weten. Verder is het enige wat je nodig hebt een commando in iSH:

    youtube-dl https://youtu.be/<videocode>

    Na een paar minuten meldt het programma dat het klaar is en ls laat zien dat het mp4-bestand ook echt lokaal bestaat. Een commandline is echter niet echt de juiste plek om naar een video te kijken, maar de ontwikkelaars zijn erin geslaagd om het Linux-bestandssysteem van buitenaf toegankelijk te maken via de bestandsinterface van Apple. Dit breidt de toepassingsmogelijkheden van de app enorm uit.

    Open de systeem-app Bestanden, die op elk iOS-apparaat is geïnstalleerd. Daar kunnen allerlei soorten apps hun bestanden aanbieden voor uitwisseling. In de app navigeer je naar het topniveau waar alle locaties staan vermeld. iSH Shell staat daar al genoemd onder ‘Meer locaties’, die hoef je alleen nog maar in te schakelen. Dan krijg je toegang tot het Linux-bestandssysteem. In de map / root staat de gedownloade video, die je vervolgens kunt bekijken. Met behulp van de Bestanden-app kun je de video ook naar andere locaties kopiëren, bijvoorbeeld naar een Nextcloud of een SMB-schijf. De iSH-wiki legt uit hoe je andere bestandsaanbieders direct in de Linux-shell kunt mounten.

    De bestandsinterface is ook handig voor softwareontwikkelaars. Je hoeft geen code te schrijven op de commandline (hoewel vim en emacs net zo goed werken als nano), maar kunt een app gebruiken zoals de gratis Koder Code Editor uit de App Store. Dergelijke editors hebben meestal toegang tot de bestandsinterface van Apple en kunnen daardoor werken binnen het iSH-bestandssysteem.

    Met die kennis kun je bijvoorbeeld een zelfgeschreven Go-programma op het iOS-apparaat compileren en uitvoeren. Om dat te doen, maak je het bestand example.go aan met touch example.go. Open dat bestand met een commandoregel-editor naar keuze (met bijvoorbeeld nano example.go) of via de Bestanden-app met een grafische editorinterface. Zet daar een klein voorbeeldprogramma in:

    package main
    import(“fmt”)
    func main(){
    fmt.Println(“running on iOS!”)
    }

    Je voegt de interpreter toe met apk add php en start de ontwikkelserver met

    php -S localhost:8000

    Schakel over naar de Safari-browser en ga naar het adres http://localhost:8000. Je website draait nu lokaal en niets staat het ontwikkelen in ICE in de weg. Op een iPad met een toetsenbord kun je dan redelijk ontspannen programmeren door het splitscreen te gebruiken en de tekstverwerker in de ene helft te openen en de browser in de andere helft.

    iSH Shell

    iSH Shell gebruikt de Bestanden-app van iOS. Daardoor kun je bestanden met andere apps uitwisselen.

    Nog op te lossen

    Veel nuttige functies lopen al redelijk probleemloos. De performance is niet altijd geweldig, maar iSH is al veel meer dan alleen een proof-of-concept. De documentatie op de GitHub-wiki heeft nog veel meer leuke dingen te bieden en laat zien waar op dit moment nog aan gewerkt wordt. De Docker-daemon loopt bijvoorbeeld nog niet in de shell en genereert verschillende fouten.

    Als je er open voor staat je mobiele telefoon of tablet soms via de commandoregel te bedienen, zul je veel nuttige dingen ontdekken. Voorbeelden zoals youtube-dl laten zien dat niet alleen ontwikkelaars deze tool in het dagelijks leven kunnen gebruiken. Op onze website lees je een interview met Theodore Dubois, de ontwikkelaar van iSH Shell.

     

    (Deze tekst is verschenen in c’t 3/2021, p.132, met medewerking van Jan Mahn en Noud van Kruysbergen)

     

    Wil je op de hoogte blijven van het laatste IT-nieuws en de nieuwste online-artikelen? Meld je dan hier aan voor onze nieuwsbrief:

    Ontvang elke week het laatste IT-nieuws, de handigste tips en speciale aanbiedingen.

     

    Meer handige en interessante workshops vind je in c’t 12/2024

    Meer over

    AppsiOS

    Deel dit artikel

    Noud van Kruysbergen
    Noud van KruysbergenNoud heeft de 'American Dream' doorlopen van jongste bediende tot hoofdredacteur van c't, waar hij zo veel mogelijk de diepgang, betrouwbaarheid en diversiteit wil bewaken.

    Lees ook

    Met Raspberry Pi port knocking de computers in je netwerk beveiligen

    Iedereen die een computer of server met het openbare internet verbindt, wordt al snel het doelwit van hackers. Sommige wetenschappers gaan ervan uit d...

    Je Raspberry Pi op afstand bedienen? Zo krijg je het voor elkaar met SSH!

    De Raspberry Pi op afstand bedienen is handig en kan op verschillende manieren. Via SSH is het makkelijkste op te zetten, we laten zien hoe.

    2 Praat mee
    avatar
      Abonneer  
    nieuwsteoudste
    Laat het mij weten wanneer er
    Ad v Kooten
    Lezer
    Ad v Kooten

    Klinkt heel mooi die rescue stick.
    Om zo af en toe wat documenten te scannen met mijn canon CANOSCAN LIDE 20 moet ik altijd een oudere computer met 32 bits besturingssysteem uit de kast halen. De scanner doet het prima, maakt nog steeds goede kwaliteit scans, maar er zijn geen drivers meer voor mijn 64bits computer.
    Is dit probleem ook opgelost als ik de 32 bits rescue usb stick aanmaak en gebruik, en na opstarten de software en de drivers toevoeg?

    ad deplotter.nl
    Lezer
    ad deplotter.nl

    oh niet zo handig he