Skip to content

Node Provisioning Runbook: Preparing the Nodes

owner: “Platform Engineering” classification: “CONFIDENTIAL” tags: [“provisioning”, “kernel”, “tpm2”, “tetragon”, “tailscale”]

Section titled “owner: “Platform Engineering” classification: “CONFIDENTIAL” tags: [“provisioning”, “kernel”, “tpm2”, “tetragon”, “tailscale”]”

This runbook covers the Preparation of the Nodes — transforming bare metal or VM into a fully configured chamber node ready to join the pool.

ComponentMinimumRecommended
CPU4 cores, VT-x/AMD-V8+ cores, nested virt
RAM16 GB32+ GB
Storage256 GB NVMe1 TB NVMe
TPM2.02.0 with PCR banks
Network1 Gbps10 Gbps + dedicated mgmt
  1. Boot Syn_OS ISO (chamber profile)
  2. Select “Chamber Node” profile at installer
  3. Disk: LUKS2 + LVM, /var/lib/chamber-pool on separate LV
  4. Network: Static IP, Tailscale auth key injected

Apply 97-homelab.conf:

Terminal window
cp /usr/share/synos/kernel/97-homelab.conf /etc/sysctl.d/
sysctl --system

Verify:

Terminal window
verify-kernel-hardening.sh --json

GRUB cmdline (persist via grubby):

slab_nomerge page_poison=1 vsyscall=none module.sig_enforce=1 lockdown=confidentiality
Terminal window
# Take ownership
tpm2_takeownership -c -p <owner-pass>
# Create endorsement key
tpm2_createprimary -C e -g sha256 -c primary.ctx
# Create attestation key
tpm2_create -C primary.ctx -g sha256 -u ak.pub -r ak.priv
tpm2_evictcontrol -C o -c ak.ctx 0x81010001

Verify:

Terminal window
tpm2_getcap handles-persistent | grep 81010001
Terminal window
# Pull image
docker pull quay.io/cilium/tetragon:v1.7.1
# Run with gRPC
docker run -d --name tetragon \
--privileged --pid=host --cgroupns=host \
-v /sys/kernel/debug:/sys/kernel/debug \
-v /run/tetragon:/run/tetragon \
-p 54321:54321 \
quay.io/cilium/tetragon:v1.7.1 \
--enable-policy=true --grpc-endpoint=0.0.0.0:54321

Verify:

Terminal window
tetra getevents -o json | head -1
Terminal window
# Install systemd service
cp /opt/synos/systemd/chamber-pool-worker.service /etc/systemd/system/
cp /opt/synos/systemd/chamber-pool-worker.service.d/override.conf /etc/systemd/system/chamber-pool-worker.service.d/
# Configure
echo "POOL_DIR=/var/lib/chamber-pool" > /etc/default/chamber-pool
echo "POOL_SIZE=3" >> /etc/default/chamber-pool
# Enable and start
systemctl daemon-reload
systemctl enable --now chamber-pool-worker

Verify:

Terminal window
chamber-pool.sh list
Terminal window
tailscale up --authkey=<key> --advertise-tags=tag:chamber-node

Verify ACL:

Terminal window
tailscale status

Run full hardware + software check:

Terminal window
verify-kernel-hardening.sh --json > /var/log/node-validation.json
e2e-test.sh --duration 10 --timeout 40
StepRollback
Kernel paramsgrubby --remove-args="..."
TPM2 keystpm2_evictcontrol -C o -c 0x81010001
Tetragondocker stop tetragon && docker rm tetragon
Pool workersystemctl disable --now chamber-pool-worker
RoleContact
Platform Engineer@platform-eng
TPM Custodian@tpm-custodian