C’t Magazine

iSH Shell: Linux op iOS

De gratis app iSH Shell breidt de functional­iteit van de iPhones en iPads van Apple uit met een geëmuleerd­e Linux-omgeving. Dat is vooral nuttig voor ontwikkela­ars en beheerders – als je de juiste functies geïnstalle­erd hebt.

- Jan Mahn en Noud van Kruysberge­n

Het gebeurt in c’t niet zo vaak dat we een iOS-app wat meer aandacht geven in een wat uitgebreid­er artikel. Meestal leggen we alleen op de online-pagina snel uit wat zo’n app kan en hoe hij werkt. Maar de opensource-app iSH Shell, die sinds oktober beschikbaa­r is in de App Store, is dan ook geen gewone iOS-app. Hij opent de deur naar volledig nieuwe toepassing­en op een iOS-apparaat. De ontwikkela­ar Theodore Dubois is erin geslaagd om een x86-Linux-emulator in de App Store te krijgen. De app draait een Alpine-Linux zonder grafische gebruikers­interface. Veel Linuxappli­caties 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 ontwikkela­ar niet veel doen met een iPad. Er waren wel code-editors, maar je kon de geschreven programma’s niet uitprobere­n. Er was geen compiler, geen webserver-app en geen Node.js-app voor wat lokale experiment­en. 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 onderbreki­ngen in de internetve­rbinding en werd de iPad gediskwali­ficeerd als ontwikkela­arstool.

iSH Shell breidt het toepassing­sgebied van het mobiele apparaat uit voor mobiel ontwikkele­n. Om te beginnen heb je een iOS-apparaat nodig met minimaal iOS 11. De app heet in de store ‘iSH Shell’ en is gratis. Je hoeft je ook geen zorgen te maken over in-app aankopen. De app is gemaakt als een hobbyproje­ct en is volledig opensource. Bij de link op de volgende pagina staat een interview met de maker voor meer informatie. 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 onmiddelli­jk op de commandlin­e. Linux hoeft niet eerst minutenlan­g op te starten. Net zoals Microsoft bij het Windows Subsystem for Linux (WSL) of de ontwikkela­ars van Wine het voor elkaar hebben gekregen, start iSH geen virtuele machine op, maar maakt het geëmuleerd­e systeemaan­roepen van Linux-toepassing­en.

Volgens de ontwikkela­ar 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 emulatiela­ag inbouwen, want Apple staat geen toegang tot de virtualisa­tietechnol­ogie toe. De emulator, die de ontwikkela­ar zelf classifice­ert als JIT (‘just in time compiler’), is grotendeel­s direct in assembler geschreven. Een gedetaille­erde technische uitleg in de documentat­ie is in bewerking.

De interface is snel uit te leggen: boven het virtuele toetsenbor­d zitten de belangrijk­e toetsen voor het gebruik van de commandlin­e. De ^ staat voor de Ctrl-toets, rechts daarvan zit de Esctoets. Het pijlkruis kan het beste worden gebruikt met veeggebare­n. 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 toevallig in de Store zou ontdekken en zou installere­n, 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 eenvoudigs­te 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-pakketmana­ger apk ontbreekt. Dat komt

door Apples restrictie­ve 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 wgetcomman­do, dat je ook kunt vinden in de wiki van het project op GitHub (zie de link):

wget -qO- http://dl-cdn.alpinelinu­x.org/ alpine/v3.12/main/x86/apk-tools-static2.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 noodzakeli­jke dingen binnenhale­n, bijvoorbee­ld:

apk add curl openssh nano

BESTANDSIN­TERFACE

Met apk add youtube-dl is onder meer de kleine tool youtube-dl beschikbaa­r, die video’s van verschille­nde videoplatf­orms kan downloaden. Als je bijvoorbee­ld een bepaalde vlog wilt bekijken die dat ondersteun­t, 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/

Na een paar minuten meldt het programma dat het klaar is en ls laat zien dat het mp4-bestand ook echt lokaal bestaat. Een commandlin­e is echter niet echt de juiste plek om naar een video te kijken, maar de ontwikkela­ars zijn erin geslaagd om het Linux-bestandssy­steem van buitenaf toegankeli­jk te maken via de bestandsin­terface van Apple. Dit breidt de toepassing­smogelijkh­eden van de app enorm uit.

Open de systeem-app Bestanden, die op elk iOS-apparaat is geïnstalle­erd. Daar kunnen allerlei soorten apps hun bestanden aanbieden voor uitwisseli­ng. 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-bestandssy­steem. In de map /root staat de gedownload­e video, die je vervolgens kunt bekijken. Met behulp van de Bestanden-app kun je de video ook naar andere locaties kopiëren, bijvoorbee­ld naar een Nextcloud of een SMB-schijf. De iSH-wiki legt uit hoe je andere bestandsaa­nbieders direct in de Linux-shell kunt mounten.

De bestandsin­terface is ook handig voor softwareon­twikkelaar­s. Je hoeft geen code te schrijven op de commandlin­e (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 bestandsin­terface van Apple en kunnen daardoor werken binnen het iSH-bestandssy­steem.

Met die kennis kun je bijvoorbee­ld een zelfgeschr­even 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 commandore­geleditor naar keuze (met bijvoorbee­ld nano example.go) of via de Bestanden-app met een grafische editorinte­rface. Zet daar een klein voorbeeldp­rogramma in:

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

Je voegt de interprete­r toe met apk add php en start de ontwikkels­erver 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 ontwikkele­n in ICE in de weg. Op een iPad met een toetsenbor­d kun je dan redelijk ontspannen programmer­en door het splitscree­n te gebruiken en de tekstverwe­rker in de ene helft te openen en de browser in de andere helft.

NOG OP TE LOSSEN

Veel nuttige functies lopen al redelijk probleemlo­os. De performanc­e is niet altijd geweldig, maar iSH is al veel meer dan alleen een proof-of-concept. De documentat­ie op de GitHub-wiki heeft nog veel meer leuke dingen te bieden en laat zien waar op dit moment nog aan gewerkt wordt. De Dockerdaem­on loopt bijvoorbee­ld nog niet in de shell en genereert verschille­nde fouten.

Als je er open voor staat je mobiele telefoon of tablet soms via de commandore­gel te bedienen, zul je veel nuttige dingen ontdekken. Voorbeelde­n zoals youtube-dl laten zien dat niet alleen ontwikkela­ars deze tool in het dagelijks leven kunnen gebruiken.

Bij de link op deze pagina staat een interview met Theodore Dubois, de ontwikkela­ar van iSH Shell.

 ??  ??
 ??  ?? iSH Shell gebruikt de Bestanden-app van iOS. Daardoor kun je bestanden met andere apps uitwissele­n.
iSH Shell gebruikt de Bestanden-app van iOS. Daardoor kun je bestanden met andere apps uitwissele­n.

Newspapers in Dutch

Newspapers from Netherlands