Le but de ce blogpost est de présenter des outils installateur Ubuntu différent et de décrire une méthode installation Ubuntu 22.04 (Jammy) pour bureau et serveur.

Écosystème installateur Ubuntu

Debian Installer (d-i)
Installateur classique, utilisé jusqu'au 18.04, obsolète sous 20.04.
Ubiquity
Installateur bureau graphique. L'auto install est disponible, basée sur d-i preseed. Lisez le manuel aussi. LiveCD peut être démarrer en utilisant nfsroot (documentation alternative). Il y a un nombre d'arguments ce qui peut être passé à l'installateur sur la ligne de commande kernel.
Ubuntu Desktop Installer
Installateur bureautique nouveau ce qui remplace Ubiquity. Le répo GitHub se trouve ici. Discussion sur Ubuntu Discourse au sujet du nouveau logiciel. Regardez aussi le fil Refreshing the Ubuntu Desktop Installer.
Subiquity
Installateur serveur front-end. Le répo GitHub se trouve ici.
Casper
C'est un initramfs hook pour démarrer des systèmes vives, préinstallés à partir de média lecteur seul. Voir Casper manuel. Ubiquity desktop et subiquity serveur installateurs dépends de cela.
Curtin
The curt installer écrit en Python. Subiquity emploie curtin en arrière plan.
Cloud-init
Configuration finale dans le système installé lors du premier démarrage. Subiquity configure utilisateur initial, mettre en place de clés autorisés dans le système cible à l'aide de cloud-init.

Serveur DHCP, TFTP, HTTP

Je suppose que vous avez un serveur DHCP, TFTP, HTTP fonctionnel.

Cet exemple montre comment configurer le serveur ISC DHCP pour démarrer une machine à l'aide d'un serveur TFTP.

allow booting;
allow bootp;
option arch code 93 = unsigned integer 16;
host ubuntu {
             hardware ethernet xx:xx:xx:xx:xx:xx;
             if option arch = 00:07 {
                     filename "boot/bootx64.efi";
             } else {
                     filename "boot/pxelinux.0";
             }
             next-server x.x.x.x;
             fixed-address x.x.x.x;
     }

Obtenez le fichier installateur ISO et copiez les fichier grub suivants dans le répertoire TFTP.

Jammy ISO:
/boot/fonts/unicode.pf2
/EFI/boot/bootx64.efi
/EFI/boot/grubx64.efi

Télécharger les paquets pxelinux et extraire les fichiers suivants dans le répertoire TFTP.

$ apt download pxelinux syslinux-common

pxelinux:
/usr/lib/PXELINUX/pxelinux.0

syslinux-common:
/usr/lib/syslinux/modules/bios/ldlinux.c32
/usr/lib/syslinux/modules/bios/libutil.c32
/usr/lib/syslinux/modules/bios/menu.c32

Vous pouvez organiser les fichier sur le serveur TFTP selon l'exemple suivant.

.
├── boot
│   ├── bootx64.efi
│   ├── grubx64.efi
│   ├── grub
│   │   ├── font.pf2
│   │   ├── grub.cfg
│   │   └── x86_64-efi
│   │       ├── command.lst
│   │       ├── crypto.lst
│   │       ├── fs.lst
│   │       └── terminal.lst
│   ├── jammy
│   │   ├── initrd
│   │   └── vmlinuz
│   ├── ldlinux.c32 -> syslinux/bios/ldlinux.c32
|   ├── libutil.c32 -> syslinux/bios/libutil.c32
|   ├── menu.c32 -> syslinux/bios/menu.c32
│   ├── pxelinux.cfg
│   │   └── default
│   ├── pxelinux.0
|   └── syslinux
|       └── bios
│           ├── ldlinux.c32
│           ├── libutil.c32
│           └── menu.c32
└── grub -> boot/grub

Exemple de configuration pour grub dans grub.cfg.

set timeout=30

loadfont unicode

set menu_color_normal=white/black
set menu_color_highlight=black/light-gray

menuentry "Install Ubuntu Jammy (22.04)" {
        set gfxpayload=keep
        linux   /boot/jammy/vmlinuz ip=dhcp cloud-config-url=/dev/null url=http://x.x.x.x/jammy-live-server-amd64.iso autoinstall ds="nocloud-net;s=http://x.x.x.x/jammy/" --- # Don't forget the slash at the end.
        initrd  /boot/jammy/initrd
}

