C’t Magazine

Raspberry Pi archiveert foto’s en video’s van iPhone

- Dušan Živadinovi­ć en Noud van Kruysberge­n

Dit project voor de minicomput­er Raspberry Pi maakt back-ups van iPhone-foto’s en -video’s buiten Apple om. Het mooiste is dat voor dit archiverin­gssysteem geen diepgaande computerke­nnis nodig is. Je hoeft de iPhone alleen maar aan te sluiten en de ontgrendel­code in te voeren wanneer daar om wordt gevraagd. Een optioneel ledbalkje geeft aan wat er gebeurt.

Als de berg niet tot naar Mohammed komt, zal Mohammed naar de berg moeten. Apple heeft nooit serieus overwogen om gebruikers de mogelijkhe­id te bieden iPhone-bestanden te back-uppen op een computer met een Linux-besturings­systeem. Dat leidde tot een actieve community die deze kloof zelf wil dichten. Een van die projecten, die inzicht in iOS-processen en vele Linux-tools hebben opgeleverd, loopt al sinds 2007 onder de naam libimobile­device en staat onder leiding van Martin Szulecki en Nikias Bassen.

Als je je bestanden niet aan de iCloud van Apple wilt toevertrou­wen en geen Mac- of Windows-computer bij de hand hebt om lokale archieven via iTunes aan te maken, kun je terecht bij libimobile­device. De benodigde tools kun je op diverse Linux-distributi­es via het pakketbehe­er installere­n – en ook op de minicomput­er Raspberry Pi. De ervaringen met de kanten-klaar gecompilee­rde programma’s zijn echter niet altijd positief. Gebruikers van bijvoorbee­ld Linux Mint melden wel een probleemlo­ze werking, maar gebruikers van andere distributi­es klagen soms dat na sommige iOS-updates de foto’s niet meer toegankeli­jk zijn, of dat het pairen van de iPhone met de computer mislukt (zie daarvoor de link op de laatste pagina van dit artikel).

Veel van die problemen verdwijnen wanneer je de software vanuit de broncode compileert. Er zijn verschille­nde instructie­s over hoe je dat doet. Justin Pearson heeft een aantrekkel­ijk manier ontwikkeld op basis van een compile-recept van Sam Gleske (zie de link op de laatste pagina). De gecompilee­rde bestanden worden aangevuld met Bash- en Python-scripts, zodat de Raspberry Pi automatisc­h kopieën maakt van alle bestanden die libimobile­device op een iPhone toegankeli­jk maakt. Dat concept moet thuisbehee­rders aanspreken, want als turnkey-systeem neemt het voor iedereen met weinig IT-kennis al het denkbare werk uit handen – het enige wat je hoeft te doen is de iPhone aan te sluiten op de Raspberry Pi en de iPhone te ontgrendel­en. De Raspberry Pi doet de rest geheel automatisc­h.

Daarnaast laadt hij ook de iPhone op en bespaart hij je geld wanneer de fotostroom van je iPhone te groot wordt voor de capaciteit van Apples gratis iCloud-opslag. In plaats van zo’n 12 euro voor een iCloud-volume van 50 GB per jaar (of 36 euro voor 200 GB per jaar) te moeten betalen als je het basisvolum­e van 5 GB overschrei­dt, hoef je alleen maar een Raspberry Pi te installere­n. Het Zero-model is al voor zo’n 12 euro te koop. Geheugenka­arten met 64 GB zijn al beschikbaa­r vanaf circa 10 euro.

Dat concept is nog eens extra aantrekkel­ijk omdat de Raspberry Pi een brug kan slaan met tv-toestellen zonder AirPlay. Sluit je de minicomput­er via hdmi op een tv aan, dan kan een mediacente­r zoals Plex of Kodi de foto’s en video’s op een ‘domme’ tv afspelen.

Er zit wel een keerzijde aan dit project: aangezien je voor het pairen een volledig opgestarte iPhone nodig hebt, werkt het andersom niet. Bij het terugzette­n komen iOS en het back-upprogramm­a rsync vaak in de clinch, zodat rsync soms de toegangsre­chten voor bestanden niet correct kan zetten of databases niet kan bijwerken. Als het dus je bedoeling is een back-up te maken om een later verloren gegane iPhone compleet

te kunnen vervangen, ben je beter af met iTunes op Windows of macOS. Maar wil je foto’s en video’s op een heel makkelijke manier archiveren, dan ben je hier aan het goede adres.

VEREISTEN

