--- 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=.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 user --groups=wheel --name=test --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 ``` > 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=:/` 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 ` om dat uit te vinden. ```bash # Genereer de ISO. sudo genisoimage -U -r -v -T -J -joliet-long -V "" -volset "" -A "" -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 ../.iso . # Zorg ervoor dat we de ISO ook in UEFI kunnen gebruiken. sudo isohybrid --uefi ../.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=:/ks.cfg`.