Empacotando o Tesseras para Debian
2026-02-16
O Tesseras agora inclui um pacote .deb para Debian e Ubuntu. Este post explica
como compilar e instalar o pacote a partir do código-fonte usando cargo-deb.
Pré-requisitos
Você precisa de uma toolchain Rust funcional e das bibliotecas de sistema necessárias:
sudo apt install build-essential pkg-config libsqlite3-dev
rustup toolchain install stable
cargo install cargo-deb
Compilando
Clone o repositório e execute a recipe just deb:
git clone https://git.sr.ht/~ijanc/tesseras
cd tesseras
just deb
Essa recipe faz três coisas:
- Compila
tesd(o daemon) etes(o CLI) em modo release comcargo build --release - Gera completions de shell para bash, zsh e fish a partir do binário
tes - Empacota tudo em um arquivo
.debcomcargo deb -p tesseras-daemon --no-build
O resultado é um arquivo .deb em target/debian/.
Instalando
sudo dpkg -i target/debian/tesseras-daemon_*.deb
Se houver dependências faltando, corrija com:
sudo apt install -f
Configuração pós-instalação
O script postinst cria automaticamente um usuário de sistema tesseras e o
diretório de dados /var/lib/tesseras. Para usar o CLI sem sudo, adicione seu
usuário ao grupo:
sudo usermod -aG tesseras $USER
Faça logout e login novamente, depois inicie o daemon:
sudo systemctl enable --now tesd
O que o pacote inclui
| Caminho | Descrição |
|---|---|
/usr/bin/tesd | Daemon do nó completo |
/usr/bin/tes | Cliente CLI |
/etc/tesseras/config.toml | Configuração padrão (marcado como conffile) |
/lib/systemd/system/tesd.service | Unit systemd com hardening de segurança |
| Completions de shell | bash, zsh e fish |
Como o cargo-deb funciona
Os metadados de empacotamento ficam em crates/tesseras-daemon/Cargo.toml na
seção [package.metadata.deb]. Essa seção define:
- depends — dependências em tempo de execução:
libc6elibsqlite3-0 - assets — arquivos incluídos no pacote (binários, config, unit systemd, completions de shell)
- conf-files — arquivos tratados como configuração (preservados na atualização)
- maintainer-scripts — scripts
postinstepostrmempackaging/debian/scripts/ - systemd-units — integração automática com systemd
O script postinst cria o usuário de sistema tesseras e o diretório de dados
na instalação. O script postrm remove o usuário, grupo e diretório de dados
apenas no purge (não na remoção simples).
Hardening do systemd
A unit tesd.service inclui diretivas de hardening de segurança:
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/tesseras
PrivateTmp=true
PrivateDevices=true
ProtectKernelTunables=true
ProtectControlGroups=true
RestrictSUIDSGID=true
MemoryDenyWriteExecute=true
O daemon roda como o usuário não-privilegiado tesseras e só pode escrever em
/var/lib/tesseras.
Deploy para um servidor remoto
O justfile inclui uma recipe deploy para enviar o .deb a um host remoto:
just deploy bootstrap1.tesseras.net
Isso compila o .deb, copia via scp, instala com dpkg -i e reinicia o
serviço tesd.
Atualizando
Depois de baixar novas mudanças, basta rodar just deb novamente e reinstalar:
git pull
just deb
sudo dpkg -i target/debian/tesseras-daemon_*.deb