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

Установка из бинарных релизов

Готовый статический исполняемый файл без пакетного менеджера — для контейнеров, immutable-образов и дистрибутивов без deb/rpm. В отличие от пакетов, здесь systemd-юнит, системного пользователя и каталоги состояния вы создаёте вручную.

Исполняемые файлы публикуются в релизе под Linux/amd64:

Исполняемый файлНазначениеКуда ставить
keeperцентральный серверцентральный узел (1+ инстанс)
soulагент на хостекаждый управляемый хост
soulctlклиентский CLI операторарабочая станция оператора
soul-lintофлайн-линтеррабочая станция оператора / CI

Скачайте нужные исполняемые файлы из релиза и разложите по /usr/local/bin:

Окно терминала
sudo install -m 0755 keeper /usr/local/bin/keeper
sudo install -m 0755 soul /usr/local/bin/soul
sudo install -m 0755 soulctl /usr/local/bin/soulctl
sudo install -m 0755 soul-lint /usr/local/bin/soul-lint

Проверьте версию сборки (формат <binary> <версия> (<go-runtime>)):

Окно терминала
keeper version
soul version
soulctl --version
soul-lint --help

Демоны keeper и soul работают под системным пользователем soul-stack. Бинарный релиз не создаёт его за вас — сделайте это вручную.

На keeper-хосте:

Окно терминала
sudo useradd --system --no-create-home --shell /usr/sbin/nologin soul-stack
sudo install -d -o soul-stack -g soul-stack /etc/keeper /var/lib/keeper

На soul-хосте:

Окно терминала
sudo useradd --system --no-create-home --shell /usr/sbin/nologin soul-stack
sudo install -d -o soul-stack -g soul-stack /etc/soul /var/lib/soul-stack

soulctl и soul-lint — клиентские инструменты, отдельного пользователя и каталогов не требуют.

Пакеты несут юнит из коробки; при установке из исполняемых файлов он пишется вручную. Минимальный юнит Keeper-а (/etc/systemd/system/keeper.service):

[Unit]
Description=Soul Stack Keeper
After=network-online.target
Wants=network-online.target
[Service]
Type=exec
User=soul-stack
Group=soul-stack
EnvironmentFile=/etc/keeper/keeper.env
ExecStart=/usr/local/bin/keeper run --config=${KEEPER_CONFIG}
Restart=on-failure
RestartSec=5s
StartLimitIntervalSec=60s
StartLimitBurst=5
# hardening (безопасность на первом месте)
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
PrivateDevices=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
RestrictSUIDSGID=true
RestrictNamespaces=true
LockPersonality=true
MemoryDenyWriteExecute=true
# Единственный writable-путь — стейт-каталог Keeper-а.
ReadWritePaths=/var/lib/keeper
[Install]
WantedBy=multi-user.target

Env-файл /etc/keeper/keeper.env задаёт путь к конфигу:

Окно терминала
KEEPER_CONFIG=/etc/keeper/keeper.yml

Юнит агента (/etc/systemd/system/soul.service) аналогичен, но с более мягким hardening — Soul применяет Destiny (ставит пакеты, правит файлы, управляет сервисами) и требует реальных привилегий на хосте, поэтому ProtectSystem=strict / MemoryDenyWriteExecute для него не ставятся:

[Unit]
Description=Soul Stack Soul agent
After=network-online.target
Wants=network-online.target
[Service]
Type=exec
User=soul-stack
Group=soul-stack
EnvironmentFile=/etc/soul/soul.env
ExecStart=/usr/local/bin/soul run --config=${SOUL_CONFIG}
Restart=on-failure
RestartSec=5s
StartLimitIntervalSec=60s
StartLimitBurst=5
# hardening (мягкий профиль: Soul по природе меняет систему)
NoNewPrivileges=true
PrivateTmp=true
ProtectKernelModules=true
ProtectControlGroups=true
RestrictSUIDSGID=true
LockPersonality=true
# Стейт-каталог агента: кеш модулей по SHA-256, mTLS-идентичность.
ReadWritePaths=/var/lib/soul-stack
[Install]
WantedBy=multi-user.target

Env-файл /etc/soul/soul.env:

Окно терминала
SOUL_CONFIG=/etc/soul/soul.yml

Включить и запустить:

Окно терминала
sudo systemctl daemon-reload
sudo systemctl enable --now keeper # на keeper-хосте
sudo systemctl enable --now soul # на soul-хосте

Провижининг Vault (KV-секреты, PKI-engine, AppRole), выпуск серверного TLS-материала Keeper-а, заполнение keeper.yml / soul.yml, bootstrap первого оператора (keeper init) и онбординг агента не зависят от способа установки исполняемых файлов. Полная процедура — Из deb/rpm-пакетов, начиная с шага 2.