Skip to Content
ドキュメントサーバー自動インストール

Ubuntu autoinstall 自動展開

autoinstall は、Ubuntu サーバーの Subiquity インストーラーによって提供される自動インストール ソリューションです。 YAML 構成ファイルを使用して、無人サーバー展開を有効にします。

仕組み

自動インストール構成は、以下を通じて提供できます。

  1. cloud-init user-data - クラウド プラットフォームのユーザーデータ経由で渡されます
  2. ローカル ファイル - インストール メディアまたはアクセス可能なファイル システムに配置されます。
  3. HTTP サーバー - ネットワーク経由でロードされます

インストーラーは起動時に自動インストール構成を検索します。見つかると、手動介入なしで自動的にインストールが続行されます。

基本構成構造

#cloud-config autoinstall: version: 1 # Language and keyboard locale: en_US.UTF-8 keyboard: layout: us # Network configuration network: version: 2 ethernets: eth0: dhcp4: true # Software sources apt: primary: - arches: [default] uri: http://archive.ubuntu.com/ubuntu # Disk configuration storage: layout: name: lvm # User configuration identity: hostname: ubuntu-server username: ubuntu password: "$6$rounds=4096$xyz$hashedpassword" # SSH configuration ssh: install-server: true allow-pw: false authorized-keys: - ssh-ed25519 AAAA... admin@workstation # Post-installation commands late-commands: - curtin in-target -- apt update - curtin in-target -- apt upgrade -y

完全な構成例

標準サーバーのインストール

#cloud-config autoinstall: version: 1 # Interactive settings (which steps require manual confirmation) interactive-sections: [] # Empty means fully automatic locale: en_US.UTF-8 keyboard: layout: us variant: "" # Use updated installer refresh-installer: update: true # Network network: version: 2 ethernets: ens33: dhcp4: false addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 8.8.8.8 - 1.1.1.1 # Proxy (leave empty if not used) proxy: "" # APT mirror apt: primary: - arches: [amd64] uri: http://archive.ubuntu.com/ubuntu geoip: false # Storage configuration - using LVM storage: layout: name: lvm sizing-policy: scaled # Or specify root partition size # sizing-policy: all # System identity identity: hostname: prod-web-01 username: deploy # Generated with: mkpasswd --method=sha-512 password: "$6$rounds=4096$saltsalt$hashedpasswordhere" # SSH ssh: install-server: true allow-pw: false authorized-keys: - ssh-ed25519 AAAA... deploy@admin # Snap packages to install snaps: - name: docker channel: latest/stable classic: false # Deb packages to install packages: - ubuntu-server-minimal - vim - htop - curl - wget - git - ufw - fail2ban # Automatic security updates updates: security # Post-installation commands late-commands: # Set timezone - curtin in-target -- timedatectl set-timezone America/New_York # Configure firewall - curtin in-target -- ufw allow ssh - curtin in-target -- ufw --force enable # Write custom configuration files - | cat <<'SYSCTL' > /target/etc/sysctl.d/99-custom.conf net.ipv4.ip_forward = 1 net.core.somaxconn = 65535 vm.swappiness = 10 SYSCTL # Enable services - curtin in-target -- systemctl enable fail2ban # Reboot automatically after installation completes shutdown: reboot

カスタムパーティショニングスキーム

#cloud-config autoinstall: version: 1 locale: en_US.UTF-8 storage: config: # Disk - id: disk0 type: disk ptable: gpt path: /dev/sda wipe: superblock-recursive grub_device: false # EFI partition - id: efi-part type: partition device: disk0 size: 512M flag: boot grub_device: true # Boot partition - id: boot-part type: partition device: disk0 size: 1G # Remaining space for LVM - id: lvm-part type: partition device: disk0 size: -1 # All remaining space # EFI filesystem - id: efi-fs type: format volume: efi-part fstype: fat32 # Boot filesystem - id: boot-fs type: format volume: boot-part fstype: ext4 # LVM volume group - id: vg0 type: lvm_volgroup name: vg0 devices: - lvm-part # LVM logical volume - root - id: lv-root type: lvm_partition volgroup: vg0 name: lv-root size: 20G # LVM logical volume - var - id: lv-var type: lvm_partition volgroup: vg0 name: lv-var size: 30G # LVM logical volume - home - id: lv-home type: lvm_partition volgroup: vg0 name: lv-home size: -1 # Format logical volumes - id: root-fs type: format volume: lv-root fstype: ext4 - id: var-fs type: format volume: lv-var fstype: ext4 - id: home-fs type: format volume: lv-home fstype: ext4 # Mount points - id: mount-efi type: mount device: efi-fs path: /boot/efi - id: mount-boot type: mount device: boot-fs path: /boot - id: mount-root type: mount device: root-fs path: / - id: mount-var type: mount device: var-fs path: /var - id: mount-home type: mount device: home-fs path: /home identity: hostname: custom-server username: admin password: "$6$rounds=4096$saltsalt$hash" ssh: install-server: true

