Add Technical_Decomp_Systemd

Miguel Jacq 2025-12-27 20:55:18 -06:00
parent 04063a2503
commit 598ab639e9

@ -0,0 +1,66 @@
## enroll/systemd.py
### UnitInfo (dataclass)
#### Purpose: parsed subset of systemctl show <unit> for services.
#### Fields:
- name: unit name
- fragment_path: main unit file path
- dropin_paths: list of drop-in config files
- env_files: resolved EnvironmentFiles entries (minus leading -)
- exec_paths: parsed executable paths from ExecStart
- active_state, sub_state, unit_file_state, condition_result
#### Lifecycle / where its used:
- Returned by get_unit_info().
- harvest.harvest() uses it to:
- infer packages (dpkg_owner on fragment + exec binaries)
- add /etc/... candidates from dropins/env files
__________________
### UnitQueryError (exception class)
#### Purpose: a structured error when systemctl show fails for a unit.
#### Fields set in __init__:
- unit: unit name that failed
- stderr: trimmed stderr text
#### Message:
systemctl show failed for <unit>: <stderr>
#### Lifecycle / where its used:
Raised by get_unit_info() if systemctl returns nonzero.
harvest.harvest() catches it and records a ServiceSnapshot with empty packages/files and a note containing the error string.
____________________
### TimerInfo (dataclass)
#### Purpose: parsed subset of systemctl show <unit> for timers.
#### Fields:
- name
- fragment_path
- dropin_paths
- env_files
- trigger_unit: parsed from Unit= field (what the timer triggers)
- active_state, sub_state, unit_file_state, condition_result
#### Lifecycle / where its used:
Returned by get_timer_info().
harvest.harvest() uses timers to attribute timer override files under /etc to:
- the triggered service role (preferred), else
- a package role, else
- let it fall through and potentially get captured by etc_custom.