--- title: "Systemd ctl-applicaties" excerpt: "Systemd is een fantastisch grote tool en biedt heel wat tooling. Daarbij ook verschillende ctl-applicaties die helpen bij de dagdagelijkse taken." coverImage: "/Systemd/cover_systemd.png" date: "2023-07-28T23:00:00.000Z" author: Eli Winderickx hero_image: /cover_systemd.png category: Systemd,Linux,Expert Tip --- ## Systemd Systemd is al even oud en heeft al veel negatieve commentaar moeten lijden onder de Linux gemeenschappen. Voornamelijk omdat systemd zich diep in het systeem nestelt en in héél veel onderdelen betrokken is. Ik zet hier graag een aantal tools op een rij! ## Systemctl Dit moet de bekendste tool zijn. Ongetwijfeld is dit ook de meestgebruikte tool. Voornamelijk is dit de tool die systemd gebruikt om bij opstart er voor te zorgen dat de juiste target bereikt wordt. ### Targets Die targets zijn vergelijkbaar met de init-niveau's maar bieden ook wat extra mogelijkheden. Hier enkele belangrijke om te onthouden: - graphical: (default) Deze zal een grafisch login venster laten zien - multi-user: Alles behalve de grafische interface wordt geladen - emergency: Dit is een heel beperkte omgeving waar niet veel ingeladen wordt; zelfs geen systemd! - rescue: Vergelijkbaar met emergency maar hier laten we wel al systemd in Je kan het eenvoudigste naar deze modus gaan via het GRUB opstart menu. Druk hier op `e` om een geselecteerde kernel tijdelijk te wijzigen. Op de `Linux` regel ga je helemaal achteraan nog een beetje toevoegen; `systemd.unit=.target` ### Services De targets zoals we hierboven al vermeldde zijn afhankelijk van services en sockets die een bepaalde status bereiken. De Services worden in een systeembeheerder rol vaak gebruikt. Hier nog enkele interessante opties om jouw kennis te verbreden: ```bash # Lijst all unit files op systemctl list-unit-fils -at service # Bekijk het service bestand systemctl cat # Krijg in 1 woord terug of een service actief of enabled is systemctl is-active systemctl is-enabled # Vraag alle services op die degraded zijn systemctl status --state=degraded ``` ### Mount Jawel, ook mounts kunnen gebeuren met systemd. Alles staat omschreven in `/etc/fstab` maar dat wordt allemaal vertaalt door systemd naar mount files om dan door systemd ook gemount te worden. Het kan dus interessant zijn om ook te weten hoe dat in z'n werk gaat. Zoals je hieronder merkt, ga je exact dezelfde items terugvinden als in `/etc/fstab`. Naast het `.mount` bestand is er ook een `.automount` nodig als die map automatisch gemount moet worden. Hier een `voorbeeld.mount` ``` [Unit] Description=Test map (/tmp_dir) DefaultDependencies=no Conflicts=umount.target Before=local-fs.target umount.target After=swap.target [Mount] What=/dev/disk/by-uuid/ Where=/tmp_dir Type=ext4 Options=defaults [Install] WantedBy=multi-user.target ``` Met bijhorende `voorbeeld.automount` ``` [Unit] Description=Voorbeeld automount partition ConditionPathExists=/tmp_dir [Automount] Where=/tmp_dir TimeoutIdleSec=10 [Install] WantedBy=multi-user.target ``` ### Timers Alhoewel Cron heel goed werkt, biedt Systemd ook timers aan. Deze brengen een kleine leercurve mee maar daarnaast werken deze ook wel degelijk en kunnen deze per timer eenvoudig gedeactiveerd worden. Een ander groot voordeel is dat je een timer afhankelijk kan maken van andere timers of services en zo een complexere setup kan bereiken. De grote vereiste is dat er een service file met dezelfde naam als de timer moet bestaan om aan te spreken.{lees: uit te voeren} Daarnaast kan je dan een `.timer`-bestand aanmaken in `/etc/systemd/system/` op systeem niveau ofwel in `$HOME/.config/systemd/user/`. Voorbeeld service file; `foo.service` ``` [Unit] Description=Dummy service foo die een script uitvoert om een programma in de achtergrond uit te voeren. [Service] ExecStart=/opt/foo/start.sh [Install] WantedBy=graphical.target ``` Voorbeeld timer file; `foo.timer` ``` [Unit] Description=Voer wekelijks uit EN meteen na boot [Timer] OnBootSec=15min OnUnitActiveSec=1w [Install] WantedBy=timers.target ``` In de plaats van hier de service manueel te starten en te activeren, gaan we dat nu voor de timer doen. Die heeft namelijk de info wat en wanneer uitgevoerd moet worden. ``` systemctl enable --now foo.timer ``` ### Nog veel meer Er zijn nog zaken die Systemd beheert en ook hiervoor bestaan unit files. Hier lijst ik ze even kort op. - Socket: Inter proces communicatie socket - Device: Toestellen die herkend worden door de kernel - Scope: Processen die extern aangemaakt zijn geweest - Slice: Een hiërarchische groepering van units die systeemprocessen beheren - Path: Een pad naar een bestand of map in het filesysteem - Swap: Unit file voor een swap device ## Hostnamectl Verschillende Linux gebruikers passen hun hostnaam aan via `/etc/hostname`. Dat werkt maar vereist steeds een reboot om volledig door te voeren. Alhoewel een reboot zeker altijd aan te raden is, kan je met deze tool je hostnaam veranderen zonder die reboot. ```bash # Geef hostname weer hostnamectl # Stel een nieuwe hostname in hostnamectl hostname # Stel een locatie is. Dit heeft niets met timedate te maken hostnamectl location ``` ## Timedatectl Nog een minder gekende tools is `timedatectl`. Deze, je raadt het nooit, kan je helpen om tijd, datum en tijdzone in te stellen. Hiernaast kan je ook NTP servers instellen. Deze is eenvoudig in werking en leuk om te weten. ```bash # Vraag alle beschikbare tijdzones op timedatectl list-timezones # Stel daarna de juiste in timedatectl set-timezone