解锁Ubuntu高效部署!自动安装配置文件YAML全解析

admin 2025年5月14日10:07:37评论1 views字数 20212阅读67分22秒阅读模式

我们之前介绍了两种Ubuntu系统的安装方式,分别对应桌面版准备搞OpenStack了,先装一台最新的Ubuntu 23.10和服务器版Ubuntu 22.04 LTS服务器版本安装演示。但对于有些用户,因为技术问题,并不能独立快速完成Ubuntu系统的部署,那有没有办法制作一个能够快速安装的系统镜像,无需人工干预,让用户插上U盘就能自动完成安装呢?

答案是肯定的。

在数字化转型的浪潮下,企业服务器规模呈指数级增长,云计算与边缘计算场景日益复杂。传统手动安装系统的方式,不仅耗时耗力,还容易因人为失误导致配置偏差,成为运维团队的一大痛点。Ubuntu系统自动安装(Autoinstall)应运而生,通过声明式的YAML配置文件,将系统部署从“手工操作”升级为“代码驱动”,为以下场景提供高效解决方案:

1、批量服务器部署:快速搭建数十台至上千台服务器的标准化环境,适用于电商大促、游戏开服等弹性需求。

2、云环境集成:无缝对接AWS、Azure等云平台,实现虚拟机集群的分钟级扩容与灾备切换。

3、物联网设备管理:为分散的终端设备提供统一系统镜像,确保固件版本与安全策略的一致性。

核心优势直击运维瓶颈:

1、效率提升:从数小时/台缩短至分钟级完成安装,释放人力资源。

2、配置标准化:通过版本控制的YAML文件杜绝“环境差异”,保障开发、测试、生产环境的一致性。

3、灵活扩展性:支持LUKS加密、定制分区、驱动预装等高级功能,满足企业级安全与性能需求。

需要注意:自动安装文件使用YAML格式,对缩进格式要求极高。

顶级是一个名为autoinstall的键,其中包含本文档中描述的键的映射。版本1中忽略了无法识别的键,但它们可能在未来的版本中导致致命的验证错误。

以下是一个最小自动安装配置的示例:

autoinstall:  version: 1  identity:   ...

顶级是autoinstall关键字。它包含一个版本部分和一个(不完整的)identity部分,下面将对此进行更详细的解释。autoinstall级别的任何其他键都会在运行时导致自动安装验证错误。

注意:这种行为最早是在24.04(Noble)期间引入的。在24.04之前构建的任何ISO上,您需要刷新安装程序以查看此行为。

从技术上讲,除了一种情况外,在所有情况下,顶级autoinstall关键字都是绝对不必要的。仅当通过云配置提供自动安装时,才需要此关键字。为了向后兼容,这种格式仍然支持非基于云配置的交付方法;然而,强烈建议使用带有顶级autoinstall关键字的格式,因为这种格式中的错误是常见的混淆来源。

架构