Exemple de configuration dans pxelinux.cfg/default.

default menu.c32
menu title Ubuntu installer

label jammy
        menu label Install Ubuntu J^ammy (22.04)
        menu default
        kernel jammy/vmlinuz
        initrd jammy/initrd
        append ip=dhcp cloud-config-url=/dev/null url=http://x.x.x.x/jammy-live-server-amd64.iso autoinstall ds=nocloud-net;s=http://x.x.x.x/jammy/ # Don't forget the slash at the end.

prompt 0
timeout 300

Au moins deux fichiers doivent être placés sur le serveur web.

  • http://x.x.x.x/jammy/user-data contient laconfiguration autoinstaller, voir ci-dessus.
  • http://x.x.x.x/jammy/meta-data peut être vide, mais doit exister.

Installation automatique Ubuntu

Même Canonical annonce autoinstall comme programme d'installation pour les serveur, cela peut être utilisé pour des système serveurs et bureau aussi.

Deux différence importantes par rapport à Debian Installer (d-i):

  1. Format de configuration YAML.
  2. Quand une question n'est pas répondue dans le fichier de configuration, l'installateur essaye d'utiliser une valeur par défaut. Il arrêt seulement quand il n'y a pas de valeur par défaut.

Une méthode facile pour obtenir un bon fichier configuration autoinstall user-data est d'installer une machine à la main. Apres, copiez le fichier /var/log/installer/autoinstall-user-data vers le serveur web et personnalisez-le.

Les exemples suivants sont crées en utilisant des machines virtuelles QEMU:

  • 4 GiB de mémoire (le fichier ISO doivent être copier dans la mémoire au cours d'une installation TFTP)
  • Adapteur VGA graphique
  • Deux cartes réseau e1000
  • Deux disques

Paramètres noyeau Linux

  • ip=dhcp Linux essaie d'obtenir l'address IP par DHCP.
  • cloud-config-url=/dev/null Solution de contournement pour télécharger le support d'installation une seule fois, voir le document cloud-init kernel-cmdline.
  • url=http://x.x.x.x/jammy-live-server-amd64.iso Défine l'emplacement du support d'installation.
  • autoinstall Indique au programme d'installation de commencer le processus d'installation automatique.
  • ds=nocloud-net;s=http://x.x.x.x/jammy/ L'emplacemement de la configuration de l'installateur. Doit être une emplacemement de répertoire sur le serveur web, terminée par '/' et contenant les fichier user-data et meta-data.

Ces exemples de partitionnement sont préparés avec UEFI, voir BIOS boot disk layout si tu a un BIOS.

Installation minimal

#cloud-config
autoinstall:
  identity:
    hostname: jammy-minimal
    password: $6$gnqbMUzHhQzpDEw.$.cCNVVDsDfj5Feebh.5O4VbOmib7tyjmeI2ZsFP7VK2kWwgJFbfjvXo3chpeAqCgXWVIW9oNQ/Ag85PR0IsKD/
    username: ubuntu
  version: 1

Le mot de passe est ubuntu. Et cela peut être génerer en utilisant la commande suivante.

mkpasswd --method=sha-512 ubuntu

Bureau simple

#cloud-config
autoinstall:
  identity:
    hostname: jammy-desktop
    password: $6$5lpwCLsKLEzMkSJc$keOAhA6aO/5RocGThmhVA7LSNuW911Rx5HHXFEa75oGK20cEdAAgn14H5f5nGeq6QgcSyLPrWcg1.JvjXbhrN/
    realname: Ubuntu user
    username: ubuntu
  keyboard:
    layout: hu
    toggle: null
    variant: ''
  locale: hu_HU.UTF-8
  storage:
    config:
# Partition table
    - { ptable: gpt, path: /dev/vda, wipe: superblock, preserve: false, name: '', grub_device: false, type: disk, id: disk-vda }
# EFI boot partition
    - { device: disk-vda, size: 536870912, wipe: superblock, flag: boot, number: 1, preserve: false, grub_device: true, type: partition, id: partition-0 }
    - { fstype: fat32, volume: partition-0, preserve: false, type: format, id: format-0 }
# Linux boot partition
    - { device: disk-vda, size: 1073741824, wipe: superblock, flag: '', number: 2, preserve: false, grub_device: false, type: partition, id: partition-1 }
    - { fstype: ext4, volume: partition-1, preserve: false, type: format, id: format-1 }
# Partition for LVM, VG
    - { device: disk-vda, size: -1, wipe: superblock, flag: '', number: 3, preserve: false, grub_device: false, type: partition, id: partition-2 }
    - { name: ubuntu-vg, devices: [ partition-2 ], preserve: false, type: lvm_volgroup, id: lvm_volgroup-0 }
# LV for root
    - { name: ubuntu-lv, volgroup: lvm_volgroup-0, size: -1, wipe: superblock, preserve: false, type: lvm_partition, id: lvm_partition-0 }
    - { fstype: ext4, volume: lvm_partition-0, preserve: false, type: format, id: format-2 }
# Mount points
    - { path: /, device: format-2, type: mount, id: mount-2 }
    - { path: /boot, device: format-1, type: mount, id: mount-1 }
    - { path: /boot/efi, device: format-0, type: mount, id: mount-0 }
# Swapfile on root volume
    swap:
      swap: 1G
  late-commands:
  - 'echo "ubuntu ALL=(ALL) NOPASSWD:ALL" > /target/etc/sudoers.d/ubuntu-nopw'
  - chmod 440 /target/etc/sudoers.d/ubuntu-nopw
  - curtin in-target --target=/target -- sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT=""/GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"/' /etc/default/grub
  - curtin in-target --target=/target -- apt-get install -y ubuntu-desktop plymouth-theme-ubuntu-logo grub-gfxpayload-lists
  version: 1

La taille de la partition pour LVM et LV root est -1 qui dit au programme d'installation d'utiliser toute l'espace qui reste sur le disque. Une partition ou volume avec la taille size: -1 doit être le dernier dans la configuration. Dans l'exemple au dessus: l'installateur crée la dernière partition sur toute l'espace qui est disponible et crée le dernier volume logique sur toute l'espace qui est disponible dans le group de volume.

Bureau avec crypto LVM

#cloud-config
autoinstall:
  identity:
    hostname: jammy-desktop-crypt
    password: $6$5lpwCLsKLEzMkSJc$keOAhA6aO/5RocGThmhVA7LSNuW911Rx5HHXFEa75oGK20cEdAAgn14H5f5nGeq6QgcSyLPrWcg1.JvjXbhrN/
    realname: Ubuntu user
    username: ubuntu
  keyboard:
    layout: hu
    toggle: null
    variant: ''
  locale: hu_HU.UTF-8
  storage:
    config:
    - { ptable: gpt, path: /dev/vda, wipe: superblock, preserve: false, name: '', grub_device: false, type: disk, id: disk-vda }
    - { device: disk-vda, size: 536870912, wipe: superblock, flag: boot, number: 1, preserve: false, grub_device: true, type: partition, id: partition-0 }
    - { fstype: fat32, volume: partition-0, preserve: false, type: format, id: format-0 }
    - { device: disk-vda, size: 1073741824, wipe: superblock, flag: '', number: 2, preserve: false, grub_device: false, type: partition, id: partition-1 }
    - { fstype: ext4, volume: partition-1, preserve: false, type: format, id: format-1 }
    - { device: disk-vda, size: -1, wipe: superblock, flag: '', number: 3, preserve: false, grub_device: false, type: partition, id: partition-2 }
# DM crypt
    - { volume: partition-2, key: ubuntu, preserve: false, type: dm_crypt, id: dm_crypt-0 }
    - { name: ubuntu-vg, devices: [ dm_crypt-0 ], preserve: false, type: lvm_volgroup, id: lvm_volgroup-0 }
    - { name: ubuntu-lv, volgroup: lvm_volgroup-0, size: -1, wipe: superblock, preserve: false, type: lvm_partition, id: lvm_partition-0 }
    - { fstype: ext4, volume: lvm_partition-0, preserve: false, type: format, id: format-2 }
    - { path: /, device: format-2, type: mount, id: mount-2 }
    - { path: /boot, device: format-1, type: mount, id: mount-1 }
    - { path: /boot/efi, device: format-0, type: mount, id: mount-0 }
    swap:
      swap: 1G
  late-commands:
  - 'echo "ubuntu ALL=(ALL) NOPASSWD:ALL" > /target/etc/sudoers.d/ubuntu-nopw'
  - chmod 440 /target/etc/sudoers.d/ubuntu-nopw
  - curtin in-target --target=/target -- sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT=""/GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"/' /etc/default/grub
  - curtin in-target --target=/target -- apt-get install -y ubuntu-desktop plymouth-theme-ubuntu-logo grub-gfxpayload-lists
  version: 1

Le clé DM crypt est ubuntu au format texte clair.

Serveur simple

#cloud-config
autoinstall:
  identity:
    hostname: jammy-server
    password: $6$5lpwCLsKLEzMkSJc$keOAhA6aO/5RocGThmhVA7LSNuW911Rx5HHXFEa75oGK20cEdAAgn14H5f5nGeq6QgcSyLPrWcg1.JvjXbhrN/
    realname: Ubuntu user
    username: ubuntu
  keyboard:
    layout: hu
    toggle: null
    variant: ''
  locale: hu_HU.UTF-8
  ssh:
    allow-pw: false
    authorized-keys: [ '<SSH KEY>' ]
    install-server: true
  storage:
    config:
    - { ptable: gpt, path: /dev/vda, wipe: superblock, preserve: false, name: '', grub_device: false, type: disk, id: disk-vda }
    - { device: disk-vda, size: 536870912, wipe: superblock, flag: boot, number: 1, preserve: false, grub_device: true, type: partition, id: partition-0 }
    - { fstype: fat32, volume: partition-0, preserve: false, type: format, id: format-0 }
    - { device: disk-vda, size: 1073741824, wipe: superblock, flag: '', number: 2, preserve: false, grub_device: false, type: partition, id: partition-1 }
    - { fstype: ext4, volume: partition-1, preserve: false, type: format, id: format-1 }
    - { device: disk-vda, size: -1, wipe: superblock, flag: '', number: 3, preserve: false, grub_device: false, type: partition, id: partition-2 }
    - { name: ubuntu-vg, devices: [ partition-2 ], preserve: false, type: lvm_volgroup, id: lvm_volgroup-0 }
    - { name: ubuntu-lv, volgroup: lvm_volgroup-0, size: 10G, wipe: superblock, preserve: false, type: lvm_partition, id: lvm_partition-0 }
    - { fstype: ext4, volume: lvm_partition-0, preserve: false, type: format, id: format-2 }
    - { path: /, device: format-2, type: mount, id: mount-2 }
    - { path: /boot, device: format-1, type: mount, id: mount-1 }
    - { path: /boot/efi, device: format-0, type: mount, id: mount-0 }
# Swap LV
    - { name: swap, volgroup: lvm_volgroup-0, size: 1073741824B, wipe: superblock, preserve: false, type: lvm_partition, id: lvm_partition-1 }
    - { fstype: swap, volume: lvm_partition-1, preserve: false, type: format, id: format-3 }
    - { path: '', device: format-3, type: mount, id: mount-3 }
  late-commands:
  - 'echo "ubuntu ALL=(ALL) NOPASSWD:ALL" > /target/etc/sudoers.d/ubuntu-nopw'
  - chmod 440 /target/etc/sudoers.d/ubuntu-nopw
  version: 1

Une clé SSH peut être copier dans la machine toute récemment installée. Juste remplacez <SSH KEY> avec votre clé SSH publique (par exemple avec le sortie de cat ~/.ssh/id_rsa.pub). Authentification mot de passe SSH est interdit.

Cet exemple décrit le mis en oeuvre d'un LV au lieu d'une fichier d'échange sur le volume root.

Serveur avec RAID

#cloud-config
autoinstall:
  identity:
    hostname: jammy-server-raid
    password: $6$5lpwCLsKLEzMkSJc$keOAhA6aO/5RocGThmhVA7LSNuW911Rx5HHXFEa75oGK20cEdAAgn14H5f5nGeq6QgcSyLPrWcg1.JvjXbhrN/
    realname: Ubuntu user
    username: ubuntu
  keyboard:
    layout: hu
    toggle: null
    variant: ''
  locale: hu_HU.UTF-8
  ssh:
    allow-pw: false
    authorized-keys: [ '<SSH KEY>' ]
    install-server: true
  storage:
    config:
# Partition table of two disks
    - { ptable: gpt, path: /dev/vda, wipe: superblock-recursive, preserve: false, name: '', grub_device: false, type: disk, id: disk-vda }
    - { ptable: gpt, path: /dev/vdb, wipe: superblock-recursive, preserve: false, name: '', grub_device: false, type: disk, id: disk-vdb }
# Install GRUB on first disk
    - { device: disk-vda, size: 536870912, wipe: superblock, flag: boot, number: 1, preserve: false, grub_device: true, type: partition, id: partition-3 }
    - { fstype: fat32, volume: partition-3, preserve: false, type: format, id: format-2 }
# Install GRUB on second disk
    - { device: disk-vdb, size: 536870912, wipe: superblock, flag: boot, number: 1, preserve: false, grub_device: true, type: partition, id: partition-8 }
    - { fstype: fat32, volume: partition-8, preserve: false, type: format, id: format-5 }
    - { device: disk-vda, size: 1073741824, wipe: superblock, flag: '', number: 2, preserve: false, grub_device: false, type: partition, id: partition-9 }
    - { device: disk-vdb, size: 1073741824, wipe: superblock, flag: '', number: 2, preserve: false, grub_device: false, type: partition, id: partition-10 }
    - { device: disk-vda, size: -1, wipe: superblock, flag: '', number: 3, preserve: false, grub_device: false, type: partition, id: partition-11 }
    - { device: disk-vdb, size: -1, wipe: superblock, flag: '', number: 3, preserve: false, grub_device: false, type: partition, id: partition-12 }
# RAID1 for boot partition and root volume
    - { name: md0, raidlevel: raid1, devices: [ partition-10, partition-9 ], spare_devices: [], preserve: false, wipe: superblock, type: raid, id: raid-0 }
    - { name: md1, raidlevel: raid1, devices: [ partition-11, partition-12 ], spare_devices: [], preserve: false, wipe: superblock, type: raid, id: raid-1 }
# An ext4 boot filesystem on MD
    - { fstype: ext4, volume: raid-0, preserve: false, type: format, id: format-3 }
# LVM on MD
    - { name: vg0, devices: [ raid-1 ], preserve: false, type: lvm_volgroup, id: lvm_volgroup-0 }
    - { name: lv-0, volgroup: lvm_volgroup-0, size: 10737418240B, wipe: superblock, preserve: false, type: lvm_partition, id: lvm_partition-0 }
    - { fstype: ext4, volume: lvm_partition-0, preserve: false, type: format, id: format-4 }
    - { path: /, device: format-4, type: mount, id: mount-4 }
    - { path: /boot, device: format-3, type: mount, id: mount-3 }
# Install GRUB on both disks
    - { path: /boot/efi, device: format-2, type: mount, id: mount-2 }
    - { path: /boot/efi2, device: format-5, type: mount, id: mount-5 }
# Swap
    - { name: swap, volgroup: lvm_volgroup-0, size: 1073741824B, wipe: superblock, preserve: false, type: lvm_partition, id: lvm_partition-1 }
    - { fstype: swap, volume: lvm_partition-1, preserve: false, type: format, id: format-6 }
    - { path: '', device: format-6, type: mount, id: mount-6 }
  late-commands:
  - 'echo "ubuntu ALL=(ALL) NOPASSWD:ALL" > /target/etc/sudoers.d/ubuntu-nopw'
  - chmod 440 /target/etc/sudoers.d/ubuntu-nopw
  version: 1

GRUB est installé sur toutes les disques et les deux partitions EFI sont montés sous /boot.

Un MD RAID1 est configuré pour boot et un autre pour LVM.

Serveur avec cartes réseaux multiples

#cloud-config
autoinstall:
  identity:
    hostname: jammy-server-raid-bond
    password: $6$5lpwCLsKLEzMkSJc$keOAhA6aO/5RocGThmhVA7LSNuW911Rx5HHXFEa75oGK20cEdAAgn14H5f5nGeq6QgcSyLPrWcg1.JvjXbhrN/
    realname: Ubuntu user
    username: ubuntu
  keyboard:
    layout: hu
    toggle: null
    variant: ''
  locale: hu_HU.UTF-8
  network:
    bonds:
      bond0:
        addresses:
        - 192.168.1.5/24
        gateway4: 192.168.1.1
        interfaces:
        - ens10
        - ens3
        nameservers:
          addresses:
          - 192.168.1.2
          search:
          - example.com
        parameters:
          mode: balance-rr
    ethernets:
      ens10: {}
      ens3: {}
    version: 2
  ssh:
    allow-pw: false
    authorized-keys: [ '<SSH KEY>' ]
    install-server: true
  storage:
    config:
    - { ptable: gpt, path: /dev/vda, wipe: superblock-recursive, preserve: false, name: '', grub_device: false, type: disk, id: disk-vda }
    - { ptable: gpt, path: /dev/vdb, wipe: superblock-recursive, preserve: false, name: '', grub_device: false, type: disk, id: disk-vdb }
    - { device: disk-vda, size: 536870912, wipe: superblock, flag: boot, number: 1, preserve: false, grub_device: true, type: partition, id: partition-3 }
    - { fstype: fat32, volume: partition-3, preserve: false, type: format, id: format-2 }
    - { device: disk-vdb, size: 536870912, wipe: superblock, flag: boot, number: 1, preserve: false, grub_device: true, type: partition, id: partition-8 }
    - { fstype: fat32, volume: partition-8, preserve: false, type: format, id: format-5 }
    - { device: disk-vda, size: 1073741824, wipe: superblock, flag: '', number: 2, preserve: false, grub_device: false, type: partition, id: partition-9 }
    - { device: disk-vdb, size: 1073741824, wipe: superblock, flag: '', number: 2, preserve: false, grub_device: false, type: partition, id: partition-10 }
    - { device: disk-vda, size: -1, wipe: superblock, flag: '', number: 3, preserve: false, grub_device: false, type: partition, id: partition-11 }
    - { device: disk-vdb, size: -1, wipe: superblock, flag: '', number: 3, preserve: false, grub_device: false, type: partition, id: partition-12 }
    - { name: md0, raidlevel: raid1, devices: [ partition-10, partition-9 ], spare_devices: [], preserve: false, wipe: superblock, type: raid, id: raid-0 }
    - { name: md1, raidlevel: raid1, devices: [ partition-11, partition-12 ], spare_devices: [], preserve: false, wipe: superblock, type: raid, id: raid-1 }
    - { fstype: ext4, volume: raid-0, preserve: false, type: format, id: format-3 }
    - { name: vg0, devices: [ raid-1 ], preserve: false, type: lvm_volgroup, id: lvm_volgroup-0 }
    - { name: lv-0, volgroup: lvm_volgroup-0, size: 10737418240B, wipe: superblock, preserve: false, type: lvm_partition, id: lvm_partition-0 }
    - { fstype: ext4, volume: lvm_partition-0, preserve: false, type: format, id: format-4 }
    - { path: /, device: format-4, type: mount, id: mount-4 }
    - { path: /boot, device: format-3, type: mount, id: mount-3 }
    - { path: /boot/efi, device: format-2, type: mount, id: mount-2 }
    - { path: /boot/efi2, device: format-5, type: mount, id: mount-5 }
    - { name: swap, volgroup: lvm_volgroup-0, size: 1073741824B, wipe: superblock, preserve: false, type: lvm_partition, id: lvm_partition-1 }
    - { fstype: swap, volume: lvm_partition-1, preserve: false, type: format, id: format-6 }
    - { path: '', device: format-6, type: mount, id: mount-6 }
  late-commands:
  - 'echo "ubuntu ALL=(ALL) NOPASSWD:ALL" > /target/etc/sudoers.d/ubuntu-nopw'
  - chmod 440 /target/etc/sudoers.d/ubuntu-nopw
  version: 1

Une configuration complète netplan se trouve dans cet exemple autoinstall avec deux cartes réseaux regroupés (bond).

BIOS boot disk layout

La disposition de partitionnement doit être changée quand le micrologiciel du système est BIOS. Le type reste GPT, mais la première partition est une partition spéciale BIOS boot.

storage:
  config:
# Install GRUB in MBR
  - { ptable: gpt, path: /dev/vda, wipe: superblock, preserve: false, name: '', grub_device: true, type: disk, id: disk-vda }
# BIOS boot partition
  - { device: disk-vda, size: 1048576, flag: bios_grub, number: 1, preserve: false, grub_device: false, type: partition, id: partition-0 }
# boot
  - { device: disk-vda, size: 1073741824, wipe: superblock, flag: '', number: 2, preserve: false, grub_device: false, type: partition, id: partition-1 }
  - { fstype: ext4, volume: partition-1, preserve: false, type: format, id: format-1 }
  - { device: disk-vda, size: -1, wipe: superblock, flag: '', number: 3, preserve: false, grub_device: false, type: partition, id: partition-2 }
  - { name: ubuntu-vg, devices: [ partition-2 ], preserve: false, type: lvm_volgroup, id: lvm_volgroup-0 }
  - { name: ubuntu-lv, volgroup: lvm_volgroup-0, size: -1, wipe: superblock, preserve: false, type: lvm_partition, id: lvm_partition-0 }
  - { fstype: ext4, volume: lvm_partition-0, preserve: false, type: format, id: format-2 }
  - { path: /, device: format-2, type: mount, id: mount-2 }
  - { path: /boot, device: format-1, type: mount, id: mount-1 }

Accès SSH pendant l'installation

#cloud-config
chpasswd:
  list:
    - installer:$6$gnqbMUzHhQzpDEw.$.cCNVVDsDfj5Feebh.5O4VbOmib7tyjmeI2ZsFP7VK2kWwgJFbfjvXo3chpeAqCgXWVIW9oNQ/Ag85PR0IsKD/
ssh_authorized_keys:
  - <SSH KEY>
autoinstall:
  identity:
    hostname: jammy-minimal
    password: $6$gnqbMUzHhQzpDEw.$.cCNVVDsDfj5Feebh.5O4VbOmib7tyjmeI2ZsFP7VK2kWwgJFbfjvXo3chpeAqCgXWVIW9oNQ/Ag85PR0IsKD/
    username: ubuntu
  version: 1

Les modules cloud-init chpasswd et ssh_authorized_keys configure l'utilisateur installer. Attention, chpasswd, ssh_authorized_keys et autoinstall sont sur le même niveau. Mot de passe est ubuntu.

Autres fonctionnalités intéressantes

  • early-commands: une liste de commandes shell à appeler avant de rechercher des périphériques de bloc et de réseau. La configuration autoinstall se trouve à /autoinstall.yaml et cela est relue après que les commandes early-commands sont lancés.
  • late-commands: rendre possible l'exécution de commandes dans le système cible (installé) à l'aide de la syntaxe curtin in-target --target=/target -- <SHELL COMMAND>.
  • error-commands: une liste de commandes shell à exécuter après l'échec du processus d'installation. Le système cible est disponible sous /target (si c'est disponible) et journeaux sont disponible sous /var/log/installer.
  • reporting: le programme d'installation peut être configuré pour envoyer des informations de progression à la console locale et série, rsyslog et même à un webhook.

OpenStack Ussuri Hyper-V 2019 compute

Integrer OpenStack Ussuri et un noeud individuel Hyper-V 2019 Server.

Installer Ubuntu sur Acer Aspire notebooks

Installer Ubuntu sur des portables Acer Aspire peut être problèmatique mais pas impossible.

Remplacer la batterie de l'onduleur Eaton 5P 1150 et re-flasher le micrologiciel

J'ai du de re-flasher le micrologiciel de mon onduleur Eaton 5P 1150 après le remplacement des batteries.

Outils de configuration Open vSwitch et réseau sous Ubuntu 18.04: netplan, ifupdown, systemd-networkd

Mettre en marche configuration IP statique, serveur DNS et Open vSwitch sous Ubuntu 18.04: netplan, ifupdown, systemd-networkd.

Support série NUT sur OpenWrt

Utiliser un onduleur équipé d'une porte série avec NUT et OpenWrt.

Désactiver Intel Hyper-Threading sous Linux

Désactiver Intel Hyper-Threading sous Linux à l'aide de logiciel, pas à l'aide de BIOS/UEFI.

Migration de BIND/OpenDNSSEC vers PowerDNS avec DNSSEC

Migration de BIND et OpenDNSSEC vers PowerDNS 4 avec DNSSEC

Installation d'Altera Quartus II 14.0 et ModelSim sous Ubuntu Linux 14.10

Installation d'Altera Quartus II 14.0 et la configuration du ModelSim Altera Edition sous le système Ubuntu Linux 14.10.

Programmation d'un FPGA distant à travers un tunnel SSH avec Altera Quartus II

Programmation JTAG d'un FPGA sur le réseau, connecté à un hôte distant par Altera USB Blaster, à travers un tunnel SSH avec Quartus II.