CLI mev
mev — клиент платформы для рабочей машины разработчика. Он упаковывает каталог flake в tar-архив и отправляет его на хост по SSH (команды push и fork) либо посылает управляющую команду без архива (всё остальное). Авторизацию выполняет mevd на хосте по SSH-ключу — сам клиент никаких полномочий не несёт.
Как определяется хост
Хост платформы ищется по порядку:
- Флаг
--host HOSTв команде. - Переменная окружения
MEV_HOST. - Файл
/etc/mev/host.
Если хост не найден, команда завершается с ошибкой.
Команды
push — отправить flake
mev <flake-dir|flake.nix> [--host HOST]Упаковывает каталог flake (без .git, .direnv, result) и отправляет на хост через ssh mev@<host>. На хосте mevd:
- вычисляет
outputs.mevв песочнице; - проверяет схему и авторизацию;
- запускает согласование: выделение id, создание ZFS-датасета, сборку образа, обновление реестров.
Если в репозитории есть HEAD-коммит с SSH-подписью, mev добавляет файл подписи в архив (для проверки requireSignedCommit).
Повторный пуш того же окружения — это обновление без потери данных.
Примеры:
mev ./myenv
mev ./myenv --host dev.maximaster.ru
mev ./myenv/flake.nixlist — список окружений
mev list [--all] [--json] [--host HOST]Показывает окружения, доступные текущему оператору. --all — все окружения (только для администратора). --json — вывод в формате JSON.
status — состояние окружения
mev status <owner/slug> [--json] [--host HOST]Показывает состояние конкретного окружения: запущено, спит, бэкенд, домены. --json — машиночитаемый вывод.
logs — журнал контейнера
mev logs <owner/slug> [-n N] [--host HOST]Выводит журнал systemd-юнита окружения (journalctl). -n N ограничивает число последних строк.
secrets recipient — получить ключ-получатель age
mev secrets recipient <owner/slug> [--host HOST]Выводит публичный ключ-получатель age для шифрования секретов окружения. Окружение должно уже существовать (быть создано хотя бы одним пушем). Шифртекст, полученный командой age -a -r <recipient>, кладётся в поле secrets flake.
Подробнее о работе с секретами — в описании окружения.
destroy — удалить окружение
mev destroy <owner/slug> [--purge-data] [--host HOST]Останавливает и удаляет окружение. По умолчанию данные (ZFS-датасет) сохраняются. --purge-data удаляет датасет вместе с данными — необратимо.
Удалять окружение вправе только владелец или администратор.
fork — создать ответвление
mev fork <src-owner/slug> <new-flake-dir> [--host HOST]Создаёт новое окружение как клон существующего: ZFS-датасет клонируется мгновенно (zfs clone), данные физически не копируются. Новый flake из <new-flake-dir> должен содержать mev с другим name. Удобно, чтобы ответвить функциональность от общей базы.
Прочие команды чтения
Команды audit (журнал событий) и stats (использование ресурсов) обрабатывает mevd на стороне хоста. Они доступны через HTTP API и дашборд статуса, но в текущий набор команд клиента mev не входят.
Коды завершения
mev пробрасывает код завершения от mevd. Коды стабильны и совпадают с прежними соглашениями bash-плоскости:
| Код | Значение |
64 | ошибка использования (неверные аргументы) |
65 | ошибка обработки flake: вычисление (eval), превышение лимитов песочницы или сборка пакета сервиса (package) на стороне оператора |
66 | нарушение схемы mev (валидация) |
9 | конфликт домена или окружение не найдено |
77 | отказ в авторизации |
78 | требуется подпись коммита, но её нет |
79 | подпись коммита недействительна |
1 | прочая ошибка (запуск помощника, ввод-вывод, хранилище) |
Подробности ошибки выводятся в stderr.