通過PXE的方式實現Ubuntu 24.04 自動安裝

PXE自動化安裝Ubuntu 24.04的配置文件

之前都是通過PXE來自動化安裝Redhat系列的,例如:Rocky9、Rocky10、CentOS7、銀河麒麟 Kylin-V10、Kylin-V11、OpenEuler 24.03等。現在安裝Ubuntu系列的跟紅帽的不太一樣,所以在這里介紹下。

創建三個文件

redhat系列:編寫kickstart文件,文件名自定義,后綴是.cfg即可。

Ubuntu 24.04:需要創建三個文件,文件名是固定的,啟動內核的時候系統會自動去找。通過下面日志可以驗證。

10.0.0.123 - - [05/Sep/2025:13:54:35 +0800] "GET /iso/ubuntu-24.04.2-live-server-amd64.iso HTTP/1.1" 200 3213064192 "-" "Wget"
10.0.0.123 - - [05/Sep/2025:13:54:53 +0800] "GET /ks/ubuntu2404/meta-data HTTP/1.1" 200 30 "-" "Cloud-Init/24.4-0ubuntu1~24.04.2"
10.0.0.123 - - [05/Sep/2025:13:54:53 +0800] "GET /ks/ubuntu2404/user-data HTTP/1.1" 200 5562 "-" "Cloud-Init/24.4-0ubuntu1~24.04.2"
10.0.0.123 - - [05/Sep/2025:13:54:53 +0800] "GET /ks/ubuntu2404/vendor-data HTTP/1.1" 200 - "-" "Cloud-Init/24.4-0ubuntu1~24.04.2"
# 1.創建 meta-data
cat << EOF > meta-data
instancd-id:focal-autoinstall
EOF
# 2.創建 vendor-data
touch vendor-data# 3.創建 user-data,這個是核心的文件,其他兩個文件存在即可,vendor-data不需要寫內容
touch user-data
# 里面的內容就是下面兩個目錄的。如果用lvm分區就復制 lvm版本的user-data 2.如果用普通分區的,就復制普通分區的user-data內容
# 我得lvm分區如下,根據需求可以改成自己的
[root@ubuntu-server-2404 ~]# lsblk 
NAME             MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                8:0    0  100G  0 disk 
├─sda1             8:1    0    1M  0 part 
├─sda2             8:2    0    1G  0 part /boot
└─sda3             8:3    0   99G  0 part ├─vg0-lv--swap 252:0    0    2G  0 lvm  ├─vg0-lv--root 252:1    0   46G  0 lvm  /└─vg0-lv--data 252:2    0   50G  0 lvm  /data
sr0               11:0    1 1024M  0 rom  
[root@ubuntu-server-2404 ~]# 

上傳Ubuntu 24.04的iso鏡像到http服務器

[root@PXE-Rocky-810 ~]# ll /var/www/html/iso/
total 3137760
-rw-r--r-- 1 root root 3213064192 Aug 28 17:54 ubuntu-24.04.2-live-server-amd64.iso
[root@PXE-Rocky-810 ~]# 

lvm版本的user-data

