smarken blog

Digital Sovrignty, Privacy, EU Law & Legislation, IT, Linux

Systemd på openSUSE Linux – Komplet Guide

- Indlæg i Linux - Generelt af

Systemd på openSUSE Linux – Komplet Guide

Baséret på videoen "The Linux Lighthouse" – en guide til systemd på openSUSE Linux, fra grundlæggende kommandoer til avanceret tilpasning.


Hvad er systemd?

Systemd er Linux' system- og service-manager, som initialiserer og administrerer systemprocesser, efter kernen er indlæst. Den erstatter det gamle SysV-init-system. Systemd er kendt for paralleliseret opstart og on-demand-aktivering af dæmoner, hvilket gør den hurtigere og mere effektiv.

Systemd's vigtigste funktioner:

  • Paralleliseret opstart af tjenester
  • Socket- og D-Bus-aktivering for on-demand-tjenester
  • cgroup-baseret proces-sporing
  • Oprettelse af snapshots og systemgendannelse
  • Fleksibel afhængighedsstyring

Tjenestestyring med systemctl

Det primære værktøj til at administrere systemd er systemctl. Her er de grundlæggende kommandoer, du får brug for hele tiden (eksemplerne bruger sshd – SSH-tjenesten til sikker fjernlogin).

Oversigt over aktive enheder

systemctl list-units

Viser alle aktuelt aktive enheder med deres status og beskrivelser.

Start og stop af en tjeneste

# Start en tjeneste
sudo systemctl start sshd

# Stop en tjeneste
sudo systemctl stop sshd

Tjek status

systemctl status sshd

Giver detaljeret information om tjenestens aktuelle tilstand, inklusive fejl.

Genstart og genindlæs

# Genstart en tjeneste
sudo systemctl restart sshd

# Genindlæs konfiguration uden afbrydelse
sudo systemctl reload sshd

Start automatisk ved boot (enable/disable)

# Start automatisk ved boot
sudo systemctl enable sshd

# Undgå start ved boot
sudo systemctl disable sshd

# Tjek om tjenesten er enabled
systemctl is-enabled sshd

Targets

I systemd erstatter targets det gamle runlevel-koncept med mere fleksible opstartssekvenser.

Target Beskrivelse Runlevel-ækvivalent
graphical.target Multi-user med netværk og grafisk interface Runlevel 5
multi-user.target Multi-user med netværk Runlevel 3
rescue.target Enkeltbrugertilstand til systemgendannelse –

Vis og sæt default target

# Vis nuværende default target
systemctl get-default

# Sæt nyt default target (kræver sudo)
sudo systemctl set-default graphical.target   # eller multi-user.target / rescue.target

Efter en reboot starter systemet i det target, du lige har sat.

Skift target med det samme

sudo systemctl isolate multi-user.target

Skifter straks systemet til det valgte target (f.eks. multi-user eller rescue).


Enheder (units) og egne unit-filer

Systemd-enheder defineres af unit-filer, som ligger i:

  • /usr/lib/systemd/system – standard-enheder
  • /etc/systemd/system – egne/tilpassede konfigurationer

Sådan opretter du en tilpasset unit-fil (eksempel med sshd.service):

# 1. Kopiér en standard-unit-fil til /etc/systemd/system
sudo cp /usr/lib/systemd/system/sshd.service /etc/systemd/system

# 2. Redigér filen efter behov

# 3. Genindlæs systemd
sudo systemctl daemon-reload

# 4. Start/enable din tilpassede tjeneste
sudo systemctl start sshd

Oversigt og fejlfinding

Vis alle indlæste unit-filer

systemctl list-unit-files --type=service

Vis kun feilede tjenester

systemctl --failed

Analysér opstartstider

# Tjenester sorteret efter opstartstid
systemd-analyze blame

# Grafisk rapport som PNG
systemd-analyze plot > startup.png

