Skip to main content

A system information collection and upload framework for Linux

Project description

🐌 Snail Core

A system information collection and upload framework for Linux, inspired by Red Hat's insights-core.

Snail Core provides an extensible framework for gathering system diagnostics and uploading them to a custom endpoint. It's designed to be modular, secure, and easy to integrate into your infrastructure.

Features

  • Comprehensive System Collection: Gathers OS info, hardware specs, network config, packages, services, filesystem, security settings, and logs
  • Multi-Distribution Support: Compatible with Fedora, RHEL, CentOS, Debian, Ubuntu, SUSE, and other Linux distributions
  • Multi-Version Support: Works across multiple versions of supported distributions
  • Modular Architecture: Plugin-based collectors that can be enabled/disabled individually
  • Secure Upload: HTTPS with API key auth, mutual TLS support, and automatic retries
  • Privacy Controls: Configurable redaction and anonymization options
  • Rich CLI: Beautiful terminal interface with progress indicators and colored output
  • Flexible Configuration: YAML config files, environment variables, and CLI options

Supported Distributions

Snail Core supports the following Linux distributions and their versions:

  • Fedora: All recent versions (uses DNF)
  • RHEL: 7.x (YUM), 8.x+ (DNF)
  • CentOS: 7 (YUM), Stream 8+ (DNF)
  • Debian: Recent versions (uses APT)
  • Ubuntu: Recent versions (uses APT)
  • SUSE/openSUSE: Leap, Tumbleweed, SLES (uses Zypper)
  • Other Linux: Auto-detects available package managers

Installation

From Source

# Clone the repository
git clone https://github.com/sluggisty/snail-core.git
cd snail-core

# Create a virtual environment (recommended)
python -m venv venv
source venv/bin/activate

# Install the package
pip install -e .

System Dependencies

Some collectors require system tools to be installed:

# On Fedora/RHEL/CentOS
sudo dnf install lsof lshw pciutils usbutils

# On Debian/Ubuntu
sudo apt-get install lsof lshw pciutils usbutils

# On SUSE/openSUSE
sudo zypper install lsof lshw pciutils usbutils

Quick Start

1. Generate a Configuration File

snail init-config ~/.config/snail-core/config.yaml

2. Edit the Configuration

Update the config file with your upload server URL:

upload:
  url: https://your-server.example.com/api/v1/ingest
  enabled: true

3. Set Your API Key

export SNAIL_API_KEY="your-api-key-here"

4. Collect and Upload

# Collect only (no upload)
snail collect

# Collect and upload
snail collect --upload

# Or use the shorthand
snail run

CLI Usage

# Show help
snail --help

# List available collectors
snail list

# Run specific collectors only
snail collect -C system -C network -C packages

# Output as JSON
snail collect --format json

# Save to file
snail collect -o /tmp/report.json

# Check configuration and connection
snail status

# Display version information
snail list-version

# Verbose mode
snail -v collect

Collectors

Collector Description Multi-Distro Support
system OS version, kernel, hostname, uptime, virtualization ✅ All distributions
hardware CPU, memory, disks, PCI/USB devices, DMI info ✅ All distributions
network Interfaces, connections, routing, DNS, firewall ✅ All distributions
packages Installed packages, repositories, package manager config ✅ DNF/YUM/APT/Zypper
services Systemd units, running services, failed units, timers ✅ Systemd-based distros
filesystem Mounts, fstab, LVM, Btrfs, inode usage ✅ All distributions
security SELinux/AppArmor, firewall, crypto policies, SSH, audit ✅ Multi-distro aware
logs Recent journald entries, errors, auth failures ✅ Systemd-based distros

Configuration

Snail Core looks for configuration in these locations (in order):

  1. Path specified with --config flag
  2. /etc/snail-core/config.yaml
  3. ~/.config/snail-core/config.yaml
  4. ./snail-config.yaml

Environment Variables

Variable Description
SNAIL_UPLOAD_URL Upload endpoint URL
SNAIL_UPLOAD_ENABLED Enable/disable upload (true/false)
SNAIL_API_KEY API key for authentication
SNAIL_AUTH_CERT Path to client certificate
SNAIL_AUTH_KEY Path to client key
SNAIL_LOG_LEVEL Logging level (DEBUG/INFO/WARNING/ERROR)

Example Configuration

upload:
  url: https://insights.example.com/api/v1/upload
  enabled: true
  timeout: 30
  retries: 3

auth:
  api_key: null  # Use SNAIL_API_KEY env var

collection:
  enabled_collectors: []  # Empty = all
  disabled_collectors: []
  timeout: 300

output:
  dir: /var/lib/snail-core
  keep_local: false
  compress: true

privacy:
  anonymize_hostnames: false
  redact_passwords: true

Multi-Distribution Support

Snail Core automatically detects your Linux distribution and uses the appropriate tools:

  • RPM-based (Fedora/RHEL/CentOS): Uses DNF (preferred) or YUM (fallback)
  • Debian-based (Debian/Ubuntu): Uses APT
  • SUSE-based (SUSE/openSUSE): Uses Zypper
  • Security: Detects SELinux (RHEL/Fedora) or AppArmor (Ubuntu/Debian/SUSE)
  • Firewall: Detects firewalld, ufw, or iptables
  • Services: Uses systemd (most modern distributions)

Server Integration

Snail Core uploads JSON data via HTTP POST. Your server should accept:

POST /api/v1/ingest
Content-Type: application/json
Content-Encoding: gzip  (if compression enabled)
Authorization: Bearer <api-key>

{
  "meta": {
    "hostname": "fedora-workstation",
    "collection_id": "uuid",
    "timestamp": "2024-01-15T10:30:00Z",
    "snail_version": "0.2.0"
  },
  "data": {
    "system": { ... },
    "hardware": { ... },
    "network": { ... },
    ...
  },
  "errors": []
}

Development

Setup Development Environment

# Install with development dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Format code
black src/

# Lint
ruff src/

License

MIT License - See LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

snail_core-0.2.0.tar.gz (33.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

snail_core-0.2.0-py3-none-any.whl (37.4 kB view details)

Uploaded Python 3

File details

Details for the file snail_core-0.2.0.tar.gz.

File metadata

  • Download URL: snail_core-0.2.0.tar.gz
  • Upload date:
  • Size: 33.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for snail_core-0.2.0.tar.gz
Algorithm Hash digest
SHA256 ca6cc050e2ac9451dfb371bfdf1152b7a71b4ede647905cc18cde9a3a606ad80
MD5 3b85519be5d9e8fd6e3fd13484b6ecbf
BLAKE2b-256 0a943655a301079c68a4ab4fdb438b3caaa4602ff812c4d7c1cf710d23aff42b

See more details on using hashes here.

File details

Details for the file snail_core-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: snail_core-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 37.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for snail_core-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c2e2a5328da567537af56a4c729e737a5af166b705fc82ccc6816dc9ce1aff7a
MD5 a4ecbc313a10559fc6d0fd786874324d
BLAKE2b-256 75bad5ceb936b66fea59b75a7cb590740549c0539449759649841c186d6c233b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page