COBBLER无人值守批量安装系统.md

2020-10-13 13:31:11 浏览数 (1)

本章章节 (1) Cobble介绍 (2) Cobbler安装配置 (3) Cobbler安装系统 (4) 定制化安装 (5) Cobbler的Web管理界面的安装与配置 (6) 入坑记

0x01 Cobbler 介绍

Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装、重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等;可以使用命令行方式管理,也提供了基于Web的界面管理工具(cobbler-web),还提供了API接口,可以方便二次开发使用。

Cobbler是较早前的kickstart的升级版,优点是比较容易配置,还自带web界面比较易于管理,Cobbler内置了一个轻量级配置管理系统,但它也支持和其它配置管理系统集成,该工具使用python开发,小巧轻便(才15k行代码)

官网:http:#cobbler.github.io/

1.1 Cobbler集成的服务

  • PXE服务支持
  • DHCP服务管理
  • DNS服务管理(可选bind,dnsmasq)
  • 电源管理
  • Kickstart服务支持
  • YUM仓库管理
  • TFTP(PXE启动时需要)
  • Apache(提供kickstart的安装源,并提供定制化的kickstart配置)

Cobbler组件:

  • 发行版(distro) :表示一个操作系统,它承载了内核和initrd的信息,以及内核等其他数据。
  • 仓库 (repository):保存了一个yum或者rsync仓库的镜像信息。
  • 配置文件(profile):包含了一个发行版(distro),一个kickstart文件以及可能的仓库(repository),还包含了更多的内核参数等其他数据。
  • 系统(system):表示要定制的具体客户机器,它包含了一个配置文件或一个镜像,还包含了ip和mac地址,电源管理(地址,凭据,类型)以及更为专业的数据信息。
  • 镜像(image):可替换一个包含不属于此类别的文件的发行版对象(eg: 无法作为内核和initrd的对象)。
 WeiyiGeek.COBBLER原理 WeiyiGeek.COBBLER原理

注意:发行版和配置文件为必须配置项

  • 发行版 distro 表示具体要导入安装的系统
  • 配置文件 profile 表示对应系统的配置
  • 系统 system 则可以定制某一台具体的机器安装,相当于一条数据库记录,可以省略

1.2 cobbler工作流程

Server端 :

  • 第一步,启动Cobbler服务
  • 第二步,进行Cobbler错误检查,执行cobbler check命令
  • 第三步,进行配置同步,执行cobbler sync命令
  • 第四步,复制相关启动文件文件到TFTP目录中
  • 第五步,启动DHCP服务,提供地址分配
  • 第六步,DHCP服务分配IP地址
  • 第七步,TFTP传输启动文件
  • 第八步,Server端接收安装信息
  • 第九步,Server端发送ISO镜像与Kickstart文件

Client端 :

  • 第一步,客户端以PXE模式启动
  • 第二步,客户端获取IP地址
  • 第三步,通过TFTP服务器获取启动文件
  • 第四步,进入Cobbler安装选择界面
  • 第五步,客户端确定加载信息
  • 第六步,根据配置信息准备安装系统
  • 第七步,加载Kickstart文件
  • 第八步,传输系统安装的其它文件
  • 第九步,进行安装系统

1.3 系统环境准备

使用的是CentOS7.x 和 VirtualBox(配置上网和NAT关闭DHCP服务);

代码语言:javascript复制
CentOS Linux release 7.6.1810 (Core)  3.10.0-957.1.3.el7.x86_64
[[email protected] ~]# vi /etc/sysconfig/selinux   #强制访问关闭
SELINUX=disabled
[[email protected] ~]# reboot     #修改后需要重启
[[email protected] ~]# getenforce 
Disabled

0x02 Cobbler安装配置

2.1 安装Cobbler

代码语言:javascript复制
#author:WeiyiGeek
#配置阿里云的epel、yum源
#$ mv /etc/yum.repos.d/CentOS-Base.repo{,.bak}
#$ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/epel-7.repo
[[email protected] yum.repos.d]# yum -y install epel*
[[email protected] yum.repos.d]# yum makecache

