Cobbler 介绍
Cobbler 是一个 Linux 服务器快速网络安装的服务, 而且在经过调整也可以支持网络安装 Windows, 该工具使用 python 开发, 小巧轻便 (才 15k 行 python 代码), 可以通过网络启动(PXE) 的方式来快速安装, 重装物理服务器和虚拟机, 同时还可以管理 DHCP,DNS,TFTP,RSYNC 以及 yum 仓库, 构造系统 ISO 镜像.
Cobbler 可以使用命令行方式管理, 也提供了基于 web 的界面管理工具, 还提供了 API 接口, 可以方便二次开发使用.
Cobbler 客户端 Koan 支持虚拟机安装和操作系统重新安装, 使重装系统更便捷.
官网: http://cobbler.github.io/
Cobbler 各主要组件关系图
Cobbler 设计模式
1. 发版(distro): 表示操作系统. 它承载了内核和 initrd 引导程序
2. 存储库(repository): 保存 yum 缓存件的镜像仓库
3. 配置件(profile): 定义操作系统的发版的 ks 配置件, 也包含内核参数信息等
4. 系统(system): 主要配置络接, 固定 IP 以及 Mac 地址 distro->profile-system(可选)
Cobbler 运流程
1.DHCP 服务分配 IP 地址
- Client(获取 IP 地址, Next_server IP 地址)
- Next_server(PXE 引导件, 启动 Cobbler 选择界)
- tftp(获取启动内核, initrd 等件)
- kickstart (确定加载项, 根据 NFS,httpd,ftp 等共享)
Cobbler 原理
使用 Cobbler, 您无需进行人工干预即可安装机器. Cobbler 设置一个 PXE 引导环境 (它还可以使用 yaboot 支持 PowerPC), 并控制与安装相关的所有方面, 比如网络引导服务(DHCP 和 TFTP) 与存储库镜像. 当希望安装一台新机器时, Cobbler 可以:
1. 使用一个以前定义的模板来配置 DHCP 服务(如果启用了管理 DHCP).
2. 将一个存储库 (yum 或 rsync) 建立镜像或解压缩一个媒介, 以注册一个新操作系统.
3. 在 DHCP 配置文件中为需要安装的机器创建一个条目, 并使用指定的参数(IP 和 Mac).
4. 在 TFTP 服务目录下创建适当的 PXE 文件.
5. 重新启动 DHCP 服务来反应新的更改.
6. 重新启动机器以开始安装(需手工选择系统安装菜单).
Cobbler 软件安装
1. 基础环境准备
- # 查看当前系统版本以及内核信息
- [root@Cobbler ~]# cat /etc/RedHat-release
- CentOS Linux release 7.4.1708 (Core)
- [root@Cobbler ~]# uname -r
- 3.10.0-693.el7.x86_64
- [root@Cobbler ~]# uname -n
- Cobbler
- # 关闭 selinux 防墙
- [root@cobbler ~]# setenforce 0
- [root@cobbler ~]# getenforce Disabled
- # 关闭 firewalld 防墙
- [root@cobbler ~]# systemctl stop firewalld
- [root@cobbler ~]# systemctl disable firewalld
2. 安装 Cobbler
- # 安装 epel 源
- [root@Cobbler ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
- # 安装 cobbler 及各个组件
- [root@Cobbler /]# yum install cobbler cobbler-Web pykickstart httpd dhcp tftp xinetd -y
注意: 用 CentOS6 部署 Cobbler 会出现 Django 一直安装不上, 需要自行下载并安装该软件
防止误重装系统, 如果系统设置为 PXE 启动, 可能会出现 PXE 引导循环
sed -i 's/pxe_just_once: 0/pxe_just_once: 1/' /etc/cobbler/settings
3.Cobbler 配置文件概述
- # 配置文件目录:/etc/cobbler
- /etc/cobbler/settings #cobbler 主配置文件
- /etc/cobbler/iso/ #iso 模板配置文件
- /etc/cobbler/pxe #pxe 模板文件
- /etc/cobbler/power #电源配置文件
- /etc/cobbler/users.conf #Web 服务配置文件
- /etc/cobbler/users.digest #用于 Web 访问的用户名密码配置文件
- /etc/cobbler/dhcp.template #DHCP 服务配置模板文件
- /etc/cobbler/dnsmasq.template #DNS 服务配置模板文件
- /etc/cobbler/tftpd.template #tftp 服务配置模板文件
- /etc/cobbler/modules.conf #Cobbler 模块配置文件
- # 数据目录:/var/lib/cobbler
- /var/lib/cobbler/config #用于存放 distros systems 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/lib/cobbler/kickstarts #默认存放 kickstart 文件
- /var/lib/cobbler/loaders #存放各种引导程序
- /var/www/cobbler/repo_mirror/ #yum 仓库存储目录
- # 日志目录:/var/log/cobbler
- /var/log/cobbler/install.log #客户端系统安装日志
- /var/log/cobbler/cobbler.log #cobbler 日志
4. 启动 httpd 以及 CobblerServer
- [root@cobbler ~]# systemctl start httpd
- [root@cobbler ~]# systemctl start cobblerd
5. 执 cobbler check 检测, 将错误逐进解决
- # 启 cobbler 动态配置, 如不启动则可以通过动或 sed 命令替换配置
- [root@Cobbler ~]# sed -ri '/allow_dynamic_settings:/c \allow_dynamic_settings: 1' /etc/cobbler/settings
- [root@Cobbler ~]# systemctl restart cobblerd.service
- #1. 配置 CobblerServer 地址
- [root@Cobbler ~]# cobbler setting edit --name=server --value=10.0.0.202
- #2. 修改 next_server 主机 IP
- [root@Cobbler ~]# cobbler setting edit --name=next_server --value=10.0.0.202
- #3. 配置 tftp
- [root@Cobbler ~]# sed -ri '/disable/c\disable = no' /etc/xinetd.d/tftp
- [root@Cobbler ~]# systemctl enable xinetd
- [root@Cobbler ~]# systemctl start xinetd
- #4. 启动 rsync
- [root@Cobbler ~]# systemctl start rsyncd
- [root@Cobbler ~]# systemctl enable rsyncd
- #5. 下载络安装需要执的件(让 cobbler 能够处理 x86/x86_64 网络引导)
- [root@Cobbler ~]# cobbler get-loaders
- #6. 安装 debmirror, 修改 / etc/debmirror.conf
- [root@Cobbler ~]# yum -y install debmirror
- [root@Cobbler ~]# sed -ri '/@dists=/c#@dists="sid";' /etc/debmirror.conf
- [root@Cobbler ~]# sed -ri '/@arches=/c#@arches="i386";' /etc/debmirror.conf
- #7. 配置系统登录密码(该密码默认为 cobbler)
- # 使用 openssl passwd -1 -salt '密码' '随机干扰码' 命令生成密码
- [root@Cobbler ~]# openssl passwd -1 -salt 'cobbler' '123456'
- $1$cobbler$sqDDOBeLKJVmxTCZr52/11
- [root@Cobbler ~]# cobbler setting edit --name=default_password_crypted --value='$1$cobbler$sqDDOBeLKJVmxTCZr52/11'
- #8. 电源控制模块安装[可选]
- [root@Cobbler ~]# yum -y install cman fence-agents
- #9. 开启 dhcp 地址分配
- # 不需要单独运行 DHCP, 由 Cobbler 管理
- [root@Cobbler ~]# cobbler setting edit --name=manage_dhcp --value=1
6. 执 cobbler check 检查
- [root@Cobbler ~]# systemctl restart cobblerd=
- [root@Cobbler ~]# cobbler check
- No configuration problems found. All systems go.
7. 配置 cobbler 的 dhcp 模板[不代表给主机分配定是如下地址]
- # 配置 DHCP, 修改 cobbler 的 dhcp 模版, 这个模板会覆盖 dhcp 本身的配置文件 / etc/dhcp/dhcpd.conf
- [root@Cobbler ~]# VIM /etc/cobbler/dhcp.template
- subnet 10.0.0.0 netmask 255.255.255.0 {
- #子网范围
- option routers 10.0.0.2; #网关地址
- option domain-name-servers 10.0.0.2; #DNS 地址
- option subnet-mask 255.255.255.0; #掩码
- range dynamic-bootp 10.0.0.100 10.0.0.120; #分配地址的范围
- default-lease-time 21600;
- max-lease-time 43200;
- next-server $next_server; #调用 settings 配置文件中的 next_server 参数
8. 同步 CobblerServer 所有配置信息
- # 重启并同步 cobblerServer
- [root@Cobbler ~]# systemctl restart xinetd
- [root@Cobbler ~]# systemctl restart cobblerd
- [root@Cobbler ~]# cobbler sync
提示: 每次修改完 Cobbler 对应的配置, 都要同步下 cobbler 数据
[root@Cobbler ~]# cobbler sync
Cobbler 基础应用
1.cobbler 使第步需要定义 distro 如果已经有 OS 镜像安装件, 使 improt 导式.
- #1. 挂载 CentOS7 系统 ISO 光盘
- [root@Cobbler ~]# mount /dev/cdrom /mnt/
- #2.import 导系统镜像, 以及镜像树
- [root@Cobbler ~]# cobbler import --path=/mnt/ --name=CentOS-7-x86_64 --arch=x86_64
- #3. 查看 cobbler distro
- [root@Cobbler cobbler]# cobbler distro list
- CentOS-7-x86_64
- # --path 镜像路径, 即从哪里导入
- # --name 为导入的镜像定义名称
- # --arch 指定导入的镜像是 32 位, 64 位, ia64, 目前支持的选项有: x86│x86_64│ia64
2.cobbler 默认 profile 法满运维需求, 需 profile 基础上指定 kickstart 定义配置件(KS 文件在该文章的结尾).
- #1. 移除默认的 profile 配置
- [root@Cobbler ~]# cobbler profile remove --name=CentOS-7-x86_64
- #2. 添加新的 profile 配置, 并指定 kickstart 应答件位置
- [root@Cobbler \]# cobbler profile add \
- --name=CentOS-7-x86_64-Web \
- --distro=CentOS-7-x86_64 \
- --kickstart=/var/lib/cobbler/kickstarts/Centos7-x86_64.cfg
- #3. 验证 Kickstart 配置文件有效性
- cobbler validateks
- # 附: 如果想修改 kickstart 件位置
- [root@Cobbler ~]# cobbler profile edit \
- --name=CentOS-7-x86_64-Web \
- --kickstart=/var/lib/cobbler/kickstarts/CentOS-7-x86_64_Web.cfg
注意: distro 可以认为是一个系统盘, profile 则为安装的规则, 多个 profile 可以指定一个 distro
3. 由于 CentOS7 系统卡名是 eno... , 为了统标准, 修改为常 eth0 管理(这里还是以默认的 profile 来演示)
注意是 CentOS7 才需要下的步骤 CentOS6 不需要.
- #1. 修改 centos7 系统 profile 安装时的内核
- [root@Cobbler ~]# cobbler profile edit --name=CentOS-7-x86_64-Web --kopts='net.ifnames=0 biosdevname=0'
- #2. 也可以在 kickstart 配置件中添加内核参数[推荐]
- bootloader --location=mbr --append="net.ifnames=0 biosdevname=0"
4. 启动同段服务器, 系统分配 dhcp 后会进 Cobbler 安装界, 进系统选择后, 安装即可.
注意: CentOS7 安装至少 2G 以上内存
ks 文件: Centos7-x86_64.cfg
- # Cobbler for Kickstart Configurator for CentOS 7 by jason
- install
- url --url=$tree
- text
- lang en_US.UTF-8
- keyboard us
- zerombr
- bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
- #Network information
- $SNIPPET('network_config')
- #network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS7
- timezone --utc Asia/Shanghai
- authconfig --enableshadow --passalgo=sha512
- rootpw --iscrypted $default_password_crypted
- clearpart --all --initlabel
- part /boot --fstype xfs --size 1024
- part swap --size 1024
- part / --fstype xfs --size 1 --grow
- firstboot --disable
- selinux --disabled
- firewall --disabled
- logging --level=info
- reboot
- %pre
- $SNIPPET('log_ks_pre')
- $SNIPPET('kickstart_start')
- $SNIPPET('pre_install_network_config')
- # Enable installation monitoring
- $SNIPPET('pre_anamon')
- %end
- %packages
- @^minimal
- @compat-libraries
- @core
- @debugging
- @development
- bash-completion
- chrony
- dos2unix
- kexec-tools
- lrzsz
- nmap
- sysstat
- telnet
- tree
- VIM
- wget
- %end
- %post
- systemctl disable postfix.service
- %end
来源: http://blog.51cto.com/12643266/2343070