1. 程式人生 > >使用Cobbler批量安裝作業系統

使用Cobbler批量安裝作業系統

前言

   在實際生產中,我們常常會遇到這樣一種情況,就是我們需要同時安裝幾十甚至上百臺伺服器,如果我們使用U盤或者光碟的方式的話,或許老闆直接就將我們辭退了。這裡我們介紹一種能夠實現自動化安裝作業系統的方式。
   我們搭建Cobbler的實驗環境是基於CentOS 7.3 -1611 的基礎的。
   同時這個實驗可以幫助你一步步的完成所有的操作,不過,如果你想自定義安裝的內容的話,建議你先看本文 自定義kickstart檔案 部分,以便有所印象。

Cobbler 簡介

   Cobbler專案是在2008年由RedHat釋出的網路安裝伺服器套件。是一種快速網路安裝linux作業系統的服務,支援眾多的Linux發行版:Red Hat、Fedora、CentOS、Debian、Ubuntu和SuSE,也可以支援網路安裝windows。

   PXE 是由Intel開發的技術,基於Client/Server的網路模式,支援遠端主機通過網路從遠端伺服器下載映像,並由此支援通過網路啟動作業系統。也可以實現通過網路批量的安裝作業系統。

   Cobbler 正是基於PXE的二次封裝,將多種安裝引數封裝到一個選單當中。Cobbller提供了CLI和WEB兩種安裝方式,使用起來更加的友好。

Cobbler 工作流程

關於Cobbler的工作流程,可以用下面的圖進行概括。

Cobbler的工作原理

實驗環境準備

   因為我們正在搭建的是網路服務,所以需要有至少兩臺主機,其中一臺主機承擔伺服器的角色。我在在這個實驗中,使用的CentOS 7 搭建的網路服務,承擔Server角色。

關閉防火牆和SELinux

防火牆和SELinux 在實驗過程中有可能會導致意想不到的問題,所以我們這裡將其關閉,實際生產中,請根據自己的實際情況進行調整。至於關閉防火牆和SELinux就不列出了,這很簡單。

安裝Cobbler

Cobbler 預設不在附帶在光碟中,所以要通過EPEL源進行下載安裝。
配置好epel源以後,執行yum install cobbler 就可以安裝Cobbler了。
在安裝好Cobbler之後,我們就會發現,Cobbler還附帶安裝了很多其他的服務,如下圖所示 。這也就是解釋了在Cobbler的工作流程中為什麼能夠用到那麼多服務,從圖中可以看出,還缺少DHCP服務,所以接下里我們也要安裝一下。其中,syslinux 就是安裝的就是PXE服務。

Cobbler附帶的服務

設定常用服務

將Cobbler服務設為開機啟動

systemctl enable  cobblerd
systemctl start  cobblerd

將tftp 設為開機啟動

systemctl enable  tftp
systemctl start  tftp

將http 設為開機啟動

systemctl enable  httpd
systemctl start  httpd

安裝DHCP服務 為稍後使用Cobbler來管理DHCP做準備

在稍後,我們會利用Cobbler來自動管理DHCP。

yum install  dhcp

執行Cobbler Check 進行環境檢查

   Cobbler Check 命令能夠非常迅速的幫助我們找到目前環境中還缺少的配置,然後我們根據這裡的提示進行相應的配置調整。 這裡出現了很多的問題,看到之後不要驚慌,根據提示一點一點去處理就好了。另外,因為實際生產環境中,所有的主機都會有所不同,所以這裡的提示資訊應該也會有所不同,我們這裡只是根據實驗環境進行解決,其餘的問題,可以留言一起討論。

# 執行Cobbler check 檢查目前環境還缺少哪些東西
[root@localhost ~]#cobbler check
The following are potential configuration items that you may want to fix:

