Как я могу сделать минимальную установку с автоподстановкой?

Вопрос или проблема

Я пытаюсь создать пользовательский образ Ubuntu с помощью autoinstall, используя образ ISO Ubuntu сервер 20.04 LTS AMD64. Как мне нужно настроить user-data, чтобы выполнить минимальную установку?

Как показывают сопоставления /var/log/installer/autoinstall-user-data между автоматически установленными и вручную установленными серверами 22.04, такой выбор не представлен. Похоже, это внутренний параметр установщика.

Установленный размер все равно составляет 2.3 ГБ по сравнению с обычными 2.7 ГБ, так что «минимум» это относительное понятие. Например, snap по-прежнему присутствует в минимальной версии, но less был удален, так что это отнюдь не только необходимые пакеты.

Стоит помнить, что ядро и сопутствующие компоненты занимают около 1.5 ГБ. Минимальный вариант действительно сильно влияет на контейнеры и ВМ с маленькими ядрами.

Старый пост, но это первый, который появляется при поиске в Google вопроса о том, как выполнить минимальную установку с помощью autoinstall (user-data). Поэтому я размещаю его здесь.

Я думаю, что выяснил, как это можно сделать. Протестировано на 22.04 LTS. Как тестировал? Полная установка устанавливает ‘nano’, минимальная — нет. Честно говоря, минимальная версия даже не имеет ‘ping’. Да, не научный подход, но для меня этого достаточно.

autoinstall:
  source:
    id: ubuntu-server-minimal

Извините, это не ответ (пожалуйста, ответьте, если у вас есть), но ужасное решение — использовать late-command в пользовательских данных autoinstall, чтобы удалить как можно больше после установки для уменьшения размера. В документации, похоже, нет ничего об этом, и только одно упоминание в исходниках, в примере файла, который я не могу расшифровать: https://github.com/canonical/subiquity/blob/206b7ae678bc1993e1eef46c74efb12f30dbbb43/examples/install-sources.yaml

Я бы использовал что-то подобное.

user-data:

#cloud-config
autoinstall:
  instance-id: iid-auto-default
  version: 1
  refresh-installer:
    update: yes
    channel: edge
  early-commands:
    - ping -c1 8.8.8.8
    - ip -br -4  -c addr show | head -n 3
    - systemctl stop ssh # иначе packer пытается подключиться и превышает максимальное количество попыток
  apt:
    geoip: true
    preserve_sources_list: false
    primary:
      - arches:
          - amd64
        uri: 'http://nl.archive.ubuntu.com/ubuntu'
      - arches:
          - default
        uri: 'http://ports.ubuntu.com/ubuntu-ports'
  identity:
    hostname: ubuntu
    password: >-
      $6$h.zoLndLImptklKU$RQVTwlPvXno7Zw0f1NpTkoRemOZckpHx3TkMZDc5hC5pZJQoDFwUZPsJnm5bbhxTqmhwu6oDuP.bLH0qDtXON/
    realname: ubuntu
    username: ubuntu
  user-data:
    disable_root: false
  keyboard:
    layout: us
    toggle: null
    variant: ''
  locale: en_US
  ssh:
    allow-pw: true
    authorized-keys: []      
    install-server: false
  packages:
    - ubuntu-desktop-minimal # если вы хотите UI для рабочего стола
  late-commands:
    - cp /cdrom/nocloud/post_install.sh /target/opt/
    - curtin in-target --target=/target -- /opt/post_install.sh
  updates: security
  storage: 
    config: 
      - id: disk-sda
        type: disk
        ptable: gpt
        match:
          size: largest
        wipe: superblock
        preserve: false
        name: ''
        grub_device: false
      - id: partition-0
        type: partition
        device: disk-sda
        size: 512M
        wipe: superblock
        flag: boot
        number: 1
        preserve: false
        grub_device: true
      - id: format-0
        type: format
        fstype: fat32
        volume: partition-0
        preserve: false
      - id: partition-1
        type: partition
        device: disk-sda
        size: 1G
        wipe: superblock
        flag: ''
        number: 2
        preserve: false
        grub_device: false
      - id: format-1
        type: format
        fstype: ext4
        volume: partition-1
        preserve: false
      - id: partition-2
        type: partition
        device: disk-sda
        size: -1
        wipe: superblock
        flag: ''
        number: 3
        preserve: false
        grub_device: false
      - id: dm_crypt-0
        type: dm_crypt
        volume: partition-2
        key: ThisIsASecretKey
        preserve: false
      - id: lvm_volgroup-0
        type: lvm_volgroup
        name: ubuntu-vg
        devices:
          - dm_crypt-0
        preserve: false
      - id: lvm_partition-0
        type: lvm_partition
        name: ubuntu-lv
        volgroup: lvm_volgroup-0
        size: -1
        preserve: false
      - id: format-2
        type: format
        fstype: ext4
        volume: lvm_partition-0
        preserve: false
      - id: mount-2
        type: mount
        device: format-2
        path: /
      - id: mount-1
        type: mount
        device: format-1
        path: /boot
      - id: mount-0
        type: mount
        device: format-0
        path: /boot/efi
  system_upgrade:
    enabled: False
  error-commands:
    - tail -n 500 /var/log/syslog | grep -E 'subiquity/Error' -B 100