#cloud-config
autoinstall:version: 1locale: en_US.UTF-8timezone: Asia/Shanghaikeyboard:layout: usnetwork:version: 2ethernets:ens33:dhcp4: truesource:id: ubuntu-serversearch_drivers: falsedrivers:install: falsekernel:package: linux-genericapt:fallback: offline-installmirror-selection:primary:- arches: [amd64]uri: https://mirrors.aliyun.com/ubuntu/- arches: [arm64]uri: https://mirrors.aliyun.com/ubuntu-portssecurity:- arches: [amd64]uri: https://mirrors.aliyun.com/ubuntu/- arches: [arm64]uri: https://mirrors.aliyun.com/ubuntu-portspreserve_sources_list: falsestorage:config:# --- 第1步:定義磁盤 ---- ptable: gptpath: /dev/sdawipe: superblock-recursivepreserve: falsename: ''grub_device: trueid: disk-sdatype: disk# --- 第2步:定義分區 ---# BIOS啟動分區 - 修正配置- device: disk-sdasize: 1048576  # 1Mflag: bios_grubnumber: 1preserve: falsegrub_device: falseid: partition-0type: partition# /boot 分區- device: disk-sdasize: 1073741824  # 1Gwipe: superblocknumber: 2preserve: falsegrub_device: falseid: partition-1type: partition# LVM 物理卷分區- device: disk-sdasize: -1  # 剩余所有空間wipe: superblocknumber: 3preserve: falsegrub_device: falseid: partition-2type: partition# --- 第3步:格式化 /boot 分區 ---- fstype: ext4volume: partition-1preserve: falseid: format-0type: format# --- 第4步:定義LVM卷組 ---- name: vg0devices:- partition-2preserve: falseid: lvm_volgroup-0type: lvm_volgroup# --- 第5步:定義LVM邏輯卷 ---# Swap 邏輯卷- name: lv-swapvolgroup: lvm_volgroup-0size: 2147483648B  # 2Gwipe: superblockpreserve: falsepath: /dev/vg0/lv-swapid: lvm_partition-0type: lvm_partition# Root 邏輯卷- name: lv-rootvolgroup: lvm_volgroup-0size: 49392123904B  # 46Gwipe: superblockpreserve: falsepath: /dev/vg0/lv-rootid: lvm_partition-1type: lvm_partition# Data 邏輯卷- name: lv-datavolgroup: lvm_volgroup-0size: 53687091200B  # 50Gwipe: superblockpreserve: falsepath: /dev/vg0/lv-dataid: lvm_partition-2type: lvm_partition# --- 第6步:格式化LVM邏輯卷 ---# 格式化 swap- fstype: swapvolume: lvm_partition-0preserve: falseid: format-1type: format# 格式化 root- fstype: ext4volume: lvm_partition-1preserve: falseid: format-2type: format# 格式化 data- fstype: ext4volume: lvm_partition-2preserve: falseid: format-3type: format# --- 第7步:掛載 ---# 掛載 root (必須最先掛載)- path: /device: format-2id: mount-2type: mount# 掛載 boot- path: /bootdevice: format-0id: mount-0type: mount# 掛載 data- path: /datadevice: format-3id: mount-3type: mountidentity:hostname: ubuntu-server-2404username: adminpassword: "$6$N2/cWyyb47BdwNKH$slGINzTOLENrD6..QOTSSdhTuH.JGkmuo2VtkevZBT0nPCzfoazUAQF6MGe2Xxs1Tvkdhou1dRJv1hOlG72aA."ssh:allow-pw: trueinstall-server: truelate-commands:- "echo 'root:root' | chroot /target chpasswd"- curtin in-target --target=/target -- sh -c 'echo "PermitRootLogin yes" >> /etc/ssh/sshd_config'- |cat << 'EOF' >> /target/root/.bashrcPS1='\[\e[1;32m\][\u@\H \W]\$\[\e[0m\] 'export HISTTIMEFORMAT='%F %T 'EOF- |cat << 'EOF' > /target/root/.vimrcset nusyntax onset pastetoggle=<F2>autocmd InsertLeave * set nopasteautocmd InsertEnter * set pasteset ignorecaseset tabstop=2set shiftwidth=2set nohlsearchset expandtabset backspace=indent,eol,startset listchars=tab:>-,eol:$,space:.autocmd FileType * setlocal formatoptions-=cro" Bash 腳本模板func SetTitle()if expand("%:e") == 'sh'call setline(1,"#!/bin/bash")call setline(2,"#")call setline(3,"#*******************************************************")call setline(4,"#Author:           xingyuyu")call setline(5,"#Date:             ".strftime("%Y-%m-%d"))call setline(6,"#Filename:         ".expand("%"))call setline(7,"#Copyright (C):   ".strftime("%Y")." All rights reserved")call setline(8,"#********************************************************")call setline(9,"")endifendfuncautocmd BufNewFile *.sh exec ":call SetTitle()"autocmd BufNewFile * normal Gau BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endifset viminfo='10,\"100,:20,%,n~/.viminfoEOF
#  apt:
#    geoip: true
#    preserve_sources_list: false

