CLI `tatuzim-agent`
CLI do agent que roda em cada VPS. Tipicamente operado via systemd, mas comandos pontuais sao uteis pra debug/admin.
Sintaxe geral
tatuzim-agent <COMMAND>Variaveis de ambiente (comuns a todos os comandos)
| Var | Obrigatorio em | Default | Descricao |
|---|---|---|---|
TATUZIM_SERVER_URL |
todos | — | URL HTTPS do enroll endpoint do server |
TATUZIM_SERVER_MTLS_URL |
run, rotate |
— | URL HTTPS:8443 do mTLS endpoint |
TATUZIM_SERVER_CA_PATH |
run, rotate |
(usa identity/ca.pem) |
Root CA do step-ca pra trust do server |
TATUZIM_AGENT_HOSTNAME |
enroll | hostname do SO |
Hostname do agent (vinculado ao token) |
TATUZIM_AGENT_ROLE |
enroll | — | Role do agent (vinculado ao token) |
TATUZIM_AGENT_DATA_DIR |
todos | /var/lib/tatuzim-agent |
Diretorio de dados |
TATUZIM_ENROLL_TOKEN |
enroll | — | Token plaintext (only first time) |
TATUZIM_AGENT_POLL_INTERVAL |
run | 30s |
Intervalo de poll do manifest (humantime) |
TATUZIM_AGENT_RENEWAL_THRESHOLD |
run | 6h |
Renova cert quando faltar < isso |
TATUZIM_AGENT_OUT_DIR |
run | $DATA_DIR/out |
Onde escrever artefatos |
TATUZIM_AGENT_STATE_DIR |
run | $DATA_DIR/state |
Onde gravar processed.json |
TATUZIM_AGENT_HOOK_DIR |
run | $DATA_DIR/hooks |
Hooks pos-instalacao |
RUST_LOG |
— | info |
Verbosidade |
Comandos
`tatuzim-agent enroll`
First-time enrollment contra o server.
tatuzim-agent enrollPre-requisitos (env):
TATUZIM_ENROLL_TOKENTATUZIM_AGENT_HOSTNAME(deve bater com o token)TATUZIM_AGENT_ROLE(idem)TATUZIM_SERVER_URL
Comportamento:
- Se
identity/agent.crtja existe → erroidentity already present - Gera ECDSA P-256 keypair
- Cria CSR (CN = hostname)
- POST
/v1/enrollcom token + CSR - Salva
agent.crt(0644) +agent.key(0600) +ca.pem(0644)
Exemplo:
sudo -u tatuzim \
TATUZIM_SERVER_URL=https://tatuzim.dev.borlot.com.br \
TATUZIM_AGENT_HOSTNAME=vps-01 \
TATUZIM_AGENT_ROLE=mautic \
TATUZIM_AGENT_DATA_DIR=/var/lib/tatuzim-agent \
TATUZIM_ENROLL_TOKEN="EXEMPLO_xxxxxxxx..." \
/usr/local/bin/tatuzim-agent enroll`tatuzim-agent identity`
Mostra info do cert atual do agent. Nao faz chamadas de rede.
tatuzim-agent identityOutput:
Tatuzim Agent identity:
hostname: vps-01
cert CN: vps-01
cert serial: 0123456789abcdef0123456789abcdef
not_before: May 23 22:03:09 2026 +00:00
not_after: May 24 22:04:09 2026 +00:00
data_dir: /var/lib/tatuzim-agentErro se identity ausente:
Error: no identity at /var/lib/tatuzim-agent/identity — run `tatuzim-agent enroll` first`tatuzim-agent run`
Daemon loop principal. Usado pelo systemd (ExecStart).
tatuzim-agent runLoop:
1. Verifica validade do cert; renova se < TATUZIM_AGENT_RENEWAL_THRESHOLD
2. GET /v1/manifest via mTLS
3. Para cada entrega NAO em processed.json:
match tipo:
csr_cert: gera CSR + POST /v1/certs/issue + escreve out/<nome>.{crt,key}
+ POST /v1/events entrega_instalada
+ executa hooks/post-csr-cert
_: warn + skip
4. Sleep TATUZIM_AGENT_POLL_INTERVAL
5. Goto 1No boot do loop: emite agent_started (best-effort).
Termina apenas via SIGTERM/SIGINT (no MVP, sem graceful shutdown — abort imediato).
`tatuzim-agent rotate`
Forca renovacao do cert (ignora threshold).
tatuzim-agent rotateOutput:
INFO renewing cert old_serial=0123456789abcdef0123456789abcdef
INFO cert renewed new_serial=fedcba9876543210fedcba9876543210
Cert rotated:
old serial: 0123456789abcdef0123456789abcdef
new serial: fedcba9876543210fedcba9876543210Uso tipico:
- Apos comprometimento suspeito da key atual
- Debugging do fluxo de renewal
- Apos
tatuzim agente revokeno server (futuro)
`tatuzim-agent self-update`
Baixa nova versao do binario, valida assinatura minisign, swap atomico.
tatuzim-agent self-update --url <URL> [--binary <PATH>]Opcoes:
| Flag | Default | Descricao |
|---|---|---|
--url |
obrigatorio | URL base contendo tatuzim-agent + tatuzim-agent.minisig |
--binary |
current_exe() |
Path do binario a substituir |
Comportamento:
- GET
<URL>/tatuzim-agent→ binario - GET
<URL>/tatuzim-agent.minisig→ assinatura - Verifica com pubkey embutida no proprio binario (
minisign-verify) - Se valido: escreve
.new, chmod +x, atomic rename - Se invalido: aborta sem mudar nada
Exemplo:
sudo tatuzim-agent self-update --url https://get.get.tatuzim.com/v0.2.0Pubkey embutida (compile-time): RWSeTpgYV+16Z//WwZku61OpIYgaU8iyyN/dEYm7bOGru0vFTbdLSAcD
Erro se signature invalida:
Error: signature does NOT match binary — refusing to installExit codes
| Code | Significado |
|---|---|
0 |
Sucesso |
1 |
Erro generico (config faltando, IO error, server reject, etc.) |
124 |
Timeout (quando rodado via timeout 2 tatuzim-agent run) |
143 |
SIGTERM |
Pattern de uso em systemd
A systemd unit (/etc/systemd/system/tatuzim-agent.service) roda:
ExecStart=/usr/local/bin/tatuzim-agent run
EnvironmentFile=-/etc/tatuzim-agent/env
User=tatuzimO env file contem as variaveis necessarias. Modifique e systemctl restart tatuzim-agent pra aplicar mudancas.
Logging
Por default RUST_LOG=info. Pra debug detalhado:
sudo systemctl stop tatuzim-agent
sudo -u tatuzim RUST_LOG=debug /usr/local/bin/tatuzim-agent run
# Ou via env:
echo "RUST_LOG=debug" | sudo tee -a /etc/tatuzim-agent/env
sudo systemctl restart tatuzim-agent
sudo journalctl -u tatuzim-agent -fModulos disponiveis pra filtrar:
tatuzim_agent::commands::enrolltatuzim_agent::commands::runtatuzim_agent::processor(process_csr_cert)tatuzim_agent::renewal(cert renewal)tatuzim_agent::hookstatuzim_agent::http_clienttatuzim_agent::update