1 : The 'server' field in /etc/cobbler/settings must be set to something other than localhost, or kickstarting features will not work.  This should be a resolvable hostname or IP for the boot server as reachable by all machines that will use it.
2 : For PXE to be functional, the 'next_server' field in /etc/cobbler/settings must be set to something other than 127.0.0.1, and should match the IP of the boot server on the PXE network.
3 : change 'disable' to 'no' in /etc/xinetd.d/tftp
4 : 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.
5 : enable and start rsyncd.service with systemctl
6 : debmirror package is not installed, it will be required to manage debian deployments and repositories
7 : The default password used by the sample templates for newly installed machines (default_password_crypted in /etc/cobbler/settings) is still set to 'cobbler' and should be changed, try: "openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'" to generate new one
8 : 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.

   首先我們來看第一個問題。資訊提示,在/etc/cobbler/settings 這個配置檔案中的server 欄位一定要有一個其他主機能夠訪問到的主機名或者IP地址,否則KickStart的一些特性將無法使用。其實也很好理解,我們目前的主機是用來提供網路服務的。其他主機通過訪問我們的Cobbler服務,進行下載安裝作業系統,如果我們的Server欄位別人不能訪問,那怎麼可以呢!
   所以開啟該配置檔案,修改server欄位為本機的IP地址。

修改Server檔案

   修改完成之後,我們注意到,之前的提示資訊末尾有一段提示資訊 Restart cobblerd and then run 'cobbler sync' to apply changes. ,所以我們執行一下這兩個命令。

#重啟服務
[root@localhost ~]#systemctl restart cobblerd
#同步資訊
[root@localhost ~]#cobbler sync
...........  # 中間省略輸出資訊  


# 重新檢查一遍,看看還缺少哪些東西。
[root@localhost ~]#cobbler check
The following are potential configuration items that you may want to fix:

1 : For PXE to be functional, the 'next_server' field in /etc/cobbler/settings must be set to something other than 127.0.0.1, and should match the IP of the boot server on the PXE network.
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 : The default password used by the sample templates for newly installed machines (default_password_crypted in /etc/cobbler/settings) is still set to 'cobbler' and should be changed, try: "openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'" to generate new one
6 : 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.

   重新檢查之後,我們發現解決了2個問題。然後我們接著來看第一個問題。這個問題是說,next_server 欄位也應該是一個具體的地址,而不應該是127.0.0.1.其實這個問題和上面我們修改過的問題是一樣的。所以我們重新將next_server的地址修改為我們本機的地址。

next_server

修改之後,重新啟動服務,並進行同步。

#重啟服務
[root@localhost ~]#systemctl restart cobblerd
#同步資訊
[root@localhost ~]#cobbler sync
...........  # 中間省略輸出資訊  


# 重新檢查一遍,看看還缺少哪些東西。
[root@localhost ~]#cobbler check
The following are potential configuration items that you may want to fix:

1 : 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.
2 : enable and start rsyncd.service with systemctl
3 : debmirror package is not installed, it will be required to manage debian deployments and repositories
4 : The default password used by the sample templates for newly installed machines (default_password_crypted in /etc/cobbler/settings) is still set to 'cobbler' and should be changed, try: "openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'" to generate new one
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.


   出現的問題繼續減少了。我們接著來看第一個資訊。這個資訊是說,在/var/lib/cobbler/loaders 路徑下,少了一些必須的檔案,可以使用 cobbler get-loaders 命令從網路中下載相關的檔案。所以,接下來我們執行一下 cobbler get-loaders


# 可以看到 /var/lib/cobbler/loaders 目錄下沒有任何內容
[root@localhost ~]#ls /var/lib/cobbler/loaders
[root@localhost ~]#cobbler get-loaders
task started: 2017-09-20_084605_get_loaders
task started (id=Download Bootloader Content, time=Wed Sep 20 08:46:05 2017)
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
*** TASK COMPLETE ***

   此時檢視 /var/lib/cobbler/loaders 目錄下,會發現,已經下載了很多的內容。然後重啟和同步服務,並執行 cobbler check 檢視還剩下一些什麼問題,我們接著一個個去解決。