普通分區的user-data

#cloud-config
autoinstall:version: 1locale: en_US.UTF-8timezone: Asia/Shanghaikeyboard:layout: usnetwork:version: 2ethernets:ens33:dhcp4: truesource:id: ubuntu-serversearch_drivers: falsedrivers:install: falsekernel:package: linux-genericapt:disable_components: []fallback: offline-installgeoip: truemirror-selection:primary:- uri: https://mirrors.aliyun.com/ubuntu- uri: https://mirrors.tuna.tsinghua.edu.cn/ubuntu- country-mirror- arches: &id001- amd64- i386uri: http://archive.ubuntu.com/ubuntu/- arches: &id002- s390x- arm64- armhf- powerpc- ppc64el- riscv64uri: http://ports.ubuntu.com/ubuntu-portspreserve_sources_list: falsesecurity:- arches: *id001uri: http://security.ubuntu.com/ubuntu/- arches: *id002uri: http://ports.ubuntu.com/ubuntu-portsstorage:config:- type: diskid: disk-sdapath: /dev/sdaptable: gptwipe: superblock-recursivepreserve: falsegrub_device: true- type: partitionid: partition-0device: disk-sdasize: 1Mflag: bios_grubnumber: 1preserve: false- type: partitionid: partition-1device: disk-sdasize: 1Gnumber: 2preserve: false- type: partitionid: partition-2device: disk-sdasize: 50Gnumber: 3preserve: false- type: partitionid: partition-3device: disk-sdasize: -1number: 4preserve: false- type: formatid: format-bootfstype: ext4volume: partition-1preserve: false- type: formatid: format-rootfstype: ext4volume: partition-2preserve: false- type: formatid: format-datafstype: ext4volume: partition-3preserve: false- type: mountid: mount-bootdevice: format-bootpath: /boot - type: mountid: mount-rootdevice: format-rootpath: /- type: mountid: mount-datadevice: format-datapath: /dataidentity:hostname: ubuntu-server-2404username: adminpassword: "$6$N2/cWyyb47BdwNKH$slGINzTOLENrD6..QOTSSdhTuH.JGkmuo2VtkevZBT0nPCzfoazUAQF6MGe2Xxs1Tvkdhou1dRJv1hOlG72aA."ssh:allow-pw: trueauthorized-keys: []install-server: truelate-commands:- "echo 'root:root' | chroot /target chpasswd"- curtin in-target --target=/target -- sh -c 'echo "PermitRootLogin yes" >> /etc/ssh/sshd_config'- curtin in-target --target=/target -- apt-get -y update- |cat << 'EOF' >> /target/root/.bashrcPS1='\[\e[1;32m\][\u@\H \W]\$\[\e[0m\] 'export HISTTIMEFORMAT='%F %T 'EOF- |cat << 'EOF' > /target/root/.vimrcset nusyntax onset pastetoggle=<F2>autocmd InsertLeave * set nopasteautocmd InsertEnter * set pasteset ignorecaseset tabstop=2set shiftwidth=2set nohlsearchset expandtabset backspace=indent,eol,startset listchars=tab:>-,eol:$,space:.autocmd FileType * setlocal formatoptions-=cro" Bash 腳本模板func SetTitle()if expand("%:e") == 'sh'call setline(1,"#!/bin/bash")call setline(2,"#")call setline(3,"#*******************************************************")call setline(4,"#Author:           xingyuyu")call setline(5,"#Date:             ".strftime("%Y-%m-%d"))call setline(6,"#Filename:         ".expand("%"))call setline(7,"#Copyright (C):   ".strftime("%Y")." All rights reserved")call setline(8,"#********************************************************")call setline(9,"")endifendfuncautocmd BufNewFile *.sh exec ":call SetTitle()"autocmd BufNewFile * normal Gau BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endifset viminfo='10,\"100,:20,%,n~/.viminfoEOF

