Ubuntu 上用 Cobbler 实现多系统共存的落地方案
一、架构与原理
- 通过 PXE 引导,由 DHCP 下发 IP 与引导文件,TFTP 传输引导程序,Cobbler 托管镜像与菜单,配合 Kickstart/Preseed 实现无人值守安装,从而在同一环境中提供 Ubuntu、CentOS、Debian 等多系统的选择菜单与自动化部署。
- 核心对象关系:Distro(发行版,内核与 initrd)→ Profile(关联 Kickstart/仓库/内核参数)→ System(绑定 MAC/IP/主机名,固定某系统给某主机)。一次导入可生成多个版本(如 Ubuntu 20.04/22.04),每个版本对应独立 Distro/Profile,菜单自动聚合。
二、部署步骤
- 安装组件与启动服务
- 在 Ubuntu 上安装:cobbler cobbler-web isc-dhcp-server tftpd-hpa xinetd apache2,并启动:cobblerd、isc-dhcp-server、tftpd-hpa、apache2。
- 配置 DHCP 与 TFTP
- 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.100; }
- TFTP(/etc/xinetd.d/tftp)确保:server_args = -s /var/lib/tftpboot;disable = no。
- 导入多个操作系统镜像
- Ubuntu 22.04:
- mkdir -p /mnt/ubuntu2204 && mount -o loop /path/to/ubuntu-22.04.iso /mnt/ubuntu2204
- cobbler import --path=/mnt/ubuntu2204 --name=ubuntu-22.04 --arch=x86_64
- CentOS 7:
- mkdir -p /mnt/centos7 && mount -o loop /path/to/CentOS-7-x86_64.iso /mnt/centos7
- cobbler import --path=/mnt/centos7 --name=centos7 --arch=x86_64
- 导入后生成 Distro/Profile,可用 cobbler distro list、cobbler profile list 查看。
- 为每个系统准备无人值守文件并关联
- Ubuntu 使用 Preseed(.seed),CentOS 使用 Kickstart(.ks),示例要点:
- Ubuntu 22.04 seed(/var/lib/cobbler/kickstarts/ubuntu-22.04.seed):
- install;text;lang en_US.UTF-8;keyboard us;timezone Asia/Shanghai
- rootpw --plaintext yourpassword(生产建议用 openssl passwd -6 生成哈希)
- network --bootproto=dhcp --device=eth0 --onboot=yes
- clearpart --all --initlabel;part / --fstype=ext4 --size=1 --grow
- url --url=$tree;reboot
- CentOS 7 ks(/var/lib/cobbler/kickstarts/centos7.ks):
- install;lang en_US.UTF-8;keyboard us;timezone Asia/Shanghai
- rootpw --plaintext yourpassword
- network --bootproto=dhcp --device=eth0 --onboot=yes
- clearpart --all --initlabel;part / --fstype=ext4 --size=1 --grow
- url --url=$tree;reboot
- 关联 Profile 与 Kickstart:
- cobbler profile edit --name=ubuntu-22.04 --kickstart=/var/lib/cobbler/kickstarts/ubuntu-22.04.seed
- cobbler profile edit --name=centos7 --kickstart=/var/lib/cobbler/kickstarts/centos7.ks
- 为指定主机固定系统(可选)
- cobbler system add --name=ubuntu-client1 --profile=ubuntu-22.04 --mac=00:11:22:33:44:55 --ip-address=192.168.1.150 --subnet=255.255.255.0 --gateway=192.168.1.1 --hostname=ubuntu-client1
- cobbler system edit --name=ubuntu-client1 --netboot-enabled=true
- 同步生效:cobbler sync
- 客户端验证
- 在目标机 BIOS 设置 PXE 启动,启动后将看到 Cobbler 菜单,选择 Ubuntu 22.04 或 CentOS 7 即可自动安装。
三、菜单定制与默认项
- 菜单与默认行为由 PXELINUX 模板控制,可编辑:/etc/cobbler/pxe/pxedefault.template,调整菜单顺序、超时、默认项(如设置默认安装 Ubuntu 22.04)。修改后执行 cobbler sync 使菜单生效。
四、Windows 多系统简要思路(可选)
- 通过 WinPE + Samba 实现网络安装:定制 WinPE 引导(注入 Cobbler 相关组件),将 Windows ISO 共享至 Samba(如 /var/www/cobbler/images/win10),在 Cobbler 中导入 WinPE 镜像并配置菜单项,客户端 PXE 引导 WinPE 后按应答文件或脚本进行无人值守安装。该方式适合批量部署 Windows 10/Server。
五、关键注意事项与排错
- 基础配置校验
- 在 /etc/cobbler/settings 中设置:server(Cobbler 服务器 IP)、next_server(TFTP 地址,通常与 server 一致);执行 cobbler check 逐项修复提示。
- 引导文件与加载器
- 执行 cobbler get-loaders 下载 PXE 加载器(如 pxelinux.0、menu.c32 等),或确保系统已安装 syslinux 并放置到 /var/lib/cobbler/loaders。
- 镜像与权限
- 导入 ISO 前校验 MD5/SHA256;确保 /var/lib/tftpboot 与镜像目录权限正确(如 tftp:tftp)。
- 每次变更后执行 cobbler sync,使 DHCP、TFTP、菜单与镜像生效。
- 若使用独立 DHCP,注意 next-server 必须指向 Cobbler 服务器 IP,且 DHCP 与 TFTP 服务已启动并可达。