141 lines
5.1 KiB
Plaintext
141 lines
5.1 KiB
Plaintext
#cloud-config
|
||
# ─────────────────────────────────────────────────────────────
|
||
# Nexus One AI — Starter Tier Autoinstall
|
||
# Hardware target: compact workstation (Mini-ITX / SFF)
|
||
# GPU: 1× NVIDIA RTX 5090 (32 GB GDDR7)
|
||
# RAM: 64 GB DDR5
|
||
# Storage: 1× 2 TB NVMe SSD (single drive — simple LVM)
|
||
# Network: 2.5 GbE (single interface)
|
||
# ─────────────────────────────────────────────────────────────
|
||
autoinstall:
|
||
version: 1
|
||
|
||
# ── Locale & keyboard ──────────────────────────
|
||
locale: en_IN.UTF-8
|
||
keyboard:
|
||
layout: us
|
||
|
||
# ── Network: DHCP during install; static config applied post-install ──
|
||
network:
|
||
network:
|
||
version: 2
|
||
ethernets:
|
||
any-en:
|
||
dhcp4: true
|
||
match:
|
||
name: "en*"
|
||
any-eth:
|
||
dhcp4: true
|
||
match:
|
||
name: "eth*"
|
||
|
||
# ── Storage: single 2 TB NVMe, simple LVM ─────
|
||
# Starter workstations have one drive — no RAID needed.
|
||
storage:
|
||
layout:
|
||
name: lvm
|
||
match:
|
||
size: largest
|
||
|
||
# ── Identity ──────────────────────────────────
|
||
identity:
|
||
hostname: cezenai-starter
|
||
username: cezen
|
||
# Default password: cezen@123 (change via first-boot wizard)
|
||
password: "$6$I5VA.42G1xTeVhCv$KCLzqIKg/kbNHZyiTEMAY4FZsJMDDwoS90k6Ffb9VEwmcK.wuzlJNe3ceiEfLrzYzXEvqjYsLc7klAbeGPGab."
|
||
|
||
# ── SSH ───────────────────────────────────────
|
||
ssh:
|
||
install-server: true
|
||
allow-pw: true
|
||
|
||
# ── Base packages ─────────────────────────────
|
||
packages:
|
||
- git
|
||
- curl
|
||
- wget
|
||
- python3
|
||
- whiptail
|
||
- openssh-server
|
||
- nvme-cli # NVMe health / SMART monitoring
|
||
|
||
# ── Late commands ─────────────────────────────
|
||
late-commands:
|
||
# Expand LVM to fill the full 2 TB NVMe
|
||
- lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv || true
|
||
- resize2fs /dev/ubuntu-vg/ubuntu-lv || true
|
||
|
||
# Passwordless sudo for cezen (needed by install.sh + first-boot wizard)
|
||
- echo "cezen ALL=(ALL) NOPASSWD:ALL" > /target/etc/sudoers.d/cezen
|
||
- chmod 440 /target/etc/sudoers.d/cezen
|
||
|
||
# Replace installer netplan with simple DHCP target config.
|
||
# The first-boot wizard will switch to static if desired.
|
||
- rm -f /target/etc/netplan/50-cloud-init.yaml /target/etc/netplan/00-installer-config.yaml || true
|
||
- |
|
||
cat > /target/etc/netplan/99-cezen-dhcp.yaml << 'EOF'
|
||
network:
|
||
version: 2
|
||
ethernets:
|
||
any-en:
|
||
dhcp4: true
|
||
match:
|
||
name: "en*"
|
||
any-eth:
|
||
dhcp4: true
|
||
match:
|
||
name: "eth*"
|
||
EOF
|
||
|
||
# Disable cdrom APT source
|
||
- sed -i 's/^deb cdrom:/# deb cdrom:/' /target/etc/apt/sources.list || true
|
||
|
||
# Pull the Nexus One AI installer from cgit. The ISO intentionally does not
|
||
# bundle the full package, keeping the image small and the installed code
|
||
# current at deployment time.
|
||
- mkdir -p /target/opt/aipackage
|
||
- git clone https://cgit.cezentech.com/jinojose/aipackage.git /target/opt/aipackage
|
||
|
||
# Write tier marker — used by install.sh and the portal branding system
|
||
- mkdir -p /target/opt/cezen
|
||
- echo "starter" > /target/opt/cezen/tier
|
||
|
||
# Deploy first-boot TUI wizard
|
||
- cp /target/opt/aipackage/autoinstall/firstboot-setup.sh /target/opt/cezen/firstboot-setup.sh
|
||
- chmod +x /target/opt/cezen/firstboot-setup.sh
|
||
|
||
# Set hostname
|
||
- echo "cezenai-starter" > /target/etc/hostname
|
||
- sed -i 's/aiserver/cezenai-starter/g' /target/etc/hosts || true
|
||
|
||
# Systemd service: run first-boot wizard on tty1 once
|
||
- |
|
||
cat > /target/etc/systemd/system/cezen-setup.service << 'EOF'
|
||
[Unit]
|
||
Description=Nexus One AI — Console Setup Wizard (Starter)
|
||
After=cloud-final.service cloud-init.target network-online.target
|
||
Wants=cloud-init.target network-online.target
|
||
ConditionPathExists=!/opt/cezen/.setup-done
|
||
OnFailure=getty@tty1.service
|
||
|
||
[Service]
|
||
Type=oneshot
|
||
WorkingDirectory=/opt/cezen
|
||
ExecStartPre=-/bin/systemctl stop getty@tty1.service
|
||
ExecStartPre=-/usr/bin/chvt 1
|
||
ExecStart=/bin/bash -lc 'clear >/dev/tty1 2>/dev/null || true; /usr/bin/openvt -c 1 -f -w -- env TERM=linux CEZEN_TIER=starter /opt/cezen/firstboot-setup.sh'
|
||
ExecStartPost=-/bin/systemctl start getty@tty1.service
|
||
StandardOutput=journal+console
|
||
StandardError=journal+console
|
||
Restart=no
|
||
|
||
[Install]
|
||
WantedBy=cloud-init.target
|
||
EOF
|
||
|
||
- curtin in-target -- systemctl enable ssh
|
||
- curtin in-target -- systemctl enable cezen-setup.service
|
||
|
||
user-data:
|
||
disable_root: false
|