#有想利用rsync安装的也可以安装好(使用于tftp类似)
#cobbler检查kickstart语法错误
$yum -y install xinetd syslinux dhcp tftp-server httpd rsync
$yum install -y python-pip      #安装cobbler依赖
$pip install -U pip 
$yum -y install cobbler cobbler-web pykickstart 

-----------------------------------------------------------------------------------------------
$ rpm -ql cobbler  # 查看安装的文件,下面列出部分

/etc/cobbler                  # 配置文件目录
/etc/cobbler/settings         # cobbler主配置文件,这个文件是YAML格式
/etc/cobbler/dhcp.template    # DHCP服务的配置模板
/etc/cobbler/tftpd.template   # tftp服务的配置模板
/etc/cobbler/rsync.template   # rsync服务的配置模板
/etc/cobbler/dnsmasq.template # DNS服务的配置模板

/etc/cobbler/iso              # iso模板配置文件目录
/etc/cobbler/pxe              # pxe模板文件目录
/etc/cobbler/power            # 电源的配置文件目录
/etc/cobbler/users.conf       # Web服务授权配置文件
/etc/cobbler/users.digest     # 用于web访问的用户名密码配置文件
/etc/cobbler/modules.conf     # Cobbler模块配置文件

/var/lib/cobbler              # Cobbler数据目录
/var/lib/cobbler/config       # 配置文件
/var/lib/cobbler/kickstarts   # 默认存放kickstart文件
/var/lib/cobbler/loaders      # 存放的各种引导程序
/var/lib/cobbler/triggers/ 	用于存放用户定义的cobbler命令

/var/www/cobbler              # 系统安装镜像目录
/var/www/cobbler/ks_mirror    # 导入的系统镜像列表
/var/www/cobbler/images       # 导入的系统镜像启动文件
/var/www/cobbler/repo_mirror  # yum源存储目录

/var/log/cobbler              # 日志目录
/var/log/cobbler/install.log  # 客户端系统安装日志
/var/log/cobbler/cobbler.log  # cobbler日志

2.2 命令详解 cobbler

代码语言:javascript复制
cobbler <distro|profile|system|repo|image|mgmtclass|package|file> ... 
        [add|edit|copy|getks*|list|remove|rename|report] [options|--help]
<aclsetup|buildiso|import|list|replicate|report|reposync|sync|validateks|version|signature|get-loaders|hardlink> [options|--help]

cobbler import --help  # 导入镜像
cobbler check     #核对当前设置是否有问题
cobbler list            #列出所有的cobbler元素
cobbler report     #列出元素的详细信息
cobbler sync             #同步配置到数据目录,更改配置最好都要执行下
cobbler reposync     #同步yum仓库
cobbler distro        #查看导入的发行版系统信息
cobbler system     #查看添加的系统信息
cobbler profile     #查看配置信息

2.3 配置Cobbler环境(重要)

代码语言:javascript复制
[[email protected] yum.repos.d]# getenforce 
Disabled

$ /etc/init.d/iptables stop   #关闭防火墙重要
$ /etc/init.d/httpd restart
$ /etc/init.d/cobblerd start
$ cobbler check  #检查Cobbler的配置,如果看不到下面的结果,再次执行/etc/init.d/cobblerd restart
WeiyiGeek.检查Cobbler的配置WeiyiGeek.检查Cobbler的配置

​​ 看着上面的结果,一个一个解决;第1、2、6个问题,顺便修改其他功能

代码语言:javascript复制
#author;WeiyiGeek

cp /etc/cobbler/settings{,.bak} # 备份
#server,Cobbler服务器的IP 【提示1】
sed -i 's/^server: 127.0.0.1/server: 192.168.1.99/' /etc/cobbler/settings

# next_server,如果用Cobbler管理DHCP,修改本项,作用不解释,看kickstart【提示2】
sed -i 's/^next_server: 127.0.0.1/next_server: 192.168.1.99/' /etc/cobbler/settings