pxelinux.cfg/default內容

有關Redhat系列的這里不多做說明,重點說一下Ubuntu 24.04的配置。

Ubuntu 24.04 自動安裝內核參數詳解

內核參數完整示例

root=/dev/ram0 ip=dhcp url=http://10.0.0.109/iso/ubuntu-24.04.2-live-server-amd64.iso autoinstall ds=nocloud-net;s=http://10.0.0.109/ks/ubuntu2404/ cloud-config-url=/dev/null

參數詳細解釋

1. root=/dev/ram0

官方含義: 指定根文件系統的位置

  • 作用: 告訴內核將/dev/ram0(內存磁盤)作為根文件系統掛載點
  • 為什么固定: Live安裝模式下,系統首先加載到內存中運行,所有文件系統操作都在內存中進行
  • 技術原理: 這是Linux內核的標準參數,用于指定initramfs解壓后的根文件系統位置

2. ip=dhcp 這個需要有dhcp服務器來自動分發ip地址

官方含義: 配置網絡接口的IP獲取方式

  • 作用: 指示系統通過DHCP協議自動獲取IP地址、子網掩碼、網關和DNS設置
  • 格式: ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
  • dhcp選項: 簡化寫法,等同于 ip=:::::<interface>:dhcp
  • 重要性: 網絡配置是自動安裝的前提,需要訪問HTTP服務器獲取配置文件

3. url=http://10.0.0.109/iso/ubuntu-24.04.2-live-server-amd64.iso

官方含義: 指定安裝鏡像的網絡位置

  • 作用: 告訴安裝程序從指定URL下載Ubuntu安裝鏡像
  • 支持協議: http://、https://、ftp://
  • 工作原理: 安裝程序會先下載此鏡像到內存,然后掛載為安裝源
  • 注意: 這個URL必須可訪問,且指向完整的Ubuntu ISO鏡像文件

4. autoinstall

官方含義: 啟用Ubuntu自動安裝模式

  • 作用: 激活subiquity安裝器的自動模式,跳過交互式安裝界面
  • 歷史: 替代了傳統的preseed機制
  • 要求: 必須配合datasource(如nocloud-net)提供配置文件
  • 固定原因: 這是Ubuntu官方定義的固定關鍵字,用于識別自動安裝模式

5. ds=nocloud-net

官方含義: 指定cloud-init數據源類型

  • ds: 是datasource的縮寫
  • nocloud-net: 表示使用NoCloud數據源的網絡模式
  • 區別:
    • nocloud:從本地文件系統讀取配置(如CD/USB)
    • nocloud-net:從網絡HTTP服務器獲取配置
  • 技術實現: cloud-init根據此參數決定從哪里獲取meta-data、user-data等配置

6. ;s=http://10.0.0.109/ks/ubuntu2404/

官方含義: 指定配置文件的基礎URL(seedfrom)

  • s=: 是seedfrom的縮寫

  • 分號分隔: 與ds參數用分號連接,形成完整的datasource配置

  • URL結構:

    cloud-init會在此URL下查找:

    • meta-data:實例元數據
    • user-data:用戶配置數據
    • network-config:網絡配置(可選)
  • 工作流程:

    GET http://10.0.0.109/ks/ubuntu2404/meta-dataGET http://10.0.0.109/ks/ubuntu2404/user-dataGET http://10.0.0.109/ks/ubuntu2404/network-config
    

7. cloud-config-url=/dev/null

官方含義: 禁用額外的cloud-config配置源

  • 作用: 將cloud-config配置源重定向到空設備,實際上禁用了它
  • 為什么需要:
    • 避免cloud-init嘗試從其他位置獲取配置
    • 防止配置沖突和不確定的行為
    • 確保只使用nocloud-net數據源的配置
  • 測試重要性: 缺少此參數可能導致cloud-init行為不確定,安裝失敗

