Raspberry Pi archiveert foto’s en video’s van iPhone
Dit project voor de minicomputer Raspberry Pi maakt back-ups van iPhone-foto’s en -video’s buiten Apple om. Het mooiste is dat voor dit archiveringssysteem geen diepgaande computerkennis nodig is. Je hoeft de iPhone alleen maar aan te sluiten en de ontgrendelcode 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 mogelijkheid te bieden iPhone-bestanden te back-uppen op een computer met een Linux-besturingssysteem. 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 libimobiledevice en staat onder leiding van Martin Szulecki en Nikias Bassen.
Als je je bestanden niet aan de iCloud van Apple wilt toevertrouwen en geen Mac- of Windows-computer bij de hand hebt om lokale archieven via iTunes aan te maken, kun je terecht bij libimobiledevice. De benodigde tools kun je op diverse Linux-distributies via het pakketbeheer installeren – en ook op de minicomputer Raspberry Pi. De ervaringen met de kanten-klaar gecompileerde programma’s zijn echter niet altijd positief. Gebruikers van bijvoorbeeld Linux Mint melden wel een probleemloze werking, maar gebruikers van andere distributies klagen soms dat na sommige iOS-updates de foto’s niet meer toegankelijk 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 verschillende instructies over hoe je dat doet. Justin Pearson heeft een aantrekkelijk manier ontwikkeld op basis van een compile-recept van Sam Gleske (zie de link op de laatste pagina). De gecompileerde bestanden worden aangevuld met Bash- en Python-scripts, zodat de Raspberry Pi automatisch kopieën maakt van alle bestanden die libimobiledevice op een iPhone toegankelijk maakt. Dat concept moet thuisbeheerders 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 ontgrendelen. De Raspberry Pi doet de rest geheel automatisch.
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 basisvolume van 5 GB overschreidt, hoef je alleen maar een Raspberry Pi te installeren. Het Zero-model is al voor zo’n 12 euro te koop. Geheugenkaarten met 64 GB zijn al beschikbaar vanaf circa 10 euro.
Dat concept is nog eens extra aantrekkelijk omdat de Raspberry Pi een brug kan slaan met tv-toestellen zonder AirPlay. Sluit je de minicomputer via hdmi op een tv aan, dan kan een mediacenter 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 terugzetten komen iOS en het back-upprogramma rsync vaak in de clinch, zodat rsync soms de toegangsrechten 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 basiskennis van de terminal nodig. We hebben de hier beschreven manier op verschillende 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 configureren, maar kun je de inhoud van de sd-kaart kopieren naar andere sd-kaarten, bijvoorbeeld met Raspberry Pi Imager.
Justin Pearson heeft zijn project ontworpen voor het niet meer actuele Ubuntu 14.04 LTS. Hieronder beschrijven 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 automatische 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 bedieningsgemak. Het back-upscript stuurt de ledbalk namelijk aan en signaleert daarmee de belangrijkste stappen (bijvoorbeeld het identificeren van de iPhone, het pairen en mounten van het bestandssysteem, et cetera). Dan hoef je de terminal niet te gebruiken en het logbestand te lezen om bijvoorbeeld te weten of het backupproces afgesloten is.
Maar je kunt ook aan de slag gaan zonder de Blinkt!-leds, want het archiveringssysteem werkt soepel, ook zonder die hardware-uitbreiding. Als je hem later aansluit, zal de Raspberry Pi hem automatisch gebruiken.
SNEL COMPILEREN
Open een terminal op de Raspberry Pi en meld je aan als gebruiker pi, bijvoorbeeld via ssh. Werk het besturingssysteem bij met sudo apt-get update && aptget upgrade.
Kopieer het GitHub-project naar je Raspberry Pi: git clone https://github.com/justinpearson/ 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 aangesloten of losgekoppeld 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 bestandssysteem – 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 makkelijkst voor elkaar krijgen door tijdelijk het pakket usbmuxd te installeren: 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ïnstalleerde pakketten (die moeten immers vanuit de broncode aangemaakt worden). De user
usbmux blijft met de juiste systeemrechten behouden. Start vervolgens de Raspberry Pi opnieuw op: sudo apt-get remove libimobiledevice6 ifuse usbmuxd
sudo reboot
Breid de Bash-shell uit met enkele instellingen voor het compileren. Open daarvoor het configuratiebestand .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 toetsencombinatie 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 toetsencombinatie 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 libimobiledevice ifuse; do git clone https:// github.com/libimobiledevice/${x}.git;done
Compileer de pakketten precies in de hier genoemde volgorde; elke stap duurt een paar seconden tot minuten, afhankelijk van de processorcapaciteit 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/libimobiledevice ./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 gecompileerd. De bestanden ifuse en idevicepair moeten in de directory /home/pi/usr/bin staan: type -P ifuse idevicepair
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’, ‘Manufacturer: Apple’ en het serienummer 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: idevicepair pair
Dat commando moet een output als hieronder opleveren:
SUCCESS: Paired with device 0753abcd7bbcbd4f8f0bd8776655443322110011
De reeks van 40 tekens is de Unique Device Identifier (UDID) van de iPhone. De scripts gebruiken die UDID om een individuele back-up directory voor een iPhone aan te maken.
Koppel het bestandssysteem van de iPhone aan de Raspberry Pi in de map ~/usr/mnt: mkdir -p ~/usr/mnt ifuse ~/usr/mnt
Dan kun je de inhoudsopgave uitlezen: ls ~/usr/mnt
Daar moet onder andere de map DCIM zichtbaar zijn, die de foto’s en video’s bevat. Daarmee zijn de voorwaarden 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 willekeurig medium. De commandostructuur is rsync -v -a
Het back-uppen heeft zeer weinig voorbereiding nodig als je als doelmedium de sd-kaart van de Raspberry Pi gebruikt. De toegangsrechten worden dan bijvoorbeeld automatisch correct ingesteld. Je kunt met het commando df -h controleren 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 individueel back-uppad aan voor de op dat moment aangesloten iPhone: mkdir ~/iphone-backups/ 0753abcd7bbcbd4f8f0bd8776655443322110011
Zet daar de UDID in die het pairing-commando heeft opgeleverd. Het commando voor het back-uppen ziet er dan zo uit: