---
title:  "Kickstart installatie"
excerpt: "Installeren van een Linux server is niet moeilijk maar neemt vaak onnodig tijd in beslag. Je zou met een template kunnen werken maar daar zitten niet altijd de laatste updates en is dus ook geen oplossing. Wat doen we dan? Een Kickstart installatie natuurlijk!"
date:   "2023-09-06T06:00:00.000Z"
author: Eli Winderickx
hero_image: /cover_kickstart.png
category: Kickstart,Linux,Expert Tip
---
## Wat doen we?
Installeren van een Linux server is niet moeilijk maar neemt vaak onnodig tijd in beslag. Je zou met een template kunnen werken maar daar zitten niet altijd de laatste updates en is dus ook geen oplossing. Wat doen we dan? Een Kickstart installatie natuurlijk! Hiermee kunnen we in een bestand noteren hoe de installatie moet verlopen en kunnen we die installatie volledig automatisch laten verlopen. Handig en dan hebben wij tijd om aan iets anders te werken!

## Hoe beginnen we?
We doen eerst een manuele installatie. Ja, inderdaad. Het lijkt een beetje vreemd maar dit gaat ons helpen om een eerste draft van het kickstart bestand aan te maken. Zo maken we zelf minder typ-fouten en hebben we meteen een versie waar het meeste al goed staat. In die installatie, ga je alle instellingen proberen steken die je op de nieuwe servers of toestellen ook wilt. Dat houdt dan vooral in; de schijf opdeling, het wachtwoord van de root-gebruiker en eventueel andere gebruikers die je ook wilt.

> Alhoewel je hier het effectieve wachtwoord al gerust kan insteken, kan het interessant zijn om achteraf in het kickstart bestand het wachtwoord toch aan te passen.

Als die installatie klaar is, kan je het kickstart bestand verzamelen in `/root` genaamd `anaconda-ks.cfg`. Breng deze naar jouw werkstation om verder aan te passen. Hieronder vind je een voorbeeld van mijn installatie. Je gaat merken dat ik `graphical` in commentaar heb gezet en eronder `text` heb gezet. Alhoewel je via de grafische interface ook een automatische installatie kan doen, oogt dit in mijn persoonlijke voorkeur leuker. Onder `Network Information` kunnen we ook al een hostnaam opgegeven.

> De ISO die ik gebruik is de `Red Hat Enterprise Linux 9.2 Binary DVD x86_64`. Het principe werkt op alle RHEL gebasseerde distro's maar je moet misschien wel een paar specifieke zaken aanpassen.

```
# Generated by Anaconda 34.25.2.10
# Generated by pykickstart v3.32
#version=RHEL9
# Use graphical install
# graphical
text
repo --name="AppStream" --baseurl=file:///run/install/sources/mount-0000-cdrom/AppStream

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

# Keyboard layouts
keyboard --xlayouts='us (dvorak-intl)'
# System language
lang en_US.UTF-8

# Network information
network  --bootproto=dhcp --device=enp1s0 --ipv6=auto --activate
network  --hostname=<hostnaam>.winderickx.me

# Use CDROM installation media
cdrom

%packages
@^server-product-environment

%end

# Run the Setup Agent on first boot
firstboot --enable

# Generated using Blivet version 3.6.0
ignoredisk --only-use=vda
autopart
# Partition clearing information
clearpart --none --initlabel

# System timezone
timezone Europe/Brussels --utc

# Root password
rootpw --iscrypted <password>
user --groups=wheel --name=test --password=<password> --iscrypted --gecos="test"
```

## Hoe maken we dit nu beschikbaar
Het moeilijkste in dit proces is het correct beschikbaar stellen van het kickstart bestand. In organisaties ga je vaak een web of ander serveradres beschikbaar krijgen. In een labo omgeving is dat misschien niet zo eenvoudig om snel op te zetten. Hier gaan we er dan van uit dat je een USB of een ISO gaat gebruiken.

## Een ISO maken
Dit moet ongetwijfeld de eenvoudigste methode zijn om een volledig geautomatiseerde installatie te doen. Het uiteindelijke bestand kan je gebruiken in een gevirtualiseerde omgeving, op een DVD branden of op een ISO zetten. Zorg nu eerst dat je de inhoud van een bestaande ISO inlaad en uitleest. De inhoud zet je best in een map waar je makkelijk aankan.

```bash
# We gaan de ISO mounten in een lege map.
# In de GUI interface kan je ook dubbelklikken op de ISO om die te mounten.
sudo mount -o loop ~/ISOs/Rhel9.iso /run/media/$(whoami)/Lege_map
mkdir -p ~/Documenten/Project/kickstart
# Kopieer de inhoud van de ISO naar de werkmap die we hierboven aangemaakt hebben.
cp -r /run/media/$(whoami)/Lege_map/* ~/Documenten/Project/kickstart
# Als we de bestanden hebben, hebben we de ISO niet meer nodig. We gaan er zelf een maken!
sudo umount /run/media/$(whoami)
```

### Het Kickstart bestand
In onze werkmap kunnen we nu het kickstart bestand plaatsen. Noem deze `ks.cfg`. Dit is geen harde vereiste maar handig om even de handleiding te volgen. Eventueel andere bestanden op mappen die automatisch op het toestel moeten komen, kan je ook al toevoegen aan de werkmap. Het moelijke is nu de juiste inhoud in het kickstart bestand krijgen. Als je een gratis ontwikkelaar account (of betalende licentie) bij RedHat hebt, kan je [hier](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/installation_guide/sect-kickstart-syntax) de documentatie bekijken. Anders zijn hier alvast een paar voorbeelden om je te inspireren.


```bash
# Wis de harde schijf volledig.
zerombr
clearpart --none --initlabel --all

# kopieer bestanden van de root van de ISO naar een map
# We houden ook een log bij van deze stappen
%post --nochroot --log=/mnt/sysimage/root/ks-post-no-chroot.log
cd /path/to/folder
cp -Rv run/install/repo/Important_Folder /mnt/sysimage/path/to/folder
%end

# We kunnen ook in de Chroot omgeving al wat applicaties installeren.
%post --log=/root/ks-post.log
dnf -y install git vim
%end

# We kunnen zelf een gehashte wachtwoord string meegeven.
rootpw --iscrypted <EncryptedString>
```

> Je kan achteraf een nieuw wachtwoord in de ISO steken door een nieuwe string te generenen. In moderne systemen kan dat met `openssl passwd -6` om vervolgens het wachtwoord in te geven. Oudere systemen kunnen Python gebruiken: `python3 -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass()))'`

### GRUB aanpassen
Om er nu voor te zorgen dat tijdens het opstarten van de ISO het kickstart bestand goed wordt ingelezen, moeten we dat ook aangeven aan GRUB. Deze wijziging moeten we op twee plaatsen doen;
- EFI/BOOT/grub.cfg
- isolinux/isolinux.cfg

> het pad `cdrom:/ks.cfg` gaat ervan uit dat je de ISO op schijfmedia gaat plaatsen. Als je de ISO rechtstreeks op een USB gaat zetten, gebruik je best `hd:LABEL=<NAAM USB>:/` ipv `cdrom:/`. Doe je dat toch, kan je doormiddel van een tool zoals Ventoy daarmee toch nog verder. Later in de handleiding meer daarover.

Pas hier niet te veel in aan want dan werkt het mogelijk niet meer. Als je vast zit, kan je altijd een kopie terugvinden in de originele ISO. In het isolinux.cfg bestand is vooral achteraan de `append initrd` belangrijk dat je het kickstart bestand meegeeft.

```cfg
# grub.cfg

menuentry ...
	linuxefi /images/pxeboot/vmlinuz ... quiet inst.ks=cdrom:/ks.cfg
```


