Install
Two minutes to a running lookout.
Build the binary, run the installer, paste one webhook. Pince takes it from there.
- Linux x86_64 · aarch64
- systemd (or a log file)
- Rust 1.75+ to build
- root to install
Step 1
Build and install
Gabier is not on crates.io yet, so both routes start from the repository. Either way,
install.sh finishes the job.
$ git clone https://github.com/Flottille/gabier
$ cd gabier
$ cargo build --release
$ sudo ./install.sh Needs a Rust toolchain on the box.
$ docker run --rm -v "$PWD:/app" -w /app rust:1-slim sh -c \
"rustup target add x86_64-unknown-linux-musl && \
cargo build --release --target x86_64-unknown-linux-musl"
$ scp target/x86_64-unknown-linux-musl/release/gabier vps:/tmp/
$ ssh vps 'cd gabier && sudo ./install.sh /tmp/gabier' Fully static. No Rust on the server.
What the installer puts where
- /usr/local/bin/gabier
- The binary.
- /etc/gabier/config.toml
- Your config, mode
0640, owned byroot:gabier. Never overwritten on reinstall. - /etc/gabier/env
- Optional. Webhook secrets, read by the unit. Create it yourself with mode
600. - /etc/systemd/system/gabier.service
- The hardened unit, enabled at boot.
- user
gabier - A system account with no shell and no home.
Step 2
Create a webhook and paste it
Discord: channel settings → Integrations → Webhooks → New webhook. Copy the URL.
Slack: api.slack.com/apps → your app → Incoming Webhooks → Add New Webhook to Workspace. Copy the URL.
One of the two sections is enough; both is fine, and then each notification goes to both.
$ sudo nano /etc/gabier/config.toml # paste webhook_url
# or keep the secret out of the config entirely:
$ echo 'GABIER_DISCORD_WEBHOOK=https://discord.com/api/webhooks/...' \
| sudo tee /etc/gabier/env >/dev/null
$ sudo chmod 600 /etc/gabier/env $ sudo -u gabier gabier check --config /etc/gabier/config.toml
config /etc/gabier/config.toml
serveur vps-prod-1
source journald (ssh, sshd)
évènements accepted=true failed=true invalid_user=true closed=false
anti-spam 1 échec(s) par IP, puis résumé toutes les 300s
discord https://discord.com/api/webhooks/123/abcd…
joignable
Tout est prêt.
$ sudo -u gabier gabier test --config /etc/gabier/config.toml
$ sudo systemctl start gabier
$ sudo journalctl -u gabier -f Step 3
Verify, then start
check validates the config and actually reaches every webhook, with
the token masked and nothing posted to your channel. test then posts
one real message.
Now log in over SSH from another machine. Your channel should light up within a second.
Distribution notes
The default units = ["ssh", "sshd"] follows both, and journalctl ignores
the one that does not exist — so on every systemd distribution there is nothing to change.
| Distribution | sshd unit | Log file (if not journald) | Note |
|---|---|---|---|
| Debian / Ubuntu | ssh | /var/log/auth.log | Default config works as is. |
| Fedora / RHEL / Alma / Rocky | sshd | /var/log/secure | Default config works as is. |
| Arch | sshd | journald only | Default config works as is. |
| Alpine (OpenRC) | — | /var/log/messages | Use kind = "file" and write your own OpenRC script; install.sh needs systemd. |
| Ubuntu 24.04 with socket activation | ssh | — | sshd still logs under ssh; nothing to change. |
Upgrade
$ git pull && cargo build --release
$ sudo ./install.sh # keeps your existing config.toml
$ sudo systemctl restart gabier Re-running the installer is the upgrade path: it replaces the binary and the unit, and leaves your config alone.
Uninstall
$ sudo systemctl disable --now gabier
$ sudo rm /etc/systemd/system/gabier.service \
/usr/local/bin/gabier
$ sudo rm -r /etc/gabier # holds your webhook
$ sudo userdel gabier Nothing else is written anywhere. Pince leaves no footprints.
Something did not work?
The docs have a troubleshooting section, and issues are welcome.