Установка из пакета
Следующий выпуск — 0.4; его релиз на GitHub ещё не опубликован. Команды ниже описывают планируемые артефакты. До публикации собирайте из исходников, а после публикации проверяйте каждый артефакт перед использованием. Наблюдаемый статус записан в docs/releases/0.4-install-surfaces.json.
Это путь для обычного Linux-узла, где движок должен работать как служба, а не в контейнере. Debian/Ubuntu и RHEL/Fedora/SUSE по умолчанию используют systemd. Init Alpine по умолчанию — OpenRC, не systemd. Для контейнеров см. Развёртывание с Docker; для узла без исходящего маршрута — Установка в изолированной среде, на которую эта страница ссылается на шаге обновления.
1. Проверьте выпуск, прежде чем ему доверять
Заголовок раздела «1. Проверьте выпуск, прежде чем ему доверять»Для продукта безопасности конвейер сборки — часть модели доверия, поэтому здесь никто
не просит принять загрузку на веру. Положите пакет, checksums.txt и подпись в один
каталог и запустите проверяющий из этого каталога:
# The verifier is in a source checkout of the release tag, not a release asset; running it# trusts the checkout. Without one, INSTALL.md shows the cosign + sha256sum commands.# keyless / Sigstore (default; reaches Rekor over the network)/path/to/olivares/scripts/verify-release.shРелизы подписываются без ключа и не публикуют публичный ключ cosign, поэтому для пакетов,
скачанных из релиза, используйте команду без ключа. Ей нужен корневой материал доверия Sigstore,
который cosign загружает, если он ещё не в кэше. --offline убирает только обращение к Rekor и не
превращает проверку в работу без сети. --key предназначен только для файлов, подписанных
закрытым ключом под вашим контролем, и этот публичный ключ нужно получить отдельно от
проверяемых файлов.
Что проверяет каждый шаг, как он ведёт себя на частичном выпуске и как вместо этого проверить образ контейнера — в Проверьте то, что скачали.
2. Установите пакет
Заголовок раздела «2. Установите пакет»Три формата несут двоичный файл в /usr/bin/olivares, файл окружения в
/etc/olivares/olivares.env (config|noreplace), каталог данных
/var/lib/olivares и тексты лицензий. .deb и .rpm поставляют укреплённый
systemd-юнит. .apk кладёт исполняемый
юнит OpenRC в /etc/init.d/olivares с явным штампом package-init, чтобы хуки не
угадывали по наличию systemctl на узле. Linux-архивы несут те же адаптеры службы:
scripts/install-service.sh и packaging/service/.
# Debian / Ubuntusudo dpkg -i olivares_0.4_linux_amd64.deb
# RHEL / Fedora / SUSEsudo rpm -Uvh olivares_0.4_linux_amd64.rpm
# Alpinesudo apk add --allow-untrusted olivares_0.4_linux_amd64.apkУстановка создаёт системного пользователя и группу olivares (оболочка
/usr/sbin/nologin, домашний каталог /var/lib/olivares), создаёт /var/lib/olivares
с режимом 0750 во владении этого пользователя и создаёт /etc/olivares.
systemd-пакеты перезагружают systemd, когда есть systemctl; пакеты OpenRC не включают
и не запускают службу. Он ничего не запускает — см.
чего пакет не делает.
Запуск движка
Заголовок раздела «Запуск движка»На Debian/Ubuntu и RHEL/Fedora/SUSE:
sudo systemctl enable --now olivaresНа OpenRC (.apk из этого исходного дерева):
sudo rc-service olivares start# необязательно; пакет этого не делает:sudo rc-update add olivares defaultТокен первого запуска находится в /var/log/olivares.log (и в logread, если работает
syslogd). Дополнительные флаги из OLIVARES_EXTRA_ARGS добавляются с отключённым
globbing и разбиваются по пробелам; вложенные кавычки не интерпретируются, а файл
окружения не исполняется как shell.
На ранее опубликованном Alpine нет systemctl, и у того .apk нет юнита
OpenRC. Запустите движок от служебного пользователя; токен первого запуска
печатается в stdout:
sudo -u olivares olivares serve --data-dir=/var/lib/olivares \ --listen=:8443 --grpc-listen=:8444 --checkpoint-interval=1h3. Укреплённый systemd-юнит
Заголовок раздела «3. Укреплённый systemd-юнит»Упакованный systemd-юнит запускает движок от непривилегированного пользователя
olivares с пустым bounding-набором capabilities — он не держит ни ambient, ни
bounding capabilities — и NoNewPrivileges=true, так что ничто из запущенного им не
может их получить. Сверху он несёт ProtectSystem=full (/usr, /boot, /efi и /etc
только для чтения), PrivateDevices=true, ProtectClock=true, ProtectKernelTunables=true,
ProtectKernelModules=true, ProtectKernelLogs=true, ProtectControlGroups=true,
RestrictNamespaces=user net mnt (сессия получает собственные пространства имён
пользователя и сети, а помощник, держащий хуки и настройки Git папки только для чтения,
получает собственное пространство имён монтирования, где фильтр системных вызовов
разрешает mount; все прочие типы запрещены), RestrictSUIDSGID=true, RestrictRealtime=true,
LockPersonality=true, SystemCallArchitectures=native, фильтр системных вызовов
@system-service, дополнительно отбрасывающий @privileged и @resources, и
UMask=0027.
Юнит не скрывает домашние и временные каталоги и разрешает исполняемую память: он
задаёт ProtectHome=false, PrivateTmp=false и MemoryDenyWriteExecute=false. Движок
достаёт всё, что обычные права на файлы разрешают учётной записи olivares, включая
/home, /tmp и /var/tmp, чтобы выбранные для сессий папки оставались доступны.
Изоляция вместо этого действует на уровне сессии: перед запуском каждого агентного
инструмента или stdio-сервера MCP движок применяет политику Landlock, которая разрешает
ему писать в папку сессии, домашний каталог инструмента и свой временный каталог и никогда
не даёт добраться до каталога данных движка, /etc/olivares и собственных учётных данных
учётной записи движка. Средам выполнения агентов и MCP на Node/V8 нужна исполняемая
JIT-память, поэтому MemoryDenyWriteExecute=false. На ядре без Landlock движок отказывается
запускать сессии; olivares doctor называет причину.
26.10.0 поставлялась с более строгим юнитом: вся файловая система только для чтения, кроме
каталога данных, домашние каталоги скрыты, приватный /tmp и никакой записываемой
исполняемой памяти. 26.10.1 ослабила его до значений выше. Любую из этих настроек можно
вернуть в drop-in (systemctl edit olivares). Тогда папки сессий в домашних каталогах или
в /tmp и инструменты на основе JIT перестанут работать, а при файловой системе только для
чтения каждой папке сессии вне каталога данных нужна своя строка ReadWritePaths=.
На Alpine по умолчанию эти директивы systemd не применяются к ранее опубликованному
.apk, потому что systemd-юнит этой полезной нагрузки не запущен. Пакеты
.apk, собранные из этого исходного дерева, вместо этого работают под OpenRC: они
используют учётную запись olivares, пишут токен первого запуска в
/var/log/olivares.log и не реализуют директивы песочницы systemd.
Слушатели по умолчанию принимают соединения из сети — --listen=:8443 для HTTP
(REST плюс встроенная консоль) и --grpc-listen=:8444 для gRPC, dual-stack-шаблон. Это
сервер, и защищают его включённый TLS, отсутствие учётных данных по умолчанию и
одноразовый токен настройки. Ограничивайте их намеренно через
OLIVARES_EXTRA_ARGS=--listen=127.0.0.1:8443 --grpc-listen=127.0.0.1:8444 в
/etc/olivares/olivares.env — эти флаги добавляются после собственных флагов юнита, и
побеждает последний — и поставьте перед ними собственное завершение TLS. Для IPv6
loopback используйте --listen=[::1]:8443.
Исполняемый scratch-раздел
Заголовок раздела «Исполняемый scratch-раздел»Это сбой, который стоит знать заранее на systemd-узле, потому что симптом не называет причину.
Внепроцессные коннекторы первой стороны поставляются встроенными в двоичный файл.
При загрузке движок извлекает нужные во частный scratch и исполняет их как
подпроцессы. Если TMPDIR не задан, scratch создаётся под <data-dir>/tmp; только
незаписываемый каталог данных заставляет движок упасть в системный временный каталог.
Явный TMPDIR всегда побеждает.
Поэтому упакованная systemd-служба по умолчанию использует /var/lib/olivares/tmp, а
не /tmp. Проверьте раздел, который реально будет держать исполняемый scratch:
check_scratch_mount() { target=${1:-/var/lib/olivares} opts=$(findmnt -no OPTIONS --target "$target") || { printf '%s\n' "cannot read mount options for $target (missing path or permission)" >&2 return 1 } [ -n "$opts" ] || { printf '%s\n' "mount options for $target are unknown" >&2 return 1 } case ",$opts," in *,noexec,*) printf '%s\n' 'noexec — set TMPDIR' ;; *) printf '%s\n' 'exec-capable — nothing to do' ;; esac}check_scratch_mount /var/lib/olivaresЕсли там noexec, направьте TMPDIR на каталог, доступный на запись пользователю
olivares и лежащий на разделе, допускающем исполнение:
sudo install -d -o olivares -g olivares -m 0750 /run/olivares-exec-tmpsudo systemctl edit olivares # creates a drop-in; do not edit the shipped unit[Service]Environment=TMPDIR=/run/olivares-exec-tmpReadWritePaths=/run/olivares-exec-tmpЗатем перезапустите. Если exec отвергнут с EACCES или ENOEXEC, ошибка движка
называет раздел извлечения и два органа перемещения (TMPDIR и data-dir); она не
сообщает о noexec-разделе как об отсутствующем коннекторе.
Используйте systemctl edit, никогда прямое редактирование
/usr/lib/systemd/system/olivares.service: этот файл принадлежит пакету, и обновление
его заменяет.
4. Первый запуск: olivares quickstart
Заголовок раздела «4. Первый запуск: olivares quickstart»quickstart — это serve с дружелюбными значениями по умолчанию и направляющим
баннером. Он никогда не изобретает учётные данные по умолчанию; он указывает на
встроенную консоль, чтобы создать первого администратора с одноразовым токеном.
Если вы уже обслуживаете под упакованным systemd-юнитом, не запускайте quickstart —
токен настройки первого запуска печатается в журнал:
journalctl -u olivares | sed -n '/FIRST-BOOT SETUP/,/========================/p'Если вы запустили serve на переднем плане (Alpine по умолчанию), тот же баннер — в
stdout.
Откройте консоль по https://127.0.0.1:8443 (при первом запуске генерируется
самоподписанный сертификат), предъявите этот токен и создайте администратора. Токен
одноразовый.
На рабочей станции, чтобы осмотреться без установки службы, olivares quickstart
делает то же самое на переднем плане с --listen/--grpc-listen/--data-dir, если
нужно уйти от значений по умолчанию.
5. Первый источник: pgAudit
Заголовок раздела «5. Первый источник: pgAudit»Источник — это место, откуда движок принимает наблюдения. Глаголы разделены по тому,
чего стоит каждый, и их стоит использовать в этом порядке: plan говорит, что
изменилось бы, и ничего не пишет, validate говорит, что конфигурация согласована
сама по себе без обращения к сети, test реально открывает источник, чтобы
доказать, что он отвечает, а set применяет. Конфигурация несёт ссылки на секреты
(store:<name>), никогда значения.
pgAudit читает журнал аудита PostgreSQL, поэтому log_path — единственное
обязательное поле:
# coherent by itself? (writes nothing, opens no socket)sudo -u olivares olivares sources validate --name pg-prod --kind pgaudit \ --tenant <your-tenant-id> \ --config log_path=/var/log/postgresql/postgresql.log \ --data-dir /var/lib/olivares
# does it actually answer? (opens the source for real)sudo -u olivares olivares sources test --name pg-prod --kind pgaudit \ --tenant <your-tenant-id> \ --config log_path=/var/log/postgresql/postgresql.log \ --data-dir /var/lib/olivares
# apply itsudo -u olivares olivares sources set --name pg-prod --kind pgaudit \ --tenant <your-tenant-id> \ --config log_path=/var/log/postgresql/postgresql.log \ --actor "$(id -un)" --reason "onboard the production audit log" \ --data-dir /var/lib/olivaresТри вещи в командной строке выше — не наполнитель:
--tenantобязателен. Источник должен назвать делового арендатора, которому принадлежат наблюдения; без него команда отказывается, а не угадывает владельца аудиторских данных.--actorи--reasonтребуетset, и толькоset. Привилегированная офлайн-операция должна записать, кто её выполнил и зачем.validateне нуждается ни в одном, потому что ничего не пишет — асимметрия и есть смысл.formatпо умолчаниюcsvlog, аfollow—true, поэтому стандартному развёртыванию pgAudit не нужно ни то ни другое.
Применение печатает, что изменилось, поле за полем, и говорит, как заставить
работающий движок подхватить это без перезапуска —
POST /v1/console/runtime/reload или SIGHUP. Под упакованным systemd-юнитом это
sudo systemctl reload olivares. Если вы запустили serve на переднем плане,
отправьте SIGHUP этому процессу.
Служебному пользователю нужен доступ на чтение к этому файлу журнала; в большинстве
дистрибутивов это значит добавить olivares в группу adm или postgres —
намеренная выдача с вашей стороны, а не то, что пакет делает за вас.
6. Обновление
Заголовок раздела «6. Обновление»Используйте один способ обновления на хост. Хост, установленный из пакета или из репозитория,
обновляется своим менеджером пакетов (apt, dnf, apk или новым пакетом); olivares upgrade
отказывается заменять двоичный файл, которым владеет пакет.
Менеджер пакетов владеет /usr/bin/olivares при любой установке из пакета (deb, rpm, apk,
AUR). Замена этого файла на месте оставила бы базу данных пакетов описывающей файл, которого в
таком виде уже нет, поэтому olivares upgrade отказывается: он завершается с кодом 2 до любой
загрузки и называет путь через пакет. Обновляйте менеджером пакетов. olivares upgrade --check
по-прежнему работает: он показывает план и ничего не меняет:
sudo olivares upgrade --check # what would change, without changing anythingТам, где менеджер пакетов не владеет двоичным файлом (его положил install.sh или вы вручную),
olivares upgrade заменяет его на месте, и свойства безопасности — причина пользоваться им
там: он никогда не заменяет двоичный файл, пока скачанный кандидат не прошёл успешный
exec-зонд, хранит резервную копию с меткой времени и возвращается к этой копии, если зонд
после замены не проходит. --target <путь> — переопределение оператора: он заменяет файл,
который вы назвали, включая /usr/bin/olivares, и после этого база данных пакетов не совпадает
с этим файлом.
Три флага важны для --check и для запуска с --target:
--endpoint— брать обновления из репозитория GitHub, которым вы управляете, а не из значения по умолчанию. Это выход для зеркала или форка.--bundle— Для установки без сети требуется Enterprise. Community проверяет комплект с--bundle --check, не читая лицензию и не устанавливая его.--install-timer— выдать необязательный systemd-таймер и службу, которые проверяют обновления по расписанию. Ничто не ставит это за вас; см. чего пакет не делает. Это генератор systemd. При установке из пакета команда отказывает:/usr/bin/olivaresпринадлежит менеджеру пакетов, поэтому--install-timerзавершается с кодом 2 и не записывает unit. Обновляйте через менеджер пакетов (на appliance Olivares:systemctl start olivares-appliance-update.service).
Учтите, что постановка и exec-зонд происходят в каталоге установки, рядом с целью —
не в /tmp, поэтому раздел noexec, обсуждённый
выше, не ломает обновление. Раздел noexec на
каталоге установки — другое дело и делает установленную версию неизмеримой; этот
случай, каналы выпуска, поэтапный выкат и откат — в
Обновление и откат.
7. Удалить или перенести, не угадывая пути
Заголовок раздела «7. Удалить или перенести, не угадывая пути»Пакет записывает /var/lib/olivares/install-manifest.json. Деинсталлятор проверяет
полный манифест по подписанному индексу дистрибуции, прежде чем трогать службу или
файловую систему; неожиданный путь возвращает 2. Сначала осмотрите, затем явно
выберите сохранение:
sudo olivares uninstall --plan --data-dir /var/lib/olivaressudo olivares uninstall --preserve --data-dir /var/lib/olivaressudo olivares uninstall --purge --data-dir /var/lib/olivares --yesPreserve — политика снятия пакета: она сохраняет конфигурацию, данные, журналы, ключи
и их служебную идентичность. В systemd-пакетах хук снятия выполняет --preserve. В
OpenRC-пакетах .apk, собранных из этого исходного дерева, хук останавливает службу,
если она активна, снимает запись из runlevel по умолчанию, не завершаясь ошибкой, если её
никогда не включали, проверяет полный манифест через --plan и даёт apk удалить файлы,
принадлежащие пакету. Ранее опубликованные пакеты Alpine проверяли только через
--plan, потому что у той полезной нагрузки не было юнита OpenRC, который нужно
остановить. Запускайте
--purge перед снятием пакета только когда намерение — стереть. Требуется
подтверждение, удаляются только проиндексированные пути.
Для переезда хозяйства сначала создайте olivares dr backup, установите назначение и
выполните там olivares dr restore. Текущие бандлы используют hmac-sha256-kek-v1
для аутентификации манифеста и каждой нагрузки под вашим KEK. Экспорт более нового
движка отклоняется до записей; отдельно аутентифицированный бандл pre-v26.9 явно
требует --allow-legacy-unsigned.
Руководство по резервному копированию и восстановлению
охватывает хранение KEK и доказательство непрерывности после импорта.
8. Чего пакет не делает
Заголовок раздела «8. Чего пакет не делает»Сказано прямо, потому что продукт безопасности, который здесь расплывчат, не заслуживает установки:
- Он не добавляет репозиторий. Ничего не пишется в
/etc/apt/sources.list.d,/etc/yum.repos.dили/etc/apk/repositories. Вы установили один файл; установлен был только этот файл. Обновления запускаете вы — новым пакетом;olivares upgradeотказывается заменять двоичный файл, которым владеет пакет. - Он не запускает и не включает службу. systemd-пакеты перезагружают systemd,
когда есть
systemctl, и печатаютsystemctl enable --now. Пакеты OpenRC печатаютrc-service olivares startи не выполняютrc-update add. Запуск остаётся вашим решением. Обновление уже работающей службы OpenRC останавливает её, заменяет файлы и запускает снова; неактивная служба остаётся неактивной. - Проверка лицензии никому не звонит. Загрузка того, за что вы заплатили, — да.
Проверка лицензии в открытой сборке — офлайн Ed25519, удалённого выключателя нет, и
никакой лицензионный ключ не ограничивает и не ухудшает эту сборку — сборка AGPL и
есть вся платформа.
Нет обязательной телеметрии и исходящего трафика плоскости управления по
умолчанию: границу пересекает то, что вы настроили пересекать — вызовы ваших
API моделей, выходы SIEM/webhook, которые вы подключили, внешний поставщик
эмбеддингов, если вы его подготовили, и любой источник, который опрашивает
коннектор (его
addr,base_urlилиendpoint) с заданным вами интервалом. - Но
olivares upgradeсознательно делает сетевой вызов, когда вы его запускаете — в этом смысл проверки обновлений, и--checkпоказывает план, пока ничего не сдвинулось. Честная форма обещания: проверка лицензии никому не звонит; загрузка того, за что вы заплатили, — да. Используйте--bundle, если путь обновления тоже не должен делать вызовов. - Он открывает порт в сеть. Юнит слушает все интерфейсы, пока вы сами его не расширите.
См. также
Заголовок раздела «См. также»- Проверьте то, что скачали — полный путь проверки
- Обновление и откат — каналы, поэтапный выкат, откат
- Укрепить развёртывание — сверх того, что юнит уже делает
- Установка в изолированной среде
- Развёртывание с Docker
- Подключить источник
- Резервное копирование и восстановление