Installatiescript
Een installatiescript is een klein computerprogramma dat automatisch de stappen uitvoert die nodig zijn om software op een apparaat te installeren en klaar te zetten voor gebruik. In plaats van dat een mens handmatig bestanden kopieert, instellingen aanpast en programma's opstart, doet een script dit in enkele seconden, elke keer op precies dezelfde manier. Het is te vergelijken met een recept dat een keukenmachine zelf uitvoert: jij hoeft alleen op 'start' te drukken, en de machine weegt, mengt en bakt volgens vaste stappen, zonder dat er iets vergeten wordt.
Installatiescripts zijn overal in de moderne techniek te vinden, ook al zie je ze zelden rechtstreeks. Wanneer je een programma van internet download en installeert, wanneer een bedrijf duizenden laptops tegelijk van dezelfde software voorziet, of wanneer een server in een datacenter binnen enkele minuten operationeel wordt gemaakt, draait daarachter vrijwel altijd een installatiescript. Ze vormen de onzichtbare motor achter het snel en betrouwbaar opzetten van digitale systemen, van een enkele thuiscomputer tot duizenden servers die samen een clouddienst laten draaien.
Wat is het precies?
In de kern is een installatiescript een tekstbestand met instructies die een computer stap voor stap uitvoert. De eenvoudigste vorm is een shellscript: een reeks opdrachten voor de opdrachtregel (de tekstgebaseerde interface waarmee je een computer rechtstreeks aanstuurt, zonder muis). Op Linux en macOS heet zo'n opdrachtregelomgeving meestal bash, op Windows bestaat een vergelijkbaar systeem genaamd PowerShell. Een installatiescript in bash kan bijvoorbeeld bestanden downloaden, ze op de juiste plek zetten, en de benodigde rechten instellen zodat een programma mag draaien.
Een stap ingewikkelder zijn pakketbeheerders (package managers). Dit zijn programma's die zelf bijhouden welke software op een systeem staat, welke versies dat zijn en welke andere programma's (afhankelijkheden) daarvoor nodig zijn. Bekende voorbeelden zijn apt en yum op Linux, npm voor JavaScript-programmeurs, pip voor de programmeertaal Python, en Homebrew op macOS. Wanneer je een commando als "installeer dit programma" geeft, regelt de pakketbeheerder op de achtergrond een heel installatiescript, inclusief het ophalen van alle onderdelen die nodig zijn.
Voor grotere omgevingen, zoals honderden bedrijfscomputers of serverparken, gebruikt men vaak configuratiebeheertools zoals Ansible, Puppet en Chef. Deze tools beschrijven in een bestand hoe een systeem eruit hóórt te zien ('deze webserver moet draaien, deze instelling moet aanstaan') en zorgen er vervolgens zelf voor dat de werkelijkheid daarmee overeenkomt. Een verwante aanpak heet Infrastructure as Code, waarbij zelfs de opbouw van hele computernetwerken en servers in tekstbestanden wordt vastgelegd; het bekendste gereedschap hiervoor is Terraform. Ook containertechnologie, zoals Docker, werkt met een soort installatiescript: een zogeheten Dockerfile beschrijft exact welke software en instellingen nodig zijn om een geïsoleerd 'doosje' (container) met een werkende applicatie te bouwen.
Een belangrijk technisch begrip hierbij is idempotentie. Dit betekent dat een goed installatiescript hetzelfde resultaat oplevert, ongeacht hoe vaak je het uitvoert. Draai je het script twee keer, dan mag dat niet tot dubbele installaties of fouten leiden. Dit maakt scripts betrouwbaar: je kunt ze gerust nogmaals draaien als je twijfelt of alles goed is gegaan.
Wat wil men ermee bereiken?
De belangrijkste reden om installatiescripts te gebruiken is consistentie: elke installatie verloopt exact hetzelfde, zonder dat een menselijke fout, zoals het overslaan van een stap of het intypen van een verkeerde instelling, roet in het eten gooit. Dit is vooral belangrijk in professionele omgevingen, waar honderden of duizenden systemen identiek moeten worden ingericht.
Daarnaast gaat het om snelheid en schaalbaarheid. Een script dat in een paar minuten een server volledig inricht, scheelt enorm veel tijd vergeleken met handmatig werk, en dat voordeel groeit naarmate het aantal systemen toeneemt. Bedrijven die duizenden servers beheren, zouden dat zonder automatisering vrijwel onmogelijk handmatig kunnen doen.
Ook reproduceerbaarheid speelt een grote rol: als iets misgaat, kan een systeem snel opnieuw en op dezelfde manier worden opgebouwd. Dit is essentieel voor het herstellen na storingen, en het maakt testen eenvoudiger, omdat ontwikkelaars precies dezelfde omgeving kunnen nabootsen als waarin een programma uiteindelijk moet draaien. Tot slot verlagen installatiescripts de drempel voor gewone gebruikers: een ingewikkeld installatieproces wordt teruggebracht tot één simpel commando of een dubbelklik.
Voorbeelden uit de praktijk
Homebrew (vanaf 2009) is een populaire pakketbeheerder voor macOS. De installatie ervan gebeurt met één regel die gebruikers in de opdrachtregel plakken; het onderliggende script haalt vervolgens alle benodigde onderdelen op en zet de pakketbeheerder helemaal klaar.
Rustup (geïntroduceerd in 2016) is het officiële installatieprogramma voor de programmeertaal Rust, ontwikkeld door het Rust-project. Het script installeert niet alleen de taal zelf, maar ook de bijbehorende compiler en hulpprogramma's, en houdt daarna updates bij.
get.docker.com is een installatiescript van Docker Inc. waarmee systeembeheerders met één commando Docker op een Linux-server kunnen installeren, inclusief alle vereiste systeeminstellingen.
Cloud-init, ontwikkeld door Canonical (het bedrijf achter Ubuntu) en sinds ongeveer 2008 in gebruik, is een systeem waarmee cloudservers bij het allereerste opstarten automatisch worden geconfigureerd: gebruikersaccounts, netwerkinstellingen en software worden meteen ingericht zodra de server 'wakker wordt'. Vrijwel elke grote cloudaanbieder, waaronder Amazon Web Services en Microsoft Azure, ondersteunt dit systeem.
Kubeadm, onderdeel van het Kubernetes-project (eerste stabiele versie in 2018), is een gereedschap waarmee beheerders met een beperkt aantal commando's een compleet Kubernetes-cluster kunnen opzetten: een samenstel van servers dat containertoepassingen beheert. Grote organisaties zoals banken en overheidsinstanties gebruiken vergelijkbare geautomatiseerde installatieprocessen om hun IT-infrastructuur te beheren, vaak met Ansible-playbooks (verzamelingen instructies voor Ansible).
Hoe ver is de techniek?
Installatiescripts zijn geen nieuwe uitvinding; shellscripts bestaan al sinds de jaren zeventig, en pakketbeheerders sinds de jaren negentig. Wat wél sterk is veranderd, is de schaal en het gemak waarmee ze worden gebruikt. Waar installatiescripts vroeger vooral iets waren voor systeembeheerders, zijn ze de afgelopen tien tot vijftien jaar mainstream geworden dankzij cloud computing en containertechnologie: bijna elk modern softwareproject levert tegenwoordig een installatiescript of Dockerfile mee.
Een belangrijke ontwikkeling is de opkomst van GitOps, een werkwijze waarbij de gewenste toestand van systemen wordt vastgelegd in een centrale broncoderepository (een soort gedeelde, bijgehouden verzameling bestanden), waarna automatiseringstools die toestand voortdurend bewaken en herstellen. Dit maakt installatie en beheer nog voorspelbaarder.
Er zijn ook serieuze aandachtspunten. Het zogeheten 'curl|bash'-patroon, waarbij gebruikers een commando plakken dat een script rechtstreeks van internet ophaalt en direct uitvoert, staat bekend als gemakkelijk maar risicovol: gebruikers zien vooraf niet wat het script precies doet, en als de bron van het script wordt gehackt, kan kwaadaardige code worden verspreid. Beveiligingsexperts adviseren daarom vaak om zulke scripts eerst te downloaden, te controleren, en pas daarna uit te voeren. Ook supply chain-aanvallen (aanvallen waarbij niet het eindproduct, maar een onderdeel in de toeleveringsketen, zoals een pakket of installatiescript, wordt gemanipuleerd) vormen een reëel risico; incidenten met besmette pakketten in bijvoorbeeld npm en PyPI (de pakketarchieven voor JavaScript en Python) laten zien dat dit geen theoretisch probleem is. Volledige zekerheid over de veiligheid van een installatiescript is dan ook niet te geven; het blijft een kwestie van vertrouwen in de bron, controle van de inhoud, en goede beveiligingspraktijken.
Wie werken eraan?
Aan configuratiebeheer en automatisering werken zowel grote techbedrijven als opensourcegemeenschappen. Red Hat (onderdeel van IBM) ontwikkelt Ansible, een van de meest gebruikte configuratiebeheertools. Progress Software beheert tegenwoordig zowel Puppet als Chef, twee andere veelgebruikte tools op dit gebied. HashiCorp is de maker van Terraform, een populair gereedschap voor Infrastructure as Code. Docker Inc. ontwikkelt de containertechnologie en bijbehorende installatiescripts, terwijl Canonical, het bedrijf achter Ubuntu, verantwoordelijk is voor cloud-init.
Het beheer van Kubernetes, inclusief kubeadm, ligt bij de Cloud Native Computing Foundation (CNCF), een samenwerkingsverband van onder meer Google, dat Kubernetes oorspronkelijk ontwikkelde, en talloze andere bedrijven. Microsoft draagt bij met PowerShell en Desired State Configuration (DSC), zijn eigen aanpak voor geautomatiseerde systeemconfiguratie op Windows. Daarnaast leveren duizenden individuele opensourceontwikkelaars wereldwijd installatiescripts voor hun eigen softwareprojecten, vaak los van enige bedrijfsstructuur.