完整工作流程

  1. 內核啟動: root=/dev/ram0指定內存根文件系統
  2. 網絡配置: ip=dhcp自動獲取網絡配置
  3. 鏡像下載: url=...下載安裝鏡像
  4. 自動模式: autoinstall啟用無人值守安裝
  5. 配置獲取: ds=nocloud-net;s=...從HTTP服務器獲取配置文件
  6. 配置隔離: cloud-config-url=/dev/null確保配置源單一

常見問題排查

如果缺少某個參數會怎樣?

  • 缺少root=/dev/ram0 內核可能無法正確掛載根文件系統
  • 缺少ip=dhcp 無網絡連接,無法下載鏡像和配置
  • 缺少autoinstall 進入交互式安裝界面
  • 缺少ds=nocloud-net cloud-init無法找到配置數據源
  • 缺少cloud-config-url=/dev/null 可能產生配置沖突

HTTP服務器目錄結構

/var/www/html/
├── iso/
│   └── ubuntu-24.04.2-live-server-amd64.iso
└── ks/└── ubuntu2404/├── meta-data├── user-data└── vendor-data

參考文檔

  • Ubuntu Autoinstall官方文檔
  • Cloud-init NoCloud數據源文檔
  • Linux內核啟動參數文檔
default menu.c32
timeout 600
menu title Install Linux SystemLABEL ubuntu2404-root-enabledMENU LABEL Auto Install ^Ubuntu 24.04KERNEL ubuntu2404/vmlinuzINITRD ubuntu2404/initrdAPPEND root=/dev/ram0 ip=dhcp url=http://10.0.0.109/iso/ubuntu-24.04.2-live-server-amd64.iso autoinstall ds=nocloud-net;s=http://10.0.0.109/ks/ubuntu2404/ cloud-config-url=/dev/nulllabel kylin-V11-2503menu label Auto Install ^Kylin-V11-2503kernel Kylin-V11-2503/vmlinuzappend initrd=Kylin-V11-2503/initrd.img inst.repo=http://10.0.0.109/kylin/V11-2503/os/x86_64/ inst.ks=http://10.0.0.109/ks/Kylin-V11-2503.cfg ip=dhcp net.ifnames=0 biosdevname=0label kylin-V10-SP3-2403menu label Auto Install ^Kylin-V10-SP3-2403kernel Kylin-V10-SP3-2403/vmlinuzappend initrd=Kylin-V10-SP3-2403/initrd.img inst.repo=http://10.0.0.109/kylin/V10-SP3-2403/os/x86_64/ inst.ks=http://10.0.0.109/ks/Kylin-V10-SP3-2403.cfg ip=dhcp net.ifnames=0 biosdevname=0label openEuler2403menu label Auto Install ^OpenEuler 24.03kernel openEuler2403/vmlinuzappend initrd=openEuler2403/initrd.img  inst.repo=http://10.0.0.109/openEuler/2403/os/x86_64/ inst.ks=http://10.0.0.109/ks/openEuler2403.cfg ip=dhcp net.ifnames=0 biosdevname=0label rocky10menu label Auto Install Rocky Linux ^10kernel rocky10/vmlinuzappend initrd=rocky10/initrd.img inst.repo=http://10.0.0.109/rocky/10/os/x86_64/ inst.ks=http://10.0.0.109/ks/rocky10.cfg ip=dhcp net.ifnames=0 biosdevname=0label rocky96menu label Auto Install Rocky Linux ^9.6kernel rocky96/vmlinuzappend initrd=rocky96/initrd.img inst.repo=http://10.0.0.109/rocky/96/os/x86_64/ inst.ks=http://10.0.0.109/ks/rocky96.cfg ip=dhcp net.ifnames=0 biosdevname=0label rocky810menu label Auto Install Rocky Linux ^8.10kernel rocky810/vmlinuzappend initrd=rocky810/initrd.img inst.repo=http://10.0.0.109/rocky/810/os/x86_64/ inst.ks=http://10.0.0.109/ks/rocky810.cfg ip=dhcp net.ifnames=0 biosdevname=0#label rocky95
#    menu label Auto Install Rocky Linux ^9.5
#    kernel rocky95/vmlinuz
#    append initrd=rocky95/initrd.img inst.ks=http://10.0.0.109/ks/rocky95.cfg
#
#label kylin-v10sp3
#    menu label Auto Install Kylin-v10-sp3 ^10
#    kernel kylin10/vmlinuz
#    #append initrd=kylin10/initrd.img inst.ks=http://192.168.124.189/ks/kylin10.cfg
#    append initrd=kylin10/initrd.img inst.ks=http://10.0.0.109/ks/kylin10.cfglabel redhat9.2menu label Auto Install ^Red Hat Enterprise Linux 9.2kernel redhat9/vmlinuzappend initrd=redhat9/initrd.img inst.repo=http://10.0.0.109/redhatEnterprise/9/os/x86_64/ inst.ks=http://10.0.0.109/ks/redhat9.cfg ip=dhcp net.ifnames=0 biosdevname=0#label rocky9
#    menu label Auto Install Rocky Linux ^9
#    kernel rocky9/vmlinuz
#    append initrd=rocky9/initrd.img inst.ks=http://10.0.0.109/ks/rocky9.cfg
#
#label rocky93
#    menu label Auto Install Rocky Linux ^9.3
#    kernel rocky93/vmlinuz
#    append initrd=rocky93/initrd.img inst.ks=http://10.0.0.109/ks/rocky93.cfg
#
#label rocky94
#    menu label Auto Install Rocky Linux ^9.4
#    kernel rocky94/vmlinuz
#    append initrd=rocky94/initrd.img inst.ks=http://10.0.0.109/ks/rocky94.cfg
#
#label rocky8
#    menu label Auto Install Rocky Linux ^8.6
#    kernel rocky8/vmlinuz
#    append initrd=rocky8/initrd.img inst.ks=http://10.0.0.109/ks/rocky8.cfg
#
#label centos8
#   menu label Auto Install CentOS Linux ^8
#   kernel centos8/vmlinuz
#   append initrd=centos8/initrd.img ks=http://10.0.0.109/ks/centos8.cfg#label centos7
#   menu label Auto Install CentOS Linux ^7
#   kernel centos7/vmlinuz
#   append initrd=centos7/initrd.img ks=http://192.168.124.189/ks/centos722.cfg
#
#label centos6
#   menu label Auto Install CentOS Linux ^6
#   kernel centos6/vmlinuz
#   append initrd=centos6/initrd.img ks=http://10.0.0.109/ks/centos6.cfg
#
label manualmenu label ^Manual Install Rocky Linux 8.10kernel rocky810/vmlinuzappend initrd=rocky810/initrd.imginst.repo=http://10.0.0.109/rocky/810/os/x86_64/label rescuemenu label ^Rescue a Rocky Linux system 8.10kernel rocky810/vmlinuzappend initrd=rocky810/initrd.imginst.repo=http://10.0.0.109/rocky/810/os/x86_64/ resculabel localmenu defaultmenu label Boot from ^local drivelocalboot 0xffff

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

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