# 用Cobbler管理DHCP
sed -i 's/^manage_dhcp: 0/manage_dhcp: 1/' /etc/cobbler/settings
# 防止循环装系统,适用于服务器第一启动项是PXE启动。
sed -i 's/^pxe_just_once: 0/pxe_just_once: 1/' /etc/cobbler/settings


# 设置新装系统的默认root密码123456,下面的命令来源于【提示7】。
# random-phrase-here为干扰码,可以自行设定。
# openssl passwd -1 -salt 'weiyigeek' '123456'
$1$weiyigee$Kl6liFVRLuWROHNbd37Zm1
# vim /etc/cobbler/settings 
default_password_crypted: "$1$weiyigee$Kl6liFVRLuWROHNbd37Zm1"


# [第3个问题]
[root ~]# vim /etc/xinetd.d/tftp
disable = no
[root ~]# /etc/init.d/xinetd restart
停止 xinetd:                                              [确定]
正在启动 xinetd:                                          [确定]

# [第5个问题]
$ systemctl enable rsyncd.service 
$ systemctl start rsyncd
$ systemctl restart cobblerd    [重启即可]


# [第4个问题]
$ cobbler get-loaders  # 会自动从官网下载bootloaders
task started: 2019-05-29_105819_get_loaders
task started (id=Download Bootloader Content, time=Wed May 29 10:58:19 2019)
downloading https://cobbler.github.io/loaders/README to /var/lib/cobbler/loaders/README
downloading https://cobbler.github.io/loaders/COPYING.elilo to /var/lib/cobbler/loaders/COPYING.elilo
downloading https://cobbler.github.io/loaders/COPYING.yaboot to /var/lib/cobbler/loaders/COPYING.yaboot
downloading https://cobbler.github.io/loaders/COPYING.syslinux to /var/lib/cobbler/loaders/COPYING.syslinux
downloading https://cobbler.github.io/loaders/elilo-3.8-ia64.efi to /var/lib/cobbler/loaders/elilo-ia64.efi
downloading https://cobbler.github.io/loaders/yaboot-1.3.17 to /var/lib/cobbler/loaders/yaboot
downloading https://cobbler.github.io/loaders/pxelinux.0-3.86 to /var/lib/cobbler/loaders/pxelinux.0
downloading https://cobbler.github.io/loaders/menu.c32-3.86 to /var/lib/cobbler/loaders/menu.c32
downloading https://cobbler.github.io/loaders/grub-0.97-x86.efi to /var/lib/cobbler/loaders/grub-x86.efi
downloading https://cobbler.github.io/loaders/grub-0.97-x86_64.efi to /var/lib/cobbler/loaders/grub-x86_64.efi


$ cd /var/lib/cobbler/loaders/ && ls  # 下载的内容
WeiyiGeek.loadersWeiyiGeek.loaders

2.4 配置DHCP

修改cobbler的dhcp模版,不要直接修改dhcp本身的配置文件,因为cobbler会覆盖。 /etc/cobbler/dhcp.template # DHCP服务的配置模板 (注意这里可能需要新建网卡)

代码语言:javascript复制
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:50:56:b3:69:06 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.99/24 brd 192.168.1.255 scope global noprefixroute ens34
       valid_lft forever preferred_lft forever
    inet6 fe80::dfc:592e:b4a4:9877/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

2.5 同步COBBLER配置(重要)

代码语言:javascript复制
# 同步最新cobbler配置,它会根据配置自动修改dhcp等服务。
$ cobbler sync # 同步所有配置,可以仔细看一下sync做了什么。
task started: 2019-03-13_160834_sync
task started (id=Sync, time=Wed Mar 13 16:08:34 2019)
running pre-sync triggers
cleaning trees
removing: /var/lib/tftpboot/grub/images
copying bootloaders
trying hardlink /var/lib/cobbler/loaders/pxelinux.0 -> /var/lib/tftpboot/pxelinux.0
trying hardlink /var/lib/cobbler/loaders/menu.c32 -> /var/lib/tftpboot/menu.c32
trying hardlink /var/lib/cobbler/loaders/yaboot -> /var/lib/tftpboot/yaboot
trying hardlink /usr/share/syslinux/memdisk -> /var/lib/tftpboot/memdisk
trying hardlink /var/lib/cobbler/loaders/grub-x86.efi -> /var/lib/tftpboot/grub/grub-x86.efi
trying hardlink /var/lib/cobbler/loaders/grub-x86_64.efi -> /var/lib/tftpboot/grub/grub-x86_64.efi