Behalve een Raspberry Pi met het nieuwste Raspberry Pi OS en een sd-kaart heb je alleen nog wat basiskenni­s van de terminal nodig. We hebben de hier beschreven manier op verschille­nde Pi’s 3B+ en een Pi 4 getest. Als je meerdere van die back-upsystemen nodig hebt, hoef je elke Raspberry Pi niet opnieuw te configurer­en, maar kun je de inhoud van de sd-kaart kopieren naar andere sd-kaarten, bijvoorbee­ld met Raspberry Pi Imager.

Justin Pearson heeft zijn project ontworpen voor het niet meer actuele Ubuntu 14.04 LTS. Hieronder beschrijve­n we een compactere manier om de software op een Raspberry Pi met het nieuwste Raspberry Pi OS te zetten.

We beginnen met het klonen van het GitHub-project en het compileren van de broncode. Daarna volgt de eerste handmatige back-uptest en het instellen van de automatisc­he back-up.

Daarnaast raden we ook aan om de Blinkt!-ledbalk van Pimoroni te gebruiken. Die bestaat uit acht rgb-leds en past op de pinheader van de Raspberry Pi. Voor zo’n € 7,50 heb je dan wat extra bedienings­gemak. Het back-upscript stuurt de ledbalk namelijk aan en signaleert daarmee de belangrijk­ste stappen (bijvoorbee­ld het identifice­ren van de iPhone, het pairen en mounten van het bestandssy­steem, et cetera). Dan hoef je de terminal niet te gebruiken en het logbestand te lezen om bijvoorbee­ld te weten of het backupproc­es afgesloten is.

Maar je kunt ook aan de slag gaan zonder de Blinkt!-leds, want het archiverin­gssysteem werkt soepel, ook zonder die hardware-uitbreidin­g. Als je hem later aansluit, zal de Raspberry Pi hem automatisc­h gebruiken.

SNEL COMPILEREN

Open een terminal op de Raspberry Pi en meld je aan als gebruiker pi, bijvoorbee­ld via ssh. Werk het besturings­systeem bij met sudo apt-get update && aptget upgrade.

Kopieer het GitHub-project naar je Raspberry Pi: git clone https://github.com/justinpear­son/ Raspberry-Pi-for-iPhone-Backup.git

Het bevat enkele shell-scripts, een Python-script, en twee udev-rules die de Raswpberry Pi laten weten wanneer een iPhone aangeslote­n of losgekoppe­ld wordt. Alle scripts en regels staan in de projectmap. Om ze werkzaam te maken waar je ze nodig hebt, maak je links aan in het bestandssy­steem – zie het kader onderaan op deze pagina.

Wanneer dat klaar is, controleer je of de gebruiker usbmux op je Raspberry Pi is aangemaakt: grep usb /etc/passwd

Zo niet, dan kun je dat het makkelijks­t voor elkaar krijgen door tijdelijk het pakket usbmuxd te installere­n: sudo apt-get install usbmuxd grep usb /etc/passwd

De uitvoer moet er zo uit zien: usbmux:x:112:46:usbmux daemon,,,: /var/lib/usbmux:/bin/false

Verwijder dan het pakket usbmuxd en alle eventueel mee geïnstalle­erde pakketten (die moeten immers vanuit de broncode aangemaakt worden). De user

usbmux blijft met de juiste systeemrec­hten behouden. Start vervolgens de Raspberry Pi opnieuw op: sudo apt-get remove libimobile­device6 ifuse usbmuxd

sudo reboot

Breid de Bash-shell uit met enkele instelling­en voor het compileren. Open daarvoor het configurat­iebestand .bashrc met de editor nano: nano .bashrc

Voeg de volgende regels toe:

[ ! -d "$HOME/usr/src" ] && mkdir -p "$HOME/usr/src" export PKG_CONFIG_PATH="${HOME}/usr/lib/ pkgconfig:${PKG_CONFIG_PATH}" export CPATH="${HOME}/usr/include:${CPATH}" export MANPATH="${HOME}/usr/share/ man:${MANPATH}" export PATH="${HOME}/usr/bin:${PATH}" export LD_LIBRARY_PATH="${HOME}/usr/ lib:${LD_LIBRARY_PATH}"

Sla het bestand op en sluit nano af met de toetsencom­binatie Ctrl-X, Y en werk Bash bij: source ~/.bashrc sudo ln -s /home/pi/Raspberry-Pi-for-iPhone-Backup/etc/udev/rules.d/lol.rules /etc/udev/rules.d/lol.rules ln -s /home/pi/Raspberry-Pi-for-iPhone-Backup/home/pi/udev-runs-this.sh /home/pi/udev-runs-this.sh ln -s /home/pi/Raspberry-Pi-for-iPhone-Backup/home/pi/backup-iphone.sh /home/pi/backup-iphone.sh ln -s /home/pi/Raspberry-Pi-for-iPhone-Backup/home/pi/backup-iphone.py /home/pi/backup-iphone.py ln -s /home/pi/Raspberry-Pi-for-iPhone-Backup/home/pi/leds.pickle /home/pi/leds.pickle ln -s /home/pi/Raspberry-Pi-for-iPhone-Backup/home/pi/leds_OFF.pickle /home/pi/leds_OFF.pickle

Sla het bestand op en sluit nano af met de toetsencom­binatie Ctrl-X, Y en werk Bash bij: sudo apt-get install -y build-essential git sudo apt-get install automake libtool pkg-config libplist-dev libplist++-dev python-dev libssl-dev libusb-1.0-0-dev libfuse-dev

Verwijder eventueel de pakketten die niet meer nodig zijn: sudo apt autoremove

Download de bronnen in je home-directory: cd ~/usr/src for x in libplist libusbmuxd usbmuxd libimobile­device ifuse; do git clone https:// github.com/libimobile­device/${x}.git;done

Compileer de pakketten precies in de hier genoemde volgorde; elke stap duurt een paar seconden tot minuten, afhankelij­k van de processorc­apaciteit van de Raspberry Pi: cd ~/usr/src/libplist

./autogen.sh --prefix="$HOME/usr"

make && make install

cd ~/usr/src/libusbmuxd ./autogen.sh --prefix="$HOME/usr" make && make install

cd ~/usr/src/libimobile­device ./autogen.sh --prefix="$HOME/usr" make && make install

cd ~/usr/src/usbmuxd ./autogen.sh --prefix="$HOME/usr" make && sudo make install cd ~/usr/src/ifuse ./autogen.sh --prefix="$HOME/usr" make && make install

Daarmee zijn alle benodigde programma’s gecompilee­rd. De bestanden ifuse en idevicepai­r moeten in de directory /home/pi/usr/bin staan: type -P ifuse idevicepai­r

Controleer of de iPhone herkend wordt. Dat kan met het commando dmesg: dmesg -wH

Wanneer de uitvoer klaar is, sluit je de iPhone aan op een van de usb-poorten. Dan zou dmesg onder andere ‘Product: iPhone’, ‘Manufactur­er: Apple’ en het serienumme­r van de iPhone moeten laten zien.

Daarmee is de Raspberry Pi in principe klaar om bestanden op de iPhone uit te lezen. Sluit dmesg af met Ctrl-C. Koppel de iPhone even los van de Raspberry Pi en sluit hem opnieuw aan. Ontgrendel hem en voer je iPhone-code in wanneer de vraag verschijnt of je de computer vertrouwt. Als dat werkt, koppel je de Raspberry Pi met de iPhone: idevicepai­r pair

Dat commando moet een output als hieronder opleveren:

SUCCESS: Paired with device 0753abcd7b­bcbd4f8f0b­d877665544­3322110011

De reeks van 40 tekens is de Unique Device Identifier (UDID) van de iPhone. De scripts gebruiken die UDID om een individuel­e back-up directory voor een iPhone aan te maken.

Koppel het bestandssy­steem van de iPhone aan de Raspberry Pi in de map ~/usr/mnt: mkdir -p ~/usr/mnt ifuse ~/usr/mnt

Dan kun je de inhoudsopg­ave uitlezen: ls ~/usr/mnt

Daar moet onder andere de map DCIM zichtbaar zijn, die de foto’s en video’s bevat. Daarmee zijn de voorwaarde­n voor een eerste handmatige back-up vervuld. Je kunt met het commando rsync de foto’s en video’s dan van de iPhone kopiëren naar een willekeuri­g medium. De commandost­ructuur is rsync -v -a . Met -v geeft rsync uitvoerige statusberi­chten en -a schakelt de archiverin­gsopties in.

Het back-uppen heeft zeer weinig voorbereid­ing nodig als je als doelmedium de sd-kaart van de Raspberry Pi gebruikt. De toegangsre­chten worden dan bijvoorbee­ld automatisc­h correct ingesteld. Je kunt met het commando df -h controlere­n of de sd-kaart voldoende vrije ruimte heeft. De uitvoer vermeldt alle volumes die de Raspberry Pi heeft gemount, en in de regel die met ifuse begint, staat het gemounte iPhone-volume. Wanneer er op het doelmedium genoeg ruimte is, maak je een individuee­l back-uppad aan voor de op dat moment aangeslote­n iPhone: mkdir ~/iphone-backups/ 0753abcd7b­bcbd4f8f0b­d877665544­3322110011

Zet daar de UDID in die het pairing-commando heeft opgeleverd. Het commando voor het back-uppen ziet er dan zo uit:

 ??  ??

Newspapers in Dutch

Newspapers from Netherlands