Перейти к содержимому

core.sysctl

← Каталог модулей

soul-sidesoulstack.systemsystemroot требуется

Управление kernel-параметрами: runtime-значение плюс persist в /etc/sysctl.d.

core.sysctl приводит kernel-параметры к нужному значению сразу с двух сторон: runtime через sysctl -w и persist-запись в /etc/sysctl.d/, чтобы значение переживало reboot. Состояние present работает с одним параметром, applied — с набором параметров одним детерминированным drop-in (ключи отсортированы, контент воспроизводим между прогонами). Оба состояния идемпотентны: если runtime и persist уже совпадают с целевым — шаг сообщает changed=false. Требует root.

Требования

  • Rootтребуется
  • Сторонаsoul-side
  • Коллекцияsoulstack.system
  • Категорияsystem
Capabilitiesrun_as_rootexec_subprocessfs_write_root

Состояния

core.sysctl.present — Один kernel-параметр приведён к значению: runtime (sysctl -w) + persist в /etc/sysctl.d/.

Меняется, когда

runtime-значение отличалось (применён sysctl -w), либо persist-файл отсутствовал или содержал другую строку (перезаписан).

Не меняется, когда

runtime-значение и persist-файл уже совпадают.

Параметры

ПараметрТипОбяз. / дефолтОписание
namestringrequiredИмя kernel-параметра (напр. net.ipv4.ip_forward).
valuestringrequiredЖелаемое значение.
filenamestringoptionalИмя persist-файла в /etc/sysctl.d (default — name с '.'→'-' + .conf).

Пример — Один параметр персистентно

- name: Enable IPv4 forwarding persistently
module: core.sysctl.present
params:
name: net.ipv4.ip_forward
value: "1"

Output

ПолеТипОписание
namestring
valuestring
pathstring/etc/sysctl.d/<filename>.conf

Справочник

reload — перечитывание drop-in (applied)

applied пишет drop-in, но запись файла сама по себе не меняет runtime-значения — их применяет отдельный sysctl -p <file> (точечно по этому drop-in, не весь --system). reload решает, когда его делать; на changed reload не влияет.

ЗначениеПоведение
auto (default)sysctl -p <file> только при реальном изменении drop-in. Файл совпал — reload не делается.
alwayssysctl -p <file> безусловно, даже если файл не менялся.
neverЯвный opt-out — reload не делается никогда, только запись файла.

Заметки

  • present приводит к согласованности обе стороны сразу: runtime (sysctl -w, действует немедленно) и persist в /etc/sysctl.d/<filename>.conf (переживает reboot).
  • Multi-value ключи (tab-разделённые) нормализуются перед сравнением, чтобы пробелы vs табы не давали ложного diff.
  • Пустой settings ({}) в applied — ранний no-op: файл не пишется, reload не делается, changed=false.
  • Отдельного state для удаления persist-записи в MVP нет; откат — present/applied с верным значением (модуль перезапишет и runtime, и файл).
  • Требует root: sysctl -w / sysctl -p и запись в /etc/sysctl.d/.

Безопасность и умолчания

  • Главный риск — изменение kernel-параметра под root: параметр глобален для всего хоста, неверное значение = DoS (слишком малый fs.file-max валит процессы на лимитах, net.* рвёт сеть) или ослабление защиты ядра.
  • Валидации значения и имени нет (by design MVP): value уходит в sysctl -w буквально, невалидное значение ловит сам sysctl (non-zero exit → шаг падает), а не модуль.
  • value и name из input.* / register.* / soulprint.* должны быть доверенными (автор Destiny/scenario), а не внешним вводом.
  • filename нормализуется (.→-, суффикс .conf), но путь всегда внутри /etc/sysctl.d/ — записать persist-файл за пределы каталога через filename нельзя.
  • Персистентность усиливает цену ошибки: неверное значение не «само починится» после reboot — оно сохранено в /etc/sysctl.d/ и применяется снова.

См. также