# 再看一下dhcp的配置文件。
$ less /etc/dhcp/dhcpd.conf

2.6 服务自启动

代码语言:javascript复制
# 方法1
systemctl enable httpd.service
systemctl enable xinetd .service
systemctl enable cobblerd 
systemctl enable dhcpd
systemctl start  httpd
systemctl start  xinetd
systemctl start cobblerd 
systemctl start  dhcpd


# 方法2 编写Cobbler相关服务启动脚本(可选)
cat >> /etc/init.d/cobbler<<EOF
#!/bin/bash
# chkconfig: 345 80 90
# description:cobbler

case $1 in
  start)
    service httpd start
    service xinetd start
    service dhcpd start
    service cobblerd start
    ;;

  stop)
    service httpd stop
    service xinetd stop
    service dhcpd stop
    service cobblerd stop
    ;;

  restart)
    service httpd restart
    service xinetd restart
    service dhcpd restart
    service cobblerd restart
    ;;

  status)
    service httpd status
    service xinetd status
    service dhcpd status
    service cobblerd status
    ;;

  sync)
    cobbler sync
    ;;

  *)
    echo "Input error,please in put 'start|stop|restart|status|sync'!"
    exit 2
    ;;

esac
EOF

# chmod  x /etc/init.d/cobbler
# chkconfig cobbler on

3 Cobbler安装系统

3.1 导入镜像

代码语言:javascript复制
$ mkdir /mnt/cdrom
$ mount /dev/cdrom /mnt/cdrom   # 挂载CentOS7的系统镜像
mount: /dev/sr0 is write-protected, mounting read-only

$ cobbler import --path=/mnt/ --name=CentOS-7.1-x86_64 --arch=x86_64
# --path 镜像路径
# --name 为安装源定义一个名字
# --arch 指定安装源是32位、64位、ia64, 目前支持的选项有: x86│x86_64│ia64
# 安装源的唯一标示就是根据name参数来定义,本例导入成功后,安装源的唯一标示就是:CentOS-7.1-x86_64,如果重复,系统会提示导入失败。


$ cobbler distro list  # 查看镜像列表
   CentOS-7.1-x86_64

# 镜像存放目录,cobbler会将镜像中的所有安装文件拷贝到本地一份,放在/var/www/cobbler/ks_mirror下的CentOS-7.1-x86_64目录下。
因此/var/www/cobbler目录必须具有足够容纳安装文件的空间。

$ cd /var/www/cobbler/ks_mirror/ && ls
Centos-7-X84_64-x86_64  config

[[email protected] ks_mirror]# ls /var/www/cobbler/ks_mirror/Centos-7-X84_64-x86_64
CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL

​​

WeiyiGeek.导入镜像WeiyiGeek.导入镜像

3.2 指定ks.cfg文件及调整内核参数

代码语言:javascript复制
# Cobbler的ks.cfg文件存放位置
$ cd /var/lib/cobbler/kickstarts/ && ls
sample_end.ks(默认使用的ks文件)
# 在第一次导入系统镜像后,Cobbler会给镜像指定一个默认的kickstart自动安装文件在/var/lib/cobbler/kickstarts下的sample_end.ks。

rz  # 上传准备好的ks文件
$ mv Cobbler-CentOS-7-x86_64.cfg Centos-7-X84_64-x86_64.cfg

# 查看安装镜像文件信息
cobbler distro report --name=Centos-7-X84_64-x86_64 

