Ubuntu 环境下使用 Cobbler 实现多版本共存的落地方案
一、架构与原理
- 通过 PXE 引导,由 DHCP 分配地址并指向下载启动文件,TFTP 传输引导程序,客户端进入 Cobbler 菜单后按需选择要安装的 Ubuntu 版本/架构。Cobbler 以对象模型管理安装源:Distro(发行版)→ Profile(应答/内核参数/仓库)→ System(主机粒度网络与主机名),一次部署即可提供多版本选择,适合同时维护 20.04/22.04/24.04 等版本的环境。
二、基础环境与服务配置
- 安装组件(Ubuntu 示例):
- sudo apt update
- sudo apt install cobbler cobbler-web isc-dhcp-server tftpd-hpa xinetd
- 配置 DHCP(/etc/dhcp/dhcpd.conf,按现场网段调整):
- subnet 192.168.1.0 netmask 255.255.255.0 {
- range 192.168.1.100 192.168.1.200;
- option routers 192.168.1.1;
- option domain-name-servers 8.8.8.8, 8.8.4.4;
- filename “pxelinux.0”;
- next-server 192.168.1.2; # Cobbler 服务器 IP
- }
- 重启服务:sudo systemctl restart isc-dhcp-server
- 配置 TFTP(/etc/xinetd.d/tftp):
- server_args = -s /var/lib/tftpboot
- 重启服务:sudo systemctl restart xinetd
- 启动 Cobbler 并自检:
- sudo systemctl enable --now cobblerd
- sudo cobbler get-loaders
- sudo cobbler check
- 关键项:/etc/cobbler/settings 中的 server 与 next_server 必须填写为可达的 Cobbler 服务器地址(不能是 127.0.0.1)。
三、导入多版本 Ubuntu 镜像
- 准备各版本的 ISO(如:ubuntu-20.04.x-live-server-amd64.iso、ubuntu-22.04.x-live-server-amd64.iso、ubuntu-24.04.x-live-server-amd64.iso),分别挂载并导入:
- 挂载示例:sudo mount -o loop,ro /iso/ubuntu-22.04.5-live-server-amd64.iso /mnt
- 导入示例:cobbler import --path=/mnt --name Ubuntu22
- 同步:cobbler sync
- 导入后,Cobbler 会为同一镜像生成对应的 Distro 与 Profile(常见命名包含内核与架构,如:Ubuntu22-casper-x86_64)。重复以上步骤导入 20.04 与 24.04。导入完成后可通过 cobbler distro list、cobbler profile list 查看对象。
四、为不同版本配置自动安装与网络参数
- Ubuntu 22.04/24.04 推荐使用 subiquity + cloud-init 的 autoinstall 方式:
- 将 ISO 复制到 Web 目录,便于安装器离线获取安装介质:
- mkdir -p /var/www/cobbler/pub/cloud-init/Ubuntu24
- cp /iso/ubuntu-24.04.2-live-server-amd64.iso /var/www/cobbler/pub/cloud-init/Ubuntu24/
- 为对应 Distro 设置内核参数(指向本地 ISO 与 autoinstall 入口):
- cobbler distro edit --name Ubuntu24-casper-x86_64
–kernel-options ‘root=/dev/ram0 ramdisk_size=1500000 ip=dhcp
url=http://192.168.8.10/cobbler/pub/cloud-init/Ubuntu24/ubuntu-24.04.2-live-server-amd64.iso
autoinstall cloud-config-url=http://192.168.8.10/cblr/svc/op/autoinstall/profile/Ubuntu24-casper-x86_64’
- 为 Profile 指定 autoinstall 模板(cloud-init 用户数据):
- cobbler profile edit --name Ubuntu24-casper-x86_64 --autoinstall cloud-init_user-data
- 如需为某台主机固化网络(可选):
- cobbler system add --name Ubuntu24-auto --profile Ubuntu24-casper-x86_64
–mac-address 00:50:56:25:EB:96 --static true
–ip-address 192.168.8.15 --netmask 255.255.255.0 --gateway 192.168.8.2
–name-servers 114.114.114.114 --hostname Ubuntu24 --netboot-enabled true
- 说明:对需要快速定位的节点,绑定 MAC 能显著缩短发现与选择时间。
- 20.04 可按相同思路配置(镜像与路径替换为 20.04 对应对象)。
- Ubuntu 18.04/20.04 也可沿用 preseed(seed) 应答文件方式(示例片段):
- d-i mirror/http/hostname string $http_server
- d-i mirror/http/directory string $install_source_directory
- d-i time/zone string Asia/Shanghai
- d-i clock-setup/ntp-server string cn.pool.ntp.org
- d-i partman-auto/disk string /dev/sda
- d-i partman-auto/method string lvm
- d-i partman-auto-lvm/guided_size string 100%
- 在 Profile 中指定:cobbler profile edit --name ubuntu-20.04 --kickstart /var/lib/cobbler/kickstarts/ubuntu-20.04.seed
- 每次修改后执行:cobbler sync,使 DHCP/TFTP/菜单生效。
五、支持 Ubuntu 24.04 与日常运维要点
- 支持 Ubuntu 24.04(Noble Numbat) 的识别:
- 编辑 /var/lib/cobbler/distro_signatures.json,在合适位置新增 “noble” 条目(注意 JSON 语法与逗号),示例:
- “noble”: {
- “signatures”: [“dists”,“.disk”],
- “version_file”: “Release|info”,
- “version_file_regex”: “Suite: noble|Ubuntu 24.04”,
- “supported_arches”: [“amd64”,“i386”],
- “supported_repo_breeds”: [“apt”],
- “kernel_file”: “(linux|vmlinuz(.*))”,
- “initrd_file”: “initrd($|.gz$|.lz$)”,
- “isolinux_ok”: false,
- “default_autoinstall”: “”,
- “kernel_options”: “”,
- “kernel_options_post”: “”,
- “template_files”: “”,
- “boot_files”: [],
- “boot_loaders”: {}
- }
- 修改后重启 cobblerd:systemctl restart cobblerd;同步:cobbler sync。
- 防火墙与端口(若启用防火墙):
- DHCP:67/udp、68/udp
- HTTP/HTTPS:80/tcp、443/tcp
- 示例(firewalld):firewall-cmd --permanent --add-port={67,68}/udp --add-port={80,443}/tcp && firewall-cmd --reload
- 常用排错与验证:
- cobbler check(逐项修复告警)
- cobbler sync(每次变更必执行)
- cobbler distro list / profile list / system list(核对对象)
- 客户端以 PXE 启动,进入菜单选择目标版本;必要时抓包或查看 /var/log/ 下相关服务日志定位问题。