LXD is a modern, secure system container and virtual machine manager developed by Canonical. It provides a REST API over a Unix socket and HTTPS, a command-line client (lxc), and an in-guest agent (lxd-agent). The architecture is a monolithic daemon with pluggable storage drivers (ZFS, Btrfs, LVM, Ceph, dir, and enterprise SAN), network drivers (bridge, OVN, macvlan, SR-IOV, physical), and device passthrough (GPU, USB, NIC, TPM, proxy). It supports clustering via dqlite/Raft for high availability, fine-grained authorization via OpenFGA, OIDC authentication, and ACME certificate provisioning. The codebase is written in Go with CGo for low-level Linux operations (namespaces, seccomp, AppArmor, cgroups) and includes extensive unit and integration tests. Key features include live migration, incremental backups, cloud-init integration, and a built-in metrics endpoint for Prometheus.
This repository is a large collection of Bash scripts that automate the deployment, configuration, and update of self-hosted services on Proxmox VE, primarily through LXC containers and VMs. It is a provisioning and automation framework rather than a runtime application: each ct/*.sh script declares resource variables (CPU, RAM, disk, OS template) and an optional update_script(), while install/*.sh scripts run inside an existing container to install a specific application. Usage is typically a one-line curl command executed as root on the Proxmox host, after which the script creates a container/VM, installs dependencies, generates credentials, writes systemd units or OpenRC init scripts, and configures databases and reverse proxies. The architecture is layered: hundreds of app-specific scripts wrap a smaller set of shared Bash function libraries in the misc/ directory (build.func, install.func, vm-core.func, core.func, error_handler.func). These shared functions handle common operations such as fetching GitHub releases, setting up language runtimes, creating databases, backing up configs before updates, and standardizing error handling. Update flows generally stop the service, back up configuration/data, fetch the latest release, restore the backup, run migrations, and restart the service. This consistency is the project's main strength and makes adding a new container recipe relatively straightforward. Weaknesses are typical of a large community-driven shell-script collection: no unit tests, heavy reliance on third-party installers fetched via curl|bash, some hardcoded versions, and external dependencies on GitHub release asset names and remote core-library URLs. Many scripts assume Debian/Ubuntu or Alpine bases and run as root with no signature verification. Despite these risks, the codebase is actively maintained, consistently formatted, and the shared function libraries are practical examples of reusable Bash abstractions for Proxmox automation.