Agent Installation

Linux (Debian/Ubuntu)

# Add AVON repository
curl -fsSL https://packages.avon.example.com/gpg 
  | sudo gpg --dearmor -o /usr/share/keyrings/avon-archive-keyring.gpg

echo "deb [signed-by=/usr/share/keyrings/avon-archive-keyring.gpg]   https://packages.avon.example.com/apt stable main" 
  | sudo tee /etc/apt/sources.list.d/avon.list

sudo apt update && sudo apt install avon-agent

Linux (RHEL/CentOS/Fedora)

sudo tee /etc/yum.repos.d/avon.repo << 'EOF'
[avon]
name=AVON Repository
baseurl=https://packages.avon.example.com/rpm
enabled=1
gpgcheck=1
gpgkey=https://packages.avon.example.com/gpg
EOF

sudo dnf install avon-agent

Linux (Manual/Binary)

curl -LO https://github.com/ShaneDolphin/avons-corners/releases/latest/download/avon-agent-linux-amd64.tar.gz

tar -xzf avon-agent-linux-amd64.tar.gz

sudo mv avon-agent /usr/local/bin/
sudo chmod +x /usr/local/bin/avon-agent

avon-agent --version

macOS (Homebrew)

brew tap shanedolphin/avon
brew install avon-agent

After installation, approve the system extension in System Settings > Privacy & Security.

macOS (Manual)

curl -LO https://github.com/ShaneDolphin/avons-corners/releases/latest/download/avon-agent-macos.dmg

hdiutil attach avon-agent-macos.dmg
sudo installer -pkg "/Volumes/AVON Agent/AVON Agent.pkg" -target /
hdiutil detach "/Volumes/AVON Agent"

Windows (MSI)

Download avon-agent-windows-amd64.msi from releases and run as Administrator.

Silent install via PowerShell:

Invoke-WebRequest `
  -Uri "https://github.com/ShaneDolphin/avons-corners/releases/latest/download/avon-agent-windows-amd64.msi" `
  -OutFile "avon-agent.msi"

Start-Process msiexec.exe -Wait -ArgumentList '/i avon-agent.msi /qn'

Windows (Chocolatey)

choco install avon-agent

Docker (Testing Only)

docker run -it --rm 
  --cap-add=NET_ADMIN 
  --device=/dev/net/tun 
  ghcr.io/shanedolphin/avons-corners/agent:latest 
  avon-agent --help

Agent Usage

Enroll a Device

Generate an enrollment token from the Admin API:

curl -X POST https://admin.avon.example.com/api/v1/enrollment-tokens 
  -H "Authorization: Bearer $ADMIN_TOKEN" 
  -H "Content-Type: application/json" 
  -d '{
    "name": "workstation-batch",
    "groups": ["engineering"],
    "expires_in": "24h",
    "max_uses": 10
  }'

Then enroll the agent:

sudo avon-agent enroll 
  --gateway gateway.avon.example.com:4600 
  --token "ENROLLMENT_TOKEN_HERE" 
  --name "alice-laptop"

With a corporate proxy:

sudo avon-agent enroll 
  --gateway gateway.avon.example.com:4600 
  --token "ENROLLMENT_TOKEN_HERE" 
  --http-proxy http://proxy.corp.example.com:8080

Check Status

avon-agent status
Agent ID:     a1b2c3d4-e5f6-7890-abcd-ef1234567890
Name:         alice-laptop
Status:       Connected
Gateway:      gateway.avon.example.com:4600
Session:      Active (expires in 29m 45s)
Certificate:  Valid (expires in 364 days)
Groups:       engineering, vpn-users

Run as a Service

Linux (systemd):

sudo systemctl enable --now avon-agent
sudo systemctl status avon-agent
sudo journalctl -u avon-agent -f

macOS (launchd):

sudo launchctl load /Library/LaunchDaemons/com.avon.agent.plist
sudo launchctl list | grep avon

Windows:

Set-Service -Name AvonAgent -StartupType Automatic
Start-Service AvonAgent
Get-Service AvonAgent

Agent Configuration

Configuration file locations:

PlatformPath
Linux/etc/avon/agent.toml
macOS/Library/Application Support/AVON/agent.toml
WindowsC:\ProgramData\AVON\agent.toml
[gateway]
address = "gateway.avon.example.com:4600"
fallback = [
  "gateway-backup.avon.example.com:4600",
  "gateway-dr.avon.example.com:4600"
]

[connection]
max_retries = 10
retry_delay = "5s"
keepalive_interval = "30s"

[pulse]
interval = "10s"
timeout = "5s"

[interface]
name = "avon0"
mtu = 1400
dns = ["10.100.0.53", "10.100.0.54"]

[logging]
level = "info"
file = "/var/log/avon/agent.log"
format = "json"

[advanced]
metrics_enabled = true
metrics_port = 9091

Configuration can also be set via environment variables:

export AVON_GATEWAY_ADDRESS="gateway.avon.example.com:4600"
export AVON_LOG_LEVEL="debug"
export AVON_PULSE_INTERVAL="10s"