К вашему сведению: сейчас я разрабатываю универсальный user-data с несколькими разными профилями/вариациями. Прямо сейчас у меня есть проблемы с постоянными переменными окружения и late-command.

Вот пример моих поздних команд. Я просто создал расширенную конфигурацию при первом запуске после установки с payloaded post_install.sh, который, безусловно, удаляет строку в rc.local после запуска. Папка /addfiles была ранее добавлена в ISO.

  late-commands:
    - echo 'admin* ALL=(ALL) NOPASSWD:ALL' > /target/etc/sudoers.d/admin
    - cp /cdrom/server/addfiles/post-install.sh  /target/root/
    - cp /cdrom/server/addfiles/z.tar  /target/root/
    - curtin in-target --target=/target -- chmod +x /root/post-install.sh
    - curtin in-target --target=/target -- echo -e "#!/bin/bash -e\n/bin/bash /root/post-install.sh\nexit 0" > /target/etc/rc.local
    - curtin in-target --target=/target -- chmod 700 /etc/rc.local

Ответ или решение

Чтобы создать минимальную установку Ubuntu с помощью автоматической установки (autoinstall), вам нужно правильно настроить файл user-data. Для Ubuntu Server 20.04 LTS вы можете использовать определенные параметры, чтобы добиться минимальной инсталляции. Следующий пример конфигурации user-data поможет вам в этом.

Пример конфигурации user-data

#cloud-config
autoinstall:
  version: 1
  identity:
    hostname: ubuntu
    username: ubuntu
    password: >
      $6$h.zoLndLImptklKU$RQVTwlPvXno7Zw0f1NpTkoRemOZckpHx3TkMZDc5hC5pZJQoDFwUZPsJnm5bbhxTqmhwu6oDuP.bLH0qDtXON/
  keyboard:
    layout: us
  locale: en_US.UTF-8

  # Минимальная установка пакетов
  packages:
    - ubuntu-server-minimal

  # Установка источника обновлений
  apt:
    preserve_sources_list: false
    primary:
      - arches:
          - amd64
        uri: 'http://nl.archive.ubuntu.com/ubuntu'

  # Настройка диска и разделов
  storage:
    config:
      - id: disk-sda
        type: disk
        wipe: superblock
        ptable: gpt
        match:
          size: largest
      - id: partition-0
        type: partition
        device: disk-sda
        size: 512M
        flag: boot
      - id: format-0
        type: format
        fstype: ext4
        volume: partition-0
      - id: partition-1
        type: partition
        device: disk-sda
        size: -1
      - id: format-1
        type: format
        fstype: ext4
        volume: partition-1
      - id: mount-0
        type: mount
        device: format-0
        path: /boot
      - id: mount-1
        type: mount
        device: format-1
        path: /

  # Команды после установки для минимизации
  late-commands:
    - apt remove --purge -y snapd nano
    - apt autoremove -y

  # Обновления безопасности
  updates:
    security: true

Объяснение основных параметров

  1. packages: Мы указываем установку ubuntu-server-minimal, чтобы включить только необходимое для минимальной работы системы.

  2. apt: Устанавливаем основной сервер обновлений и отключаем хранение списка источников.

  3. storage: Настраиваем таблицу разметки и разделы на жестком диске. В данном примере используется GPT и два раздела: один для /boot и один для корневой системы /.

  4. late-commands: Используем команду для удаления дополнительных пакетов, таких как snapd, которые могут не понадобиться в минимальной установке. Здесь также вызывается команда apt autoremove, чтобы удалить неиспользуемые зависимости.

Завершение

С помощью данной конфигурации вы можете создать минимальную версию Ubuntu, которая будет содержать только необходимые для работы компоненты. Помните, что минимальная установка может варьироваться в зависимости от специфических нужд вашего проекта.

Этот пример послужит отправной точкой для создания вашей кастомизированной инсталляции Ubuntu Server 20.04 LTS с использованием autoinstall.

Оцените материал
Добавить комментарий

Капча загружается...