## 查看所有的profile设置
cobbler profile report
cobbler profile report --name=Centos-7-X84_64-x86_64 

# 编辑profile,修改关联的ks文件
$cobbler profile edit --name=Centos-7-X84_64-x86_64 --kickstart=/var/lib/cobbler/kickstarts/Centos-7-X84_64-x86_64.cfg

# 修改安装系统的内核参数,在CentOS7系统有一个地方变了,就是网卡名变成eno16777736这种形式,但是为了运维标准化,我们需要将它变成我们常用的eth0,因此使用下面的参数。但要注意是CentOS7才需要下面的步骤,CentOS6不需要。
cobbler profile edit --name=Centos-7-X84_64-x86_64  --kopts='net.ifnames=0 biosdevname=0'

# 每次修改完都要同步一次
$ cobbler sync

​​

WeiyiGeek.配置同步WeiyiGeek.配置同步

3.3 安装系统

到此就可以进行安装系统了,安装系统前可以修改文字

代码语言:javascript复制
#修改Cobbler提示
$ vim /etc/cobbler/pxe/pxedefault.template
menu vesamenu.c32
MENU TITLE Cobbler | ccccccc
$ cobbler sync      # 修改配置都要同步

#新建立一台虚拟机网络启动即可,效果如下:

​​​

WeiyiGeek.虚拟机网络启动WeiyiGeek.虚拟机网络启动

进入PXE选择界面进行安装系统; ​​​​​

WeiyiGeek.虚拟机网络启动WeiyiGeek.虚拟机网络启动

然后就进行系统的安装 ​​​​​​​

WeiyiGeek.系统的安装WeiyiGeek.系统的安装

3.4 完善ks.cfg文件

文件大部分参数含义见kickstart文章,此处只讲一些不同的地方,同时可以参考模板文件。

代码语言:javascript复制
$ cat CentOS-7.1-x86_64.cfg

# Cobbler for Kickstart Configurator for CentOS 7.1 by yao zhang
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')
timezone --utc Asia/Shanghai
authconfig --enableshadow --passalgo=sha512
rootpw  --iscrypted $default_password_crypted
clearpart --all --initlabel
part /boot --fstype xfs --size 1024     #CentOS7系统磁盘默认格式xfs
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
@base
@compat-libraries
@debugging
@development
tree
nmap
sysstat
lrzsz
dos2unix
telnet
iptraf 
ncurses-devel
openssl-devel
zlib-devel
OpenIPMI-tools
screen
%end

%post
systemctl disable postfix.service
%end

0x04 定制化安装

指定某台服务器使用指定ks文件,kickstart实现这功能可能比较复杂,但是Cobbler就很简单了。 区分一台服务器的最简单的方法就是物理MAC地址,物理服务器的MAC地址在服务器上的标签上写了或者虚拟机的MAC查看。

代码语言:javascript复制
cobbler system add --name=oldboy --mac=00:0C:29:7F:2F:A1 --profile=CentOS-7.1-x86_64 --ip-address=10.0.0.111 --subnet=255.255.255.0 --gateway=10.0.0.2 --interface=eth0 --static=1 --hostname=oldboy.example.com --name-servers="114.114.114.114 8.8.8.8"

# --name 自定义,但不能重复
# 查看定义的列表
$ cobbler system list
   oldboy
$ cobbler sync

0x05 Cobbler的Web管理界面的安装与配置

我们上面已经安装cobbler-web软件,我们访问网站https://10.22.53.12/cobbler_web即可; ​​​​​​​

WeiyiGeek.cobbler-webWeiyiGeek.cobbler-web

​ 可以直接利用网页上进行import 设置 profiles 内核参数 biosdevname=0 net.ifnames=0 ​​​​​​​

WeiyiGeek.profilesWeiyiGeek.profiles

​​

5.1 配置Cobbler Web 文件

网站路径:/usr/share/cobbler/web/ 网站配置文件路径:/etc/httpd/conf.d/cobbler_web.conf Web服务授权配置文件: /etc/cobbler/users.conf 用于web访问的用户名密码配置文件: /etc/cobbler/users.digest