自動インストール構成の提供

方法 1: ISO を変更する

# Mount the original ISO mkdir -p /mnt/iso sudo mount -o loop ubuntu-26.04-live-server-amd64.iso /mnt/iso # Copy the contents mkdir -p ~/custom-iso cp -rT /mnt/iso ~/custom-iso sudo umount /mnt/iso # Add the autoinstall configuration mkdir -p ~/custom-iso/autoinstall cp autoinstall.yaml ~/custom-iso/autoinstall/user-data touch ~/custom-iso/autoinstall/meta-data # Modify the GRUB configuration to add an autoinstall boot entry # Add the following to ~/custom-iso/boot/grub/grub.cfg: cat >> ~/custom-iso/boot/grub/grub.cfg << 'EOF' menuentry "Autoinstall Ubuntu Server" { set gfxpayload=keep linux /casper/vmlinuz autoinstall ds=nocloud\;s=/cdrom/autoinstall/ --- initrd /casper/initrd } EOF # Regenerate the ISO sudo apt install xorriso -y xorriso -as mkisofs \ -r -V "Ubuntu 26.04 Autoinstall" \ -o ~/ubuntu-26.04-autoinstall.iso \ -J -joliet-long \ --grub2-mbr /usr/lib/grub/i386-pc/boot_hybrid.img \ -partition_offset 16 \ -append_partition 2 0xEF ~/custom-iso/boot/grub/efi.img \ -appended_part_as_gpt \ -eltorito-boot boot/grub/bios.img \ -eltorito-catalog boot/grub/boot.cat \ --no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \ -eltorito-alt-boot -e '--interval:appended_partition_2:all::' --no-emul-boot \ ~/custom-iso

方法 2: HTTP サーバー

# Start an HTTP server on another machine mkdir -p ~/autoinstall-server cp autoinstall.yaml ~/autoinstall-server/user-data touch ~/autoinstall-server/meta-data cd ~/autoinstall-server python3 -m http.server 8080 # During installation, add the kernel parameter in the GRUB command line: # autoinstall ds=nocloud-net;s=http://192.168.1.50:8080/

方法 3: PXE ネットワーク ブート

TFTP + HTTP サーバーと組み合わせた大規模な導入に適しています。

# Install PXE-related software sudo apt install tftpd-hpa -y # Place the kernel and initrd in the TFTP directory sudo cp /mnt/iso/casper/vmlinuz /srv/tftp/ sudo cp /mnt/iso/casper/initrd /srv/tftp/ # Add kernel parameters in the PXE configuration # kernel vmlinuz # append initrd=initrd autoinstall ds=nocloud-net;s=http://192.168.1.50:8080/ ---

パスワードハッシュを生成する

# Method 1: Using mkpasswd sudo apt install whois -y mkpasswd --method=sha-512 # Method 2: Using openssl openssl passwd -6 # Note: Python 3.13 removed the crypt module; use the mkpasswd or openssl methods above instead

既存のシステムの自動インストール構成をエクスポートする

インストール後、現在のシステムのインストール構成をエクスポートして、テンプレートとして使用できます。

# View the autoinstall configuration used during installation sudo cat /var/log/installer/autoinstall-user-data # This file contains the full installation configuration and can be reused as a template

構成を検証する

# Validate syntax with cloud-init cloud-init schema --config-file autoinstall.yaml # Check YAML format with Python python3 -c "import yaml; yaml.safe_load(open('autoinstall.yaml'))"

よくある問題

インストールが確認ステップで停止する

interactive-sections が空のリストに設定されていることを確認します。

autoinstall: interactive-sections: []

ネットワーク構成が適用されない

ネットワークインターフェース名が正しいことを確認してください。インストール環境における実際のインターフェース名は、ip linkで確認できます。

遅延コマンドの失敗

  • ターゲット システム内でコマンドを実行するには、curtin in-target -- プレフィックスを使用します。
  • ダイレクト パス操作の場合は、/target/ プレフィックスを使用します。
  • ログを確認します: /var/log/installer/curtin-install.log