feat: add server, workstation, and cloud edition manifests
Define the three flagship editions as plain-text manifests: - server (bastion): production server - observability stack, containers. - workstation (forge): curated KDE Plasma + dev toolchains. - cloud (nimbus): cloud kernel, cloud-init, guest agents. Each manifest carries metadata (services to enable/mask), a package list, a hardened kernel cmdline, and a btrfs fstab template.
This commit is contained in:
9
editions/cloud/fstab
Normal file
9
editions/cloud/fstab
Normal file
@@ -0,0 +1,9 @@
|
||||
# Arcline Cloud — /etc/fstab template
|
||||
# Same layout as the other editions; btrfs-init.sh resolves the root UUID.
|
||||
|
||||
UUID=__ROOT_UUID__ / btrfs rw,noatime,compress=zstd:3,subvol=@ 0 0
|
||||
UUID=__ROOT_UUID__ /home btrfs rw,noatime,compress=zstd:3,subvol=@home 0 0
|
||||
UUID=__ROOT_UUID__ /var/log btrfs rw,noatime,compress=zstd:3,subvol=@log 0 0
|
||||
UUID=__ROOT_UUID__ /.snapshots btrfs rw,noatime,compress=zstd:3,subvol=@snapshots 0 0
|
||||
|
||||
/swap/swapfile none swap sw 0 0
|
||||
28
editions/cloud/kernel.cmdline
Normal file
28
editions/cloud/kernel.cmdline
Normal file
@@ -0,0 +1,28 @@
|
||||
# Arcline Cloud — kernel command line
|
||||
# Same hardening baseline, serial console for cloud serial ports, no graphics.
|
||||
|
||||
console=tty0
|
||||
console=ttyS0,115200n8
|
||||
quiet
|
||||
loglevel=3
|
||||
systemd.show_status=auto
|
||||
|
||||
# hardening
|
||||
init_on_alloc=1
|
||||
init_on_free=1
|
||||
slab_nomerge
|
||||
page_poison=1
|
||||
pti=on
|
||||
spectre_v2=on
|
||||
spec_store_bypass=on
|
||||
tsx=off
|
||||
lockdown=integrity
|
||||
oops=panic
|
||||
panic=-1
|
||||
|
||||
# cloud / disk
|
||||
net.ifnames=0
|
||||
biosdevname=0
|
||||
|
||||
# btrfs / storage
|
||||
rootflags=subvol=@
|
||||
36
editions/cloud/metadata.yaml
Normal file
36
editions/cloud/metadata.yaml
Normal file
@@ -0,0 +1,36 @@
|
||||
# Edition manifest: Arcline Cloud
|
||||
# Codename: nimbus
|
||||
edition: cloud
|
||||
codename: nimbus
|
||||
summary: Minimal base images optimized for cloud infrastructures.
|
||||
description: >
|
||||
Designed for AWS, GCP, Azure, or your own private cloud. Uses the cloud
|
||||
kernel, cloud-init for first-boot provisioning, and a networkd-first
|
||||
network stack. Same hardening baseline as server.
|
||||
|
||||
image:
|
||||
type: iso
|
||||
boot: bios+efi
|
||||
filesystem: btrfs
|
||||
compression: zstd:3
|
||||
|
||||
packages:
|
||||
extra_repos: []
|
||||
|
||||
users:
|
||||
- arcline
|
||||
|
||||
services:
|
||||
enabled:
|
||||
- systemd-networkd
|
||||
- systemd-resolved
|
||||
- cloud-init
|
||||
- cloud-init-local
|
||||
- ssh
|
||||
- nftables
|
||||
- apparmor
|
||||
- qemu-guest-agent
|
||||
- arcline-snapshot.timer
|
||||
masked:
|
||||
- apt-daily.timer
|
||||
- apt-daily-upgrade.timer
|
||||
60
editions/cloud/packages.list
Normal file
60
editions/cloud/packages.list
Normal file
@@ -0,0 +1,60 @@
|
||||
# Arcline Cloud — package set
|
||||
# Minimal footprint: cloud kernel, cloud-init, guest agents, storage tooling.
|
||||
|
||||
# ── base system ─────────────────────────────────────────────────────────────
|
||||
systemd
|
||||
systemd-sysv
|
||||
dbus
|
||||
libpam-systemd
|
||||
ca-certificates
|
||||
locales
|
||||
tzdata
|
||||
|
||||
# ── boot ────────────────────────────────────────────────────────────────────
|
||||
grub-pc
|
||||
grub-efi-amd64
|
||||
shim-signed
|
||||
|
||||
# ── kernel (cloud variant) ──────────────────────────────────────────────────
|
||||
linux-image-cloud-amd64
|
||||
|
||||
# ── filesystem ──────────────────────────────────────────────────────────────
|
||||
btrfs-progs
|
||||
zstd
|
||||
xz-utils
|
||||
|
||||
# ── cloud provisioning ──────────────────────────────────────────────────────
|
||||
cloud-init
|
||||
cloud-guest-utils
|
||||
cloud-image-utils
|
||||
open-vm-tools
|
||||
qemu-guest-agent
|
||||
|
||||
# ── storage / block devices ─────────────────────────────────────────────────
|
||||
nvme-cli
|
||||
open-iscsi
|
||||
multipath-tools
|
||||
lvm2
|
||||
mdadm
|
||||
|
||||
# ── security / hardening ────────────────────────────────────────────────────
|
||||
openssh-server
|
||||
nftables
|
||||
apparmor
|
||||
apparmor-utils
|
||||
|
||||
# ── observability (Debian-main components) ─────────────────────────────────
|
||||
prometheus-node-exporter
|
||||
|
||||
# ── minimal admin tooling ───────────────────────────────────────────────────
|
||||
curl
|
||||
jq
|
||||
git
|
||||
rsync
|
||||
htop
|
||||
vim-tiny
|
||||
|
||||
# ── Arcline toolchain (built from toolchain/) ───────────────────────────────
|
||||
# arcline-uptime arcline-check arcline-audit arcline-dns
|
||||
# arcline-vault arcline-email arcline-migrate arcline-billing
|
||||
# arcline-portal arcline-website arcline-status
|
||||
16
editions/server/fstab
Normal file
16
editions/server/fstab
Normal file
@@ -0,0 +1,16 @@
|
||||
# Arcline Server — /etc/fstab template
|
||||
#
|
||||
# This is a TEMPLATE. btrfs-init.sh resolves the real root device UUID at
|
||||
# install/first-boot time and writes /etc/fstab. The subvolume layout matches
|
||||
# docs/btrfs.md.
|
||||
#
|
||||
# Device UUID is substituted by the installer.
|
||||
|
||||
# <file system> <mount point> <type> <options> <dump> <pass>
|
||||
UUID=__ROOT_UUID__ / btrfs rw,noatime,compress=zstd:3,subvol=@ 0 0
|
||||
UUID=__ROOT_UUID__ /home btrfs rw,noatime,compress=zstd:3,subvol=@home 0 0
|
||||
UUID=__ROOT_UUID__ /var/log btrfs rw,noatime,compress=zstd:3,subvol=@log 0 0
|
||||
UUID=__ROOT_UUID__ /.snapshots btrfs rw,noatime,compress=zstd:3,subvol=@snapshots 0 0
|
||||
|
||||
# swap
|
||||
/swap/swapfile none swap sw 0 0
|
||||
35
editions/server/kernel.cmdline
Normal file
35
editions/server/kernel.cmdline
Normal file
@@ -0,0 +1,35 @@
|
||||
# Arcline Server — kernel command line
|
||||
# Hardening flags + console config. Kept explicit and auditable.
|
||||
#
|
||||
# Security notes:
|
||||
# init_on_alloc / init_on_free — zero freshly allocated/freed memory
|
||||
# slab_nomerge — disable merging of similar slab objects
|
||||
# page_poison=1 — fill freed pages to catch use-after-free
|
||||
# pti=on — kernel page-table isolation
|
||||
# spectre_v2=on spec_store_bypass=on — mitigations on (no auto-off)
|
||||
# tsx=off — disable TSX (TAA mitigations)
|
||||
# lockdown=integrity — block unsigned kernel modifications
|
||||
# oops=panic panic=-1 — panic (and stay down) on oops
|
||||
# quiet loglevel=3 — quiet serial console boot
|
||||
|
||||
console=tty0
|
||||
console=ttyS0,115200n8
|
||||
quiet
|
||||
loglevel=3
|
||||
systemd.show_status=auto
|
||||
|
||||
# hardening
|
||||
init_on_alloc=1
|
||||
init_on_free=1
|
||||
slab_nomerge
|
||||
page_poison=1
|
||||
pti=on
|
||||
spectre_v2=on
|
||||
spec_store_bypass=on
|
||||
tsx=off
|
||||
lockdown=integrity
|
||||
oops=panic
|
||||
panic=-1
|
||||
|
||||
# btrfs / storage
|
||||
rootflags=subvol=@
|
||||
37
editions/server/metadata.yaml
Normal file
37
editions/server/metadata.yaml
Normal file
@@ -0,0 +1,37 @@
|
||||
# Edition manifest: Arcline Server
|
||||
# Codename: bastion
|
||||
edition: server
|
||||
codename: bastion
|
||||
summary: Hardened, production-ready server OS with built-in observability and zero telemetry.
|
||||
description: >
|
||||
Runs applications on bare metal or in the cloud. Ships with a default-deny
|
||||
nftables firewall, AppArmor + seccomp, btrfs root with snapshot rollback,
|
||||
Docker + Podman, and a pre-configured Prometheus / Grafana / Loki stack.
|
||||
|
||||
image:
|
||||
type: iso
|
||||
boot: bios+efi
|
||||
filesystem: btrfs
|
||||
compression: zstd:3
|
||||
|
||||
packages:
|
||||
# Upstream repos added before package install (name -> [url, suite, component]).
|
||||
extra_repos: []
|
||||
|
||||
users:
|
||||
# Accounts created at first boot by the installer/configure hook.
|
||||
- arcline
|
||||
|
||||
services:
|
||||
# systemd units enabled by default.
|
||||
enabled:
|
||||
- systemd-networkd
|
||||
- systemd-resolved
|
||||
- ssh
|
||||
- nftables
|
||||
- apparmor
|
||||
- prometheus-node-exporter
|
||||
- arcline-snapshot.timer
|
||||
masked:
|
||||
- apt-daily.timer
|
||||
- apt-daily-upgrade.timer
|
||||
74
editions/server/packages.list
Normal file
74
editions/server/packages.list
Normal file
@@ -0,0 +1,74 @@
|
||||
# Arcline Server — package set
|
||||
# Debian bookworm packages. Lines beginning with # are notes/optional.
|
||||
# The configure hook installs the Arcline toolchain and observability
|
||||
# components that are not in Debian main (grafana, loki).
|
||||
|
||||
# ── base system ─────────────────────────────────────────────────────────────
|
||||
systemd
|
||||
systemd-sysv
|
||||
dbus
|
||||
libpam-systemd
|
||||
ca-certificates
|
||||
locales
|
||||
tzdata
|
||||
|
||||
# ── boot ────────────────────────────────────────────────────────────────────
|
||||
grub-pc
|
||||
grub-efi-amd64
|
||||
shim-signed
|
||||
os-prober
|
||||
|
||||
# ── kernel / firmware ───────────────────────────────────────────────────────
|
||||
linux-image-amd64
|
||||
firmware-linux-free
|
||||
|
||||
# ── filesystem ──────────────────────────────────────────────────────────────
|
||||
btrfs-progs
|
||||
snapper
|
||||
zstd
|
||||
xz-utils
|
||||
|
||||
# ── security / hardening ────────────────────────────────────────────────────
|
||||
openssh-server
|
||||
nftables
|
||||
apparmor
|
||||
apparmor-utils
|
||||
fail2ban
|
||||
unattended-upgrades
|
||||
libpam-pwquality
|
||||
|
||||
# ── containers ──────────────────────────────────────────────────────────────
|
||||
docker.io
|
||||
podman
|
||||
runc
|
||||
containernetworking-plugins
|
||||
fuse-overlayfs
|
||||
slirp4netns
|
||||
|
||||
# ── observability (Debian-main components) ─────────────────────────────────
|
||||
prometheus
|
||||
prometheus-node-exporter
|
||||
prometheus-alertmanager
|
||||
# grafana + loki are fetched from upstream repos by configure-system.sh
|
||||
|
||||
# ── admin tooling ───────────────────────────────────────────────────────────
|
||||
curl
|
||||
wget
|
||||
jq
|
||||
git
|
||||
make
|
||||
rsync
|
||||
htop
|
||||
tmux
|
||||
vim-tiny
|
||||
unzip
|
||||
file
|
||||
ethtool
|
||||
sysstat
|
||||
chrony
|
||||
needrestart
|
||||
|
||||
# ── Arcline toolchain (built from toolchain/) ───────────────────────────────
|
||||
# arcline-uptime arcline-check arcline-audit arcline-dns
|
||||
# arcline-vault arcline-email arcline-migrate arcline-billing
|
||||
# arcline-portal arcline-website arcline-status
|
||||
10
editions/workstation/fstab
Normal file
10
editions/workstation/fstab
Normal file
@@ -0,0 +1,10 @@
|
||||
# Arcline Workstation — /etc/fstab template
|
||||
# See editions/server/fstab for the layout notes. btrfs-init.sh resolves the
|
||||
# root UUID at install time.
|
||||
|
||||
UUID=__ROOT_UUID__ / btrfs rw,noatime,compress=zstd:3,subvol=@ 0 0
|
||||
UUID=__ROOT_UUID__ /home btrfs rw,noatime,compress=zstd:3,subvol=@home 0 0
|
||||
UUID=__ROOT_UUID__ /var/log btrfs rw,noatime,compress=zstd:3,subvol=@log 0 0
|
||||
UUID=__ROOT_UUID__ /.snapshots btrfs rw,noatime,compress=zstd:3,subvol=@snapshots 0 0
|
||||
|
||||
/swap/swapfile none swap sw 0 0
|
||||
24
editions/workstation/kernel.cmdline
Normal file
24
editions/workstation/kernel.cmdline
Normal file
@@ -0,0 +1,24 @@
|
||||
# Arcline Workstation — kernel command line
|
||||
# Same hardening baseline as server, without the serial console and with
|
||||
# graphics-friendly settings.
|
||||
|
||||
console=tty0
|
||||
quiet
|
||||
loglevel=3
|
||||
systemd.show_status=auto
|
||||
|
||||
# hardening
|
||||
init_on_alloc=1
|
||||
init_on_free=1
|
||||
slab_nomerge
|
||||
page_poison=1
|
||||
pti=on
|
||||
spectre_v2=on
|
||||
spec_store_bypass=on
|
||||
tsx=off
|
||||
lockdown=integrity
|
||||
oops=panic
|
||||
panic=-1
|
||||
|
||||
# btrfs / storage
|
||||
rootflags=subvol=@
|
||||
33
editions/workstation/metadata.yaml
Normal file
33
editions/workstation/metadata.yaml
Normal file
@@ -0,0 +1,33 @@
|
||||
# Edition manifest: Arcline Workstation
|
||||
# Codename: forge
|
||||
edition: workstation
|
||||
codename: forge
|
||||
summary: Same hardened base with a lightweight KDE Plasma desktop and pre-configured dev toolchains.
|
||||
description: >
|
||||
A hardened daily driver. Lightweight KDE Plasma, privacy-hardened browser
|
||||
profiles, pre-configured Go / Rust / Python / Node toolchains, and the same
|
||||
zero-telemetry, default-deny firewall as the server edition.
|
||||
|
||||
image:
|
||||
type: iso
|
||||
boot: bios+efi
|
||||
filesystem: btrfs
|
||||
compression: zstd:3
|
||||
|
||||
packages:
|
||||
extra_repos: []
|
||||
|
||||
users:
|
||||
- arcline
|
||||
|
||||
services:
|
||||
enabled:
|
||||
- systemd-networkd
|
||||
- systemd-resolved
|
||||
- nftables
|
||||
- apparmor
|
||||
- sddm
|
||||
- arcline-snapshot.timer
|
||||
masked:
|
||||
- apt-daily.timer
|
||||
- apt-daily-upgrade.timer
|
||||
101
editions/workstation/packages.list
Normal file
101
editions/workstation/packages.list
Normal file
@@ -0,0 +1,101 @@
|
||||
# Arcline Workstation — package set
|
||||
# Curated KDE Plasma desktop (not the full task-* meta-package) plus a
|
||||
# complete developer toolchain.
|
||||
|
||||
# ── base system ─────────────────────────────────────────────────────────────
|
||||
systemd
|
||||
systemd-sysv
|
||||
dbus
|
||||
libpam-systemd
|
||||
ca-certificates
|
||||
locales
|
||||
tzdata
|
||||
|
||||
# ── boot ────────────────────────────────────────────────────────────────────
|
||||
grub-pc
|
||||
grub-efi-amd64
|
||||
shim-signed
|
||||
os-prober
|
||||
|
||||
# ── kernel / firmware ───────────────────────────────────────────────────────
|
||||
linux-image-amd64
|
||||
firmware-linux-free
|
||||
firmware-misc-nonfree # broadcom/intel wifi + gpu firmware
|
||||
|
||||
# ── filesystem ──────────────────────────────────────────────────────────────
|
||||
btrfs-progs
|
||||
snapper
|
||||
zstd
|
||||
xz-utils
|
||||
|
||||
# ── desktop: X + KDE Plasma ─────────────────────────────────────────────────
|
||||
xserver-xorg
|
||||
xinit
|
||||
plasma-desktop
|
||||
sddm
|
||||
konsole
|
||||
dolphin
|
||||
kate
|
||||
ark
|
||||
gwenview
|
||||
plasma-discover
|
||||
network-manager
|
||||
network-manager-gnome
|
||||
pipewire
|
||||
pipewire-pulse
|
||||
wireplumber
|
||||
pulseaudio-utils
|
||||
|
||||
# ── display / audio / input extras ──────────────────────────────────────────
|
||||
fonts-noto-core
|
||||
fonts-liberation
|
||||
firefox-esr
|
||||
|
||||
# ── security / hardening ────────────────────────────────────────────────────
|
||||
openssh-server
|
||||
nftables
|
||||
apparmor
|
||||
apparmor-utils
|
||||
fail2ban
|
||||
|
||||
# ── developer toolchain ─────────────────────────────────────────────────────
|
||||
build-essential
|
||||
gcc
|
||||
g++
|
||||
clang
|
||||
clang-format
|
||||
llvm
|
||||
lld
|
||||
gdb
|
||||
cmake
|
||||
ninja-build
|
||||
pkg-config
|
||||
golang-go
|
||||
rustc
|
||||
cargo
|
||||
python3
|
||||
python3-pip
|
||||
python3-venv
|
||||
nodejs
|
||||
npm
|
||||
git
|
||||
make
|
||||
curl
|
||||
wget
|
||||
jq
|
||||
vim
|
||||
nano
|
||||
htop
|
||||
tmux
|
||||
ripgrep
|
||||
fd-find
|
||||
bat
|
||||
docker.io
|
||||
podman
|
||||
runc
|
||||
containernetworking-plugins
|
||||
|
||||
# ── Arcline toolchain (built from toolchain/) ───────────────────────────────
|
||||
# arcline-uptime arcline-check arcline-audit arcline-dns
|
||||
# arcline-vault arcline-email arcline-migrate arcline-billing
|
||||
# arcline-portal arcline-website arcline-status
|
||||
Reference in New Issue
Block a user