解鎖Ubuntu高效部署!自動安裝配置文件YAML全解析

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906009.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906009.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906009.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關系代數和關系數據庫語言(SQL)

閱讀提示&#xff1a;本篇文章較長&#xff0c;建議從目錄上選取想看的內容。代碼上的話&#xff0c;我習慣用小寫&#xff0c;如果看不習慣建議跳過。有問題歡迎討論&#xff01;&#xff01;&#xff01; 一、基礎概念 1.1數據庫的概念 數據庫(Database)是按照數據結構來組…

EXO 可以將 Mac M4 和 Mac Air 連接起來,并通過 Ollama 運行 DeepSeek 模型

EXO 可以將 Mac M4 和 Mac Air 連接起來&#xff0c;并通過 Ollama 運行 DeepSeek 模型。以下是具體實現方法&#xff1a; 1. EXO 的分布式計算能力 EXO 是一個支持 分布式 AI 計算 的開源框架&#xff0c;能夠將多臺 Mac 設備&#xff08;如 M4 和 Mac Air&#xff09;組合成…

區塊鏈基本理解

文章目錄 前言一、什么是分布式賬本(DLT)二、什么是P2P網絡?二、共識算法三、密碼算法前言 區塊鏈是由一個一個數據塊組成的鏈條,按照時間順序將數據塊逐一鏈接,通過哈希指針鏈接,所有的數據塊共同維護一份分布式賬本(DLT),每個節點(可以理解為一個玩家,一臺計算機)都擁…

Node.js中的洋蔥模型

文章目錄 前言 前言 Node.js中的洋蔥模型是一種中間件執行機制&#xff0c;主要用于處理HTTP請求和響應的流程控制。該模型通過層層包裹的中間件結構&#xff0c;實現請求從外到內穿透、響應從內向外返回的順序執行。以下從核心概念、實現原理、框架差異及實際應用等方面解析&…

UI-TARS Desktop:用自然語言操控電腦,AI 重新定義人機交互

在人工智能技術飛速發展的今天,從文本生成到圖像識別,AI 的能力邊界不斷被打破。而字節跳動近期開源的 UI-TARS Desktop,則將這一技術推向了更復雜的交互場景——通過自然語言直接控制計算機界面,實現了圖形用戶界面(GUI)的智能化自動化。這款工具不僅降低了操作門檻,更…

一個可拖拉實現列表排序的WPF開源控件

從零學習構建一個完整的系統 推薦一個可通過拖拉&#xff0c;來實現列表元素的排序的WPF控件。 項目簡介 gong-wpf-dragdrop是一個開源的.NET項目&#xff0c;用于在WPF應用程序中實現拖放功能&#xff0c;可以讓開發人員快速、簡單的實現拖放的操作功能。 可以在同一控件內…

C語言中字符串函數的詳細講解

C語言提供了豐富的字符串處理函數&#xff0c;這些函數在<string.h>頭文件中聲明。以下是一些常用字符串函數的詳細講解&#xff1a; 字符串拷貝函數 strcpy 功能&#xff1a;將源字符串&#xff08;包括結尾的\0&#xff09;復制到目標字符串。原型&#xff1a;char *s…

可視化數據圖表怎么做?如何實現三維數據可視化?

目錄 一、三維數據可視化的要點 1. 明確數據可視化的目標 2. 篩選與整理數據 3. 選擇合適的圖表類型 4. 運用專業工具制作 5. 優化圖表的展示效果 二、數據可視化圖表怎么做&#xff1f; 1. 理解三維數據的特性 2. 數據處理與三維建模 3. 設置光照與材質效果 4. 添加…

在Linux服務器上部署Jupyter Notebook并實現ssh無密碼遠程訪問

Jupyter notebook版本7.4.2&#xff08;這個版本AI提示我Jupyter7&#xff08;底層是 jupyter_server 2.x&#xff09; 服務器開啟服務 安裝Jupyter notebook 7.4.2成功后&#xff0c;終端輸入 jupyter notebook --generate-config 這將在 ~/.jupyter/ 目錄下生成 jupyter_…

走出 Demo,走向現實:DeepSeek-VL 的多模態工程路線圖

