synit/notes/systemd-functions.md

3.8 KiB

title
What does systemd do?
  • ac-power: reports whether A/C power is connected
  • activate: do socket activation (setup sockets, exec() on activity)
  • analyze: "profile systemd", various renderings and checks of system state and config
  • ask-password: secure password entry for e.g. cryptsetup
  • backlight: saves/restores backlight brightness at shutdown/boot
  • basic
    • architecture: show some abstraction over current architecture
    • escape: string escaping for e.g. shell (blearghhh)
    • log: various kinds of logging (incl. syslog, journal, etc)
    • ratelimit: generic rate limiting datastructure and utilities
    • reboot: system call
    • util
      • in_initrd() predicate
    • virt: detects whether, and what kind of, virtualization is in effect
  • binfmt: registers binfmts with the kernel
  • boot: bootctl etc: communicate with EFI (?) about successful/failed boots
    • boot/efi: an actual EFI implementation?? can't be? maybe it's an EFI boot program. I don't know enough about this
  • busctl: introspect contents of D-Bus
  • cgls: "Recursively show control group contents"
  • cgroups-agent: sends a message to unix socket /run/systemd/cgroups-agent
  • cgtop: "Show top control groups by their resource usage"
  • core
    • automount
    • dbus-*, lots of dbus things, wonder what they all are
    • dynamic-user: dynamic user/group ID allocation for, like, temporary use?
    • efi-random: incorporate any random seed passed down from EFI
    • execute: execute programs. lots of code here!
    • job: a job/worker manager system
  • detect-virt: detect virtualization
  • firstboot
  • fsck: runs fsck
  • fstab-generator
  • getty-generator
  • hibernate-resume: a little initrd program that runs when restoring from hibernation!
  • home: manage "home areas"
  • hostname management
  • hwdb: a hardware database
  • id128: various identifiers
    • machine ID
    • boot ID
    • invocation ID
  • import: image importing for containers presumably
  • initctl: like telinit I guess
  • journal: journald, etc
  • kernel-install: when would this be used?
  • libsystemd: ?
  • libsystemd-network: implementations of network protocols?
    • dhcp, dhcp6
    • lldp
  • libudev: ?
  • login
  • machine: machined: "Manage registrations of local VMs and containers"
  • machine-id-setup: gives a machine a random persistent ID
  • modules-load: load configured modules (for explicit loading, rather than on demand)
  • mount: transient mounts
  • network: various network services e.g. dhcp, lldp, route management, wifi management
  • notify: "Notify the init system about service status updates"
  • nspawn: "Spawn a command or OS in a light-weight container"
  • nss-*
  • oom: userspace OOM killer
  • partition: partitioning tools
  • pstore: ?
  • random-seed: load/save random seed at boot/shutdown
  • resolve: a full DNS resolver
  • rfkill: radio power control
  • run: "Run the specified command in a transient scope or service"
  • shared
  • shutdown
  • sleep: enter sleep, hibernate, or both (?)
  • sysctl: "Applies kernel sysctl settings"
  • sysusers: creates system user accounts
  • timedate, timesync: clock management, NTP etc
  • tmpfiles: creates hierarchy under volatile/tmpfs areas of the filesystem (!) eg /run, /tmp etc
  • udev (!!)
  • vconsole: setup virtual consoles for e.g. utf8 mode

Unit names: "plain", "template", "instance" (of template).

Unit files:

  • have a "scope" - "system", "global", "user". What does it mean?
  • have a "type": UNIT_SERVICE UNIT_MOUNT UNIT_SWAP UNIT_SOCKET UNIT_TARGET UNIT_DEVICE UNIT_AUTOMOUNT UNIT_TIMER UNIT_PATH UNIT_SLICE UNIT_SCOPE
  • have a "state": UNIT_ACTIVE UNIT_RELOADING UNIT_INACTIVE UNIT_FAILED UNIT_ACTIVATING UNIT_DEACTIVATING UNIT_MAINTENANCE

Lots of code spent on argv parsing