一、 写作背景
公司内网开发测试、IDC 机房均需要大量安装 Linux 类系统,手动一台一台安装,繁琐复杂,而且极易出错,工作量大,007 都有可能,故需采用自动化安装方式,一次调整,到处使用。
1.1 Cobbler 原理
二、环境准备
1、安装系统: 本文使用CentOS7.6系统,先安装一个基本系统,毕竟第一个系统还是要手动安装的,然后升级到最新。
三、 软件安装
3.1 关闭 SELINUX(可选)
在开始使用 Cobbler 之前,最好禁用 SELinux 或将其设置为“permissive”模式,特别是您不熟悉 SELinux 故障排除或修改 SELinux 策略时。
如果您想在运行 cobblerd 的系统上继续使用 SELinux,请务必阅读本手册中的 SELinux With Cobbler 部分。
# 直接关闭 SELINUX,需要重启系统后才能生效。如果不熟悉 SELinux,而且对安全没有达到极高要求,建议直接关闭。
sed -i 's/SELINUX=enforcing/SELINUX=disabled/'
reboot
3.2 安装软件
3.2.1 安装 Cobbler
Cobbler 可以使用 yum 方式安装,需要 epel-release 源
# 添加 epel 源
yum install epel-release -y
yum clean all && yum makecache
# 安装 Cobbler
yum install cobbler cobbler-web dhcp pykickstart -y
3.2.2 安装 httpd 服务
在启动 cobblerd 服务之前,请确保 httpd 服务已经安装并启动:
yum install httpd
systemctl start httpd
systemctl enable httpd
四、软件配置
在启动 Cobbler 前需要对软件做适当配置,以便符合你的网格环境。
Cobbler 的配置文件存储在 /etc/cobbler/settings , 这是一个 YAML 格式的文件,因此编辑文件时一定要严格注意换行、缩进等格式。配置不正确,系统将无法启动。
4.1 生成加密密码
通过命令生成加密密码,用于新系统的初始密码。
# 输入命令,根据提示输入密码,生成加密密码。
openssl passwd -1
# Password: pass2019
# Verifying - Password: pass2019
# $1$aHHo3XzR$f5rHF4HfhLXKW6PAWFcYj.
4.2 编辑配置文件
编辑配置文件 /etc/cobbler/settings
4.2.1 修改系统密码
将 default_password_crypted
项中的密码替换为刚刚生成的加密密码。
4.2.2 修改服务监听地址
server
选项设置将用于指定 cobbler 服务器的 IP 地址。不要使用 0.0.0.0,因为它不是监听地址。这应该设置为 cobbler 服务器的可用 IP,以便与例如 HTTP 和 TFTP 之类的协议联系 cobbler 服务器。
# 默认,本地
server: 127.0.0.1
# 修改为当前主机的地址(可以通过 ip 获取):
server: 172.17.0.53
next_server 选项用于指定 DHCP/PXE 下载网络引导文件的 TFTP 服务器的 IP。通常,这将与服务器设置的 IP 相同。
# default, localhost
next_server: 127.0.0.1
# 修改为当前主机的地址
next_server: 172.17.0.53
4.2.3 DHCP 管理
为了进行 PXE 引导,您需要一个 DHCP 服务器来分发地址,并将引导系统指向 TFTP 服务器,以便在其中下载网络引导文件。Cobbler 可以通过 manage_dhcp 设置管理 DHCP 服务器:
# default, don't manage
manage_dhcp: 0
# 修改为:
manage_dhcp: 1
# 以便 cobbler 将根据 cobbler 附带的 dhcp.template 生成 dhcpd.conf 文件。根据您的网络设置对该模板进行修改:
最终配置如下:
[root@cobbler ~]# cat /etc/cobbler/settings |grep ^[a-z]
allow_duplicate_hostnames: 0
allow_duplicate_ips: 0
allow_duplicate_macs: 0
allow_dynamic_settings: 0
anamon_enabled: 0
authn_pam_service: "login"
auth_token_expiration: 3600
build_reporting_enabled: 0
build_reporting_sender: ""
build_reporting_email: [ 'root@localhost' ]
build_reporting_smtp_server: "localhost"
build_reporting_subject: ""
build_reporting_ignorelist: [ "" ]
cheetah_import_whitelist:
createrepo_flags: "-c cache -s sha"
default_kickstart: /var/lib/cobbler/kickstarts/default.ks
default_name_servers: []
default_ownership:
default_password_crypted: "$1$aHHo3XzR$f5rHF4HfhLXKW6PAWFcYj."
default_template_type: "cheetah"
default_virt_bridge: xenbr0
default_virt_file_size: 5
default_virt_ram: 512
default_virt_type: xenpv
enable_gpxe: 0
enable_menu: 1
func_auto_setup: 0
func_master: overlord.example.org
http_port: 80
kernel_options:
kernel_options_s390x:
ldap_server: "ldap.example.com"
ldap_base_dn: "DC=example,DC=com"
ldap_port: 389
ldap_tls: 1
ldap_anonymous_bind: 1
ldap_search_bind_dn: ''
ldap_search_passwd: ''
ldap_search_prefix: 'uid='
ldap_tls_cacertfile: ''
ldap_tls_keyfile: ''
ldap_tls_certfile: ''
mgmt_classes: []
mgmt_parameters:
puppet_auto_setup: 0
sign_puppet_certs_automatically: 0
puppetca_path: "/usr/bin/puppet"
remove_old_puppet_certs_automatically: 0
manage_dhcp: 1
manage_dns: 0
bind_chroot_path: ""
bind_master: 127.0.0.1
manage_tftpd: 1
manage_rsync: 0
manage_forward_zones: []
manage_reverse_zones: []
next_server: 172.17.0.53
power_management_default_type: 'ipmitool'
power_template_dir: "/etc/cobbler/power"
pxe_just_once: 0
pxe_template_dir: "/etc/cobbler/pxe"
consoles: "/var/consoles"
redhat_management_type: "off"
redhat_management_server: "xmlrpc.rhn.redhat.com"
redhat_management_key: ""
redhat_management_permissive: 0
register_new_installs: 0
reposync_flags: "-l -n -d"
restart_dns: 1
restart_dhcp: 1
run_install_triggers: 1
scm_track_enabled: 0
scm_track_mode: "git"
server: 172.17.0.63
client_use_localhost: 0
client_use_https: 0
snippetsdir: /var/lib/cobbler/snippets
template_remote_kickstarts: 0
virt_auto_boot: 1
webdir: /var/www/cobbler
xmlrpc_port: 25151
yum_post_install_mirror: 1
yum_distro_priority: 1
yumdownloader_flags: "--resolve"
serializer_pretty_json: 0
replicate_rsync_options: "-avzH"
replicate_repo_rsync_options: "-avzH"
always_write_dhcp_entries: 0
proxy_url_ext: ""
proxy_url_int: ""
4.2.3 DHCP 服务器服务模板
vim /etc/cobbler/dhcp.template
对于平常应用,只需个性几项内容即可(更多内容请参考 DHCP 的配置)
# 服务器所在的网络段,及子网掩码
subnet 172.17.0.0 netmask 255.255.255.0 {
# 服务器网段的网关
option routers 172.17.0.254;
# 可以给要安装系统的机器临时分配的 IP 地址。
option domain-name-servers 172.17.0.235,172.17.0.250;
# 以下内容尽量不要个性,特别是最后一项
option subnet-mask 255.255.255.0;
filename "/pxelinux.0";
default-lease-time 2.8.0;
max-lease-time 43200;
next-server $next_server;
}
4.3 启动服务
# 修改完以上配置后,即可启动服务
systemctl start cobblerd
systemctl enable cobblerd
# 使用 systemctl status cobblerd 查看状态
systemctl status cobblerd
如果出现以下内容,则说明服务已经启动
4.4 检查配置
4.4.1 检查配置
服务启动但不代表正常可用,需要检查配置并根据建议修改配置及系统环境。使用 cobbler check
命令来检查。
cobbler check
# 显示状态如下
The following are potential configuration items that you may want to fix:
1 : change 'disable' to 'no' in /etc/xinetd.d/tftp
2 : Some network boot-loaders are missing from /var/lib/cobbler/loaders, you may run 'cobbler get-loaders' to download them, or, if you only want to handle x86/x86_64 netbooting, you may ensure that you have installed a *recent* version of the syslinux package installed and can ignore this message entirely. Files in this directory, should you want to support all architectures, should include pxelinux.0, menu.c32, elilo.efi, and yaboot. The 'cobbler get-loaders' command is the easiest way to resolve these requirements.
3 : enable and start rsyncd.service with systemctl
4 : debmirror package is not installed, it will be required to manage debian deployments and repositories
5 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them
Restart cobblerd and then run 'cobbler sync' to apply changes.
第一项提示未给 TFTP
提供相应权限
第二项提示需要执行一下命令 cobbler get-loaders
用于加载系统安装的启动项
第三项提示需要开启 rsync 服务
第四项提示 deb
镜像服务未安装,如果你只提供 Redhat
家族的服务,则无需安装,如果需要提供 Ubuntu
家族的安装服务,则需要安装一下。
第五项提示是一个可选服务
安装完成以后需要运行一下 cobbler sync
同步并生效 cobbler
的配置。
下面我们根据提示逐项修改,修改过程中可以随时执行 cobbler check
命令,来检查修改结果。
4.4.2 修改 TFTP 配置
vim /etc/xinetd.d/tftp
# 修改 disable 项 为 no,结果如下:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
4.4.3 执行 cobbler get-loaders 下载相关文件
cobbler get-loaders
执行结果如下:
4.4.4 启动 rsync 服务
systemctl start rsyncd
systemctl enable rsyncd
启动后状态如下:
4.4.5 安装 debmirror
yum install debmirror -y
安装结果如下:
4.4.6 安装 fence-agents 服务
yum install -y fence-agents
安装结果如下:
当然了,第四节的所有安装服务,都可以在最开始就安装上,这些软件安装没有先后顺序。
最后执行 cobbler check 直到最终显示为如下所示(可选服务可以忽略)
[root@cobbler ~]# cobbler check
No configuration problems found. All systems go.
然后执行 cobbler sync
同步配置
cobbler sync
执行结果如下:
到此 Cobbler 的基础服务已经搭建完毕,下一步就是导入系统镜像,安装系统了。
五、 导入镜像
5.1 挂载镜像
将系统镜像挂载到系统目录下,以备后面导入使用,我这里使用虚拟机系统的虚拟光驱,然后把系统挂载在 /mnt
目录下。
在Centos7下,光驱一般会挂载为 /dev/sr0
,如果不是请在 /dev
目录下自行查找。
# 无需太复杂的命令
mount /dev/sr0 /mnt/
# 如果是本地镜像文件则使用这个命令
mount -t iso9660 -o loop,ro /path/to/isos/Fedora-Server-dvd-x86_64-28-1.1.iso /mnt
5.2 导入镜像
使用 cobbler import
命令导入镜像,需要名称(在安装时显示的名称,便于选择),架构类型和源文件路径。
镜像文件和配置文件会导入到 /var/www/cobbler/ks_mirror
目录下。
cobbler import --name=CentOS7.2 --arch=x86_64 --path=/mnt
# 统一命名网卡为 eth0
cobbler profile edit --name=CentOS7.2-x86_64 --kopts='net.ifnames=0 biosdevname=0'
导入结果如下:
导入其它镜像,重复执行5.1,5.2步骤
六、 YUM源
在本地搭建YUM源,可以大量节省网络带宽,加快系统安装,还可以自定义一些软件的安装,可以通过命令行添加,或通过WEB添加。
由于篇幅问题,这里不再详细说明。
# 如添加 Centos 的 Base 源(使用阿里云的镜像源)则使用 add 命令,其它类似。
cobbler repo add --name=CentOS7.2-x86_64-Base --mirror=https://mirrors.aliyun.com/centos/7/os/x86_64/
# 如果添加后有些地方需要修改,则使用 edit 命令
cobbler repo edit --name=centos7.2-x86_64-base --mirror=https://mirrors.aliyun.com/centos/7/os/x86_64/ --arch=x86_64 --breed=yum
使用 WEB 管理 YUM 源
YUM源添加完成后,使用 cobbler reposync
同步YUM源,即可使用。
七、Profile配置
使用 Cobbler 安装系统时,需要使用 Profile 来定义安装,在 Profile 中可以定义要安装的发行版系统版本(Distribution)、内核参数(Kernel Options)、 YUM 源(Repos)等各类参数,使系统安装更加自动化、智能化。
在导入安装镜像时,系统已经自动生成了相应的 Profile , 在此基础上,做一些适当的调整即可使用。
根据不同需求制作的Profile在安装系统时的展示
使用命令行配置 Profile
cobbler profile add --name=Fedora17-xfce \
--ksmeta='desktop_pkg_group=@xfce-desktop' \
--kickstart=/var/lib/cobbler/kickstarts/example.ks \
--parent=Fedora17-x86_64
使用WEB配置 Profile
九、Kickstart管理
由于篇幅问题,关于Kickstart文件说明,请移步 kickstart文件配置说明(个人理解版)
以上步骤完成后,就可以使用网络 手动 安装系统了,但是我们要的是自动安装,所以需要一个自动应答文件,这就是 kickstart 文件。
Cobbler 中自带了一些模板,默认使用 /var/lib/cobbler/kickstarts/sample.ks
这个配置文件,我们可以在此文件基础上进行修改(由于不太熟悉Cobbler的语法,就不安全按照Cobbler的方式来配置了)。
另外,在安装好的系统中,会在 root
用户的根目录 /root
自动生成一个 anaconda-ks.cfg
文件,这个就是 kickstart
文件,可以直接使用这个文件,也可以在此基础上修改,我们结合这两个文件进行修改,完善我们的预安装系统。
十、 安装系统
在真机上或虚拟机上启动安装,调整真机或虚拟从网络启动,DHCP Client 会从指定的 DHCP Server 上获取IP,并自动下载网络引导文件进行安装系统。
DHCP 启动
选择要安装的系统版本
然后就等待系统自己安装完成吧。
需要注意
-
如果不是采用默认的硬盘分区方式,则虚拟机或真机硬盘必须大于或等于 kickstart 文件中配置的硬盘大小。
-
系统中指定的任何资源,必须真实可用,否则可能会退出安装
十一、 WEB管理
在上面操作步骤中已经大概提示过WEB管理的方法,这里只介绍简单使用。
使用 https://your-server-ip-or-damaname/cobbler_web/
登录系统。登录账号为 cobbler, 登录密码可以自行更改,使用命令 htdigest /etc/cobbler/users.digest "Cobbler" cobbler
生成新的密码到指定文件。
htdigest /etc/cobbler/users.digest "Cobbler" cobbler
Changing password for user cobbler in realm Cobbler
New password: cobbler
Re-type new password: cobbler
登录窗口如下:
登录后显示如下:
已经导入好的镜像
十二、问题排查
8.1 使用 WEB 时出现 Internal Server Error
使用 WEB 管理时出现 Internal Server Error 错误
查询日志 /var/log/httpd/ssl_error_log 得出如下结果:
经判断,该项目使用 Python 的 Django 框架搭建服务,需要重新安装一下 Django 服务,使用 pip install django
安装一下。
# 如果没有则先安装 pip,并升级到最新版本
yum install python-pip
pip install --upgrade pip
# 然后安装 django,根据测试得出,最新版本的 Django 不能使用,必须使用 1.8.9 版本。
pip install Django==1.8.9
安装结果如下:
文章引用
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 long@longger.xin