目錄 一、引言&#xff1a;多模態模型的關鍵轉折點 &#xff08;一&#xff09;當前 LMM 的三個關鍵挑戰 1. 數據的真實性不足 2. 模型設計缺乏場景感知 3. 語言能力與視覺能力難以兼顧 &#xff08;二&#xff09;DeepSeek-VL 的根本出發點&#xff1a;以真實任務為錨點…

數據庫原理及其應用 第六次作業

題目 參考答案 題目1. 教材P148第1題 問題&#xff1a;什么是數據庫的安全性&#xff1f; 答案&#xff1a;數據庫的安全性是指保護數據庫以防止不合法的使用所造成的數據泄露、更改或破壞 。它通過用戶身份鑒別、存取控制&#xff08;包括自主存取控制和強制存取控制&#x…

2025系統架構師---選擇題知識點(押題)

1.《計算機信息系統安全保護等級劃分準則》(GB 17859-1999)由低到高定義了五個不同級別的計算機系統安全保護能力。 第一級:用戶自主保護級---通過隔離用戶與數據實現訪問控制,保護用戶信息安全; 第二級:系統審計保護級---實施更細粒度的訪問控制,通過審計和隔離資源確…

Qt操作SQLite數據庫教程

Qt 中操作 SQLite 數據庫的步驟如下&#xff1a; 1. 添加 SQLite 驅動并打開數據庫 #include <QSqlDatabase> #include <QSqlError> #include <QSqlQuery>// 創建數據庫連接 QSqlDatabase db QSqlDatabase::addDatabase("QSQLITE"); db.setData…

從紫光集團看基本財務分析

PE 46PE 代表投資人對他的期望是它的業績至少要增長50%才算及格。 但實際業績 一年不如一年. 所以&#xff0c;這個PE 應該是 業績倒退了&#xff0c;但是市值還沒有掉下去&#xff0c;導致運算的結果處在高PE階段。 那么隨著股價的下跌&#xff0c;這個數字會慢慢變小。 當然…

基于MNIST數據集的手寫數字識別(CNN)

目錄 一&#xff0c;模型訓練 1.1 數據集介紹 1.2 CNN模型層結構 1.3 定義CNN模型 1.4 神經網絡的前向傳播過程 1.5 數據預處理 1.6 加載數據 1.7 初始化 1.8 模型訓練過程 1.9 保存模型 二&#xff0c;模型測試 2.1 定義與訓練時相同的CNN模型架構 2.2 圖像的預處…

centos中postfix的作用

/usr/libexec/postfix/master 是 Postfix 郵件服務器的主進程&#xff0c;qmgr 和 pickup 是 Postfix 的子進程。這些進程本身是正常的&#xff0c;但如果你懷疑服務器被用于釣魚活動&#xff0c;需要進一步檢查 Postfix 的配置和日志&#xff0c;確保它沒有被濫用。 1. 檢查 P…

藍牙耳機什么牌子好?倍思值得沖不?

最近總被問“藍牙耳機什么牌子好”&#xff0c;作為踩過無數坑的資深耳機黨&#xff0c;必須安利剛入手的倍思M2s Pro主動降噪藍牙耳機&#xff01;降噪、音質、顏值全都在線&#xff0c;性價比直接拉滿。 -52dB降噪&#xff0c;通勤摸魚神器 第一次開降噪就被驚到&#xff01…

游戲引擎學習第285天:“Traversables 的事務性占用”

回顧并為當天的工作做準備 我們有一個關于玩家移動的概念&#xff0c;玩家可以在點之間移動&#xff0c;而且當這些點移動時&#xff0c;玩家會隨之移動。現在這個部分基本上已經在工作了。我們本來想實現的一個功能是&#xff1a;當玩家移動到某個點時&#xff0c;這個點能“…

java中的包機制

包機制 為了更好地組織類&#xff0c;java提供了包機制&#xff0c;用于區分類名的命名空間 包語句的語法格式為 package pkg1[. pkg2[. pkg3...]]一般利用公司域名倒置作為包名 &#xff1a; 公司域名&#xff1a;www.baidu.com 包名&#xff1a;com.baidu.www 為了能夠…

python打卡DAY22

##注入所需庫 import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import random import numpy as np import time import shap # from sklearn.svm import SVC #支持向量機分類器 # # from sklearn.neighbors import KNeighborsClassifier …