#cloud-config autoinstall: version: 1 interactive-sections: - network # ── Locale & keyboard ────────────────────────── locale: en_IN.UTF-8 keyboard: layout: us # ── Network: stop on installer network screen ─ # Subiquity will show the network UI and use the values below as defaults. # This keeps installer-side IP selection, but pre-fills the expected static # network so console-only installs do not require retyping everything. network: network: version: 2 ethernets: any-en: dhcp4: false match: name: "en*" addresses: - 172.16.10.181/23 routes: - to: default via: 172.16.10.1 nameservers: addresses: - 8.8.8.8 - 1.1.1.1 any-eth: dhcp4: false match: name: "eth*" addresses: - 172.16.10.181/23 routes: - to: default via: 172.16.10.1 nameservers: addresses: - 8.8.8.8 - 1.1.1.1 # ── Storage: LVM using ALL disk space ───────── storage: layout: name: lvm match: size: largest # ── Identity ────────────────────────────────── identity: hostname: cezenai username: cezen # Password: cezen@123 password: "$6$I5VA.42G1xTeVhCv$KCLzqIKg/kbNHZyiTEMAY4FZsJMDDwoS90k6Ffb9VEwmcK.wuzlJNe3ceiEfLrzYzXEvqjYsLc7klAbeGPGab." # ── SSH ─────────────────────────────────────── ssh: install-server: true allow-pw: true # ── Base packages ───────────────────────────── packages: - git - curl - wget - python3 - avahi-daemon - openssh-server # ── Late commands ───────────────────────────── late-commands: # Extend LVM to use 100% of available disk space - lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv || true - resize2fs /dev/ubuntu-vg/ubuntu-lv || true # Allow cezen passwordless sudo (needed for install.sh) - echo "cezen ALL=(ALL) NOPASSWD:ALL" > /target/etc/sudoers.d/cezen - chmod 440 /target/etc/sudoers.d/cezen # Disable the installer media APT source so post-install apt uses network # mirrors instead of the custom ISO content. - sed -i 's/^deb cdrom:/# deb cdrom:/' /target/etc/apt/sources.list || true # Install the Cezen AI payload from the ISO first. Fall back to Git only # when building from older media that does not contain /cdrom/cezen-aipackage. - mkdir -p /target/opt/aipackage - cp -a /cdrom/cezen-aipackage/. /target/opt/aipackage/ || git clone https://cgit.cezentech.com/jinojose/aipackage.git /target/opt/aipackage # Deploy the web setup server - mkdir -p /target/opt/cezen - cp /target/opt/aipackage/autoinstall/websetup/server.py /target/opt/cezen/websetup.py - chmod +x /target/opt/cezen/websetup.py # Set hostname to cezenai so it's reachable as cezenai.local via mDNS - echo "cezenai" > /target/etc/hostname - sed -i 's/aiserver/cezenai/g' /target/etc/hosts || true # Create cezen-setup web UI systemd service - | cat > /target/etc/systemd/system/cezen-setup.service << 'EOF' [Unit] Description=Cezen AI Suite — Web Setup UI After=network-online.target avahi-daemon.service Wants=network-online.target ConditionPathExists=!/opt/cezen/.setup-done [Service] Type=simple ExecStart=/usr/bin/python3 /opt/cezen/websetup.py Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target EOF - curtin in-target -- systemctl enable ssh - curtin in-target -- systemctl enable cezen-setup.service - curtin in-target -- systemctl enable avahi-daemon.service # ── Skip confirmations ───────────────────────── user-data: disable_root: false