#cloud-config
# 顺序 early-commands > 安装系统 > late-commands > 重启进入系统 > cloud-init: runcmd > cloud-init: 其他
autoinstall:
  version: 1
  apt:
    fallback: offline-install
  source:
    id: "@SOURCE_ID@"
  kernel:
    package: linux-generic
  timezone: Asia/Shanghai
  ssh:
    allow-pw: true
    authorized-keys: []
    install-server: true
  early-commands:
    - |
      # 解决 20.04 不能识别硬盘
      # https://askubuntu.com/questions/1302392/ubuntu-server-20-04-setup-stuck-at-block-probing-did-not-discover-any-disks
      mount | grep /isodevice && { losetup -d /dev/loop0; umount -l /isodevice; } || true

      # 提取 extra_confhome extra_kernel
      prefix=extra
      for var in $(grep -o "\b${prefix}_[^ ]*" /proc/cmdline | xargs); do
          eval "$(echo $var | sed -E "s/${prefix}_([^=]*)=(.*)/\1='\2'/")"
      done

      # 生成分区信息
      xda=$(curl -L "$confhome/get-xda.sh" | sh -s)
      export xda
      curl -L "$confhome/ubuntu-storage-early.sh" | sh -s

      # 要安装的版本
      # 有的镜像只有一个版本,没有 install-sources.yaml
      # 因此提取不到 $source_id,此时 $source_id 参数为空
      if [ -n "$source_id" ]; then
          sed -i "s/@SOURCE_ID@/$source_id/" /autoinstall.yaml
      else
          sed -i "/@SOURCE_ID@/d" /autoinstall.yaml
      fi

      # 内核风味
      # https://bugs.launchpad.net/subiquity/+bug/1989353
      sed -i "s/generic/$kernel/" /run/kernel-meta-package
      sed -i "/package:/s/generic/$kernel/" /autoinstall.yaml

      # 跳过最后的更新
      cp /usr/sbin/chroot /usr/sbin/chroot.bin
      cat >/usr/sbin/chroot <<EOF
      #!/bin/sh
      [ "\$2" = "unattended-upgrades" ] || /usr/sbin/chroot.bin "\$@"
      EOF

      # 禁用 DNS  强制离线安装内核和跳过最后的更新
      # 但安装器会配置时区和写入最近的mirror到/etc/apt/sources.list 所以要提前解析
      # dig会显示cname结果,cname会以.结尾,grep -v '\.$' 表示去除 cname 结果
      # echo $(dig +short geoip.ubuntu.com | grep -v '\.$' | head -1) geoip.ubuntu.com >>/etc/hosts
      # sed -i -E 's/(^nameserver )/#\1/' /etc/resolv.conf
  late-commands:
    - |
      # root ssh 登录
      echo "PermitRootLogin yes" >/target/etc/ssh/sshd_config.d/01-permitrootlogin.conf

      # 还原 DNS
      # sed -i -E 's/^#(nameserver )/\1/' /etc/resolv.conf

      # 提取 extra_confhome
      prefix=extra
      for var in $(grep -o "\b${prefix}_[^ ]*" /proc/cmdline | xargs); do
          eval "$(echo $var | sed -E "s/${prefix}_([^=]*)=(.*)/\1='\2'/")"
      done

      # 下载合并分区脚本
      cd /target
      curl -LO $confhome/resize.sh

      # 升级 cloud-init
      # curtin in-target --target=/target -- apt update
      # curtin in-target --target=/target -- apt install --only-upgrade cloud-init
  user-data:
    runcmd:
      - |
        # 合并分区
        bash /resize.sh
    disable_root: false
    users:
      - name: root
        lock_passwd: false
    chpasswd:
      expire: false
      # 20.04 arm 需要
      list: |
        root:123@@@
      users:
        - name: root
          password: 123@@@
          type: text