blame viser tjenester sorteret efter opstartstid; plot genererer et PNG-diagram med en visuel opdeling af opstartstiderne.


Snapshots – et forbehold

Den officielle openSUSE-reference- og administrationsguide beskriver systemd-snapshots: sudo systemctl snapshot <navn>.snapshot, som gemmer systemets aktuelle tilstand og muliggør nem gendannelse (oprettelse, sletning, liste og isolate).

Bemærk: Denne funktionalitet virker ikke i praksis. systemctl snapshot og systemctl list-snapshots findes ikke længere – sandsynligvis er funktionen fjernet fra systemd til fordel for Snapper. Funksjonen er dog stadig omtalt i den officielle manual. Videens skaber efterlyser information, hvis nogen kender nærmere detaljer.


Timer-units (jobscheduling)

Systemd-timer-units bruges til jobplanlægning ligesom cron, men med flere fordele:

  • Jobs kan afhænge af andre systemd-tjenester
  • Timers håndteres som almindelige systemd-tjenester via systemctl
  • Timers kan være real-time (kalenderbaserede) eller monotonic (relative)
  • Timers logges i systemd-journalen, hvilket gør overvågning og fejlfinding lettere

Opret en service-fil

Opret filen /etc/systemd/system/mytask.service (navnet skal slutte på .service):

[Unit]
Description=My scheduled task

[Service]
ExecStart=/usr/local/bin/mytask.sh

Opret en timer-fil

Opret filen /etc/systemd/system/mytask.timer:

[Unit]
Description=Run my task every hour

[Timer]
OnCalendar=hourly
Persistent=true

[Install]
WantedBy=timers.target

Aktivér og start timeren

sudo systemctl enable mytask.timer
sudo systemctl start mytask.timer

# Tjek at timeren er aktiv
systemctl list-timers

Tip: Hvis timeren fejler med "bad unit file setting", så tjek statussen med systemctl status mytask.timer – ofte er det en tastefejl i unit-filen (f.eks. en forkert nøgle).


Temp-files (tmpfiles.d)

Systemd understøtter regelmæssig oprydning i midlertidige mapper via tmpfiles.d, som læser sin konfiguration fra (i prioriteret rækkefølge):

  1. /etc/tmpfiles.d – egne indstillinger (overtrumfer de andre)
  2. /run/tmpfiles.d
  3. /usr/lib/tmpfiles.d – pakkenes standardkonfiguration

Konfigurationsformatet er én linje pr. post: type, path, action samt evt. mode, ownership, age og argument-felter.

Eksempel: automatisk oprydning i /tmp

Opret filen /etc/tmpfiles.d/cleanup.conf:

sudo vi /etc/tmpfiles.d/cleanup.conf

Med følgende indhold (sletter filer ældre end 10 dage i /tmp):

d /tmp 1777 root root 10d

Tjek derefter timeren, der håndterer oprydningen:

systemctl status systemd-tmpfiles-clean.timer

Tip: Der findes mange parameterkombinationer til forskellige use cases – læs manualen (man tmpfiles.d) for en fuld forklaring.


Logstyring med journalctl

journalctl giver adgang til at forespørge logbeskeder:

# Vis alle logs for en bestemt tjeneste
sudo journalctl -u sshd

# Følg logs i real time
sudo journalctl -u sshd -f

# Begræns antal viste linjer
sudo journalctl -n 50

-f er praktisk til realtids-overvågning (f.eks. mens du logger ind via SSH på en anden maskine) – afslut med Ctrl+C.


Opsummering

Denne guide har dækket:

  • Grundlæggende systemctl-kommandoer (start, stop, status, genstart, genindlæs, enable/disable)
  • Targets og hvordan du skifter mellem dem
  • Oprettelse af egne unit-filer
  • Fejlfinding og opstartsanalyse (--failed, systemd-analyze)
  • Timer-units som cron-alternativ
  • Oprydning af midlertidige filer med tmpfiles.d
  • Loganalyse med journalctl