相關文章

AOSP Framework開發的一些超方便的快捷命令

在系統源碼中發現的一些命令和快捷方式。我們在編譯源碼之前執行的source build/envsetup.sh,通過cat build/envsetup.sh發現如下命令 - lunch: lunch <product_name>-<build_variant>Selects <product_name> as the product to build, and <build_…

【Protues仿真】基于AT89C52單片機的數碼管驅動事例

目錄 0案例視頻效果展示 1 AT89C52單片機驅動單個數碼管 1.1 數碼管基礎知識 1.1.1外觀與引腳 1.1.2 共陰(CC) vs 共陽(CA) 1.1.3段碼表(以數字1為例) 1.1.4驅動方式A. 直連IO(最簡單,占用IO多)一個段一根線,共陰或共陽公共端固定接GND/VCC。適合單個數碼管、…

01-Redis 發展簡史與核心定位解析:從誕生到三大產品矩陣

目錄引言一、Redis 的起源與發展&#xff1a;從定制工具到開源生態二、Redis 的核心定位&#xff1a;不止是緩存的多面手三、Redis 三大產品矩陣&#xff1a;按需選擇的完整解決方案3.1 Redis Open Source&#xff08;社區版&#xff09;&#xff1a;入門與輕量場景首選3.2 Red…

