我们之前介绍了两种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; done
autoinstall:
# 将当前的自动安装配置替换为受信任服务器提供的配置
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/edge
autoinstall:
# 刷新至最新的测试版
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_toggle
toggle
rctrl_toggle
rshift_toggle
rwin_toggle
menu_toggle
alt_shift_toggle
ctrl_shift_toggle
ctrl_alt_toggle
alt_caps_toggle
lctrl_lshift_toggle
lalt_toggle
lctrl_toggle
lshift_toggle
lwin_toggle
sclk_toggle
警告:由于一个错误,20.04 GA发布的Subiquity版本不接受此字段为null。
keyboard示例:
keyboard示例:
autoinstall:
# default behavior
keyboard:
layout: us
variant: ""
toggle: null
autoinstall:
# 使用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-minimal
standard (default): ubuntu-server
Ubuntu Desktop:
minimal (default): ubuntu-desktop-minimal
standard: ubuntu-desktop
Ubuntu Budgie:
minimal: ubuntu-budgie-desktop-minimal
standard (default): ubuntu-budgie-desktop
Ubuntu Cinnamon:
minimal: ubuntucinnamon-desktop-minimal
standard (default): ubuntucinnamon-desktop
Edubuntu:
minimal: edubuntu-desktop-minimal
standard (default): edubuntu-desktop
Ubuntu Kylin:
minimal: ubuntukylin-desktop-minimal
standard (default): ubuntukylin-desktop
Ubuntu MATE:
minimal: ubuntu-mate-desktop-minimal
standard (default): ubuntu-mate-desktop
Ubuntu Studio:
standard (default): ubuntustudio-desktop
Xubuntu:
full ISO:
minimal: xubuntu-desktop-minimal
standard (default): xubuntu-desktop
minimal 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-minimal
autoinstall:
# 在Ubuntu桌面ISO上,使用标准源代码进行安装
source:
id: ubuntu-desktop
network
类型:Netplan格式映射,见下文
默认值:在名为eth*或en*的接口上使能DHCP
是否可以交互:是
Netplan格式的网络配置(https://netplan.io/reference)。这不仅适用于安装过程,也适用于已安装的系统。默认情况下是解释安装介质的配置,该介质在名称与eth*或en*匹配的任何接口上运行DHCPv4,但随后禁用任何未接收到IP地址的接口。
例如,要在特定网络接口上运行DHCPv6:
autoinstall:
network:
version: 2
ethernets:
enp0s31f6:
dhcp6: true
请注意,在Subiquity的20.04 GA版本中,行为略有不同,需要您使用额外的network:键值编写此代码:
autoinstall:
network:
network:
version: 2
ethernets:
enp0s31f6:
dhcp6: true
20.04之后的版本也支持此语法(为了兼容性)。使用较新版本时,请使用常规语法。
proxy
类型:URL或null
默认值:无代理
是否可以交互:是
在安装期间以及在目标系统中为apt和snapd配置的代理。当前运行geoip查询时,此设置不受支持。
示例:
autoinstall:
proxy: http://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-partition: true
重置分区的大小也可以固定为指定大小。这是一个将重置分区固定配置为12 GiB的示例:
autoinstall:
storage:
layout:
name: direct
reset-partition: 12G
安装程序还可以在不安装系统的情况下安装重置分区。为此,请将reset-partition-only设置为true:
autoinstall:
storage:
layout:
name: direct
reset-partition: true
reset-partition-only: true
基于操作的配置
为了获得完全的灵活性,安装程序允许使用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: 20G
- type: 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: true
autoinstall:
# 需要openssh-server时的推荐配置
ssh:
install-server: true
authorized-keys:
# 替换为ssh-keygen或类似工具生成的公钥内容
- ssh-ed25519 AAAAC3NzaC..6O8tvZobj user@host
allow-pw: false
autoinstall:
# 密码访问配置
ssh:
install-server: true
allow-pw: true
codecs
类型:映射,见下文
默认值:见下文
是否可以交互:否
配置是否要安装来自多元存储库的通用受限软件包(包括编解码器)。
install
类型:boolean布尔值
默认值:false
是否安装ubuntu-restricted-addons软件包。
示例:
autoinstall:
# default behavior
codecs:
install: false
autoinstall:
# 安装codecs,这目前意味着安装ubuntu-restricted-addons包
codecs:
install: true
drivers
类型:映射,见下文
默认值:见下文
是否可以交互:是
install
类型:boolean布尔值
默认值:false
是否安装可用的第三方驱动程序。
示例:
autoinstall:
# default behavior
drivers:
install: false
autoinstall:
# 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: auto
autoinstall:
# Install OEM meta-packages as suggested by ubuntu-drivers.
# On some hardware, this changes what kernel is installed.
oem:
install: true
autoinstall:
# 禁用OEM meta-package自动安装,即使ubuntu-drivers建议这样做
oem:
install: false
snaps
类型:列表
默认设置:不安装额外的快照
是否可以交互:是
要安装的快照列表。每个快照都表示为具有所需名称和可选channel(默认为stable)和classic(默认为false)键的映射。例如:
autoinstall:
snaps:
- name: etcd
channel: edge
classic: false
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-generic
autoinstall:
# 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: true
autoinstall:
# 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: security
autoinstall:
# 同时从安装的security源和updates源安装更新。
updates: all
shutdown
类型:string字符串(枚举)
默认值:reboot
是否可以交互:否
安装完成后,请求系统自动关闭电源或重新启动。支持的值包括:
reboot
poweroff
shutdown示例:
autoinstall:
# default behavior
shutdown: reboot
autoinstall:
# 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; done
autoinstall:
# 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:
type: print
向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
***推荐阅读***
原文始发于微信公众号(铁军哥):解锁Ubuntu高效部署!自动安装配置文件YAML全解析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论