PXE 什么是PXE Pre-boot Execution Environment 预启动执行环境
是一种通过网络接口启动计算机的机制,这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统,由Intel发明。
原理 客户机的固件(如网卡的PXE固件)先通过DHCP协议发送DHCP Discover消息,找到可用的PXE启动服务器的IP,找不到就一直等待到找到为止。 在找到可用的PXE启动服务器后,固件会向合适的启动服务器询问网络引导程序(NBP,Network Boot Program)的路径,并且通过TFTP协议将网络引导程序下载到电脑的内存中,最后执行它。 后续流程转交给网络引导程序,它通过 tftp 协议下载配置,了解它在哪里下载内核(kernel)、ramdisk和内核命令行以使用。 接下来的流程分为有盘和无盘系统启动,当客户端机器没有盘时,可以从网络磁盘启动(比如NFS);客户端有盘时,ramdisk查看内核命令行以了解如何配置网络以及从何处下载操作系统镜像文件并执行自动化脚本安装操作系统,或者直接从已安装的磁盘启动(PXE会自动识别是直接安装还是直接启动) 因此PXE的实现依赖网卡的支持,只有支持 PXE 客户端的网卡才能实现网络自动安装(现在基本都支持,只需要在BIOS中打开网络引导功能)。这种网卡实现了 DHCP 客户端和 TFTP 客户端,在 BIOS 的引导下通过 DHCP 协议自动分配 IP 地址,通过 TFTP 获取最小内核,然后在最小内核环境下通过 HTTP 协议或 NFS 协议获取系统安装版本。 服务端的DHCP服务器必须支持PXE的相关选项(最好还支持网络唤醒), 这些选项PXE客户端会通过DHCP Discover消息的Request Paramenter List来声明所有需要的选项,如果DHCP Server没有启用PXE启动支持,那么PXE客户端不会理会DHCP回应,继续发送请求。 一般网卡里的PXE固件,只支持通过DHCP和TFTP配合来启动;但是一些开源的项目,已经拓展了PXE的启动方式,支持通过HTTP, iSCSI, NFS来引导启动远程操作系统,比较有名的有iPXE(gPXE的继承者),它们可以烧录在网卡上替代网卡出厂设置,也可以下载ipxe.efi文件写入EFI系统分区作为启动程序。iPXE下载 PXE bootloader(网络引导程序)也有一些知名的,比如syslinux, pxelinux, iPXE也可以作为bootloader来使用。
注:上图为EFI引导流程,若采用Legacy BIOS,那么 PXE 客户端请求的不是bootx64.efi
而是pxelinux.0
UEFI和传统模式之间的区别在于:在 UEFI 模式下,引导加载程序是 EFI 可执行文件,经过签名以便安全引导 SecureBoot 接受,而在传统模式下,它是 PXELINUX 。大多数 DHCP/bootp 服务器可以配置为为特定机器提供正确的引导加载程序。 HTTP也可以改为使用NFS 一个内网存在两个DHCP服务器可能会存在冲突,在使用PXE时尽量不要同时存在两个DHCP服务器。不要使用无线网卡进行PXE 。
用途 想象以下几个场景:
有100台电脑需要进行统一化的系统安装
公司对信息安全要求比较高,需要使用无盘系统,工作站上不存在本地存储,全部使用中央服务器进行存储
你想要在别的电脑上启动你手上特定的系统
搭建 Windows Windows下的PXE服务端有TinyPXE,傲梅PXE和Serva。以TinyPXE为例。
TinyPXE 一些资源链接:汉化版TinyPXE下载 iPXE UEFI内核, 放在files iPXE wimboot内核, 放在files
ProxyDHCP:是DHCP代理服务 勾选:在局域网已有DHCP服务的情况下,建议勾选,不会与现有DHCP服务冲突,但它能传递Next-Server等选项,传统DHCP服务不一定能传递参数和选项; 不勾选:如果局域网没有DHCP服务,可使用此软件的DHCP服务,就不勾选,客户端会得到该软件分配的IP。
HTTPd:开启本机的httpd服务,即web服务,可通过httpd服务来启动系统,浏览器可访问。
SMB:文件共享协议,勾选并启动后主机会把当前目录下的files目录共享出去,共享名为PXE,可通过命令:net share查看主机共享出去的目录。
Option:有多个Option项,在不启动ProxyDHCP时,它会让主机充当DHCP服务器,分配IP地址及这些选项都能生效,启动ProxyDHCP时,这里设定的IP地址/子网/DNS等选项被忽略,由主DHCP来分配,其它选项(比如Next-Server)可以被分配。
Boot File:启动文件,可选择files目录下的各种启动文件,默认ipxe.pxe适合BIOS/UEFI等多种启动,在有些情况下也有选择pxelinux.0等的,一般保持默认。
Filename if user-class=gPXE or iPXE:选择iPXE或gPXE启动菜单文件,默认menu.ipxe,在files目录下,可以根据这个模板生成自己的菜单文件。
More:更多选项(略)
TFTP服务:tftp服务是pxe启动的根本,运行TinyPXE时,tftp服务自动启动,没有tftp服务,就没有pxe在启动之初下载文件的能力,Httpd或Smb服务虽然能下载文件,但客户端pxe没有启动前是不能使用的;Tftp服务适合传输小文件,大文件传输太慢,旧的pxe仅基于tftp来传输,不适合安装大系统;检测服务启动是否成功,在命令行下运行netstat -an | grep "69"
Tftpboot目录:即Tftp服务启动的根目录,它存放pxe启动文件和菜单文件,在软件里这个目录是files目录,我们可以在files下创建各系统的子目录,但目录结构要与menu.ipxe启动菜单内核和安装包文件对应一致。
日志:在软件面板中上部,有一块区域显示日志,客户端启动时获取IP,下载文件,执行启动等都会有日志显示在上面,这里可以在出错时给我们分析排除错误很大的帮助。iPXE启动菜单配置文件 TinyPXE使用iPXE启动程序,系统提供了多个扩展名为.ipxe的菜单文件,但它并非只能叫这个扩展名,.txt或者别的扩展名也可以,只要它是纯文件文件,且符合ipxe的语法规则就可以。 以menu.ipxe为例1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 #!ipxe #set boot-url http://${proxydhcp}/next-server set boot-url http://${next-server} set iscsi-server ${next-server} set iqn iqn.2008-08.com.starwindsoftware:target1 set iscsi-target iscsi:${iscsi-server}::::${iqn} set nfs-server ${next-server} set cifs-server //${next-server} # Setup some basic convenience variables set menu-timeout 5000 set submenu-timeout ${menu-timeout} # Ensure we have menu-default set to something isset ${menu-default} || set menu-default exit ######## MAIN MENU ################### :start menu Welcome to iPXE's Boot Menu item item --gap -- ------------------------- Utilities ------------------------------ #item bootsan Boot On San (${iscsi-target}) item bootaoe Boot On AOE (e0.0) #item iscsi setup, sanhook or sanboot iscsi item iscsi Boot On San item pxelinux pxelinux item grub4dos grub4dos item grub2 grub2 #item grub_cd boot to dvd (via grub4dos) #item grub_startrom boot to startrom.0 (via grub4dos) item grub_floppy boot floppy (via grub4dos) item grub_hd0 boot to hd0 (via grub4dos) item hdt hdt #item netbootme Netboot.Me #item undi_dos undi_dos item disk_util Disk Utilities item winpe Live Systemes item linux Install Linux Distros item --gap -- ------------------------------ Advanced --------------------------------- item config Configure settings item shell Enter iPXE shell item reboot Reboot item exit Exit (boot local disk) choose --default exit --timeout 30000 target && goto ${target} ########## UTILITY ITEMS #################### :shell echo Type exit to get the back to the menu shell set menu-timeout 0 goto start :failed echo Booting failed, dropping to shell goto shell :reboot reboot :exit exit :cancel echo You cancelled the menu, dropping you to a shell :config config goto start :back set submenu-timeout 0 clear submenu-default goto start ......后面省略
分为三个部分:预处理部分,主菜单部分,引导程序部分
首行#!ipxe
声明解释器
变量设置set 变量名 值
变量调用 和shell一样,${变量}
代码段
类似汇编的流程控制逻辑,到下一个冒号前,这段代码都是一个整体,会按照顺序执行,除非遇到goto跳转到其它的代码段。
设置菜单项menu Welcome
设置顶部显示的说明item 代码段名 描述
设置可选项目item --gap 内容
不可选择的分隔行item --key 按键 代码段
设置带快捷键的项目choose [--dafault 代码段] [--timeout 时间毫秒] target && goto ${target}
程序代码 例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 :win7 # Win7引导 kernel ${next-server}/wimboot || goto failed initrd ${next-server}/windows7/boot/bcd bcd || goto failed initrd ${next-server}/windows7/boot/boot.sdi boot.sdi || goto failed #windows的boot.wim最好是用微软工具生成的winpe启动文件,win10的也一样,在此不赘述 initrd ${next-server}/windows7/sources/boot.wim boot.wim || goto failed boot || goto failed goto start :win10 # Win10引导 kernel ${next-server}/wimboot || goto failed initrd ${next-server}/windows10/boot/bcd bcd || goto failed initrd ${next-server}/windows10/boot/boot.sdi boot.sdi || goto failed initrd ${next-server}/windows10/sources/boot.wim boot.wim || goto failed boot || goto failed goto start :winpe # WinPE引导 sanboot --no-describe ${boot-url}/images/winpe.iso || goto failed goto start :clonezilla # 再生龙引导 initrd ${boot-url}/_ISO/clonezilla/live/initrd.img || goto failed kernel ${boot-url}/_ISO/clonezilla/live/vmlinuz boot=live config noswap nolocales edd=on nomodeset vga=788 nosplash noprompt fetch=${boot-url}/_ISO/clonezilla/live/filesystem.squashfs || goto failed boot || goto failed goto start :debian # debian引导 cpuid --ext 29 && set arch amd64 || set arch i386 # sanboot http://ftp.fr.debian.org/debian/dists/Debian9.1/main/installer-amd64/current/images/netboot/mini.iso sanboot ${boot-url}/images/debian-10.7.0-amd64-netinst.iso || goto failed boot || goto failed goto start
关键有以下几参数:cpuid --ext 29 && set arch x86_64 || set arch i386
64位检测|| goto failed
失败跳转,可省略,但有它出错了它可以返回主菜单kernel
调用内核initrd
调用imgsanboot
调用iso文件kernel
载入内核initrd
载入init ramdiskchain
=boot
引导,必须先载入必须的内核和ramdisk或ISO镜像 调用的文件,也是httpd服务或者smb服务上的文件,大文件不适合tftp服务来调用,速度非常慢,而httpd和smb传输文件非常快,所以代码段执行的文件调用建议都采用httpd路径来调取。 最终文件内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 #!ipxe set boot-url http://${next-server} # Setup some basic convenience variables set menu-timeout 5000 # Ensure we have menu-default set to something isset ${menu-default} || set menu-default exit ######## MAIN MENU ################### :start menu Welcome to iPXE's Boot Menu item item --gap -- ------------------------- Utilities ------------------------------ item win7 Install Windows 7 item win10 Install Windows 10 item winpe Winpe item clonezilla Boot clonezilla item debian Install Debian 10 item --gap -- ------------------------------ Advanced --------------------------- item --key r reboot [R] Reboot the Computer item --key x exit [X] Exit (boot local disk) choose --default exit --timeout 60000 target && goto ${target} ########## UTILITY ITEMS #################### :failed echo Booting failed, dropping to shell goto start :reboot reboot :exit exit :win7 kernel ${next-server}/wimboot || goto failed initrd ${next-server}/windows7/boot/bcd bcd || goto failed initrd ${next-server}/windows7/boot/boot.sdi boot.sdi || goto failed #windows的boot.wim最好是用微软工具生成的winpe启动文件,win10的也一样,在此不赘述 initrd ${next-server}/windows7/sources/boot.wim boot.wim || goto failed boot || goto failed goto start :win10 kernel ${next-server}/wimboot || goto failed initrd ${next-server}/windows10/boot/bcd bcd || goto failed initrd ${next-server}/windows10/boot/boot.sdi boot.sdi || goto failed initrd ${next-server}/windows10/sources/boot.wim boot.wim || goto failed boot || goto failed goto start :winpe sanboot --no-describe ${boot-url}/images/winpe.iso || goto failed goto start :clonezilla initrd ${boot-url}/_ISO/clonezilla/live/initrd.img || goto failed kernel ${boot-url}/_ISO/clonezilla/live/vmlinuz boot=live config noswap nolocales edd=on nomodeset vga=788 nosplash noprompt fetch=${boot-url}/_ISO/clonezilla/live/filesystem.squashfs || goto failed boot || goto failed goto start :debian cpuid --ext 29 && set arch amd64 || set arch i386 #sanboot http://ftp.fr.debian.org/debian/dists/Debian9.1/main/installer-amd64/current/images/netboot/mini.iso sanboot ${boot-url}/images/debian-10.7.0-amd64-netinst.iso || goto failed boot || goto failed goto start
创建存储文件 在files目录下创建指定文件夹和子文件夹windows7\boot,windows7\sources,windows10\boot,windows10\sources,_ISO\clonezilla
将Windows镜像中的bcd,boot.sdi和boot.wim移入对应子目录中的boot文件夹
1 2 3 4 5 6 7 copy x:\boot\bcd pxesrv\files\windows7\boot\ copy x:\boot\boot.sdi pxesrv\files\windows7\boot\ copy x:\sources\boot.wim pxesrv\files\windows7\sources\ copy x:\boot\bcd pxesrv\files\windows10\boot\ copy x:\boot\boot.sdi pxesrv\files\windows10\boot\ copy x:\sources\boot.wim pxesrv\files\windows10\sources\
将PE镜像文件和Linux镜像文件放入images文件夹
1 2 copy winpe.iso pxesrv\files\images copy debian-10.7.0-amd64-netinst.iso pxesrv\files\images
启动服务端
设置BIOS,启用Netboot后启动客户端
Linux 传统PXE+Cloud-init 安装软件包 需要安装DHCP, TFTP和DNS服务器以实现PXE,dnsmasq
包恰好同时实现了三种服务。 需要安装HTTP服务器以传输镜像和实现Cloud-init,nginx
和apache2
都可以,也可以使用python3 -m http.server [port] [--bind IP] --directory|-d /var/www/html/
的简易服务器(此服务器默认使用当前目录,所以需要手动指定资源目录)。 需要安装两阶段的EFI Bootloader固件,第一阶段固件包名一般为shim-signed
或shim-x64
,第二阶段固件包名一般为grub-efi-amd64-signed
或grub2-efi-x64
需要一个用于网络安装的镜像。
创建TFTP文件夹 在符合规范的目录下创建tftp服务的根目录,目录下结构应当如下:
1 2 3 4 5 6 7 8 9 10 tftp ├── boot │ └── 镜像名 │ ├── initrd │ └── vmlinuz ├── grub │ ├── bootx64.efi │ ├── font.pf2 │ └── grub.cfg └── grubx64.efi
bootx64.efi
来自shim-signed
软件包
grubx64.efi
引导程序来自grub-efi-amd64-signed
软件包
grub.cfg
自行拷贝或创建
其他文件如启动镜像initrd
和内核vmlinuz
来自镜像
创建引导文件 创建目录后,执行cp /usr/lib/shim/shimx64.efi.signed /.../tftp/grub/bootx64.efi
创建bootx64.eficp /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed /.../tftp/grubx64.efi
创建grubx64.efi
创建内核文件 先挂载镜像mount -o ro xxx.iso /media
若提示mount: /media: WARNING: device write-protected, mounted read-only.
,不影响使用。 执行cp /media[/casper]/initrd /.../tftp/boot/镜像名/
创建引导镜像 执行cp /media[/casper]/vmlinuz /.../tftp/boot/镜像名/
创建内核 执行cp /media/grub/font.pf2 /.../tftp/grub/
创建GRUB字体文件 执行cp /media/grub/grub.cfg /.../tftp/grub/
创建GRUB配置文件
配置DNSMASQ 关键配置有以下几个:
配置 DHCP 地址段
配置引导文件目录
配置 tftp 根目录
配置日志路径
配置监听网卡,多网卡机器尤其需要关注
修改/etc/dnsmasq.cconf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 # 配置上游 DNS 服务器地址 server=114.114.114.144 # 指定服务的网卡 interface=enp2s0,lo # 绑定端口 bind-interfaces # 设置 DHCP 分发 IP 端范围、地址掩码、IP 地址有效时间 dhcp-range=192.168.1.100,192.168.1.150,255.255.255.0,12h # 或者使用CIDR dhcp-range=192.168.1.100/24,192.168.1.150/24,12h # 根据架构设置引导程序,路径为相对于 tftp 根目录的路径 dhcp-match=set:efi-x86_64,option:client-arch,7 dhcp-match=set:efi-x86_64,option:client-arch,9 dhcp-boot=tag:efi-x86_64,grub/bootx64.efi # 也可以使用pxe-service pxe-service=X86-64_EFI,"PXELINUX (EFI)",grub/bootx64.efi # 启用 tftp 服务 enable-tftp # 设置 tftp 根路径 tftp-root=/srv/tftp # 设置日志路径 log-facility=/var/log/dnsmasq.log
修改配置后,重启 dnsmasq
服务才能生效。
创建HTTP资源目录 启动HTTP服务systemctl start nginx|apache2
默认HTTP服务的资源根目录是 /var/www/html
,目录下结构应当如下:
1 2 3 4 5 6 7 html/ ├── autoinstall │ ├── meta-data │ └── user-data ├── index.html(没用) └── iso └── 镜像名.iso
autoinstall
目录存放参数自动配置文件,user-data
、meta-data
是cloud-init 要求的文件名
iso
目录存放操作系统镜像文件
修改grub.cfg 写入以下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 set timeout=5 if loadfont /grub/font.pf2 ; then set gfxmode=auto insmod efi_gop insmod efi_uga insmod gfxterm terminal_output gfxterm fi set menu_color_normal=white/black set menu_color_highlight=black/light-gray menuentry "autoinstall" { set gfxpayload=keep linux /boot/xxx/vmlinuz root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url='http://192.168.1.X/iso/xxx.iso' autoinstall ds=nocloud-net\;s=http://192.168.1.X/autoinstall/ --- initrd /boot/xxx/initrd }
指定镜像文件相对于 tftp
根目录的路径 /boot/xxx/initrd
root=/dev/ram0 ramdisk_size=1500000
是为了创建内核镜像的挂载空间,可删除
ip=dhcp
指定内核镜像挂载后使用 DHCP 获取 IP 地址
url=
指定 ISO 文件的网络存放路径
autoinstall ds=nocloud-net\;s=http://192.168.1.9/autoinstall/ ---
Grub中”;”有特殊含义,因此需要转义。注意末尾有空格和三个”-“,该配置指明配置文件所在路径,并指明参数自动填写
autoinstall配置 配置 user-data 遵循yaml格式,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #cloud-config autoinstall: version: 1 # 修改apt服务地址 apt: primary: - arches: [default] uri: https://mirrors.ustc.edu.cn/ubuntu user-data: # 配置时区 timezone: Asia/Shanghai # 禁用root账号 disable_root: true # 配置用户 identity: hostname: ubuntu-server password: "123456" username: ubuntu # 配置键盘 keyboard: {layout: us, variant: ''} locale: en_US.UTF-8 # 默认安装ssh server ssh: install-server: true # 指定安装的包 packages: - net-tools - python3-pip # 配置磁盘分区 storage: grub: reorder_uefi: False config: - {ptable: gpt, path: /dev/sda, wipe: superblock-recursive, preserve: false, name: '', grub_device: false, type: disk, id: disk-sda} - {device: disk-sda, size: 536870912, wipe: superblock, flag: boot, number: 1, preserve: false, grub_device: true, type: partition, id: partition-0} - {fstype: fat32, volume: partition-0, preserve: false, type: format, id: format-0} - {device: disk-sda, size: -1, wipe: superblock, flag: '', number: 2, preserve: false, type: partition, id: partition-1} - {fstype: xfs, volume: partition-1, preserve: false, type: format, id: format-1} - {device: format-1, path: /, type: mount, id: mount-1} - {device: format-0, path: /boot/efi, type: mount, id: mount-0}
密码需要加密,可以先用工具对自己的密码进行加密后填入
磁盘分区配置要注意,配置不对会导致自动安装走不下去,提示 crash;这个配置的整体思路是先格式化 disk-sda
,然后在 disk-sda
下划分 /dev/sda1
、/dev/sda2
,然后分别挂载 /
、/boot/efi
目录
安装过程日志在 /var/log/installer/
,如果安装失败可以通过 nc
等工具实时发出去
配置meta-data touch创建一个空文件即可。vendor-data 不需要理会。 确保以上文件所有人可读。 引导后即可自动安装。
autoinstall脚本 最小化的配置是:
1 2 3 4 5 version: 1 identity: hostname: hostname username: username password: $crypted_pass
一个标准设置为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 version: 1 reporting: hook: type: webhook endpoint: http://example.com/endpoint/path early-commands: - ping -c1 198.162.1.1 locale: en_US keyboard: layout: gb variant: dvorak network: network: version: 2 ethernets: enp0s25: dhcp4: yes enp3s0: {} enp4s0: {} bonds: bond0: dhcp4: yes interfaces: - enp3s0 - enp4s0 parameters: mode: active-backup primary: enp3s0 proxy: http://squid.internal:3128/ apt: primary: - arches: [default] uri: http://repo.internal/ sources: my-ppa.list: source: "deb http://ppa.launchpad.net/curtin-dev/test-archive/ubuntu $RELEASE main" keyid: B59D 5F15 97A5 04B7 E230 6DCA 0620 BBCF 0368 3F77 storage: layout: name: lvm identity: hostname: hostname username: username password: $crypted_pass ssh: install-server: yes authorized-keys: - $key allow-pw: no snaps: - name: go channel: 1.14/stable classic: true debconf-selections: | bind9 bind9/run-resolvconf boolean false packages: - libreoffice - dns-server^ user-data: disable_root: false late-commands: - sed -ie 's/GRUB_TIMEOUT=.*/GRUB_TIMEOUT=30/' /target/etc/default/grub error-commands: - tar c /var/log/installer | nc 192.168.0.1 1000
关键字包括version 名称:版本 类型:整型 默认值:无 为将来不同版本准备的版本信息,目前只能为 1 。locale 名称:语言环境 类型:字符串 默认值:en_US.UTF-8 是否可交互:可,对于任何块中是的话,总是可以交互 为已安装系统配置的语言环境。network 名称:网络 类型:netplan-format映射,参看下面 默认值:用于DHCP协议的名字为ethen 的网卡 是否可交互:可 netplan 格式的网络配置。将在安装期间以及已安装的系统中应用。默认是解释安装媒介的配置,它在名称匹配 “eth” 或 “en” 的任何网卡上运行 DHCPv4 请求,并随后禁用任何未获取到IP地址的网卡。 例如,要在特定网卡 enp0s31f6 上运行 dhcp6 请求:
1 2 3 4 5 network: version: 2 ethernets: enp0s31f6: dhcp6: yes
apt 名称:APT高级包管理工具 类型:映射 默认值:参看下面 是否可交互:可 APT配置,在安装期间和引导到目标系统后都使用。默认值为:
1 2 3 4 5 6 7 8 apt: preserve_sources_list: false primary: - arches: [i386, amd64] uri: "http://archive.ubuntu.com/ubuntu" - arches: [default] uri: "http://ports.ubuntu.com/ubuntu-ports" geoip: true
任何提供的配置都会与默认配置合并,而不是替换它。 如果您只想设置镜像源,请使用如下配置:
1 2 3 4 apt: primary: - arches: [default] uri: YOUR_MIRROR_GOES_HERE
storage 名称:存储 类型:映射,参看下面 默认值:对于单块硬盘为 lvm ,对于多块硬盘则无默认值 是否可交互:可 支持的布局:目前支持的布局就两种,分别是逻辑卷模式 lvm 和直通模式 direct 。
1 2 3 4 5 6 storage: layout: name: lvm storage: layout: name: direct
默认情况下,这些将安装到系统中容量最大的磁盘,但可以提供匹配规范(“match: {}”,见下文)来指示要使用的磁盘:
1 2 3 4 5 6 7 8 9 10 storage: layout: name: lvm match: serial: CT* storage: layout: name: disk match: ssd: yes
默认采用 lvm 。基于动作的配置 如果使用 layout 功能配置磁盘,则不会使用 config 部分。 除了将操作列表放在关键字 config 下之外, grub 和swap curtin配置项也可以放在此处。因此存储部分可能如下所示:
1 2 3 4 5 6 7 8 9 storage: swap: size: 0 config: - type: disk id: disk0 serial: ADATA_SX8200PNP_XXXXXXXXXXX - type: partition ...
磁盘选择扩展 Curtin支持通过串行或路径(如 /dev/sdc )识别磁盘,服务器安装程序也支持这一点。安装程序还支持磁盘操作上的 match spec,支持更灵活的匹配。 存储配置中的操作按照它们在自动安装文件中的顺序进行处理。任何磁盘操作都会被分配一个匹配的磁盘——如果有多个磁盘,则从一组未分配的磁盘中任意选择,如果没有未分配的匹配磁盘,则会导致安装失败。 匹配规范支持以下关键字:
model: foo :匹配 udev 中 ID_VENDOR=foo 的磁盘,支持通配符
path: foo :匹配 udev 中 DEVPATH=foo 的磁盘,支持通配符(通配符支持将此与直接在磁盘操作中指定 path: foo 区分开来)
serial: foo :匹配 udev 中 ID_SERIAL=foo 的磁盘,支持通配符(通配符支持将此与直接在磁盘操作中指定 serial: foo 区分开来)
ssd: yes|no :匹配是或不是 SSD 的磁盘(相对于机械硬盘)
size: largest|smallest :如果有多个匹配项,则取最大或最小的磁盘而不是任意一个(在 20.06.1 版本中添加了对最小 smallest 的支持) 因此,例如,要匹配任意磁盘,只需:
匹配容量最大的SSD硬盘:1 2 3 4 5 - type: disk id: big-fast-disk match: ssd: yes size: largest
匹配希捷Seagate硬盘:1 2 3 4 - type: disk id: data-disk match: model: Seagate
分区/逻辑卷扩展 curtin中的分区或逻辑卷的大小指定为字节数。自动安装配置更加灵活: 可以使用安装程序用户界面中支持的“1G”、“512M”语法指定大小 可以将大小指定为包含磁盘(或RAID)的百分比,例如“50%” 对于为特定设备指定的最后一个分区,可以将大小指定为“-1”以指示该分区应填充剩余空间。1 2 3 4 5 6 7 8 9 10 11 - 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:密码,加密的。这是与 sudo 一起使用时所必需的,即使配置了 SSH 访问。
ssh 名称: SSH 服务 类型:映射,参看下面 默认值:参看下面 是否可交互:可 为已安装的系统配置 SSH 服务。可以包含关键字的映射: install-server 名称:安装 SSH 服务 类型:布尔型 默认值:false,不安装 是否安装 OpenSSH 服务。 authorized-keys 名称: SSH 认证公钥 类型:字符串列表 默认值:[] 要安装在初始用户帐户中的 SSH 公钥列表,方便其他主机采用密钥通过 SSH 访问该主机。 allow-pw 名称:是否允许密码 类型:布尔型 默认值:当 authorized_keys 为空时为真 true ,否则为否 false
snaps 名称:snap包 类型:列表 默认值:不安装其他snap 是否可交互:可 要安装的snap包列表。每个snap都表示为具有必需的关键字 name 和可选的关键字 chanel (默认为 stable )和 classic (经典默认为 false )的映射。如:
1 2 3 4 snaps: - name: etcd channel: edge classic: false
debconf-selections 名称:采用 debconf 设置包选择 类型:字符串 默认值:无 是否可交互:否 安装程序将使用 debconf 设置选择值更新目标。用户需要熟悉软件包 debconf 选项。
packages 名称:软件包 类型:列表 默认值:无软件包 是否可交互:否 要安装到目标系统中的软件包列表。更准确地说,是传递给命令 apt-get install 的字符串列表,因此这包括任务选择( dns-server^ )和安装特定版本的包( my-package=1-1 )。
user-data 名称:用户数据 类型:映射 默认值:{} 是否可交互:否 提供 cloud-init 用户数据,它将与安装程序生成的用户数据 user-data 合并。如果您提供此信息,则无需提供身份 identity 部分(但您有责任确保您可以登录到已安装的系统!)。
转换preceed文件 安装autoinstall-generator
包 执行autoinstall-generator my-preseed.txt my-cloud-config.yaml --cloud
Linux+iPXE+preseed 安装软件包 需要安装DHCP, TFTP和DNS服务器以实现PXE,dnsmasq
包恰好同时实现了三种服务。 需要iPXE的引导文件,在 iPXE.org 下载undionly.kpxe
和ipxe.efi
,也可直接执行wget https://boot.ipxe.org/undionly.kpxe
wget https://boot.ipxe.org/ipxe.efi
需要安装HTTP服务器以传输镜像,nginx
和apache2
都可以,也可以使用python3 -m http.server [port] [--bind IP] --directory|-d /var/www/html/
的简易服务器(此服务器默认使用当前目录,所以需要手动指定资源目录)。
创建TFTP文件夹 在符合规范的目录下创建tftp服务的根目录,目录下结构应当如下:
1 2 3 4 tftp ├── undionly.kpxe ├── boot.ipxe └── ipxe.efi
配置DNSMASQ 同上,不解释了。不同之处在于这次同时支持不同架构的计算机。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 # 配置上游 DNS 服务器地址 server=114.114.114.144 # 指定服务的网卡 interface=enp2s0,lo # 绑定端口 bind-interfaces # 设置 DHCP 分发 IP 端范围、地址掩码、IP 地址有效时间 dhcp-range=192.168.1.100,192.168.1.150,255.255.255.0,12h # 或者使用CIDR dhcp-range=192.168.1.100/24,192.168.1.150/24,12h # 匹配BIOS架构的客户端 dhcp-match=set:bios,option:client-arch,0 # 匹配iPXE客户端,其特征码为175 dhcp-match=set:ipxe,175 # iPXE客户端直接引导iPXE,方括号内容为使用外部TFTP服务器 dhcp-boot=tag:ipxe,boot.ipxe[,,192.168.1.X] # 非iPXE的BIOS客户端直接使用undionly.kpxe引导 dhcp-boot=tag:!ipxe,tag:bios,undionly.kpxe[,,192.168.1.X] # EFI客户端全部使用ipxe.efi引导 dhcp-boot=tag:!ipxe,tag:!bios,ipxe.efi[,,192.168.1.X] # 也可以使用pxe-service,此处不细写了 # 启用 tftp 服务 enable-tftp # 设置 tftp 根路径 tftp-root=/srv/tftp # 设置日志路径 log-facility=/var/log/dnsmasq.log
创建HTTP资源目录 启动HTTP服务systemctl start nginx|apache2
默认http服务的资源根目录是 /var/www/html
,目录下结构应当如下:
1 2 3 4 5 6 7 8 html/ ├── index.html(没用) ├── boot │ ├── bcd │ ├── boot.sdi │ └── boot.wim └── iso └── 镜像名.iso
boot目录下为Windows引导文件,详情见之前内容
iso目录存放镜像
创建iPXE启动脚本 创建boot.ipxe后,根据之前说过的格式,写入以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 #!ipxe # 设定服务器IP,这里只演示HTTP服务器 set boot-url http://192.168.1.X set menu-timeout 5000 isset ${menu-default} || set menu-default exit ######## MAIN MENU ################### :start menu PXE Boot Menu item shell iPXE shell item ubuntu Ubuntu autoinstall item debian Debian autoinstall item reboot Reboot item exit Exit to BIOS choose --default debian --timeout 10000 option && goto ${option} ########## UTILITIES #################### :shell shell # 直接下载 :ubuntu set mirror https://mirrors.ustc.edu.cn/ set release jammy cpuid --ext 29 && set arch amd64 || set arch i386 # 使用url=指定preseed脚本 set base-url ${mirror}/ubuntu/dists/${release}/main/installer-${arch}/current/legacy-images/netboot/ubuntu-installer/${arch} kernel ${base-url}/linux auto=true url=xxx/ubuntu.cfg keymap=us domain= hostname=ubuntu-server interface=auto netcfg/do_not_use_netplan=true || goto failed initrd ${base-url}/initrd.gz || goto failed goto start # 本地服务器文件 :debian cpuid --ext 29 && set arch amd64 || set arch i386 sanboot ${boot-url}/iso/debian.iso || goto failed boot || goto failed goto start :reboot reboot :exit exit
preseed自动安装脚本 示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 # 自动设置网络接口 d-i netcfg/choose_interface select auto # 手动设置网络接口 #d-i netcfg/choose_interface select eth1 # 手动设置网络请先禁用DHCP #d-i netcfg/disable_dhcp boolean true # 手动设置网络 d-i netcfg/get_nameservers string 10.0.2.3 d-i netcfg/get_ipaddress string 10.0.2.99 d-i netcfg/get_netmask string 255.255.255.0 d-i netcfg/get_gateway string 10.0.2.2 d-i netcfg/confirm_static boolean true # 设置主机名和域名 d-i netcfg/get_hostname string babelbox d-i netcfg/get_domain string unassigned-domain ### 设置镜像源 d-i mirror/country string enter information manually d-i mirror/http/hostname string 10.0.2.2 d-i mirror/http/directory string /debian d-i mirror/http/proxy string ### 分区 # 使用单分区 d-i partman-auto/init_automatically_partition select biggest_free d-i partman-auto/choose_recipe select atomic # 使用自动分区 d-i partman/choose_partition select finish d-i partman/confirm boolean true d-i partman/confirm_nooverwrite boolean true ### 时区设置 # 是否使用UTC d-i clock-setup/utc boolean true # 设置时区 d-i time/zone string Asia/Shanghai ### Apt设置 # 是否使用镜像源 d-i apt-setup/use_mirror boolean false ### 用户设置 # root用户设置 d-i passwd/root-password password r00tme d-i passwd/root-password-again password r00tme # 普通用户设置 d-i passwd/user-fullname string Debian User d-i passwd/username string debian d-i passwd/user-password password r00tme d-i passwd/user-password-again password r00tme ### GRUB设置 d-i grub-installer/skip boolean false d-i lilo-installer/skip boolean true ### 包设置 d-i pkgsel/update-policy select none d-i pkgsel/include string openssh-server vim wget net-tools software-properties-common d-i pkgsel/upgrade select none ### 完成安装 d-i finish-install/reboot_in_progress note
在引导菜单中使用url=指定preseed脚本
kickstart脚本 在RHEL系安装完成后,kickstart脚本会自动生成于/root/anaconda-ks.cfg。 在其他系统下,可以安装system-config-kickstart
包,然后按照图形界面进行设置后生成文件。 在引导选项中使用ks=指定kickstart脚本。
Docker+Cobbler Cobbler 是一个 Linux 服务器安装的服务,可以通过网络启动 (PXE) 的方式来快速安装、重装物理服务器和虚拟机,同时还可以管理 DHCP,DNS 等。 Cobbler集成以下服务
PXE 服务支持
DHCP 服务管理(可选dhcp-server, dnsmasq和kea)
DNS 服务管理(可选bind或dnsmasq)
IPMI 电源管理
Kickstart 服务支持
YUM 仓库管理
TFTP (PXE 启动时需要)
Apache httpd(提供 kickstart 的安装源,并提供定制化的 kickstart 配置) Cobbler可以使用命令行方式管理,也提供了基于Web的界面管理工具(cobbler-web),还提供了API接口,可以方便二次开发使用。
Cobbler的配置结构基于一组注册的对象。每个对象表示一个与另一个实体相关联的实体。当一个对象指向另一个对象时,它就继承了被指向对象的数据,并可覆盖或添加更多特定信息。 发行版(distros): 表示一个操作系统。它承载了内核和initrd的信息,以及内核参数等其他数据。 配置文件(profiles):包含一个发行版、一个kickstart文件以及可能的存储库,还包括更多特定的内核参数等其他数据。 系统(systems):表示要配给的机器。它包括一个配置文件或一个镜像、IP和MAC地址、电源管理(地址、凭据、类型)以及更为专业的数据等信息。 镜像(images):可以替换一个保函不屑于此类别的文件的发行版对象(例如,无法分为内核和initrd的对象)。
Server端
启动Cobbler
服务
进行Cobbler
错误检查,执行cobbler check
命令
进行配置同步,执行cobbler sync
命令
复制相关启动文件到TFTP
目录中
启动DHCP
服务,提供地址分配
DHCP
服务分配IP地址
TFTP
传输启动文件
Server
端接收安装信息
Server
端发送ISO
镜像与Kickstart
文件
Client端
客户端以PXE
模式启动
客户端获取IP
地址
通过TFTP
服务器获取启动文件
进入Cobbler
安装选择界面
根据配置信息准备安装系统
加载Kickstart
文件
传输系统安装的其它文件
进行安装系统
安装 不幸的是,Deb系的官方源中没有Cobbler。所以要么从源码构建,要么使用Docker。 RHEL系安装:dnf module enable cobbler:3
dnf install cobbler
Docker安装:docker pull tartarefr/docker-cobbler
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 # 挂载镜像,此处以centos为例,挂载点会与容器共享 sudo mkdir /mnt/centos sudo mount -o ro /path/to/isos/CentOS-7-x86_64-DVD-1804.iso /mnt/centos # 创建cobbler http资源目录卷 docker volume create cobbler_www # 创建cobbler tftp根目录卷 docker volume create cobbler_tftp # 创建cobbler配置文件目录卷 docker volume create cobbler_config # 创建cobbler备份目录卷 docker volume create cobbler_backup # 创建cobbler运行时卷 docker volume create cobbler_run HOST_IP_ADDR: 主机的IP,用于cobbler API,必要 HOST_HTTP_PORT: 主机的HTTP端口,用于容器中的cobbler API,默认为80 DEFAULT_ROOT_PASSWD: 默认root密码,默认为cobbler,必要 COBBLER_WEB_USER: cobbler_web的用户,默认为cobbler,可选 COBBLER_WEB_PASSWD: cobbler_web的用户密码,默认为cobbler,可选 COBBLER_WEB_REALM: cobbler_web的领域,默认为Cobbler,可选 COBBLER_LANG: 语言,默认为fr_FR,可选 COBBLER_KEYBOARD: 键盘类型,默认为fr-latin-9,可选 COBBLER_TZ: 时区,默认为Europe/Paris,可选 docker run -itd \ -v cobbler_www:/var/www/cobbler:Z \ -v cobbler_tftp:/var/lib/tftp:Z \ -v cobbler_config:/var/lib/cobbler/config:Z \ -v cobbler_backup:/var/lib/cobbler/backup:Z \ -v cobbler_run:/var/run/supervisor:Z \ -v /mnt/centos:/mnt:Z \ -e DEFAULT_ROOT_PASSWD=cobbler \ -e HOST_IP_ADDR=$(hostname --ip-address | awk '{print $1}') \ -e HOST_HTTP_PORT=80 \ -e COBBLER_WEB_USER=cobbler \ -e COBBLER_WEB_PASSWD=cobbler \ -e COBBLER_WEB_REALM=Cobbler \ -e COBBLER_LANG=en_US \ -e COBBLER_KEYBOARD=us \ -e COBBLER_TZ=Asia/Shanghai \ -p 69:69/udp \ -p 80:80 \ -p 443:443 \ -p 25151:25151 \ --name cobbler \ cobbler:latest
导入测试镜像,在容器中执行cobbler image add --name=memtest86+ --file=/boot/memtest86+-5.01 --image-type=direct
导入CentOS镜像,在容器中执行cobbler import --path=/mnt --name=CentOS-7-x86_64
设置CentOS镜像,在容器中执行
1 2 3 cobbler profile add --name=CentOS-7-x86_64-Desktop --distro=CentOS-7-x86_64 --kickstart=/var/lib/cobbler/kickstarts/sample_end.ks --virt-file-size=12 --virt-ram=2048 cobbler profile edit --name CentOS-7-x86_64-Desktop --ksmeta="type=desktop"
文件内容 Cobbler的文件组成如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 # 配置目录 /etc/cobbler # 配置文件目录 /etc/cobbler/settings # cobbler主配置文件,这个文件是YAML格式 /etc/cobbler/dhcp.template # DHCP服务的配置模板 /etc/cobbler/tftpd.template # tftp服务的配置模板 /etc/cobbler/rsync.template # rsync服务的配置模板 /etc/cobbler/iso # iso模板配置文件目录 /etc/cobbler/pxe # pxe模板文件目录 /etc/cobbler/power # 电源的配置文件目录 /etc/cobbler/users.conf # Web服务授权配置文件 /etc/cobbler/users.digest # 用于web访问的用户名密码配置文件 /etc/cobbler/dnsmasq.template # DNS服务的配置模板 /etc/cobbler/modules.conf # Cobbler模块配置文件 # 数据目录 /var/lib/cobbler # Cobbler数据目录 /var/lib/cobbler/config # 用于存放distros,system,profiles等信息配置文件 /var/lib/cobbler/triggers/ # 用于存放用户定义的cobbler命令 /var/lib/cobbler/kickstarts # 默认存放kickstart文件 /var/lib/cobbler/loaders # 存放的各种引导程序 # 镜像目录 /var/www/cobbler # 系统安装镜像目录 /var/www/cobbler/ks_mirror # 导入的发行版系统镜像列表 /var/www/cobbler/images # 导入的系统镜像的kernel和initrd启动文件 /var/www/cobbler/repo_mirror # yum源存储目录 # 日志目录 /var/log/cobbler # 日志目录 /var/log/cobbler/install.log # 客户端系统安装日志 /var/log/cobbler/cobbler.log # cobbler日志
cobbler命令
cobbler check
核对当前设置是否有问题
cobbler list
列出所有的Cobbler元素
cobbler report
列出元素的详细信息
cobbler setting edit --name=配置项 --value=配置内容
修改Cobbler配置,对应/etc/cobbler/settings中的内容
cobbler sync
同步配置到数据目录,更改配置后最好都要执行下
cobbler reposync
同步yum仓库到与本地一致
cobbler distro
查看导入的发行版系统信息
cobbler system
查看添加的系统信息
cobbler profile
查看配置信息
cobbler get-loaders
下载bootloader
cobbler import --name=centos --path=/media/cdrom --arch=x86_64
导入系统
cobbler profile edit --name=centos --distro=centos --kickstart= /var/lib/cobbler/kickstarts/centos.cfg
修改profile,对应profile report中的内容
配置流程
配置/etc/cobbler/settings,设置服务器IP和TFTP服务器IP1 2 server: 192.168.1.X next_server: 192.168.1.X
或直接执行cobbler setting edit --name=server --value=192.168.1.X
cobbler setting edit --name=next_server --value=192.168.1.X
下载bootloader文件 执行cobbler get-loaders
,也可以手动下载后放入/var/lib/cobbler/loaders
cat /var/lib/tftpboot/pxelinux.cfg/default
进行检查
生成密码 执行openssl passwd -1
,使用MD5算法生成加密密码,写入/etc/cobbler/settings
1 default_password_crypted: "password"
修改/etc/xinetd.d/xxx
中的服务,将需要的服务的disable=
改为no
根据需要安装额外包如pykickstart
,fence-agents
,debmirror
,解决check出的剩余错误
settings文件全部内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 # 不允许将同样的hostname配置到多个操作系统,如果为#将不利于局域网内的域名解析。 allow_duplicate_hostnames:0 # 不允许将同样的IP地址配置到多个操作系统,如果为#将会造成局域网内DHCP和DNS服务冲突。 allow_duplicate_ips:0 # 不允许将同样的MAC地址配置到多个操作系统,如果为#将会造成局域网内DHCP和DNS服务冲突。 allow_duplicate_macs:0 # 允许被安装操作系统客户机将系统安装信息返回到Cobbler Server的/var/log/cobbler/anamon/目录下,0为关闭 anamon_enabled:1 # 在此修改认证模块,默认为login authn_pam_service:"login" # 关闭操作系统安装结束后构建报表,1为开起 build_reporting_enabled:0 # 报表邮件发件人,可选 build_reporting_sender:"" # 报表发送地址列表 build_reporting_email:['root@localhost'] # 发送报表邮件的SMTP服务器地址 build_reporting_smtp_server:172.16.2.232 # 报表邮件的主题 build_reporting_subject:"" # cheetah(一个用python写的开源的模板引擎和代码生成工具)模块导入白名单。配置白名单后cheetah将可以使用里面相关模块。这是一个有用的高级功能,如果允许cheetah导入任意模块,这系统将会有安全隐患。 cheetah_import_whitelist:-"random"-"re"-"time" # 使用createrepo命令的reposync期间创建新存储库的默认选项。如果createrepo版本大于或等于0.4.10,使用此参数将大幅缩短cobbler reposync命令执行的时间 createrepo_flags:"-c cache -s sha" # 默认的kickstart文件,当被安装操作系统服务器没有指定使用kickstart文件时,将使用此文件。 default_kickstart:/var/lib/cobbler/kickstarts/default.ks # 默认的DNS服务器地址,当被安装操作系统服务器没有指定使用DNS服务器地址时候,将使用此地址 default_name_servers:[] # 分配给新创建对象的所有者列表,仅用于Cobbler Web。 default_ownership:"admin" # 被安装操作系统服务器的root密码(默认为cobbler)。使用”openssl passwd -1″命令生成 default_password_crypted: cloud$b#gaBwSH/Z8OiOGobbx7H # 默认解析kickstart和snippets使用的类型为cheetah,cobbler支持cheetah和jinja2,如果修改将修改cobbler所有模板的相关需解析项。 default_template_type:"cheetah" # 配置默认的虚拟桥接网卡,也可配置为virbr0 default_virt_bridge: xenbr0 # 虚拟机默认磁盘空间(GB) default_virt_file_size:5 # 虚拟机默认内存大小(MB) default_virt_ram:#2 # 默认的虚拟化类型为xen(RHEL6以后默认使用KVM) default_virt_type: xenpv # 不允许gpxe启动。(gPXE支持通过HTTP、FTP和NFS方式传输文件)通常用于ESXi和XenServer的安装 enable_gpxe:0 # 开启在被安装操作系统pxe启动时,使用菜单方式选择安装操作系统,该选项在Cobbler system那默认关闭。 enable_menu:1 # 不允许cobbler安装和配置func(一个强大的远程控制和脚本执行工具)。1为允许 func_auto_setup:0 # func server地址,默认为其官网主页 func_master: overlord.example.org # Apache监听端口 http_port:80 # 内核选项,在每一个使用cobbler安装的系统都存在以下选项 kernel_options: ksdevice: bootif lang:' ' text:~ # 内核选项s390x架构,和内核选项一样 kernel_options_s390x: RUNKS:1 ramdisk_size:40000 root:/dev/ram0 ro:~ ip: off vnc:~ # 使用LDAP身份验证的服务器地址 ldap_server:172.16.2.232 # 使用LDAP身份认证的DN ldap_base_dn:"DC=example,DC=com" # 连接到LDAP服务器时所使用的端口。如果启用了TLS和这个端口389是默认,Cobbler在内部转换为SSL的636端口 ldap_port:389 # 允许LDAP身份验证使在SSL/TLS加密连接 ldap_tls:1 # 允许LDAP身份验证模块使用一个匿名绑定连接到LDAP服务器。 ldap_anonymous_bind:1 # 用于绑定到LDAP服务器进行身份验证使用的DN,当ldap_anonymous_bind=0才会生效。 ldap_search_bind_dn:'' # 用于绑定到LDA服务器进行身份验证使用的密码,当ldap_anonymous_bind=0才会生效。 ldap_search_passwd:'' # 用于搜索查询LDAP服务器时使用的前缀。 ldap_search_prefix:'uid=' # 所有对象列表的默认管理类名。用于集成一个配置管理系统,例如Puppet。 mgmt_classes:[]mgmt_parameters: from_cobbler:1 # 允许被安装操作系统的服务器,在安装操作系统时安装和配置Puppet工具。0为不允许。 puppet_auto_setup:1 # 允许Cobbler使用Snipperts将客户操作系统自动注册到Puppet Master。 sign_puppet_certs_automatically:1 # Puppetca命令的路径,用于Cobbler为新安装操作系统时自动注册和自动清理注册信息。 puppetca_path:"/usr/bin/puppet" # 自动清理老的认证信息(当节点有重新安装操作系统时,会触发puppet master清理对应的认证信息)。 remove_old_puppet_certs_automatically:1 # 允许Cobbler接管DHCP服务。这意味着它会根据模板自动生成dhcp配置文件。 manage_dhcp:1 # 允许Cobbler接管DNS服务。并不重要。 manage_dns:0 # 设置绑定的chroot路径,默认为空,自动检测。 bind_chroot_path:"" # DNS服务的IP地址 bind_master:127.0.0.1 # 允许Cobbler接管tftp服务。必须。 manage_tftpd:1 # 允许Cobbler接管rsync服务。并不重要。 manage_rsync:1 # 如果允许Cobbler接管DNS服务,则以下为配置DNS解析管理区域列表。 manage_forward_zones:['huacloud.demo']manage_reverse_zones:[] # 如果允许Cobbler接管DHCP服务,这个IP地址将传送给被安装操作系统在PXE启动时使用。如果地址错误,则会导致Tftp时提示timeout错误。 next_server:172.16.2.232 # Cobbler使用电源管理工具时使用的类型,默认为ipmitools工具。 power_management_default_type:'ipmitool' # 用于发送电源管理功能到客户机的模板路径。 power_template_dir:"/etc/cobbler/power" # 客户机只安装一次操作系统,再次开机时不进入PXE,重装需要 Cobbler system 中使用 netboot-enabled 指定。 pxe_just_once:1 # 如果允许Cobbler接管Tftp服务,这个目录包含模板用于生成PXE启动配置文件。 pxe_template_dir:"/etc/cobbler/pxe" # 系统控制台路径,主要用于清除日志和消息。 consoles:"/var/consoles" # 是否允许将红帽管理平台添加到Cobbler中。默认“off”关闭,“hosted”使用红帽网络,“site”使用红帽Satellite Server和Spacewalk服务器。 redhat_management_type:"off" # 如果允许使用红帽管理平台,在此配置默认RHN服务器,用于认证和和其他服务。 redhat_management_server:172.16.2.232 # 在此填写红帽注册密钥。 redhat_management_key:"" # 不允许cobbler接管红帽管理平台 redhat_management_permissive:0 # 不允许使用/usr/bin/cobbler-register远程添加system信息,以及不允许注册的新硬件系统记录。 register_new_installs:0 # 使用yum命令的reposync时,默认添加的参数,如果不支持以下参数可以修改。 reposync_flags:"-l -m -d" # 当cobbler sync允许重启DNS和DHCP服务。 restart_dns:1 restart_dhcp:1 # 允许执行/var/lib/cobbler/triggers/install目录下的触发器(脚本)。默认使用root帐号执行。 run_install_triggers:1 # 使用允许将触发器通过使用版本控***务管理,默认使用git,也支持hg。 scm_track_enabled:0 scm_track_mode:"git" # Cobbler服务的IP地址。 server:172.16.2.232 # 不允许客户机使用本地主机地址而是通过Cobbler Server的配置,通常 client_use_localhost:0 # Snippets存放路径 snippetsdir:/var/lib/cobbler/snippets # 不允许Cobbler使用远程的kickstart文件 template_remote_kickstarts:0 # 开启物理服务器启动后重启上面的虚拟机。 virt_auto_boot:1 # Cobbler Web页面存放路径 webdir:/var/www/cobbler # Cobbler监听的XMLRPC端口。 xmlrpc_port:25151 # 允许系统安装后将自建软件园放到/etc/yum.repo.d/目录下 yum_post_install_mirror:1 # 默认将cobbler的软件园设置到最优先权。 yum_distro_priority:1 # 默认使用yumdownloader命令时,添加–resolve参数 yumdownloader_flags:"--resolve" # 不允许cobbler将JSON信息写入JSON文件(包含所有数据对象类型),默认的是,将JSON输出到一行。 serializer_pretty_json:0
配置DHCP 首先修改/etc/cobbler/settings
总结一下,目前settings一共修改了以下几项:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 server: 192.168.1.X # 这个参数重点说明一下: # 这里指的是TFTP的地址,有些情况下也是DHCP地址;因为DHCP服务器会把这个地址作为DHCP选项(66 Boot Server Host Name, 67 Bootfile Name)一起传送过去;这也是一个对当前DHCP要求的指标之一,如果当前环境中服务器的DHCP软件不支持这个选项,那么就得考虑换一个了。 # 当DHCP服务器同时也是TFTP服务器的话就会和DHCP地址一样。如果两者分离的话就需要在DHCP服务器手动配置一下选项,这里也要指向TFTP服务器的地址 next_server: 192.168.1.X # 装系统重启后,不再进入PXE引导菜单,直接引导硬盘的系统。 pxe_just_once: 1 # 这里是新系统的root密码,使用命令openssl passwd -1创建 default_password_crypted: # 这里的管理指的是cobbler对于这些服务的配置文件定义,当使用sync命令同步的时候,会自动根据模板文件覆盖这些服务的配置文件; manage_dhcp: 1 manage_rsync: 1
或直接执行cobbler setting edit --name=manage_dhcp --value=1
然后修改cobbler的dhcp模版/etc/cobbler/dhcp.template,不要直接修改dhcp本身的配置文件,因为cobbler会覆盖它们。1 2 3 4 5 6 7 8 9 10 subnet 192.168.1.0 netmask 255.255.255.0 { #这里改为分配的子网和掩码 # option routers 192.168.1.5; # 设置网关地址,可选 # option domain-name-servers 192.168.1.1; # 设置DNS地址,可选 option subnet-mask 255.255.255.0; # IP掩码 range dynamic-bootp 192.168.2.100 192.168.2.254; # DHCP的IP范围 default-lease-time 21600; max-lease-time 43200; next-server $next_server; # 就是settings配置的next_server! ...以下不变,省略 }
修改完成后执行cobbler sync
导入镜像 将镜像挂载 mount -o ro xxx.iso /media
导入
1 2 3 4 5 cobbler import --path=/media --name=xxx --arch=x86_64 # --path 镜像路径 # --name 为安装源定义一个名字 # --arch 指定安装源是32位、64位、ia64, 目前支持的选项有: x86│x86_64│ia64 # 安装源的唯一标示就是根据name参数来定义,如果重复,系统会提示导入失败。
安装成功后,可以在cobbler distro list
中看到系统名 系统会拷贝到镜像目录/var/www/cobbler/ks_mirror/
中,可以进行检查 检查镜像信息 cobbler distro report --name=xxx
检查镜像profile cobbler profile report --name=xxx
设置Kickstart 可以自己编辑创建,也可以使用/var/lib/cobbler/kickstarts/
中内置的,默认使用sample_end.ks
,可以通过cobbler profile edit --name=xxx --kickstart=/var/lib/cobbler/kickstarts/xxx.ks
修改
启动PXE测试 可以修改/etc/cobbler/pxe/pxedefault.template
,改变PXE界面。
设置Web cobbler web包名为cobbler_web
,安装前请确定django版本对应 web链接为http://IP/cobbler_web
和https://IP/cobbler_web
,默认用户名和密码都是cobbler。可以修改/etc/cobbler/users.conf
或/etc/cobbler/users.digest
进行自定义用户。 修改密码可以通过htdigest /etc/cobbler/users.digest "Cobbler" cobbler
设置认证模式可以修改/etc/cobbler/modules.conf
比如,使用authn_configfile
1 2 [authentication] module=authn_configfile
这种模式下,添加用户使用htdigest [-c] /etc/cobbler/users.digest Cobbler admin
-c 在添加第一个用户时使用 使用authn_pam
1 2 [authentication] module = authn_pam
此时使用主机上的Linux PAM用户,创建用户只需要在主机上执行useradd,然后在/etc/cobbler/users.conf
设置管理员权限
1 2 [admins] admin = "cobbler"