記錄jilu~

centos1、安裝最小版Linux 安裝必要工具yum -install -y epel-releaseyum -install -y net-toolsyum -install -y vim2、修改hostname hostnamectl net-hostname newhostname3、網絡配置文件&#xff0c;網關 &#xff0c; 使用ip &#xff0c;dns。。/etc/sysconfig/network-s…

【Linux基礎】fdisk命令詳解:從入門到精通的磁盤分區管理完全指南

目錄 前言 1 fdisk命令概述 1.1 什么是fdisk 1.2 fdisk的應用場景 1.3 fdisk與其他分區工具的比較 2 fdisk命令的安裝與基本語法 2.1 在不同Linux發行版中安裝fdisk 2.2 fdisk的基本語法 3 fdisk命令參數詳解 3.1 主要參數說明 3.2 交互式命令 4 fdisk操作流程詳解…

Flowable 工作流引擎

1、核心類 Flowable 引擎通過 ProcessEngine 作為總入口點&#xff0c;提供了多個核心服務接口&#xff0c;每個服務都負責特定的功能領域&#xff1a;服務名稱 (Service Name)主要功能 (Main Functionality)關鍵操作 (Key Operations)RepositoryService管理流程定義和部署&…

(RDFS)隨機深度特征選擇方法解釋:簡而言之,RDFS主要針對的是惡意的服務器,它建立在客戶端是誠實的前提下。

1. 隨機深度特征選擇是怎么實現的&#xff1f;隨機深度特征選擇 是一種在分布式機器學習&#xff08;特別是聯邦學習&#xff09;中用于保護客戶端數據隱私的技術。它的核心思想是&#xff1a;在每一輪訓練中&#xff0c;每個客戶端隨機選擇模型的一個子集&#xff08;即“深度…

C++20格式化字符串:std::format的使用與實踐

在C編程中&#xff0c;字符串格式化是一項常見的任務。在C20引入std::format之前&#xff0c;開發者通常依賴于一些傳統的解決方案&#xff0c;如printf系列函數、sstream&#xff0c;或者第三方庫如boost.format。然而&#xff0c;這些方法在代碼可讀性、類型安全性和靈活性方…

【漏洞復現】CVE-2025-8088|WinRAR 路徑穿越漏洞:從原理到藍屏攻擊全流程

【漏洞復現】CVE-2025-8088&#xff5c;WinRAR 路徑穿越漏洞&#xff1a;從原理到藍屏攻擊全流程 前言 WinRAR 作為 Windows 平臺最常用的壓縮管理工具之一&#xff0c;幾乎是每臺電腦的 “標配軟件”。但在 2025 年 8 月&#xff0c;一款影響范圍覆蓋 WinRAR 0 至 7.12 全版本…

uniapp中使用echarts并且支持pc端的拖動、拖拽和其他交互事件

npm install echarts -D ? // "echarts": "^5.3.2", [推薦版本] // "zrender": "^5.3.2" [如果報錯的話就安裝這個]<template><view class"container"><view id"myChart" class"chart"…

Qt中QProxyStyledrawControl函數4個參數的意義

Qt中QProxyStyle::drawControl函數4個參數的意義 我們來詳細解釋一下 Qt 中 QProxyStyle::drawControl 函數的四個參數。 這個函數是 Qt 樣式系統中的一個核心方法&#xff0c;用于繪制標準 UI 元素&#xff08;如按鈕、復選框、菜單欄等&#xff09;。當你繼承 QProxyStyle 并…

idf-esp32 PWM呼吸燈(LEDC頭文件)

