我們之前介紹了兩種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:? ??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:?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? ? ??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-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:? ? ??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
***推薦閱讀***
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模型應該就是最具性價比的選擇