```cfg
# isolinux.cfg

# Zoek naar onderstaande lijn of gelijkwaardig equivalent
menu label ^Install Red Hat Enterprise Linux ..
# Hier kan je onderstaande toevoegen om dit de default boot optie te maken.
menu default
# Achteraan onderstaande lijn ga je inst.ks=cdrom:/ks.cfg toevoegen
# Hier moet de naam van het kickstart bestand en het pad daarnaar kloppen
append initrd=initrd.img inst.stage2=hd:LABEL=RHEL... quiet inst.ks=cdrom:/ks.cfg
```


### De ISO genereren
Zorg dat je in de map zit met de inhoud van de ISO, jouw kickstart bestand en eventueel andere bestanden en mappen die je wilt gebruiken. Daarna controleer je best of je voldende tools op jouw toestel hebt staan; `genisoimage`, `isohybrid` en `implantisomd5`.

Om de correcte naam van de ISO te vinden kan je de waarde overnemen in EFI/BOOT/grub.cfg in de ISO. Hier staat de naam achter de `LABEL` waarde.

> Als je niet zeker weet welk pakket je moet installeren. Gebruik dan `sudo dnf provides <commando>` om dat uit te vinden.


```bash
# Genereer de ISO.
sudo genisoimage -U -r -v -T -J -joliet-long -V "<Naam van de ISO>" -volset "<Naam van de ISO>" -A "<Naam van de ISO>" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot -o ../<Isobestand>.iso .
# Zorg ervoor dat we de ISO ook in UEFI kunnen gebruiken.
sudo isohybrid --uefi ../<iso-bestand>.iso
# Met de MD5 Hash kunnen we de integriteit van onze image garanderen.
sudo implantisomd5 rhel8_6_ks.iso
```

> Vergeet het puntje op het einde van het `genisoimage` commando niet!

## De ISO via USB
In principe zijn we klaar. Als je de stappen goed gevolgd hebt, zou je ISO goed moeten werken en is jouw installatie nu volledig geautomatiseerd. Tenzij je met virtualisatiesoftware zoals vSphere of XenCenter werkt, ben je misschien niets met enkel een ISO. Een schijf media zoals een DVD is ook niet meer zo alledaags en een USB is vaak handiger om mee aan de slag te gaan. Als je in de `cfg` bestanden gekozen hebt om met de `HD` entry te werken, kan je de ISO op je USB-stick zetten met een tool zoals `BalenaEtcher`, `Rufus` (Windows), `Fedora Image Writer` of `dd`. Heb je gekozen voor de `cdrom`-notatie? Niet gevreest! Je kan door middel van `Ventoy` toch nog de ISO gebruiken.

### Ventoy
Dit is een super project dat iedereen zou moeten kennen. Hiermee kan je namelijk een USB-stick nemen, een programmaatje uitvoeren en dan ISO in de juiste map zetten. Daarna kan je al die ISO gebruiken om te booten zonder dat je per ISO een aparte stick moet voorzien.

Download de laatste versie van hun [Github pagina](https://github.com/ventoy/Ventoy/releases) en pak die uit op jouw toestel. Voer de Exe uit op Windows of de `VentoyGUI.x86_64` voor Linux. Selecteer dan jouw USB-stick in het lijstje. Kies onder opties dan `Secure Boot` en `GPT` onder partitioning en tot slot klik je op Install. Zo zal Ventoy voor de meeste tosetellen werken.

![GUI van Ventoy, klaar om te installeren](/ventoy2disk_en.png)

Je hebt dan twee partities. Alleen de `Ventoy` partitie heb je nodig. De andere kan je gerust negeren. Sleep hier de ISO's in en klaar ben je voor de installatie!

> Als je een boot image gebruikt van RedHat in combinatie met Ventoy merk ik dat dit niet goed geautomatiseerd werkt. Je moet dan nog steeds een paar kliks uitvoeren. Best pas je dan in `EFI/BOOT/grub.cfg` en `isolinux/isolinux.cfg` de `cdrom:/ks.cfg` aan naar `hd:LABEL=<naam van de iso>:/ks.cfg`.