相關宏和變量#define LED_PIN GPIO_NUM_3 #define LEDC_CHANNEL LEDC_CHANNEL_0 #define LEDC_TIMER LEDC_TIMER_0 #define LEDC_MODE LEDC_LOW_SPEED_MODE #define LEDC_DUTY_RES LEDC_TIMER_13_BIT // 2^13 8192級亮度 #define LEDC_FREQUENCY 50…

PLC_博圖系列?基本指令”S_ODTS:分配保持型接通延時定時器參數并啟動“

PLC_博圖系列?基本指令”S_ODTS&#xff1a;分配保持型接通延時定時器參數并啟動“ 文章目錄PLC_博圖系列?基本指令”S_ODTS&#xff1a;分配保持型接通延時定時器參數并啟動“背景介紹S_ODTS&#xff1a; 分配保持型接通延時定時器參數并啟動說明參數脈沖時序圖示例關鍵字&a…

OneCode 可視化揭秘系列(三):AI MCP驅動的智能工作流邏輯編排

OneCode 可視化揭秘系列&#xff08;三&#xff09;&#xff1a;AI MCP驅動的智能工作流邏輯編排 引言 在前兩篇系列博文中&#xff0c;我們詳細探討了OneCode可視化動作的基礎配置與界面設計&#xff0c;以及組件交互與數據流管理。在本篇文章中&#xff0c;我們將深入剖析邏輯…

TypeORM、Sequelize、Hibernate 的優缺點對比:新手常見 SQL 與 ORM 踩坑總結

1. ORM 與關系型數據庫&#xff08;MySQL、PostgreSQL&#xff09; 的使用 SQL 語句編寫&#xff08;JOIN、GROUP BY、索引使用、事務控制&#xff09;與 ORM 映射&#xff08;如 Sequelize、TypeORM、Hibernate&#xff09;之間的差異會讓新手非常糾結&#xff1b;尤其是理解…

JavaScript 創建型設計模式詳解

1. 單例模式1.1. 使用場景在前端開發中&#xff0c;全局狀態管理、配置信息、數據庫連接等往往需要在應用中只存在一個實例&#xff0c;避免多次實例化帶來的數據不一致性。例如&#xff0c;在一個前端應用中&#xff0c;全局的 loading 狀態通常需要一個單例模式來確保其唯一性…

k8s除了主server服務器可正常使用kubectl命令,其他節點不能使用原因,以及如何在其他k8s節點正常使用kubectl命令??

kubectl 并不是“只能”在主節點&#xff08;Control Plane Node&#xff09;使用&#xff0c;而是因為它需要訪問 Kubernetes 的 kube-apiserver&#xff0c;而 kube-apiserver 通常只在主節點上運行并監聽內部網絡。簡單來說kubectl 需要連接 kube-apiserver&#xff01;&…

Custom SRP - Complex Maps

https://catlikecoding.com/unity/tutorials/custom-srp/complex-maps/1 創建材質球我們的材質已經支持光照,并且支持 Albedo 和 Emission 貼圖.創建材質球,并應用下面的電路板的圖分別作為 albedo emission設置材質球的金屬度為 1 , 光滑度為 0.952 Mask Map在 albedo 圖上的不…

repo 學習教程

你現在會用 git 了&#xff0c;接下來學 repo&#xff08;Google 推出來的多倉庫管理工具&#xff09;&#xff0c;其實就是在 Git 的基礎上做了一層封裝&#xff0c;方便同時管理很多 Git 倉庫。像 Android 源碼、Rockchip 全套 SDK 都是靠 repo 來拉取和管理的。 我給你分幾個…

[SWERC 2020] Safe Distance題解

[SWERC 2020] Safe Distance 題意 給定 NNN 個點與一個坐標 (X,Y)(X,Y)(X,Y)&#xff0c;求從點 (0,0)(0,0)(0,0) 到點 (X,Y)(X,Y)(X,Y) 規劃一條路線&#xff0c;不能走出 (0,0)(0,0)(0,0) 與 (X,Y)(X,Y)(X,Y) 間形成的矩形&#xff0c;使得通過這條路線時距離最近的點的距離…