#這個目錄下最關鍵的檔案就是  menu.c32   pxelinux.0 
[root@localhost ~]#ls /var/lib/cobbler/loaders
COPYING.elilo     COPYING.yaboot  grub-x86_64.efi  menu.c32    README
COPYING.syslinux  elilo-ia64.efi  grub-x86.efi     pxelinux.0  yaboot
[root@localhost ~]#cobbler check
The following are potential configuration items that you may want to fix:

1 : enable and start rsyncd.service with systemctl
2 : debmirror package is not installed, it will be required to manage debian deployments and repositories
3 : The default password used by the sample templates for newly installed machines (default_password_crypted in /etc/cobbler/settings) is still set to 'cobbler' and should be changed, try: "openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'" to generate new one
4 : 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.

   接下來,我來看剩下的問題。前兩個問題不是很重要,我們先忽略過去。來看第三個問題,這個問題是說,應該為每一個新安裝的主機設定一個預設的使用者口令。並且資訊中提示了使用openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'命令來生成加密的使用者口令。 如果不設定,預設的使用者口令就是cobbler

#生成密碼是123456 的使用者口令
[root@localhost ~] openssl passwd -1  123456
$1$wuX5VyFf$a0Y/HdzHRCbVWhSFnbV8n/

然後將生成的口令替換到/etc/cobbler/settingsdefault_password_crypted欄位中。

修改Cobbler 預設口令

重新啟用並同步服務,然後看看還有什麼問題。

[root@localhost ~]#cobbler check
The following are potential configuration items that you may want to fix:

1 : enable and start rsyncd.service with systemctl
2 : debmirror package is not installed, it will be required to manage debian deployments and repositories
3 : 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.

   fencing tools 是在叢集環境中才會使用到的工具,我們暫且先不用管。這樣一來,關於Cobbler的check 工作我們就完成了。

通過Cobbler 管理DHCP

   我們利用DHCP的cobbler 功能來自動管理DHCP,修改 /etc/cobbler/settings 配置檔案中的manage_dhcp欄位。 設定為1,則由Cobbler 來管理DHCP

Cobbler dhcp

修改Cobbler下 /etc/cobbler/dhcp.template 模板檔案

   /etc/cobbler/dhcp.template 這個檔案是配置DHCP的內容的。但是這個檔案是Cobbler來提供的。也就是說,配置好了這個檔案,重新啟動Cobbler 服務,Cobbler就會自動地替我們管理DHCP。

# 在/etc/cobbler/dhcp.template 找到下面地這段內容進行修改整理。 
# 按照自己地要求進行DHCP地配置。

subnet 172.18.2.0 netmask 255.255.255.0 {
     option subnet-mask         255.255.255.0;
     range dynamic-bootp        172.18.2.100 172.18.2.254;
     default-lease-time         21600;
     max-lease-time             43200;
     next-server                $next_server;
     class "pxeclients" {
          match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
          if option pxe-system-type = 00:02 {
                  filename "ia64/elilo.efi";
          } else if option pxe-system-type = 00:06 {
                  filename "grub/grub-x86.efi";
          } else if option pxe-system-type = 00:07 {
                  filename "grub/grub-x86_64.efi";
          } else {
                  filename "pxelinux.0";
          }
     }

}

重新啟動和同步Cobbler 服務。

# 重新啟動服務
[root@localhost ~]#systemctl restart cobblerd
[root@localhost ~]#cobbler sync
........#中間省略很多輸出

#檢視DHCP的配置檔案
[root@localhost ~]#cat /etc/dhcp/dhcpd.conf 
# ******************************************************************
# Cobbler managed dhcpd.conf file
# generated from cobbler dhcp.conf template (Wed Sep 20 01:36:15 2017)
# Do NOT make changes to /etc/dhcpd.conf. Instead, make your changes
# in /etc/cobbler/dhcp.template, as /etc/dhcpd.conf will be
# overwritten.
# ******************************************************************

ddns-update-style interim;

allow booting;
allow bootp;

ignore client-updates;
set vendorclass = option vendor-class-identifier;

option pxe-system-type code 93 = unsigned integer 16;

