Application Containers
Distributie-onafhankelijke pakketten
Toen ik indertijd met Linux begon (Debian 2.0) hadden de grote distributies (Debian, SuSE, Red Hat1, …) hun eigen pakketsystemen. Bij Debian waren dat .deb pakketten en bij SuSE en Red Hat .rpm pakketten. Een uitgebreide repository zoals we deze vandaag kennen was er nog niet (Debian had al wel een systeem dat via dselect toeliet om bepaalde pakketten toe te voegen.
Had je toen iets nodig dat niet in de repository van jouw distro zat, dan was het vaak enkel mogelijk om het programma vanaf de broncode (sourcecode) te compileren en te installeren (met alle mogelijke problemen zoals dependencies).
In de loop der tijd hebben de meeste Linux distributies een grote repository met eigen pakketbeheerders en bijna alle software die men nodig kan hebben. Vaak is men hierbij wel beperkt door de licensie van het programma.
Het grote nadeel van dit soort systemen is dat de ontwikkelaar van het programma (of een lid van een bepaalde distribtutie) ervoor moet zorgen dat zijn programma in zo'n repository komt. En omdat er zoveel verschillende distributies zijn is het voor deze ontwikkelaars onmogelijk om alle distributies te ondersteunen en beperken ze zich vaak tot een beperkt aantal (Fedora en Ubuntu bijvoorbeeld, omdat veel distributies overweg kunnen met .RPM or .DEB bestanden, helaas wil het niet zeggen dat je een Ubuntu .DEB zonder problemen op Debian of Linux Mint kunt installeren).
De ultieme oplossing?
Als oplossing voor dit probleem zijn er systemen gekomen die als doel hebben het maken van pakketten of containers die alle nodige onderdelen bevatten en daarom werken op (bijna) alle Linux distributies. Men zegt soms dat het doel is om programma's zo "gemakkelijk" te maken zoals bij Windows® waarbij je een programma kunt downloaden en het .exe bestand uitvoeren.
En Linux zou Linux niet zijn als er niet meerdere van deze systemen zijn. Dus in plaats van ze allemaal een eigen artikel te geven, ga ik ze hier kort bespreken.
AppImage
Laten we beginnen met AppImage:
- Downloaden
- Uitvoerbaar maken (met chmod)
- Het programma uitvoeren
AppImages moeten niet geïnstalleerd worden en er worden geen systeeminstellingen aangepast. AppImages kunnen gedownload worden vanaf de website van de ontwikkelaar (er zit dus geen service achter).
Flatpak
FlatPak heeft als tagline: The Future of Apps On Linux
en heeft
een soort "Software Center" dat ze FlatHub noemen.
Het verschil met AppImage is dat je flatpak moet installeren en daarna kun je pakketten downloaden vanaf hun FlatHub.
Om bijvoorbeel VideoLAN te installeren via FlatPak gebruik je het volgende commando:
flatpak install flathub org.videolan.VLC
flatpak kun je uitvoeren zonder sudo, maar dan zal er tijdens de installatie wel een pop-up komen waar je het wachtwoord van de "Administrator" (root) moet ingeven. Deze melding komt nadat het eerste onderdeel gedownload is (in bovenstaand geval dus na het downloaden van org.freedesktop.Platform.GL.default
En om huit uit te voeren
flatpak run org.videolan.VLC
Naar een pakket zoeken doe je simpelweg met flatpak search PAKKETNAAM
# flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
Snapcraft
Snapcraft
is ook een soort "Software Center" zoals flatpak of "App Store", hun
tagline is dan ook The app store for Linux
.
In tegenstelling tot Flatpak maakt snapcraft geen gebruik van externe bronnen (repositories) maar enkel zijn eigen "store" (zoals de Apple Store of Microsoft Store).
Net zoals bij flatpak moet je snapcraft ook installeren. De instructies kun je op de site vinden, maar als je een distro zoals Debian gebruikt is het simpel sudo apt install snapd
Na de installatie kun je programma's zoeken en installeren met snap (dus niet snapd of snapcraft).
Laten we als voorbeeld nog eens zoeken naar Firefox (zoals in het flatpak voorbeeld hierboven):
snap seaerch firefox:
Geef je dit commando in zonder SUDO dan moet je het wachtwoord van de administrator ingeven in een pop-up.
Tijdens de installatie zal snap enkele stappen doorlopen, eenmaal klaar verschijnt de volgende melding:
In tegenstelling tot flatpak heeft snap(craft) naar mijn mening enkele nadelen:
- Voor elk programma wordt een mountpoint gecrëerd onder /dev/loop (op mijn
systeem met maar enkele snaps geïnstalleerd zijn er dat al 8).
Figuur 7. mount-points - snapcraft maakt een directory met naam snap aan in het "root" van het bestandssysteem. Alle "binaire" of uitvoerbare bestanden worden geplaatst in /snap/bin.
Nu vraag je je misschien af, wat het probleem is met punt 2? En dan zit je in de doelgroep van deze website ;-)
Linux probeert zoveel mogelijk te voldoen aan de POSIX2 standaard. Deze standaard bepaald bijvoorbeeld dat de text editor vi aanwezig moet zijn op een standaard installatie.
Ook probeert Linux de FHS3" deze standaard de layout van de directory structuur, en snapcraft gaat in tegen deze standaard.
- /bin : Alle programma's die nodig zijn voor een "single-user" systeem (cat, ls, …)
- /usr/bin : Alle "niet essentiële" programma voor alle gebruiker (in niet "single-user" modus)
- /sbin : Alle essentiële programma's (fsck, init, …)
- /usr/sbin : Alle niet essentiele systeem programma's (daemons e.d.)
Dit lijkt mischien een vreemde manier om bestanden in directories in te delen, maar
there's a method behind the madness. Deze standaard komt uit een periode
dat opslagruimte klein en duur was, en met deze setup is het mogelijk om alle
essentiële op de <"master">
disk te plaatsen en de rest op
een andere of netwerk schijf. Het systeem kon dan opstarten omdat alle nodige
programma's aanwezig waren, en vervolgens werdt er een andere schijf of
network-share aangekoppeld met alle andere software.
Het voordeel van het volgen van deze standaarden is dat het "redelijk simpel" is om programma's te maken die werken op UNIX®, UNIX varianten (HP-UX, BSD, Solaris, …), Unix-achtige systemen (zoals Linux) en andere systemen die voldoen (of zo veel mogelijk in het geval van Linux) aan de POSIX en FHS standaarden.
Ook zijn er mensen die deze manier van werken verkiezen boven de directory structuur die Microsoft Windows gebruikt.
Meer informatie over de FHS kun je vinden op Wikipedia
Wat de Application Containers zoals AppImage, Flatpak en Snapcraft bertreft; Meer informatie kun je altijd terugvinden in de manpages of de infopages