代码语言:javascript复制
[[email protected] ~]# cat /etc/cobbler/users.digest
cobbler:Cobbler:a2d6bae81669d707b72c0bd9806e01f3

# 设置Cobbler web用户登陆密码
# 在Cobbler组添加cobbler用户,提示输入2遍密码确认
[[email protected] ~]# htdigest /etc/cobbler/users.digest "Cobbler" cobbler
Changing password for user cobbler in realm Cobbler
New password: 123456
Re-type new password:123456

# 同步重启服务即可
$ cobbler sync
$ /etc/init.d/httpd restart
$ /etc/init.d/cobblerd restart

0x06 入坑记

问题1:安装源中无Cobbler的包? 原因:#可以看到cobbler、cobbler_web没有安装成功,那是因为常规yum源中没有关于cobbler的包,不过不用着急,我们需要在配置一个epel源,就可以了。 ​​解决方法:

代码语言:javascript复制
#配置epel源
[[email protected] yum.repos.d]# yum -y install epel*
[[email protected] yum.repos.d]# yum makecache

问题2:安装cobbler-web未能成功提示Django依赖问题 解决方法:

代码语言:javascript复制
Error: Package: cobbler-web-2.6.11-7.git95749a6.el6.noarch (epel)
       Requires: Django >= 1.4

$ wget  https:#raw.githubusercontent.com/pypa/get-pip/master/2.6/get-pip.py
$ python2.6 get-pip.py
$ pip install --upgrade pip
[[email protected] yum.repos.d]# pip install Django==1.5.8

问题3:提示没有找到内核镜像,其实就是 没有加载一个菜单问题 在cobbler sync后修改了tftp数据目录中pxeliunx.cfg/default 的memu 却没有把我们ISO项目中的vesamenu.c32赋值到该目录中。

​​​​​​​

WeiyiGeek.问题3WeiyiGeek.问题3
代码语言:javascript复制
$ cp /mnt/cdrom/isolinux/vesamenu.c32 /var/lib/tftpboot/   #运行此句就OK
[[email protected] tftpboot]# ls
boot  etc  grub  images  images2  memdisk  ppc  pxelinux.0  pxelinux.cfg  s390x  vesamenu.c32  vesamenu.c32.bak  yaboot

问题4:我们在访问CobblerWeb的时候,发现服务器报500错误,经过检查httpd的日志发现报错如下

​​​​​​​

WeiyiGeek.问题4WeiyiGeek.问题4

错误原因:(没有采用https),这个报错是由于centos 7默认安装的python-django版本过高,cobbler还存在一些bug未修复,因此,我们需要将djaogo框架降到低版本。

解决办法:

代码语言:javascript复制
#首先,查询当前系统安装的django版本,然后卸载
rpm -qa |grep django
rpm -e python2-django-*.el7.noarch --nodeps

#安装较低版本的django
yum -y install python2-django16

#重启httpd服务
systemctl restart httpd

需要访问 https 的网站

问题5:debmirror package is not installed, it will be required to manage debian deployments and repositories 解决办法 : debian 安装用,暂时可以不管;如果需要安装,下载地址为:http://rpmfind.net/linux/rpm2html/search.php?query=debmirror

问题6:fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them 解决办法 : 关于电源管理(跟DELl 远程控制协议类似东西?),也暂时不管。

问题7:补充脚本

代码语言:javascript复制
echo -e "n############################n#安装COBBLER及其依赖n####################################n"
# yum -y install xinetd syslinux dhcp tftp-server httpd rsync
# install -y python-pip && pip install -U pip 
# yum -y install cobbler cobbler-web pykickstart 
# wget https://weiyigeek-1251733653.cos.ap-chengdu.myzijiebao.com/file/2019/Cobbler_init.sh -O /tmp/
# chmod  x /tmp/Cobbler_init.sh && /tmp/Cobbler_init.sh
echo "--[安装完毕]--"

0 人点赞