自动安装配置在使用之前会根据JSON模式进行验证(https://canonical-subiquity.readthedocs-hosted.com/en/latest/reference/autoinstall-schema.html)。

命令列表

几个配置键是要执行的命令列表。每个命令可以是字符串(在这种情况下,它是通过sh -c执行的),也可以是列表,在这种情况中,它是直接执行的。任何以非零返回码退出的命令都被视为错误并中止安装(错误命令除外,此时它将被忽略)。

顶级键

以下键可用于配置安装的各个方面。如果提供了全局autoinstall键,则必须在其下方提供所有“顶级键”,“顶级”是指此子级别。下面的例子演示了这种结构。

警告:在版本1中,当遇到无法识别的键时,Subiquity会发出警告。在以后的版本中,它会导致致命的验证错误,安装会停止。

version

类型:integer整数

默认值:无默认值

面向未来的配置文件版本字段。目前,此处必须为1。

interactive-sections

类型字符串列表

默认值:[]

仍在用户界面(user interface,UI)中显示的配置键列表。例如:

autoinstall:  version: 1  interactive-sections:    - network  identity:    username: ubuntu    password: $crypted_pass

此示例在网络屏幕上停止,并允许用户更改默认值。如果为交互部分提供了值,则将其用作默认值。

您可以使用特殊的节名*来表示安装程序应该问所有常见的问题——在这种情况下,autoinstall.yaml文件是一个autoinstall文件。它只是提供了一种更改UI默认值的方法。

并非所有配置键都与UI中的屏幕相对应。本文档指示给定部分是否可以交互。

如果有任何交互式部分,则忽略reporting键。

early-commands

类型:命令列表

默认值:无命令

是否可以交互:

安装程序启动后立即调用的shell命令列表,特别是在探测存储和网络设备之前。autoinstall配置可以在/autoinstall.yaml上找到(无论它是如何提供的),在early-commands运行后,文件会被重新读取,以便在必要时更改配置。

early commands示例:

autoinstall:  # 在开始之前暂停安装,以便手动检查/修改实时系统。  # 通过创建“/run/finish-early”文件来解除暂停。  early-commands:    - while [ ! -f /run/finish-early ]; do sleep 1; doneautoinstall:  # 将当前的自动安装配置替换为受信任服务器提供的配置  early-commands:    - wget -O /autoinstall.yaml $TRUSTED_SERVER_URL

locale

类型:string字符串

默认值:en_US.UTF-8

是否可以交互:

为已安装的系统配置的区域设置。

locale设置示例:

autoinstall:  # 默认行为  locale: "en_US.UTF-8"autoinstall:  # 希腊语地区  locale: "el_GR"

refresh-installer

类型:映射

默认值:见下文

是否可以交互:

控制安装程序在继续之前是否更新到给定频道中可用的新版本。

映射包含以下键值:

update

类型:boolean布尔值

默认值:false

控制系统是否更新。

channel

类型:string字符串

默认值"stable/ubuntu-$REL"

检查更新的频道。

示例:

autoinstall: # 刷新到从“main”子分支构建的最新快照 refresh-installer:   update: true   channel: latest/edgeautoinstall: # 刷新至最新的测试版 refresh-installer:   update: true   channel: latest/beta

keyboard

类型:映射,见下文

默认值:US English keyboard

是否可以交互:

任何连接键盘的布局。映射键对应于/etc/default/keyboard配置文件中的设置。有关更多详细信息,请参阅keyboard(5)手册页(https://manpages.ubuntu.com/manpages/noble/en/man5/keyboard.5.html)。

映射包含以下键值:

layout

类型:string字符串

默认值:"us"

对应于XKBLAYOUT设置。

variant

类型:string字符串

默认值:""

对应于XKBVARIANT设置。

toggle

类型:string字符串或null

默认值:null

对应于XKBOPTIONS设置中grp:选项的值。可接受的值是(安装程序不验证这些值):

caps_toggletogglerctrl_togglershift_togglerwin_togglemenu_togglealt_shift_togglectrl_shift_togglectrl_alt_togglealt_caps_togglelctrl_lshift_togglelalt_togglelctrl_togglelshift_togglelwin_togglesclk_toggle

警告:由于一个错误,20.04 GA发布的Subiquity版本不接受此字段为null。

keyboard示例:

keyboard示例:autoinstall:  # default behavior  keyboard:    layout: us    variant: ""    toggle: nullautoinstall:  # 使用Alt和Shift在默认US键盘和Greek (simple)之间切换  keyboard:    layout: "us,gr"    variant: ",simple"    toggle: alt_shift_toggle

source

类型:映射,见下文

默认值:见下文

是否可以交互:

search_drivers

类型:boolean布尔值

默认值:true(大部分情况,见下文)

安装程序是否搜索可用的第三方驱动程序。当设置为false时,它将禁用drivers屏幕和部分。

默认情况下,大多数安装都是true,当选择“core boot核心引导”或“enhanced secure boot增强型安全引导”方法时(当前无法安装第三方驱动程序),则为false。

id

类型:string字符串

默认值:安装源中列出的默认值

要安装的源的标识符(例如,ubuntu-server-minimal)。要使用的正确ID特定于给定的安装ISO。由于此ID可能会随时间而变化,因此查找此信息的规范位置是安装ISO本身,在casper/install-sources.yaml文件中,要使用的值是id。

当前键值:

Ubuntu Server:minimal: ubuntu-server-minimalstandard (default): ubuntu-serverUbuntu Desktop:minimal (default): ubuntu-desktop-minimalstandard: ubuntu-desktopUbuntu Budgie:minimal: ubuntu-budgie-desktop-minimalstandard (default): ubuntu-budgie-desktopUbuntu Cinnamon:minimal: ubuntucinnamon-desktop-minimalstandard (default): ubuntucinnamon-desktopEdubuntu:minimal: edubuntu-desktop-minimalstandard (default): edubuntu-desktopUbuntu Kylin:minimal: ubuntukylin-desktop-minimalstandard (default): ubuntukylin-desktopUbuntu MATE:minimal: ubuntu-mate-desktop-minimalstandard (default): ubuntu-mate-desktopUbuntu Studio:standard (default): ubuntustudio-desktopXubuntu:full ISO:minimal: xubuntu-desktop-minimalstandard (default): xubuntu-desktopminimal ISO:minimal (default): xubuntu-desktop-minimal

source示例:

autoinstall:  # default behavior  source:    search_drivers: true    id: <the installation source marked as default in install-sources.yaml>autoinstall:  # 在Ubuntu Server ISO上,使用最小源代码进行安装  source:    id: ubuntu-server-minimalautoinstall:  # 在Ubuntu桌面ISO上,使用标准源代码进行安装  source:    id: ubuntu-desktop

network

类型:Netplan格式映射,见下文

默认值:在名为eth*或en*的接口上使能DHCP

是否可以交互:

Netplan格式的网络配置(https://netplan.io/reference)。这不仅适用于安装过程,也适用于已安装的系统。默认情况下是解释安装介质的配置,该介质在名称与eth*或en*匹配的任何接口上运行DHCPv4,但随后禁用任何未接收到IP地址的接口。

例如,要在特定网络接口上运行DHCPv6:

autoinstall:  network:    version2    ethernets:      enp0s31f6:        dhcp6true

请注意,在Subiquity的20.04 GA版本中,行为略有不同,需要您使用额外的network:键值编写此代码:

autoinstall:  network:    network:      version2      ethernets:        enp0s31f6:          dhcp6true

20.04之后的版本也支持此语法(为了兼容性)。使用较新版本时,请使用常规语法。

proxy

类型:URL或null

默认值:无代理

是否可以交互:

在安装期间以及在目标系统中为apt和snapd配置的代理。当前运行geoip查询时,此设置不受支持。

示例:

autoinstall:  proxyhttp://172.16.90.1:3128

apt

类型:映射

默认值:见下文

是否可以交互:

APT配置,在安装期间和启动到目标系统后都使用。

本节历来使用与curtin相同的格式,该格式记录在curtin文档的APT Source章节(https://curtin.readthedocs.io/en/latest/topics/apt_source.html)。尽管如此,还是引入了与curtin支持的格式的一些关键差异:

Subiquity支持primary章节的另一种格式,允许配置候选主镜像列表。在安装过程中,Subiquity会自动测试指定的镜像,并选择第一个可用的镜像。仅当primary部分被包裹在mirror-selection部分中时,才会激活此新行为。

fallback键控制Subiquity在没有主镜像可用时的操作。

geoip键控制是否执行基于IP的地理定位,以确定正确的国家镜像。

所有其他部分的行为如curtin中所定义。有关这些部分的使用示例,请参阅curtin文档(https://curtin.readthedocs.io/en/latest/topics/apt_source.html#common-snippets)及其示例apt配置(https://git.launchpad.net/curtin/tree/examples/apt-source.yaml),例如如何使用sources部分添加PPA。

Subiquity中的默认apt配置相当于:

autoinstall:  apt:    preserve_sources_list: false    mirror-selection:      primary:        - country-mirror        - uri: "http://archive.ubuntu.com/ubuntu"          arches: [i386, amd64]        - uri: "http://ports.ubuntu.com/ubuntu-ports"          arches: [s390x, arm64, armhf, powerpc, ppc64el, riscv64]    fallback: abort    geoip: true

mirror-selection

如果primary部分包含在mirror-selection部分中,则启用自动镜像选择。这是新安装中的默认设置。

primary(放置在镜像选择部分内时)

类型:自定义,见下文

在新格式中,primary部分需要一个镜像列表,可以用两种不同的方式表示:

1、指定的country-mirror键值

2、具有以下键的映射:

uri(必选):要使用的镜像的uri,例如,http://fr.archive.ubuntu.com/ubuntu。

archs(可选):镜像支持的架构列表。默认情况下,此列表包含当前的CPU架构。

存档镜像的URI不必是国家镜像,尽管它可能是最方便的,并且可以采用任何有效Ubuntu镜像的URL。可以在Launchpad上找到所有已注册存档镜像的列表(https://launchpad.net/ubuntu/+archivemirrors)。

示例:

# 使用第一个可用的自定义镜像。不要局限于特定的架构。autoinstall:  apt:    mirror-selection:      primary:        - uri: "http://mirror1.internal/ubuntu"        - uri: "http://mirror2.internal/ubuntu"# 为amd64使用一个镜像,为i386使用另一个镜像。autoinstall:  apt:    mirror-selection:      primary:        - uri: "http://jp.archive.ubuntu.com/ubuntu"          arches: [amd64]        - uri: "http://tw.archive.ubuntu.com/ubuntu"          arches: [i386]

fallback

类型:string字符串(枚举)

默认值:offline-install

控制当没有主镜像可用时Subiquity的操作。支持的值包括:

abort:中止安装

offline-install:还原为脱机安装

continue-anyway:仍尝试安装系统(不建议;安装失败)

示例:

# 仅从主存档安装,如果镜像验证失败,则中止安装。autoinstall:  apt:    mirror-selection:      primary:        - uri: "http://archive.ubuntu.com/ubuntu"    fallback: abort# 仅从德国国家镜像安装,如果镜像验证失败,则继续进行脱机安装。autoinstall:  apt:    mirror-selection:      primary:        - uri: "http://de.archive.ubuntu.com/ubuntu"    fallback: offline-install

geoip

类型:boolean布尔值

默认值:true

如果geoip设置为true,并且其中一个候选主镜像具有特殊值country-mirror,则会向https://geoip.ubuntu.com/lookup发出请求。然后,Subiquity将镜像URI设置为http://CC.archive.ubuntu.com/ubuntu,其中CC是查找返回的国家代码。如果此部分不是交互式的,则请求将在10秒后过期。

如果使用传统行为(即没有mirror-selection),如果要使用的镜像是默认镜像,则会发出地理定位请求,并且其URI会被正确的国家镜像URI替换。

示例:

# 首先使用自动确定的国家/地区镜像,然后使用显式备份镜像。autoinstall:  apt:    mirror-selection:      primary:        - country-mirror        - uri: http://dk.archive.ubuntu.com/ubuntu    geoip: true# 禁用自动国家/地区镜像检测(即仅使用http://archive.ubuntu.com/ubuntu)autoinstall:  apt:    geoip: false

storage

类型:映射,见下文

默认设置:在单磁盘系统上使用lvm布局;多磁盘系统没有默认设置

是否可以交互:

存储配置是一个复杂的主题,自动安装文件中所需配置的描述也可能很复杂。安装程序支持“layouts”;表达常见配置的简单方法。

支持的layouts

在撰写本文时,支持的三种布局是lvm、direct和zfs。

autoinstall:  storage:    layout:      name: lvm  storage:    layout:      name: direct  storage:    layout:      name: zfs

默认情况下,这些布局将安装到系统中最大的磁盘上,但您可以提供匹配规范(见下文)来指示使用哪个磁盘:

autoinstall:  storage:    layout:      name: lvm      match:        serial: CT*  storage:    layout:      name: direct      match:        ssd: true

注意:匹配规范–使用match: {}来匹配任意磁盘。

默认情况下(s390x除外),将使用GUID分区表(GUID Partition Table,GPT)对匹配的磁盘进行分区。但您可以特别请求MSDOS(又名.MBR)分区表:

autoinstall:  storage:    layout:      name: direct      ptable: msdos

使用lvm布局时,可以通过提供密码来启用LUKS加密。

autoinstall:  storage:    layout:      name: lvm      password: LUKS_PASSPHRASE

默认情况下使用lvm布局。

此外,通过将hybrid布局的encrypted设置为yes,可以启用TPM支持的加密。

autoinstall:  storage:    layout:      name: hybrid      encrypted: yes

Sizing-policy

默认情况下,lvm布局试图为快照和进一步扩展留出空间。可以提供sizing-policy键值来控制此行为。

类型:string字符串(枚举)

默认值:scaled

支持的值包括:

scaled:根据卷组(volume group,VG)的可用空间调整分配给根逻辑卷(logical volume,LV)的空间。

all:将所有剩余的VG空间分配给根LV。

缩放系统使用以下规则:

小于10 GiB:将所有剩余空间用于根文件系统

10-20 GiB:10 GiB用于根文件系统

20-200 GiB之间:将剩余空间的一半用于根文件系统

大于200 GiB:100 GiB用于根文件系统

没有大小缩放和密码的示例:

autoinstall:  storage:    layout:      name: lvm      sizing-policy: all      password: LUKS_PASSPHRASE

Reset Partition

reset-partition用于创建重置分区,这是一个包含安装程序映像全部内容的FAT32文件系统,这样用户就可以在不使用安装介质的情况下从GRUB或EFI启动安装程序。此选项对于OEM系统配置非常有用。

默认情况下,重置分区的大小大约是安装介质所用文件系统大小的1.1倍。

启用重置分区的示例:

autoinstall:  storage:    layout:      name: direct      reset-partitiontrue

重置分区的大小也可以固定为指定大小。这是一个将重置分区固定配置为12 GiB的示例:

autoinstall:  storage:    layout:      name: direct      reset-partition: 12G

安装程序还可以在不安装系统的情况下安装重置分区。为此,请将reset-partition-only设置为true:

autoinstall:  storage:    layout:      name: direct      reset-partitiontrue      reset-partition-onlytrue

基于操作的配置

为了获得完全的灵活性,安装程序允许使用curtin支持的语法的超集进行存储配置,如curtin文档的存储部分所述(https://curtin.readthedocs.io/en/latest/topics/storage.html)。

如果使用layout功能配置磁盘,则不使用config部分。

操作列表可以添加到config键下,curtin配置项grub和swap也可以包含在这里。

storage部分示例:

autoinstall:  storage:    swap:      size: 0    config:      - type: disk        id: disk0        serial: ADATA_SX8200PNP_XXXXXXXXXXX      - type: partition        ...

curtin语法的扩展允许磁盘选择、分区或调整逻辑卷大小。

Disk选择扩展选项

Curtin廷支持通过序列号(例如Crucial_CT512MX100SSD1_14250C57FECE)或路径(例如/dev/sdc)识别磁盘,服务器安装程序也支持这一点。安装程序还支持磁盘操作上的“匹配规范”,这提供了更灵活的匹配。

存储配置中的操作按照它们在自动安装文件中的顺序进行处理。任何磁盘操作都会分配一个匹配的磁盘——如果有多个磁盘,则从未分配的磁盘集中任意选择,如果没有未分配的匹配磁盘,则会导致安装失败。

匹配规范支持以下键值:

model:value:匹配udev中ID_MODEL=value的磁盘,支持globbing

vendor:value:匹配udev中ID_VENDOR=value的磁盘,支持globbing

path:value:根据路径(例如/dev/sdc)匹配磁盘,支持globbing(全局定位支持与直接在磁盘操作中指定path:value不同)

id_path:value:匹配udev中ID_PATH=value的磁盘,支持globbing

devpath:value:匹配udev中DEVPATH=value的磁盘,支持globbing

serial:value:匹配udev中ID_SERIAL=value的磁盘,支持globbing(全局定位支持与直接在磁盘操作中指定serial:value不同)

ssd:true|false:匹配是否为SSD的磁盘(与机械磁盘相反)

size:largest|smallest:如果有多个匹配项,则取最大或最小的磁盘,而不是任意一个(20.06.1版本中增加支持smallest)

一种特殊的键值是install-media:true,它获取加载安装程序的磁盘(ssd和size选择器从不返回此磁盘)。如果安装到安装介质上,请注意不要覆盖安装程序本身。

例如,要匹配任意磁盘:

type: disk  id: disk0

要匹配最大的SSD:

type: disk  id: big-fast-disk  match:    ssd: true    size: largest

要匹配Seagate硬盘:

type: disk  id: data-disk  match:    model: Seagate

自第24.08.1子项起,匹配规范可以在有序列表中指定,并将使用与一个或多个未使用磁盘匹配的第一个匹配规范:

# 首先尝试按序列匹配,然后按路径匹配type: disk  id: data-disk  match:    - serial: Foodisk_1TB_ABC123_1    - path: /dev/nvme0n1

Partition逻辑卷扩展选项

在curtin中,分区或逻辑卷的大小指定为字节数。自动安装配置更灵活:

您可以使用安装程序UI中支持的1G、512M语法指定大小。

您可以将大小指定为包含磁盘(或RAID)的百分比,例如50%。

对于为特定设备指定的最后一个分区,您可以将大小指定为-1,以表示该分区应填充剩余空间。

type: partition  id: boot-partition  device: root-disk  size: 10%type: partition  id: root-partition  size: 20Gtype: partition  id: data-partition  device: root-disk  size: -1

identity

类型:映射,见下文

默认值:无默认值

是否可以交互:

为系统配置初始用户。这是必须存在的唯一配置键(除非存在用户数据部分,在这种情况下,它是可选的)。

一个可以包含键的映射,所有键都取以下字符串值:

realname

用户的真实姓名。此字段是可选的。

username

要创建的用户名。

hostname

系统的主机名。

password

新用户的加密密码。即使配置了SSH访问,也要求与sudo一起使用。

加密的密码字符串必须符合passwd命令的要求。有关详细信息,请参阅passwd(1)手册页(https://manpages.ubuntu.com/manpages/noble/en/man1/passwd.1.html)。将密码哈希值用引号包含,以确保正确处理任何特殊字符。

有几个工具可以生成加密密码,例如whois包中的mkpasswd或openssl passwd。

示例:

autoinstall:  identity:    realname: 'Ubuntu User'    username: ubuntu    password: '$6$wdAcoXrU039hKYPd$508Qvbe7ObUnxoj15DRCkzC3qO7edjH0VV7BPNRDYK4QR8ofJaEEF2heacn0QgD.f8pO8SNp83XNdWG6tocBM1'    hostname: ubuntu

active-directory

类型:映射,见下文

默认值:无默认值

是否可以交互:

接受加入Active Directory域中的目标系统所需的数据。

一个可以包含键的映射,所有键都取以下字符串值:

admin-name

具有执行加入操作权限的域帐户名。在运行时请求帐户密码。

domain-name

要加入的Active Directory域。

示例:

autoinstall:  active-directory:    # 以用户“$ubuntu”的身份加入Active Directory域    admin-name: $ubuntu    domain-name: ad.ubuntu.com

ubuntu-pro

类型:映射,见下文

默认值:见下文

是否可以交互:

token

类型:string字符串

默认值:no token

附加到现有Ubuntu Pro订阅的合同令牌。

示例:

autoinstall:  ubuntu-pro:    # 使用合约令牌启用Ubuntu Pro    # 请注意,下面的示例是无效的合约令牌。    token: C1NWcZTHLteJXGVMM6YhvHDpGrhyy7

ssh

类型:映射,见下文

默认值:见下文

是否可以交互:

为已安装的系统配置SSH。可以包含以下键的映射:

install-server

类型:boolean布尔值

默认值:false

是否在目标系统中安装OpenSSH服务器。请注意,桌面安装ISO不包括openssh-server,因此桌面安装需要Ubuntu存档访问权限才能成功安装服务器。

authorized-keys

类型:字符串列表

默认值:[]

要安装在初始用户帐户中的SSH公钥列表。

allow-pw

类型:boolean布尔值

默认值:如果authorized_keys为空,则为true,否则为false

ssh示例:

autoinstall:  # default behavior  ssh:    install-server: false    authorized-keys: []    allow-pw: trueautoinstall:  # 需要openssh-server时的推荐配置  ssh:    install-server: true    authorized-keys:      # 替换为ssh-keygen或类似工具生成的公钥内容      - ssh-ed25519 AAAAC3NzaC..6O8tvZobj user@host    allow-pw: falseautoinstall:  # 密码访问配置  ssh:    install-server: true    allow-pw: true

codecs

类型:映射,见下文

默认值:见下文

是否可以交互:

配置是否要安装来自多元存储库的通用受限软件包(包括编解码器)。

install

类型:boolean布尔值

默认值:false

是否安装ubuntu-restricted-addons软件包。

示例:

autoinstall:  # default behavior  codecs:    install: falseautoinstall:  # 安装codecs,这目前意味着安装ubuntu-restricted-addons包  codecs:    install: true

drivers

类型:映射,见下文

默认值:见下文

是否可以交互:

install

类型:boolean布尔值

默认值:false

是否安装可用的第三方驱动程序。

示例:

autoinstall:  # default behavior  drivers:    install: falseautoinstall:  # install drivers as suggested by `ubuntu-drivers`.  drivers:    install: true

oem

类型:映射,见下文

默认值:见下文

是否可以交互:

install

类型:boolean布尔值或string字符串(特殊值auto)

默认值:auto

是否安装可用的OEM元软件包。特殊值auto(默认值)允许在Ubuntu桌面上安装,但不能在Ubuntu服务器上安装。此选项对core boot classic没有影响。

由于安装OEM元软件包可能会导致安装某个内核,因此同时指定带有内核版本号的内核和指定oem.install: true可能会导致由于内核要求冲突,进而导致安装失败。使用oem.install时,建议不要指定内核。

示例:

autoinstall:  # default behavior  oem:    install: autoautoinstall:  # Install OEM meta-packages as suggested by ubuntu-drivers.  # On some hardware, this changes what kernel is installed.  oem:    install: trueautoinstall:  # 禁用OEM meta-package自动安装,即使ubuntu-drivers建议这样做  oem:    install: false

snaps

类型:列表

默认设置:不安装额外的快照

是否可以交互:

要安装的快照列表。每个快照都表示为具有所需名称和可选channel(默认为stable)和classic(默认为false)键的映射。例如:

autoinstall:  snaps:    - name: etcd      channel: edge      classicfalse

debconf-selections

类型:string字符串

默认值:无配置

是否可以交互:

安装程序使用debconf集合set-selection更新目标。用户需要熟悉debconf包的选项。

示例:

autoinstall:  # 禁用SSH root登录并自动启动ufw防火墙  debconf-selections: |    openssh-server openssh-server/permit-root-login boolean false    ufw ufw/enable boolean true

packages

类型:列表

默认值:无软件包

是否可以交互:

要安装到目标系统中的软件包列表。具体来说,传递给apt-get install命令的字符串列表。因此,这包括任务选择(dns-server^)和安装特定版本的包(my-package=1-1)。

示例:

autoinstall:  packages:    # 安装ipython3和git,并确保它们被标记为手动安装。    - ipython3    - git

kernel

类型:映射(互斥),见下文

默认值:默认内核

是否可以交互:

安装哪个内核。必须指定package或flavor的名称。

确切的默认内核是特定于ISO构建的,但通常为服务器安装generic版本,为桌面安装hwe版本。

package

类型:string字符串

软件包的名称,例如linux-image-5.13.0-40-generic。

flavor

类型:字符串

内核的版本,例如,generic或hwe。

示例:

autoinstall:   # Install a specific kernel package.   kernel:     package: linux-image-5.13.0-40-genericautoinstall:   # Install a particular kernel flavor.   kernel:     flavor: hwe

kernel-crash-dumps

类型:映射,见下文

默认值:见下文

是否可以交互:

用于启用切换内核崩溃Dump转储。

在24.10及更高版本中,默认配置将导致使用kdump-tools软件包在已安装的系统上动态启用内核崩溃转储。在amd64、arm64和s390x系统上,如果检测到系统满足内核崩溃转储的最低要求,则将启用它们。否则,它们将被禁用。有关最低系统要求的更多详细信息,请参阅Ubuntu Server文档(https://documentation.ubuntu.com/server/how-to/software/kernel-crash-dump/#kernel-crash-dump)。

在24.10之前的版本中,默认配置将导致内核崩溃转储被禁用。

默认配置:

autoinstall:   # In 24.10 and later, allow kernel crash dumps to be enabled dynamically.   # In pre-24.10, kernel crash dumps will be disabled.   kernel-crash-dumps:     enabled: null

enabled

类型:boolean布尔值或null

默认值:null

指定一个布尔值以启用或禁用内核崩溃转储。设置为null(默认)以允许动态启用。

如果要禁用内核崩溃转储,无论是动态确定还是手动请求,kdump-tools软件包都不会被卸载,但会被配置为确保它在目标系统中处于非活动状态。

示例:

autoinstall:   # Enable kernel crash dumps.   kernel-crash-dumps:     enabled: trueautoinstall:   # Disable kernel crash dumps.   kernel-crash-dumps:     enabled: false

timezone

类型:字符串

默认值:无时区

是否可以交互:

在系统上配置的时区。

timezone示例:

autoinstall:   # Default behavior   timezone: "Etc/UTC"autoinstall:   # Configure explicitly   timezone: "Europe/London"

updates

类型:string字符串(枚举)

默认值:security

是否可以交互:

在系统安装后和重新启动到目标系统之前,下载和安装的更新类型。支持的值包括:

security:从-security源下载并安装更新。

all:还可以从-updates源下载并安装更新。

示例:

autoinstall:  # 默认行为。从安装的security源安装更新。  updates: securityautoinstall:  # 同时从安装的security源和updates源安装更新。  updates: all

shutdown

类型:string字符串(枚举)

默认值:reboot

是否可以交互:

安装完成后,请求系统自动关闭电源或重新启动。支持的值包括:

rebootpoweroff

shutdown示例:

autoinstall:  # default behavior  shutdown: rebootautoinstall:  # shutdown instead of reboot  shutdown: poweroff

late-commands

类型:命令列表

默认值:无命令

是否可以交互:

在安装成功完成并且安装了任何更新和软件包之后,在系统重新启动之前运行的Shell命令。这些命令在安装程序环境中运行,安装的系统挂载在/target。您可以使用curtin in-target -- $shell_command(在20.04 GA发布的Subiquity版本中,您需要运行curtin in-target --target=/target -- $shell_command来指定/target),以便在目标系统中运行(类似于在d-i preseed/late_command中如何使用明文in-target)。

late-commands示例:

autoinstall:  # Pause the install just before finishing to allow manual inspection/modification.  # Unpause by creating the "/run/finish-late" file.  late-commands:    - while [ ! -f /run/finish-late ]; do sleep 1; doneautoinstall:  # Install additional packages on the target system and run some custom scripts.  late-commands:    - curtin in-target -- apt-get update    - curtin in-target -- apt-get install -y curl vim    - curtin in-target -- curl -o /tmp/my-script.sh $script_url    - curtin in-target -- /bin/sh /tmp/my-script.sh

error-commands

类型:命令列表

默认值:无命令

是否可以交互:

安装失败后运行的Shell命令。它们在安装程序环境中运行,目标系统(或安装程序管理配置的大部分系统)挂载在/target上。实时会话将被记录在日志文件/var/log/installer中。

autoinstall:  # Collect all of the logs in /var/log/installer  # Collect the live system journal too  error-commands:    - tar -czf /installer-logs.tar.gz /var/log/installer/    - journalctl -b > /installer-journal.log

reporting

类型:映射

默认值:type: print(这会导致tty1和串行控制台上输出任何配置)

是否可以交互:

安装程序支持向各种目标报告进度。请注意,如果有任何交互式部分,则忽略此部分;它仅适用于全自动安装。

配置类似于curtin使用的配置。请参阅curtin文档的Reporting部分(https://curtin.readthedocs.io/en/latest/topics/reporting.html)。

配置中报告映射中的每个键都定义了一个目标,其中类型子键是以下之一:

print:在tty1和任何配置的串行控制台上打印进度信息。没有其他配置。

rsyslog:通过rsyslog报告进度。目标键指定了输出的发送位置。(rsyslog报告程序尚不存在。)

webhook:通过POST请求向URL发送JSON报告来报告进度。接受与curtin相同的配置。

none:不报告进展。仅用于禁止默认输出。

Reporting示例:

默认配置为:

autoinstall:  reporting:    builtin:      typeprint

向rsyslog报告:

autoinstall:  reporting:    central:      type: rsyslog      destination: "@192.168.0.1"

抑制默认输出:

autoinstall:  reporting:    builtin:      type: none

向curtin风格的webhook报告:

autoinstall:  reporting:    hook:      type: webhook      endpoint: http://example.com/endpoint/path      consumer_key: "ck_value"      consumer_secret: "cs_value"      token_key: "tk_value"      token_secret: "tk_secret"      level: INFO

user-data

类型:映射

默认值:{}

是否可以交互:

提供云初始化用户数据,该数据将与安装程序生成的用户数据合并。如果你提供了这个,你就不需要提供identity部分(在这种情况下,请确保你可以登录到已安装的系统)。有关云初始化用户数据的更多详细信息,请参阅所有云配置示例(https://docs.cloud-init.io/en/latest/reference/examples.html)。

以下示例提供的user-data与identity部分示例中的配置生成的数据大致相等:

autoinstall:  user-data:     users:       - name: ubuntu         gecos: 'Ubuntu User'         passwd: '$6$wdAcoXrU039hKYPd$508Qvbe7ObUnxoj15DRCkzC3qO7edjH0VV7BPNRDYK4QR8ofJaEEF2heacn0QgD.f8pO8SNp83XNdWG6tocBM1'         groups: adm, cdrom, dip, lxd, plugdev, sudo         shell: /bin/bash         lock_passwd: False

zdevs

类型:设备列表

默认值:[]

是否可以交互:

在IBM Z上,配置受支持设备的状态(enabled或disabled)。

列表中的每个元素(即设备)都是具有以下键的映射:

id

类型:string字符串

标识要操作的设备。

enabled

类型:boolean布尔值

控制设备应启用还是禁用。

autoinstall:  zdevs:    - id: 0.0.1507      enabled: true    - id: 0.0.1508      enabled: true    - id: 0.0.1509      enabled: false

***推荐阅读***

1条命令搞定!Ubuntu搭建L2TP服务器全自动脚本,小白也能轻松上手
从CentOS到Ubuntu:零成本迁移L2TP VPN,企业级内网穿透实战!
从SRv6到Panabit测试:揭秘ESXi虚拟交换机VLAN 0-4095的终极用法
Panabit VLAN这样玩才高效:从透明网桥到网关模式的实战踩坑指南
WireGuard太复杂?十分钟教你用Netmaker一键搞定全球组网
vCenter 7.0部署很费时间吗?从开始到纳管好不用半小时
ESXi降级实战:vGPU异常竟因7.0.3版本坑?两种回滚方案对比
万物皆可EVE-NG:手把手教你将Panabit迁移到EVE-NG环境
云手机技术揭秘!低成本实现1台电脑变百部"虚拟手机"实战
Docker网络从入门到精通:7个核心命令实战详解
从400M到4.5G!Docker迁移竟让VPP网络性能飙升10倍
误以为是外国货?这家国产SD-WAN神器竟能免费白嫖,附Panabit免费版体验全记录
零成本自建企业级SD-WAN!用Panabit手搓iWAN实战
iWAN隧道实测:一次握手跑满2.3Gbps,白嫖的SD-WAN真能吊打专线?
48核+96GB内存!EVE-NG 6.2低配版安装实录,网络工程师必看!
基于IPv6配置openVPN实战:告别双栈难题,一步打通IPv6隧道!
无需公网IPv4!手把手教你配置基于IPv6的WireGuard安全隧道
目前来看,ollama量化过的DeepSeek模型应该就是最具性价比的选择

解锁Ubuntu高效部署!自动安装配置文件YAML全解析

原文始发于微信公众号(铁军哥):解锁Ubuntu高效部署!自动安装配置文件YAML全解析

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月14日10:07:37
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   解锁Ubuntu高效部署!自动安装配置文件YAML全解析https://cn-sec.com/archives/4061915.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息