Skip to main content

A system information collection and upload framework for Linux

Project description

🐌 Snail Core

Snailcore Logo

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

# View or reset persistent host ID
snail host-id
snail host-id --reset

# 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",
    "host_id": "057a8430-c818-4a43-8683-0ab05be16ef6",
    "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/

# Run pre-commit hooks
pre-commit run --all-files

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.4.2.tar.gz (35.7 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.4.2-py3-none-any.whl (40.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: snail_core-0.4.2.tar.gz
  • Upload date:
  • Size: 35.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for snail_core-0.4.2.tar.gz
Algorithm Hash digest
SHA256 52100a5d7ad8a5f0434d5c44a5edeb4b684222f91f62f545a406a9a8afa605ca
MD5 047dfaba6d41a6d7622d95f98a8b7cd2
BLAKE2b-256 fb02c25a834a485e8a2ccc9afc6519cc39eb27de6b2b7003c99ba01e33436880

See more details on using hashes here.

Provenance

The following attestation bundles were made for snail_core-0.4.2.tar.gz:

Publisher: publish-to-pypi.yml on sluggisty/snail-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: snail_core-0.4.2-py3-none-any.whl
  • Upload date:
  • Size: 40.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for snail_core-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 20c7f699275478fff5978ad77ed02dc03c392a8a66e04efc761c52d25357f495
MD5 db4df53585946fe3fafeed0942f16566
BLAKE2b-256 1b898dcffff9bc816946c1c33e9fb8c32cb6df8f7643141be44ef2aaf1be1540

See more details on using hashes here.

Provenance

The following attestation bundles were made for snail_core-0.4.2-py3-none-any.whl:

Publisher: publish-to-pypi.yml on sluggisty/snail-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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