feat: ubuntu 26.04 image

This commit is contained in:
Julian Sommer
2026-05-05 09:32:29 +10:00
parent fa071795d0
commit f3b00eb85a
20 changed files with 59 additions and 59 deletions
@@ -31,7 +31,7 @@ This guide builds Spinifex from source. For production deployments, the [binary
**Requirements:**
- Ubuntu 22.04+ / Debian 12+
- Ubuntu 26.04 / Debian 13
- Go 1.26.2+
- GCC, make, pkg-config
- QEMU/KVM, OVN/Open vSwitch, AWS CLI v2, dhcpcd-base
+2 -2
View File
@@ -36,8 +36,8 @@ This guide installs Spinifex on a single server using the binary installer. For
**Supported Operating Systems:**
- Ubuntu 22.04 / 24.04 / 25.10
- Debian 12 / 13
- Ubuntu 26.04
- Debian 13
**What Gets Installed:**
@@ -61,20 +61,20 @@ NAME | DISTRO | VERSION | ARCH | BOOT
debian-13-arm64 | debian | 13 | arm64 | bios
debian-13-x86_64 | debian | 13 | x86_64 | bios
lb-alpine-3.21.6-x86_64 | alpine | 3.21.6 | x86_64 | bios
ubuntu-24.04-arm64 | ubuntu | 24.04 | arm64 | bios
ubuntu-24.04-x86_64 | ubuntu | 24.04 | x86_64 | bios
ubuntu-26.04-arm64 | ubuntu | 26.04 | arm64 | bios
ubuntu-26.04-x86_64 | ubuntu | 26.04 | x86_64 | bios
```
Import an image:
```bash
spx admin images import --name ubuntu-24.04-x86_64
spx admin images import --name ubuntu-26.04-x86_64
```
Or import a local image file:
```bash
spx admin images import --file ~/images/ubuntu-24.04.img --distro ubuntu --version 24.04 --arch x86_64
spx admin images import --file ~/images/ubuntu-26.04.img --distro ubuntu --version 26.04 --arch x86_64
```
Verify the import and note the AMI ID:
@@ -173,7 +173,7 @@ Launch an instance in the public subnet, note this will select an instance type
> **Note:** Replace `AMI_NAME` with the previously imported image above with the `ami-` prefix.
```bash
AMI_NAME="ami-ubuntu-24.04-x86_64"
AMI_NAME="ami-ubuntu-26.04-x86_64"
AMI_ID=$(aws ec2 describe-images \
--filters "Name=name,Values=$AMI_NAME" \
+1 -1
View File
@@ -106,7 +106,7 @@ Spinifex nodes initiate a small, fixed set of outbound connections.
| Destination | Purpose | Protocol | Verification |
|-------------|---------|----------|--------------|
| `https://cloud.debian.org/images/cloud/trixie/20260501-2465` | Debian 13 cloud image download | HTTPS | TLS + checksum verification |
| `https://cloud-images.ubuntu.com/noble/current` | Ubuntu 24.04 LTS cloud image download | HTTPS | TLS + checksum verification |
| `https://cloud-images.ubuntu.com/resolute/current` | Ubuntu 26.04 LTS cloud image download | HTTPS | TLS + checksum verification |
| `https://d2yp8ipz5jfqcw.cloudfront.net` | Alpine image for managed HAProxy load-balancer | HTTPS | TLS + checksum verification |
| `https://install.mulgadc.com/install` | One-shot install telemetry POST on `spx admin init` / `join`. | HTTPS | TLS |
@@ -56,7 +56,7 @@ Deploy a VPC with public and private subnets where the private subnet has no int
**Prerequisites:**
- Spinifex installed and running (see [Installing Spinifex](/docs/install))
- An Ubuntu 24.04 AMI imported (see [Setting Up Your Cluster](/docs/setting-up-your-cluster))
- An Ubuntu 26.04 AMI imported (see [Setting Up Your Cluster](/docs/setting-up-your-cluster))
- OpenTofu or Terraform installed
## Instructions
@@ -149,7 +149,7 @@ The private route table should have no `0.0.0.0/0` route. Also verify the privat
### AMI Not Found
Ensure you have imported an Ubuntu 24.04 image:
Ensure you have imported an Ubuntu 26.04 image:
```bash
aws ec2 describe-images --owners 000000000000 --profile spinifex
@@ -96,7 +96,7 @@ data "aws_ami" "ubuntu" {
filter {
name = "name"
values = ["*ubuntu-24.04*"]
values = ["*ubuntu-26.04*"]
}
filter {
+4 -4
View File
@@ -58,7 +58,7 @@ Deploy two Nginx web servers behind an internet-facing Application Load Balancer
| Elastic IP | `nginx-alb-nat-eip` | Public address for the NAT Gateway |
| NAT Gateway | `nginx-alb-nat` | Outbound internet for the private subnets (cloud-init apt bootstrap) |
| Security Group | `nginx-alb-sg` | Allows SSH (22) and HTTP (80) inbound |
| EC2 Instances | `nginx-alb-1`, `nginx-alb-2` | Ubuntu 24.04 with Nginx via cloud-init (private subnets) |
| EC2 Instances | `nginx-alb-1`, `nginx-alb-2` | Ubuntu 26.04 with Nginx via cloud-init (private subnets) |
| ALB | `nginx-alb` | Internet-facing Application Load Balancer on port 80 |
| Target Group | `nginx-alb-tg` | HTTP health-checked group for both instances |
| Listener | HTTP :80 | Forwards traffic to the target group |
@@ -66,7 +66,7 @@ Deploy two Nginx web servers behind an internet-facing Application Load Balancer
**Prerequisites:**
- Spinifex installed and running (see [Installing Spinifex](/docs/install))
- An Ubuntu 24.04 AMI imported (see [Setting Up Your Cluster](/docs/setting-up-your-cluster))
- An Ubuntu 26.04 AMI imported (see [Setting Up Your Cluster](/docs/setting-up-your-cluster))
- OpenTofu or Terraform installed
## Instructions
@@ -184,7 +184,7 @@ tofu destroy
### AMI Not Found
Ensure you have imported an Ubuntu 24.04 image. Check available AMIs:
Ensure you have imported an Ubuntu 26.04 image. Check available AMIs:
```bash
aws ec2 describe-images --owners 000000000000 --profile spinifex
@@ -193,7 +193,7 @@ aws ec2 describe-images --owners 000000000000 --profile spinifex
If missing import:
```bash
spx admin images import --name ubuntu-24.04-x86_64
spx admin images import --name ubuntu-26.04-x86_64
```
### Provider Connection Refused
+1 -1
View File
@@ -102,7 +102,7 @@ data "aws_ami" "ubuntu" {
filter {
name = "name"
values = ["*ubuntu-24.04*"]
values = ["*ubuntu-26.04*"]
}
}
@@ -43,7 +43,7 @@ Deploy a complete Nginx web server on Spinifex using Terraform/OpenTofu. This wo
**Prerequisites:**
- Spinifex installed and running (see [Installing Spinifex](/docs/install))
- An Ubuntu 24.04 AMI imported (see [Setting Up Your Cluster](/docs/setting-up-your-cluster))
- An Ubuntu 26.04 AMI imported (see [Setting Up Your Cluster](/docs/setting-up-your-cluster))
- OpenTofu or Terraform installed
## Instructions
@@ -96,7 +96,7 @@ tofu destroy
### AMI Not Found
Ensure you have imported an Ubuntu 24.04 image. Check available AMIs:
Ensure you have imported an Ubuntu 26.04 image. Check available AMIs:
```bash
aws ec2 describe-images --owners 000000000000 --profile spinifex
@@ -85,7 +85,7 @@ data "aws_ami" "ubuntu" {
filter {
name = "name"
values = ["*ubuntu-24.04*"]
values = ["*ubuntu-26.04*"]
}
filter {
@@ -220,7 +220,7 @@ resource "aws_security_group" "web" {
}
# ---------------------------------------------------------------------------
# EC2 Instance — Ubuntu 24.04 with Nginx installed via cloud-init
# EC2 Instance — Ubuntu 26.04 with Nginx installed via cloud-init
# ---------------------------------------------------------------------------
resource "aws_instance" "nginx" {
+2 -2
View File
@@ -53,7 +53,7 @@ Deploy an EC2 instance running a Flask file-sharing web application backed by S3
- Spinifex installed and running (see [Installing Spinifex](/docs/install))
- Predastore running (S3 API on port 8443)
- An Ubuntu 24.04 AMI imported (see [Setting Up Your Cluster](/docs/setting-up-your-cluster))
- An Ubuntu 26.04 AMI imported (see [Setting Up Your Cluster](/docs/setting-up-your-cluster))
- OpenTofu or Terraform installed
- The EC2 instance must be able to reach Predastore — use the host's br-wan IP, not localhost
@@ -153,7 +153,7 @@ cat /opt/webapp/.env
### AMI Not Found
Ensure you have imported an Ubuntu 24.04 image:
Ensure you have imported an Ubuntu 26.04 image:
```bash
aws ec2 describe-images --owners 000000000000 --profile spinifex
+1 -1
View File
@@ -132,7 +132,7 @@ data "aws_ami" "ubuntu" {
filter {
name = "name"
values = ["*ubuntu-24.04*"]
values = ["*ubuntu-26.04*"]
}
filter {
+1 -1
View File
@@ -11,7 +11,7 @@ Builds a Proxmox VM template with all Spinifex dependencies pre-installed. Cloni
| AWS CLI | v2 (`make install-aws`) |
| Repositories | spinifex, viperblock, predastore (with `go.work` configured) |
| Module cache | `go mod download` completed for all repos |
| Cloud images | Ubuntu 24.04 for nested VMs (`~/images/ubuntu-24.04.img`) |
| Cloud images | Ubuntu 26.04 for nested VMs (`~/images/ubuntu-26.04.img`) |
| Tuning | sysctl (rmem_max/wmem_max), kvm group, ufw disabled |
| Generalized | Clean machine-id, SSH host keys, cloud-init — each clone boots fresh |
@@ -92,15 +92,15 @@ mkdir -p "$HOME/images"
ARCH=$(dpkg --print-architecture)
IMAGE_URL=""
if [ "$ARCH" = "amd64" ]; then
IMAGE_URL="https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img"
IMAGE_URL="https://cloud-images.ubuntu.com/resolute/current/resolute-server-cloudimg-amd64.img"
elif [ "$ARCH" = "arm64" ]; then
IMAGE_URL="https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-arm64.img"
IMAGE_URL="https://cloud-images.ubuntu.com/resolute/current/resolute-server-cloudimg-arm64.img"
fi
if [ -n "$IMAGE_URL" ]; then
echo " Downloading Ubuntu 24.04 cloud image ($ARCH)..."
curl -L -o "$HOME/images/ubuntu-24.04.img" "$IMAGE_URL"
echo " Saved to ~/images/ubuntu-24.04.img"
echo " Downloading Ubuntu 26.04 cloud image ($ARCH)..."
curl -L -o "$HOME/images/ubuntu-26.04.img" "$IMAGE_URL"
echo " Saved to ~/images/ubuntu-26.04.img"
else
echo " Unknown arch ($ARCH), skipping cloud image download"
fi
+3 -3
View File
@@ -12,11 +12,11 @@ if [ -z "$SPINIFEX_AMI" ]; then
echo "SPINIFEX_AMI not set, attempting to detect..."
ARCH=$(uname -m)
if [ "$ARCH" = "x86_64" ]; then
IMAGE_NAME="ami-ubuntu-24.04-x86_64"
IMAGE_NAME="ami-ubuntu-26.04-x86_64"
elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then
IMAGE_NAME="ami-ubuntu-24.04-arm64"
IMAGE_NAME="ami-ubuntu-26.04-arm64"
else
IMAGE_NAME="ami-ubuntu-24.04-x86_64"
IMAGE_NAME="ami-ubuntu-26.04-x86_64"
fi
SPINIFEX_AMI=$(aws ec2 describe-images --query "Images[?Name=='$IMAGE_NAME'].ImageId" --output text)
if [ -z "$SPINIFEX_AMI" ]; then
+3 -3
View File
@@ -6,12 +6,12 @@ export AWS_PROFILE=spinifex
# Detect architecture
ARCH=$(uname -m)
if [ "$ARCH" = "x86_64" ]; then
IMAGE_NAME="ami-ubuntu-24.04-x86_64"
IMAGE_NAME="ami-ubuntu-26.04-x86_64"
elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then
IMAGE_NAME="ami-ubuntu-24.04-arm64"
IMAGE_NAME="ami-ubuntu-26.04-arm64"
else
echo "Warning: Unknown architecture $ARCH, defaulting to x86_64"
IMAGE_NAME="ami-ubuntu-24.04-x86_64"
IMAGE_NAME="ami-ubuntu-26.04-x86_64"
fi
# Query available instance types from Spinifex and pick the first micro type
+5 -5
View File
@@ -46,15 +46,15 @@ aws ec2 describe-key-pairs
# --- Import AMI ---
echo "==> Importing AMI"
LOCAL_IMAGE="$HOME/images/ubuntu-24.04.img"
LOCAL_IMAGE="$HOME/images/ubuntu-26.04.img"
ARCH=$(uname -m)
case "$ARCH" in
x86_64) IMG_ARCH="x86_64"; IMAGE_NAME="ubuntu-24.04-x86_64" ;;
aarch64|arm64) IMG_ARCH="arm64"; IMAGE_NAME="ubuntu-24.04-arm64" ;;
x86_64) IMG_ARCH="x86_64"; IMAGE_NAME="ubuntu-26.04-x86_64" ;;
aarch64|arm64) IMG_ARCH="arm64"; IMAGE_NAME="ubuntu-26.04-arm64" ;;
*)
echo " Warning: unknown arch $ARCH, defaulting to x86_64"
IMG_ARCH="x86_64"; IMAGE_NAME="ubuntu-24.04-x86_64"
IMG_ARCH="x86_64"; IMAGE_NAME="ubuntu-26.04-x86_64"
;;
esac
@@ -70,7 +70,7 @@ else
if [ -f "$LOCAL_IMAGE" ]; then
echo " Using local image: $LOCAL_IMAGE"
sudo /usr/local/bin/spx admin images import \
--file "$LOCAL_IMAGE" --distro ubuntu --version 24.04 --arch "$IMG_ARCH"
--file "$LOCAL_IMAGE" --distro ubuntu --version 26.04 --arch "$IMG_ARCH"
else
echo " Downloading image: $IMAGE_NAME"
sudo /usr/local/bin/spx admin images import --name "$IMAGE_NAME"
+3 -3
View File
@@ -7,9 +7,9 @@ export AWS_PROFILE=spinifex
ARCH=$(uname -m)
case "$ARCH" in
x86_64) IMAGE_NAME="ami-ubuntu-24.04-x86_64" ;;
aarch64|arm64) IMAGE_NAME="ami-ubuntu-24.04-arm64" ;;
*) echo "Unknown arch $ARCH, default x86_64"; IMAGE_NAME="ami-ubuntu-24.04-x86_64" ;;
x86_64) IMAGE_NAME="ami-ubuntu-26.04-x86_64" ;;
aarch64|arm64) IMAGE_NAME="ami-ubuntu-26.04-arm64" ;;
*) echo "Unknown arch $ARCH, default x86_64"; IMAGE_NAME="ami-ubuntu-26.04-x86_64" ;;
esac
INSTANCE_TYPE=$(aws ec2 describe-instance-types \
+14 -14
View File
@@ -305,31 +305,31 @@ var AvailableImages = map[string]Images{
Starred: true,
},
"ubuntu-24.04-x86_64": {
Name: "ubuntu-24.04-x86_64",
Description: "Ubuntu 24.04 LTS (Noble Numbat) x86_64 cloud image",
"ubuntu-26.04-x86_64": {
Name: "ubuntu-26.04-x86_64",
Description: "Ubuntu 26.04 LTS (Resolute Reindeer) x86_64 cloud image",
Distro: "ubuntu",
Version: "24.04",
Version: "26.04",
Arch: "x86_64",
Platform: "Linux/UNIX",
CreatedAt: time.Date(2025, 10, 6, 0, 0, 0, 0, time.UTC),
URL: "https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img",
Checksum: "https://cloud-images.ubuntu.com/noble/current/SHA256SUMS",
CreatedAt: time.Date(2026, 5, 1, 0, 0, 0, 0, time.UTC),
URL: "https://cloud-images.ubuntu.com/resolute/current/resolute-server-cloudimg-amd64.img",
Checksum: "https://cloud-images.ubuntu.com/resolute/current/SHA256SUMS",
ChecksumType: "sha256",
BootMode: "bios",
Starred: false,
},
"ubuntu-24.04-arm64": {
Name: "ubuntu-24.04-arm64",
Description: "Ubuntu 24.04 LTS (Noble Numbat) arm64 cloud image",
"ubuntu-26.04-arm64": {
Name: "ubuntu-26.04-arm64",
Description: "Ubuntu 26.04 LTS (Resolute Reindeer) arm64 cloud image",
Distro: "ubuntu",
Version: "24.04",
Version: "26.04",
Arch: "arm64",
Platform: "Linux/UNIX",
CreatedAt: time.Date(2025, 10, 6, 0, 0, 0, 0, time.UTC),
URL: "https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-arm64.img",
Checksum: "https://cloud-images.ubuntu.com/noble/current/SHA256SUMS",
CreatedAt: time.Date(2026, 5, 1, 0, 0, 0, 0, time.UTC),
URL: "https://cloud-images.ubuntu.com/resolute/current/resolute-server-cloudimg-arm64.img",
Checksum: "https://cloud-images.ubuntu.com/resolute/current/SHA256SUMS",
ChecksumType: "sha256",
BootMode: "bios",
Starred: false,
+1 -1
View File
@@ -1111,7 +1111,7 @@ func trustTestServer(t *testing.T, srv *httptest.Server) {
func TestVerifyImageChecksum(t *testing.T) {
const debianName = "debian-13-genericcloud-amd64-20260501-2465.tar.xz"
const ubuntuName = "noble-server-cloudimg-amd64.img"
const ubuntuName = "resolute-server-cloudimg-amd64.img"
const alpineName = "alb-alpine-3.21.6-x86_64.raw"
debianBytes := []byte("debian-image-bytes-fixture")