subnet 172.18.2.0 netmask 255.255.255.0 {
     option subnet-mask         255.255.255.0;
     range dynamic-bootp        172.18.2.100 172.18.2.254;
     default-lease-time         21600;
     max-lease-time             43200;
     next-server                172.18.2.77;
     class "pxeclients" {
          match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
          if option pxe-system-type = 00:02 {
                  filename "ia64/elilo.efi";
          } else if option pxe-system-type = 00:06 {
                  filename "grub/grub-x86.efi";
          } else if option pxe-system-type = 00:07 {
                  filename "grub/grub-x86_64.efi";
          } else {
                  filename "pxelinux.0";
          }
     }

}

# group for Cobbler DHCP tag: default
group {
}

製作 yum 源

   與PXE不同,Cobbler可以自動幫助我們生成系統安裝的yum 源,而不需要我們自己去製作,我們只要指定光碟路徑就好了

# 執行下面的命令製作 CentOS 7.3 的啟動光碟
[root@localhost ~]#cobbler import --path=/misc/cd --name=centos7.3


# 然後更換ISO映象,製作6.9的光碟內容
[root@localhost ~]#cobbler import --path=/misc/cd --name=centos6.9

Cobbler 製作的光碟yum源到底放在了什麼地方呢??

#進入到下面的這個路徑下,可以看到這裡生成了兩個源,其實也就是將光盤裡的內容複製過來了而已。
[root@localhost ~]#cd /var/www/cobbler/ks_mirror/
[root@localhost ks_mirror]#ls
centos6.9  centos7.3  config


# 執行下面的命令可以看到,這裡已經成功的製作了兩個系統yum源。
[root@localhost ks_mirror]#cobbler distro list
   centos6.9-x86_64
   centos7.3-x86_64

修改啟動選單

yum 原始檔建立成功之後,可以進行自定義的配置修改。

# 檢視生成的啟動選單檔案
[root@localhost tftpboot]#cat /var/lib/tftpboot/pxelinux.cfg/default 
DEFAULT menu
PROMPT 0
MENU TITLE Cobbler | http://cobbler.github.io/   #可以修改為自己的標籤。
TIMEOUT 200
TOTALTIMEOUT 6000
ONTIMEOUT local

LABEL local
        MENU LABEL (local)
        MENU DEFAULT
        LOCALBOOT -1

LABEL centos6.9-x86_64
        kernel /images/centos6.9-x86_64/vmlinuz
        MENU LABEL centos6.9-x86_64
        append initrd=/images/centos6.9-x86_64/initrd.img ksdevice=bootif lang=  kssendmac text  ks=http://172.18.2.77/cblr/svc/op/ks/profile/centos6.9-x86_64
        ipappend 2

LABEL centos7.3-x86_64
        kernel /images/centos7.3-x86_64/vmlinuz
        MENU LABEL centos7.3-x86_64
        append initrd=/images/centos7.3-x86_64/initrd.img ksdevice=bootif lang=  kssendmac text  ks=http://172.18.2.77/cblr/svc/op/ks/profile/centos7.3-x86_64
        ipappend 2



MENU end

啟動網路安裝

重新新建一個虛擬機器,作為客戶端,然後啟動網路安裝,就可以看到我們剛剛製作的介面了。

Cobbler 啟動介面

自定義KickStart檔案

首先準備KickStart檔案

   在上面的實驗中,我們沒有進行任何的安裝配置,全部都是Cobbler幫助我們完成的。可是在實際生產中,我們對每臺主機的硬碟分割槽,安裝的軟體都有相應的要求,所以我們需要自己來定製KickStart檔案,這樣我們就能夠定製地批量安裝作業系統了。
   我們就利用實驗環境(CentOS 7.3)中的KickStart檔案來定製我們自己的KickStart檔案。

# 首先進入到Cobbler 的KickStart 目錄下
[root@localhost] cd /var/lib/cobbler/kickstarts/

# 將根目錄下的ks 檔案複製到當前目錄下
[root@localhost kickstarts]cp /root/anaconda-ks.cfg  centos7.cfg


[root@localhost kickstarts]#cat centos7.cfg 
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
url --url=$tree	# url可以指定詳細路徑也可以使用$tree變數來進行替代
# Use graphical install
reboot  #安裝成功之後可以重啟
text    #採用字元介面進行安裝
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

# Network information #修改網路環境
network  --bootproto=dhcp --device=ens33 --onboot=yes --ipv6=auto --activate
network  --hostname=localhost.localdomain


selinux --disabled #禁用SElinux 也可以禁用防火牆

# Root password #設定root使用者的初始密碼
rootpw --iscrypted $6$BlwRFg7fgO1i8eQa$F9yjtePt1aOnsIwmNO7mexdnBOsJTVSSyTnwp2hS2lSY87thmNylXw43.Ycj6lfY1wk2NmoQjO/WzEEGBUlZt.
# System services
services --disabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc --nontp
# X Window System configuration information
xconfig  --startxonboot
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Partition clearing information
zerombr #清楚MBR分割槽
clearpart --all #清楚系統中原有分割槽
# Disk partitioning information
part / --fstype="xfs" --ondisk=sda --size=56320
part swap --fstype="swap" --ondisk=sda --size=2000
part /app --fstype="xfs" --ondisk=sda --size=51200
part /boot --fstype="xfs" --ondisk=sda --size=1024

%packages
@^graphical-server-environment
@base
@core
@desktop-debugging
@dial-up
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@hardware-monitoring
@input-methods
@internet-browser
@multimedia
@print-client
@x11
kexec-tools

%end


%post
#刪除舊的yum倉庫
#可根據實際情況稍作調整。
rm -rf /etc/yum.repos.d/*
cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=base
baseurl=file:///misc/cd
gpgcheck=0
EOF
%end

將KickStart檔案和yum源做關聯

在Cobbler 自動建立了yum源之後,會自動有一個ks檔案與該源相對應。現在我們需要將自己製作的KS檔案與原有的yum源進行關聯。

# --name 我們需要新增的啟動選單的名字
# --distro  我們自定製的ks檔案關聯的yum庫
# --kickstart 我們自定製的ks檔案的路徑
[root@localhost kickstarts]#cobbler profile add --name=centos7.3-x86_64-desktop --distro=centos7.3-x86_64 --kickstart=/var/lib/cobbler/kickstarts/centos7.cfg

# 檢視Cobbler中現在還有多少個啟動項
[root@localhost kickstarts]#cobbler profile list
   centos6.9-x86_64
   centos7.3-x86_64
   centos7.3-x86_64-desktop

重新修改 /var/lib/tftpboot/pxelinux.cfg/default 檔案

在執行Cobbler sync 同步操作之後,Cobbler會自動的將/var/lib/tftpboot/pxelinux.cfg/default檔案重新生成,所以,最好重新按照自己的需求修改一下這個檔案。然後就可以開始進行網路安裝作業系統了。

Cobbler啟動介面2

從圖中可以清楚地看到我們新增地一個啟動選項。至此,我們搭建Cobbler 的環境就成功了。

注意事項

  • 在實際生產中,一般是區域網環境,所以在配置DHCP服務的時候,要注意區域網的工作環境。
  • Cobbler實際上就是對PXE的封裝,它幫助我們實現了很多的內容,免去了我們很多的手動配置,但是這樣的話,我們也不能清楚的瞭解底層的執行機制,出了問題,不便於處理,所以最好還是嘗試手動配置一下PXE來搭建網路作業系統安裝環境,以便了解的更詳細一下其中的執行機制。
  • 最好手動配置ks檔案,這樣能夠最大限度上定製自己的叢集作業系統。

結語

Cobbler 其實還支援基於Web的管理方式。在配置好Cobbler 服務環境之後,安裝一個cobbler-web 的軟體包,然後就可以進行相應的配置管理了,這裡我們不做詳細介紹,感興趣的朋友可以去查閱一下資料。
Cobbler_web 的圖形管理介面如下圖所示,從圖中我們能夠看到我們自己指定的選單和系統yum源。

Cobbler-web管理

通過上面的操作,我們已經能夠完全搭建一個基於Cobbler的網路服務,用來給生產環境中批量的安裝作業系統了。