Cobbler自動化批量安裝Linux作業系統 - 運維總結

散盡浮華發表於2016-07-19

 

一、Cobbler簡述

Cobbler是一個自動化和簡化系統安裝的工具,通過使用網路引導來控制和啟動安裝。Cobbler的特性包括儲存庫映象、Kickstart模板和連線電源管理系統。Cobbler通過將設定和管理一個安裝伺服器所涉及的任務集中在一起,從而簡化了系統配置。相當於Cobbler封裝了DHCP、TFTP、XINTED等服務,結合了PXE、kickstart等安裝方法,可以實現自動化安裝作業系統,並且可以同時提供多種版本,以實現線上安裝不同版本的系統。

Cobbler提供快速網路安裝linux作業系統的服務,而且在經過調整也可以支援網路安裝windows。Cobbler是用Python開發的,使用簡單的命令即可完成PXE網路安裝環境的配置,同時還可以管理DHCP、DNS、TFTP、RSYNC以及yum倉庫、構造系統ISO映象。Cobbler支援命令列管理,web介面管理,還提供了API介面,可以方便二次開發使用。Cobbler客戶端Koan支援虛擬機器安裝和作業系統重新安裝,使重灌系統更便捷。使用Cobbler之前最好是先了解下PXE和Kickstart的基本原理。

1.1   Cobbler相關服務

DHCP
DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)是一個區域網的網路協議,使用UDP協議工作, 主要有兩個用途:給內部網路或網路服務供應商自動分配IP地址,給使用者或者內部網路管理員作為對所有伺服器作中央管理的手段。DHCP有3個埠,其中UDP67和UDP68為正常的DHCP服務埠,分別作為DHCP Server和DHCP Client的服務埠;546號埠用於DHCPv6 Client,而不用於DHCPv4,是為DHCP failover服務,這是需要特別開啟的服務,DHCP failover是用來做"雙機熱備"的。

TFTP
TFTP是一種比較特殊的檔案傳輸協議。相對於FTP和目前經常使用的SFTP,TFTP是基於TCP/IP協議簇,用於進行簡單檔案傳輸,提供簡單、低開銷的傳輸服務。TFTP的埠設定為69。
相對於常見的FTP,TFTP有兩個比較好的優勢: 1) TFTP基於UDP協議,如果環境中沒有TCP協議,是比較合適的; 2) TFTP執行和程式碼佔用記憶體量比較小;

PXE 
預啟動執行環境(Preboot eXecution Environment,PXE,也被稱為預執行環境)是讓伺服器通過網路卡獨立地使用資料裝置(如硬碟)或者安裝作業系統。PXE當初是作為Intel的有線管理體系的一部分,Intel 和 Systemsoft於1999年9月20日公佈其規格(版本2.1)[1]。通過使用像網際協議(IP)、使用者資料包協議(UDP)、動態主機設定協定(DHCP)、小型檔案傳輸協議(TFTP)等幾種網路協議和全域性唯一識別符號(GUID)、通用網路驅動介面(UNDI)、通用唯一識別碼(UUID)的概念並通過對客戶機(通過PXE自檢的電腦)韌體擴充套件預設的API來實現目的。至於更深層次的東西先不用去管,下面直接上個圖,看下它的工作原理:

-   PXE Client傳送廣播包請求DHCP分配IP地址DHCP
 Server回覆請求,給出IP地址以及Boot
-   Server的地址PXE下載引導檔案執行載入程式
總結來說,PXE主要是通過廣播的方式傳送一個包,並請注獲取一個地址,而後交給TFTP程式下載一個引導檔案。

PXE工作模式:基於C/S的網路模式,支援遠端主機通過網路從遠端伺服器下載映像,並由此支援通過網路啟動作業系統。PXE 技術的實現流程概括如下:

-   客戶端的網路卡要支援網路引導機制;如果有作業系統的話,應該調整為第一引導裝置;在主機被喚醒之後,開始載入網路引導應用時,此網路卡會通過在本地區域網中廣播一個rarp協議,第一步獲得一個ip地址;

-   獲得ip地址的同時還會從dhcp那裡獲得引導檔名稱和檔案伺服器地址;隨後會去找檔案伺服器主機,載入對應的檔案,所需要的檔案載入完成後,在記憶體中展開,而後基於此檔案,可以實現去載入一個核心檔案,此核心檔案也一樣通過tftp檔案伺服器獲取,核心通常依賴於initrd虛根來完成對於真實根所在裝置的驅動載入;

-   載入完成以後,這個核心檔案通常是專用於為系統安裝所設定的,因此,如果配置了網路屬性,這個核心檔案還需要基於網路配置在核心上的ip地址,基於網路把自己扮演成某種協議的客戶端,載入一個能夠啟動安裝程式的程式包,在本地完成安裝並啟動這個應用程式,而此程式在已經不再tftp檔案伺服器上面;

-   網路引導安裝方式中,依賴於網路上應該存在一個基礎程式包映象倉庫,因此,此時還依賴於外部有一個基於ftp或http再或者nfs服務所提供的yum倉庫;還要通過這個yum倉庫載入安裝程式,以及安裝程式啟動完後,很可能要讀取kickstart檔案,可以根據kickstart檔案內容,解決依賴關係以後,基於這個yum倉庫,完成後續的所有安裝過程;

因此,對於centos系列伺服器而言,整個pxe技術大概要依賴以上所提到的服務: dhcp服務, tftp服務, 能夠提供yum倉庫的服務;還要提供:kickstart檔案 (如果不想使用自動化可以不用提供此檔案) 。

Kickstart
Kickstart 是Red紅帽折騰出來的一個工具,可以簡單理解為一個自動安裝應答配置管理程式。通過讀取這個配置檔案,系統知道怎麼去分割槽,要安裝什麼包,配什麼IP,優化什麼核心引數等等,其主要有以下部分組成:
-   Kickstart 安裝選項,包含語言的選擇,防火牆,密碼,網路,分割槽的設定等;
-   %Pre 部分,安裝前解析的指令碼,通常用來生成特殊的ks配置,比如由一段程式決定磁碟分割槽等;
-   %Package 部分,安裝包的選擇,可以是 @core 這樣的group的形式,也可以是這樣 vim-* 包的形式;
-   %Post 部分,安裝後執行的指令碼,通常用來做系統的初始化設定。比如啟動的服務,相關的設定等。

簡單來說,就是將手動安裝作業系統的所有詳細步驟記錄到一個檔案中(ks 檔案),然後kickstart工具通過讀取這個檔案就可以實現自動化安裝系統。Cobbler是對kickstart的所有元件的封裝,本質上就是網頁版本的kickstart。

1.2   Cobbler設計方式

Cobbler 的配置結構基於一組註冊的物件。每個物件表示一個與另一個實體相關聯的實體(該物件指向另一個物件,或者另一個物件指向該物件)。當一個物件指向另一個物件時,它就繼承了被指向物件的資料,並可覆蓋或新增更多特定資訊。以下物件型別的定義為:
 發行版:表示一個作業系統。它承載了核心和 initrd 的資訊,以及核心引數等其他資料。
-   配置檔案:包含一個發行版、一個 kickstart 檔案以及可能的儲存庫,還包含更多特定的核心引數等其他資料。
-   系統:表示要配給的機器。它包含一個配置檔案或一個映象,還包含 IP 和 MAC 地址、電源管理(地址、憑據、型別)以及更為專業的資料等資訊。
-   儲存庫:儲存一個 yum 或 rsync 儲存庫的映象資訊。
 映象:可替換一個包含不屬於此類別的檔案的發行版物件(例如,無法分為核心和 initrd 的物件)。

基於註冊的物件以及各個物件之間的關聯,Cobbler 知道如何更改檔案系統以反映具體配置。因為系統配置的內部是抽象的,所以您可以僅關注想要執行的操作。Cobbler 物件關係圖如下:

1.3   Cobbler工作原理

Cobbler由python語言開發,小巧輕便(才15k行python程式碼),是對PXE和Kickstart以及DHCP的封裝。融合很多特性,提供了CLI和Web的管理形式。更加方便的實行網路安裝。同時,Cobbler也提供了API介面,使用其它語言也很容易做擴充套件。它不緊可以安裝物理機,同時也支援kvm、xen虛擬化、Guest OS的安裝。更多的是它還能結合Puppet等集中化管理軟體,實現自動化的管理。

Cobbler 支援眾多的發行版:Red Hat、Fedora、CentOS、Debian、Ubuntu 和 SuSE。當新增一個作業系統(通常通過使用 ISO 檔案)時,Cobbler 知道如何解壓縮合適的檔案並調整網路服務,以正確引導機器。Cobbler 使用命令列方式管理,也提供了基於Web的圖形化配置管理工具(cobbler-web)。通過配置cobbler自動部署DHCP、TFTP、HTTP,在安裝過程中載入kiskstart無人值守安裝應答檔案實現無人值守。從客戶端使用PXE引導啟動安裝。

Server服務端工作流程:

第一步,啟動Cobbler服務
第二步,進行Cobbler錯誤檢查,執行cobbler check命令
第三步,進行配置同步,執行cobbler sync命令
第四步,複製相關啟動檔案檔案到TFTP目錄中
第五步,啟動DHCP服務,提供地址分配
第六步,DHCP服務分配IP地址
第七步,TFTP傳輸啟動檔案
第八步,Server端接收安裝資訊
第九步,Server端傳送ISO映象與Kickstart檔案

Client客戶端工程流程:

第一步,客戶端以PXE模式啟動
第二步,客戶端獲取IP地址
第三步,通過TFTP伺服器獲取啟動檔案
第四步,進入Cobbler安裝選擇介面
第五步,客戶端確定載入資訊
第六步,根據配置資訊準備安裝系統
第七步,載入Kickstart檔案
第八步,傳輸系統安裝的其它檔案

Cobbler的Server服務端與Client客戶端 (即裸機, PXE client) 互動過程分析

- 裸機配置了從網路啟動後,開機後會廣播包請求DHCP伺服器(cobbler server)傳送其分配好的一個IP;
- DHCP伺服器(cobbler server)收到請求後傳送responese,包括其ip地址;
- 裸機拿到ip後再向cobbler server傳送請求OS引導檔案的請求;
- cobbler server告訴裸機OS引導檔案的名字和TFTP server的ip和port;
- 裸機通過上面告知的TFTP server地址和port通訊,下載引導檔案;
- 裸機執行執行該引導檔案,確定載入資訊,選擇要安裝的os,期間會再向cobbler server請求kickstart檔案和os image;
- cobbler server傳送請求的kickstart和os iamge;
- 裸機載入kickstart檔案;
- 裸機接收os image,安裝該os image;

之後,裸機就不"裸"了,有了自己的os和dhcp分配給其的ip;可以通過檢視cobbler server所在機器的dhcp服務的相關檔案,來檢視分配出去的ip和對應的mac地址:

[root@Cobbler-node ~ ]# cat /var/lib/dhcpd/dhcpd.leases

1.4   Cobbler工作流程

Cobbler是PXE的二次封裝,將多種引數封裝到一個選單,是用python語言編寫。

client裸機配置了從網路啟動後,開機後會廣播包請求DHCP伺服器(cobbler server)傳送其分配好的一個ip
DHCP收到請求後傳送responese,包括其ip
client拿到ip後再向cobbler server傳送請求OS引導檔案的請求
-  cobbler server告訴client 裸機OS引導檔案的名字和TFTP server的ip和port
client通過上面告知的tftp server地址通訊,下載引導檔案
client執行該引導檔案,確定載入的資訊,選擇要按住的os,期間會在想cobbler server請求kickstart檔案和 os image
cobbler server傳送請求的kickstart 和 os image
-  celient載入kickstart檔案
client接收os image,安裝該os image

1.5   Cobbler功能

1)  使用Cobbler,可以做到無需進行人工干預即可安裝機器;
2)  Cobbler設定一個PXE引導環境(它還可使用yaboot支援PowerPC),並控制與安裝相關的所有方面,比如網路引導服務(DHCP和TFTP)與儲存庫映象。
3)  當希望安裝一臺新機器時,Cobbler可以:
     -  使用一個以前定義的模板來配置DHCP服務(如果啟用了管理 DHCP)將一個儲存庫(yum或rsync)建立映象或解壓縮一個媒介,以註冊一個新作業系統
     -  在DHCP配置檔案中為需要安裝的機器建立一個條目,並使用您指定的引數(IP和MAC地址);
     -  在TFTFP服務目錄下建立適當的PXE檔案;
     -  重新啟動DHCP服務以反映更改;
     -  重新啟動機器以開始安裝(如果電源管理已啟用)。

二、Cobbler自動化部署

2.1   注意幾個重要前提條件
-  Server服務端要和Client客戶機在一個VLAN網路內 (即走的是同一個交換機網路口,網段是同一個);
-  Server服務端要準備iso系統映象;
-  Client客戶機網路卡要支援PXE協議 (目前伺服器的網路卡基本都預設支援PXE協議);

2.2   Cobbler整合的服務
-  PXE服務支援
-  DHCP服務管理
-  DNS服務管理 (可選bind,dnsmasq)
-  電源管理
-  Kickstart服務支援
-  YUM倉庫管理
-  TFTP (PXE啟動時需要)
-  Apache (提供kickstart的安裝源,並提供定製化的kickstart配置)

Cobbler是一個Linux伺服器安裝的服務,可以通過網路啟動(PXE)的方式來快速安裝、重灌物理伺服器和虛擬機器,同時還可以管理DHCP,DNS等Cobbler可以使用命令列方式管理,也提供了基於Web的介面管理工具(cobbler-web),還提供了API介面,可以方便二次開發使用。Cobbler是較早前的kickstart的升級版,優點是比較容易配置,還自帶web介面比較易於管理。

2.3   Cobbler的各主要元件間的關係如下圖所示

2.4   Cobbler自動化安裝作業系統 - 部署過程記錄 (服務端為Centos7)

1) Cobbler安裝前準備

系統版本
[root@cobbler-node ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
  
核心版本
[root@cobbler-node ~]# uname -r
3.10.0-862.el7.x86_64

主機名
[root@cobbler-node ~]# hostnamectl --static set-hostname cobbler-node
[root@cobbler-node ~]# hostname
cobbler-node
  
selinux必須要關閉
[root@cobbler-node ~]# setenforce 0
[root@cobbler-node ~]# getenforce
[root@cobbler-node ~]# vim /etc/sysconfig/selinux
SELINUX=disabled
  
關閉iptables防火牆
[root@cobbler-node ~]# iptables -F
[root@cobbler-node ~]# systemctl stop firewalld            
[root@cobbler-node ~]# systemctl disable firewalld         
[root@cobbler-node ~]# firewall-cmd --state                
not running
[root@cobbler-node ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination       
  
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination       
  
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination       
  
Chain DOCKER (0 references)
target     prot opt source               destination       
  
Chain DOCKER-ISOLATION (0 references)
target     prot opt source               destination
  
====================================================================
溫馨提示:
如果開啟iptables防火牆,則需要開啟TCP: 80埠、TCP: 25151埠、UDP: 69埠
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT             #http服務需要此埠
# iptables -A INPUT -m state --state NEW -m udp -p udp --dport 69 -j ACCEPT             #tftp服務需要此埠
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 25151 -j ACCEPT          #cobbler需要此埠
 
重啟iptables服務
# systemctl restart firewalld  
====================================================================
 
檢視本機ip地址
[root@cobbler-node ~]# ifconfig |grep 172.16.60.222
        inet 172.16.60.222  netmask 255.255.255.0  broadcast 172.16.60.255

[root@cobbler-node ~]# hostname -I
172.16.60.222 

2) Cobbler安裝

線上安裝,則需要使用到epel源,yum源替換成阿里源或是網易源也比較快點。
[root@cobbler-node ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@cobbler-node ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@cobbler-node ~]# ll /etc/yum.repos.d/epel.repo
-rw-r--r-- 1 root root 664 Jan 20 23:33 /etc/yum.repos.d/epel.repo
 
[root@cobbler-node ~]# yum install -y httpd dhcp tftp python-ctypes cobbler xinetd cobbler-web


Cobbler的配置說明
===================================================================
cobbler                           #cobbler程式包
cobbler-web                       #cobbler的web服務包
pykickstart                       #cobbler檢查kickstart語法錯誤
httpd                             #Apache web服務
dhcp                              #Dhcp服務
tftp                              #tftp服務
/etc/cobbler                      #配置檔案目錄
/etc/cobbler/settings             #cobbler主配置檔案
/etc/cobbler/dhcp.template        #DHCP服務的配置模板
/etc/cobbler/tftpd.template       #tftp服務的配置模板
/etc/cobbler/rsync.template       #rsync服務的配置模板
/etc/cobbler/iso                  #iso模板配置檔案目錄
/etc/cobbler/pxe                  #pxe模板檔案目錄
/etc/cobbler/power                #電源的配置檔案目錄
/etc/cobbler/users.conf           #web服務授權配置檔案
/etc/cobbler/users.digest         #web訪問的使用者名稱密碼配置檔案
/etc/cobbler/dnsmasq.template     #DNS服務的配置模板
/etc/cobbler/modules.conf         #Cobbler模組配置檔案
/var/lib/cobbler                  #Cobbler資料目錄
/var/lib/cobbler/config           #配置檔案
/var/lib/cobbler/kickstarts       #預設存放kickstart檔案
/var/lib/cobbler/loaders          #存放的各種載入程式
/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日誌

3) 檢測Cobbler

先啟動xinetd、apache和cobbler服務,且設為開機啟動:
[root@cobbler-node ~]# systemctl enable xinetd
[root@cobbler-node ~]# systemctl start xinetd
  
[root@cobbler-node ~]# systemctl enable httpd.service
[root@cobbler-node ~]# systemctl start httpd.service
  
[root@cobbler-node ~]# systemctl enable cobblerd.service
[root@cobbler-node ~]# systemctl start cobblerd.service
  
檢視xinetd、apache和cobbler服務是否正確啟動 (如下檢視status都為runing狀態即可)
[root@cobbler-node ~]# systemctl status xinetd httpd.service cobblerd.service
.........
● xinetd.service - Xinetd A Powerful Replacement For Inetd
   Loaded: loaded (/usr/lib/systemd/system/xinetd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-01-20 23:47:11 CST; 2min 29s ago
.........
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2019-01-20 23:47:50 CST; 1min 50s ago
.........
● cobblerd.service - Cobbler Helper Daemon
   Loaded: loaded (/usr/lib/systemd/system/cobblerd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2019-01-20 23:48:17 CST; 1min 23s ago
.........
  
[root@cobbler-node ~]# ps -ef|grep xinetd
root       794 27381  0 23:50 pts/1    00:00:00 grep --color=auto xinetd
root     32674     1  0 23:47 ?        00:00:00 /usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid
  
[root@cobbler-node ~]# ps -ef|grep httpd
root       321     1  0 23:47 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     324   321  0 23:47 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     326   321  0 23:47 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     327   321  0 23:47 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     328   321  0 23:47 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     329   321  0 23:47 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
root       812 27381  0 23:50 pts/1    00:00:00 grep --color=auto httpd
  
[root@cobbler-node ~]# ps -ef|grep cobbler
apache     322   321  0 23:47 ?        00:00:00 (wsgi:cobbler_w -DFOREGROUND
root       450     1  0 23:48 ?        00:00:00 /usr/bin/python2 -s /usr/bin/cobblerd -F
root       823 27381  0 23:50 pts/1    00:00:00 grep --color=auto cobbler
  
確定都啟動了,不存在假啟動的話,下面可以進行cobbler檢測:
[root@cobbler-node ~]# 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 : ksvalidator was not found, install pykickstart
8 : 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
9 : 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.
  
針對以上檢測出來的問題,解決如下:
1) The 'server' field in/etc/cobbler/settings must be set to something other than localhost, orkickstarting features will not work. This should be a resolvable hostname or IP for the boot server asreachable by all machines that will use it.
  
解決方法:修改/etc/cobbler/settings,將server對應的IP改為cobbler安裝主機的IP,即將server: 127.0.0.1改成server: 172.16.60.222,
切記切記,server: 後面有空格!!
[root@cobbler-node ~]# cp /etc/cobbler/settings /etc/cobbler/settings.bak
[root@cobbler-node ~]# vim /etc/cobbler/settings 
.........
server: 172.16.60.222
  
2) For PXE to be functional,the 'next_server' field in /etc/cobbler/settings must be set to something otherthan 127.0.0.1, and should match the IP of the boot server on the PXE network.
  
解決方法:修改/etc/cobbler/settings,將next_server對應的IP改為cobbler安裝主機的IP,即將server: 127.0.0.1改成server: 172.16.60.222
[root@cobbler-node ~]# vim /etc/cobbler/settings       
.........                                     
next_server: 172.16.60.222
  
3) change 'disable' to 'no'in /etc/xinetd.d/tftp
解決方法:將/etc/xinetd.d/tftp中disable對應值改成no。
[root@cobbler-node ~]# vim /etc/xinetd.d/tftp
..........
disable   = no
  
4) some network boot-loadersare missing from /var/lib/cobbler/loaders, you may run 'cobbler get-loaders' todownload them, or, if you only want to handle x86/x86_64 netbooting, you mayensure that you have installed a *recent* version of the syslinux packageinstalled 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 'cobblerget-loaders' command is the easiest way to resolve these requirements.
解決方法:
[root@cobbler-node ~]# cobbler get-loaders
  
5) enable and startrsyncd.service with systemctl
解決方法:
[root@cobbler-node ~]# systemctl enable rsyncd
[root@cobbler-node ~]# systemctl start rsyncd
  
6) debmirror package is notinstalled, it will be required to manage debian deployments and repositories
解決方法:debian的包,可以不下載,不影響使用cobbler。
  
7) ksvalidator was not found, install pykickstart
解決方法:
[root@cobbler-node ~]# yum install pykickstart -y
 
8) The default password usedby the sample templates for newly installed machines (default_password_cryptedin /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
解決方法:給密碼加密,把生成的密碼串新增到/etc/cobbler/settings裡.

生成加密的密碼, 這裡設定了密碼為"cobbler",此處就是按裝系統完的密碼
[root@cobbler-node ~]# openssl passwd -1 -salt 'cobbler' 'cobbler'
$1$cobbler$M6SE55xZodWc9.vAKLJs6.
  
將該加密的密碼全複製拷貝到settings檔案default_password_crypted處:
[root@cobbler-node ~]# vim /etc/cobbler/settings
.......
default_password_crypted: "$1$cobbler$M6SE55xZodWc9.vAKLJs6."

9) fencing tools were notfound, and are required to use the (optional) power management features.install cman or fence-agents to use them
解決辦法:電源管理工具,下載fence-agents (這個就算暫時不安裝,也不影響cobbler的使用)
[root@cobbler-node ~]# yum -y install fence-agents
  
以上檢測出來的問題,除了第6和第9個問題不做處理,其他的問題都要如上進行解決。
  
接著繼續修改Cobbler其他配置

[root@cobbler-node ~]# sed -i 's/manage_dhcp: 0/manage_dhcp: 1/' /etc/cobbler/settings         #管理dhcp
[root@cobbler-node ~]# sed -i 's/pxe_just_once: 0/pxe_just_once: 1/' /etc/cobbler/settings     #防止系統重灌.即只針對新機器(空系統)情況下進行自動化安裝

下面修改cobbler配置的dhcp模板
[root@cobbler-node ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.60.1     0.0.0.0         UG    100    0        0 ens192
172.16.60.0     0.0.0.0         255.255.255.0   U     100    0        0 ens192
...........
...........
[root@cobbler-node ~]# cp /etc/cobbler/dhcp.template /etc/cobbler/dhcp.template.bak
[root@cobbler-node ~]# vim /etc/cobbler/dhcp.template
...........
subnet 172.16.60.0 netmask 255.255.255.0 {
     option routers             172.16.60.1;
     option domain-name-servers 172.16.60.1;
     option subnet-mask         255.255.255.0;
     range dynamic-bootp        172.16.60.160 172.16.60.190;
     default-lease-time         21600;
     max-lease-time             43200;
     next-server                $next_server;
  
上面配置修改完成後,依次重啟下面服務,然後再檢測一次
[root@cobbler-node ~]# systemctl restart tftp.socket
[root@cobbler-node ~]# systemctl restart xinetd.service
[root@cobbler-node ~]# systemctl restart httpd.service
[root@cobbler-node ~]# systemctl restart cobblerd.service
[root@cobbler-node ~]# systemctl restart rsyncd
  
執行cobbler再次監測:
[root@cobbler-node ~]# cobbler check
The following are potential configuration items that you may want to fix:
  
1 : debmirror package is not installed, it will be required to manage debian deployments and repositories

Restart cobblerd and then run 'cobbler sync' to apply changes.

4) cobbler同步. 修改完成後,一定要映象 "cobbler sync" 同步,否則不會生效!

[root@cobbler-node ~]# cobbler sync
task started: 2019-01-21_003507_sync
task started (id=Sync, time=Mon Jan 21 00:35:07 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
copying distros to tftpboot
copying images
generating PXE configuration files
generating PXE menu structure
rendering DHCP files
generating /etc/dhcp/dhcpd.conf
rendering TFTPD files
generating /etc/xinetd.d/tftp
cleaning link caches
running post-sync triggers
running python triggers from /var/lib/cobbler/triggers/sync/post/*
running python trigger cobbler.modules.sync_post_restart_services
running: dhcpd -t -q
received on stdout: 
received on stderr: 
running: service dhcpd restart
received on stdout: 
received on stderr: Redirecting to /bin/systemctl restart dhcpd.service

running shell triggers from /var/lib/cobbler/triggers/sync/post/*
running python triggers from /var/lib/cobbler/triggers/change/*
running python trigger cobbler.modules.manage_genders
running python trigger cobbler.modules.scm_track
running shell triggers from /var/lib/cobbler/triggers/change/*
*** TASK COMPLETE ***

同步之後,無任何問題,最後顯示"***TASK COMPLETE****"。

5) Cobbler的系統映象檔案的掛載和系統的匯入

先將要安裝的作業系統的映象檔案拷貝到Cobbler伺服器上的/mnt目錄下 (映象的存放路徑可以自己隨意起)
這裡我上傳了centos6.9和centos7.5的系統映象檔案
[root@cobbler-node ~]# cd /mnt/
[root@cobbler-node mnt]# du -sh *
3.7G    CentOS-6.9-x86_64-bin-DVD1.iso
4.2G    CentOS-7.5-x86_64-DVD-1804.iso

然後將該映象檔案進行掛載,這裡掛載目錄為/iso
[root@cobbler-node ~]# mkdir /iso
[root@cobbler-node ~]# mount -t iso9660 -o loop /mnt/CentOS-7.5-x86_64-DVD-1804.iso /iso/
mount: /dev/loop0 is write-protected, mounting read-only

檢視掛載
[root@cobbler-node ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   50G   12G   39G  24% /
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G  385M  3.5G  10% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda1               1014M  142M  873M  14% /boot
/dev/mapper/centos-home   42G   33M   42G   1% /home
tmpfs                    783M     0  783M   0% /run/user/0
/dev/loop0               4.2G  4.2G     0 100% /iso

如上說明已經掛載成功了系統映象

接著進行系統資料匯入 (這個匯入操作需要執行一段時間,耐心等待~)
[root@cobbler-node ~]# cobbler import --path=/iso/ --name=centos7.5 --arch=x86_64
task started: 2019-01-21_091946_import
task started (id=Media import, time=Mon Jan 21 09:19:46 2019)
Found a candidate signature: breed=redhat, version=rhel6
Found a candidate signature: breed=redhat, version=rhel7
Found a matching signature: breed=redhat, version=rhel7
Adding distros from path /var/www/cobbler/ks_mirror/centos7.5-x86_64:
creating new distro: centos7.5-x86_64
trying symlink: /var/www/cobbler/ks_mirror/centos7.5-x86_64 -> /var/www/cobbler/links/centos7.5-x86_64
creating new profile: centos7.5-x86_64
associating repos
checking for rsync repo(s)
checking for rhn repo(s)
checking for yum repo(s)
starting descent into /var/www/cobbler/ks_mirror/centos7.5-x86_64 for centos7.5-x86_64
processing repo at : /var/www/cobbler/ks_mirror/centos7.5-x86_64
need to process repo/comps: /var/www/cobbler/ks_mirror/centos7.5-x86_64
looking for /var/www/cobbler/ks_mirror/centos7.5-x86_64/repodata/*comps*.xml
Keeping repodata as-is :/var/www/cobbler/ks_mirror/centos7.5-x86_64/repodata
*** TASK COMPLETE ***

如上無報錯,則說明系統資料匯入成功。
可以檢視"/var/www/cobbler/ks_mirror/centos7.5-x86_64/"下匯入的資料是否存在
[root@cobbler-node ~]# ls /var/www/cobbler/ks_mirror/centos7.5-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

列出匯入後的資訊配置 (或者"cobbler distro list"命令)
[root@cobbler-node ~]# cobbler list
distros:
   centos7.5-x86_64

profiles:
   centos7.5-x86_64

systems:

repos:

images:

mgmtclasses:

packages:

files:

可以檢視更詳細的配置資訊
[root@cobbler-node ~]# cobbler profile report
Name                           : centos7.5-x86_64
TFTP Boot Files                : {}
Comment                        : 
DHCP Tag                       : default
Distribution                   : centos7.5-x86_64
Enable gPXE?                   : 0
Enable PXE Menu?               : 1
Fetchable Files                : {}
Kernel Options                 : {}
Kernel Options (Post Install)  : {}
Kickstart                      : /var/lib/cobbler/kickstarts/sample_end.ks
Kickstart Metadata             : {}
Management Classes             : []
Management Parameters          : <<inherit>>
Name Servers                   : []
Name Servers Search Path       : []
Owners                         : ['admin']
Parent Profile                 : 
Internal proxy                 : 
Red Hat Management Key         : <<inherit>>
Red Hat Management Server      : <<inherit>>
Repos                          : []
Server Override                : <<inherit>>
Template Files                 : {}
Virt Auto Boot                 : 1
Virt Bridge                    : xenbr0
Virt CPUs                      : 1
Virt Disk Driver Type          : raw
Virt File Size(GB)             : 5
Virt Path                      : 
Virt RAM (MB)                  : 512
Virt Type                      : kvm

從該資訊看出,kickstart的啟動是使用了sample_end.ks,進入目錄下檢視
[root@cobbler-node ~]# ll /var/lib/cobbler/kickstarts/
total 56
-rw-r--r-- 1 root root  115 Nov 17 23:10 default.ks
-rw-r--r-- 1 root root   22 Nov 17 23:10 esxi4-ks.cfg
-rw-r--r-- 1 root root   22 Nov 17 23:10 esxi5-ks.cfg
drwxr-xr-x 2 root root   56 Jan 20 23:36 install_profiles
-rw-r--r-- 1 root root 1424 Nov 17 23:10 legacy.ks
-rw-r--r-- 1 root root  292 Nov 17 23:10 pxerescue.ks
-rw-r--r-- 1 root root 2825 Nov 17 23:10 sample_autoyast.xml
-rw-r--r-- 1 root root 1856 Nov 17 23:10 sample_end.ks
-rw-r--r-- 1 root root    0 Nov 17 23:10 sample_esx4.ks
-rw-r--r-- 1 root root  324 Nov 17 23:10 sample_esxi4.ks
-rw-r--r-- 1 root root  386 Nov 17 23:10 sample_esxi5.ks
-rw-r--r-- 1 root root  386 Nov 17 23:10 sample_esxi6.ks
-rw-r--r-- 1 root root 1913 Nov 17 23:10 sample.ks
-rw-r--r-- 1 root root 3419 Nov 17 23:10 sample_old.seed
-rw-r--r-- 1 root root 6658 Nov 17 23:10 sample.seed

需要注意:如若想要定製化安裝系統,則可以上傳自己寫的ks檔案!!!!!

其實預設的"sample_end.ks" 已經滿足系統安裝的需求。本案例採用預設的ks檔案。

下面將新安裝完的系統的網路卡名改為eth0
[root@cobbler-node ~]# cobbler profile edit --name=centos7.5-x86_64 --kopts='net.ifname=0 biosdevname=0'

下面是驗證cobbler
[root@cobbler-node ~]# cobbler validateks
task started: 2019-01-21_093315_validateks
task started (id=Kickstart Validation, time=Mon Jan 21 09:33:15 2019)
----------------------------
osversion: rhel7
checking url: http://172.16.60.222/cblr/svc/op/ks/profile/centos7.5-x86_64
running: /usr/bin/ksvalidator -v "rhel7" "http://172.16.60.222/cblr/svc/op/ks/profile/centos7.5-x86_64"
received on stdout: 
received on stderr: 
*** all kickstarts seem to be ok ***
*** TASK COMPLETE ***

至此,Cobbler自動化系統安裝配置、匯入系統資料以及驗證完成。

6) 在VMware上模擬測試Cobbler自動化安裝系統

在VMware上建立一臺新的虛擬機器,步驟如下:

設定vmware的如何安裝系統時候,這裡不選擇映象,選擇"我以後再安裝作業系統(S)。建立一個虛擬空白硬板",然後選擇下一步!

建立完成之後開啟此虛機。

選擇CentOS7.2這一項即可進行安裝,安裝過程與光碟安裝一致,這裡就不在複述。

7) PXE  預設啟動項修改

預設的情況下PXE的啟動項是Local(如下圖)

由於根據無人值守安裝的需求,無需人工干預,需要自動安裝,這時候就要需要將local從啟動項刪除即可。修改方法如下:

首先找到PXE載入的選單選項在哪,路徑"/var/lib/tftpboot/pxelinux.cfg"下找到"default"檔案,內容如下:

[root@cobbler-node ~]# cd /var/lib/tftpboot/pxelinux.cfg/ 
[root@cobbler-node pxelinux.cfg]# cp default default.bak
[root@cobbler-node pxelinux.cfg]# cat 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 centos7.2-Minimal-x86_64
        kernel /images/centos7.5-x86_64/vmlinuz
        MENU LABEL centos7.5-x86_64
        append initrd=/images/centos7.5-x86_64/initrd.img ksdevice=bootif lang=  text biosdevname=0 net.ifname=0 kssendmac  ks=http://172.16.60.222/cblr/svc/op/ks/profile/centos7.5-x86_64
        ipappend 2



MENU end

如上,可以看出MENU選單有倆個選項。這裡刪除“LABEL local”的內容,並修改“ONTIMEOUT”值為我們想要的啟動項即可,如下:
[root@cobbler-node pxelinux.cfg]# vim default
DEFAULT menu
PROMPT 0
MENU XXXXXXXX | Cloud Of XXXXXX
TIMEOUT 200
TOTALTIMEOUT 6000
ONTIMEOUT centos7.2-Minimal-x86_64

LABEL centos7.2-Minimal-x86_64
        kernel /images/centos7.5-x86_64/vmlinuz
        MENU LABEL centos7.5-x86_64
        append initrd=/images/centos7.5-x86_64/initrd.img ksdevice=bootif lang=  text biosdevname=0 net.ifname=0 kssendmac  ks=http://172.16.60.222/cblr/svc/op/ks/profile/centos7.5-x86_64
        ipappend 2



MENU end

如上圖,只留下了"LABELcentos7.2-Minimal-x86_64"這一個啟動項,"ONTIMEOUT "改為了"centos7.2-Minimal-x86_64","MENUTITLE"可以修改成自定義內容。修改後儲存即可,不要重啟cobblerd服務也不要執行"cobbler sync"同步。修改後的PXE啟動頁面如下:

預設的20秒超時一過就可以進入該選項進行自動安裝。這樣就可以做到了無人工干預的自動無人值守安裝需求。

8) Cobbler-web管理

訪問https://172.16.60.222/cobbler_web, 注意是https不是http,使用者名稱和密碼就是之前在settings設定的"cobbler"和"cobbler"

Cobbler 登入web介面提示報錯"Internal Server Error", 如下: 
500 The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.

解決辦法:
檢視httpd日誌/etc/httpd/logs/ssl_error_log
[root@cobbler-node ~]# tail -f /etc/httpd/logs/ssl_error_log
[Mon Jan 21 12:13:36.341044 2019] [:error] [pid 7210] [remote 172.16.42.183:27072]     self._setup(name)
[Mon Jan 21 12:13:36.341051 2019] [:error] [pid 7210] [remote 172.16.42.183:27072]   File "/usr/lib/python2.7/site-packages/django/conf/__init__.py", line 41, in _setup
[Mon Jan 21 12:13:36.341061 2019] [:error] [pid 7210] [remote 172.16.42.183:27072]     self._wrapped = Settings(settings_module)
[Mon Jan 21 12:13:36.341067 2019] [:error] [pid 7210] [remote 172.16.42.183:27072]   File "/usr/lib/python2.7/site-packages/django/conf/__init__.py", line 110, in __init__
[Mon Jan 21 12:13:36.341077 2019] [:error] [pid 7210] [remote 172.16.42.183:27072]     mod = importlib.import_module(self.SETTINGS_MODULE)
[Mon Jan 21 12:13:36.341083 2019] [:error] [pid 7210] [remote 172.16.42.183:27072]   File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
[Mon Jan 21 12:13:36.341127 2019] [:error] [pid 7210] [remote 172.16.42.183:27072]     __import__(name)
[Mon Jan 21 12:13:36.341139 2019] [:error] [pid 7210] [remote 172.16.42.183:27072]   File "/usr/share/cobbler/web/settings.py", line 89, in <module>
[Mon Jan 21 12:13:36.341152 2019] [:error] [pid 7210] [remote 172.16.42.183:27072]     from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS
[Mon Jan 21 12:13:36.341176 2019] [:error] [pid 7210] [remote 172.16.42.183:27072] ImportError: cannot import name TEMPLATE_CONTEXT_PROCESSORS

檢視cobbler的py配置檔案
[root@cobbler-node ~]# sed -n '38,41p' /usr/share/cobbler/web/settings.py
if django.VERSION[0] == 1 and django.VERSION[1] < 4:
    ADMIN_MEDIA_PREFIX = '/media/'
else:
    STATIC_URL = '/media/'

初步判斷應該是pythone-django版本問題. 解決辦法如下:
下載pip.py
[root@cobbler-node ~]# wget https://bootstrap.pypa.io/get-pip.py

呼叫本地python執行pip.py指令碼
[root@cobbler-node ~]# python get-pip.py
 
安裝pip
[root@cobbler-node ~]# pip install Django==1.8.9
 
檢視pip版本號
[root@cobbler-node ~]# python -c "import django; print(django.get_version())"

重啟httpd
[root@cobbler-node ~]# systemctl restart httpd

如上操作後,再次訪問https://172.16.60.222/cobbler_web就正常了!!

Cobbler-web頁面說明

可以在Cobbler-web視覺化介面裡進行配置修改的操作,便於維護和管理。

9) 定製化安裝作業系統

新增核心引數
檢視匯入的映象,點選edit

在核心引數中新增net.ifnames=0 biosdevname=0
能夠讓顯示的網路卡變為eth0 ,而不是CentOS7中的ens33, 修改完成後點選儲存

檢視映象屬性

10) 編寫ks檔案

建立新的ks檔案

新增ks檔案,並配置檔名, 建立完成後點選Save進行儲存

CentOS7系統安裝的ks配置檔案內容參考 (安裝的虛擬機器的使用者名稱是root,密碼是$default_password_crypted的設定值,即密碼為前面設定的cobbler):

# Cobbler for Kickstart Configurator for CentOS 7 by clsn
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

11) 自定義安裝系統

選擇systems 建立一個新的系統

定義系統資訊

配置全域性網路資訊: 主機名、閘道器、DNS

配置網路卡資訊,eth0,eth1.   需要注意,選擇static靜態,

 以上的所有配置完成後,點選Save進行儲存即可!!

                                                                                                                                                                                             

VMware workstation中檢視虛擬機器mac地址的方法。在虛擬機器設定中。

cobbler安裝配置過程的的常見問題彙總

1) cobbler check報錯

[root@cobbler-node ~]# cobbler sync
Traceback (most recent call last):
  File "/usr/bin/cobbler", line 36, in <module>
    sys.exit(app.main())
  File "/usr/lib/python2.7/site-packages/cobbler/cli.py", line 662, in main
    rc = cli.run(sys.argv)
  File "/usr/lib/python2.7/site-packages/cobbler/cli.py", line 269, in run
    self.token         = self.remote.login("", self.shared_secret)
  File "/usr/lib64/python2.7/xmlrpclib.py", line 1233, in __call__
    return self.__send(self.__name, args)
  File "/usr/lib64/python2.7/xmlrpclib.py", line 1587, in __request
    verbose=self.__verbose
  File "/usr/lib64/python2.7/xmlrpclib.py", line 1273, in request
    return self.single_request(host, handler, request_body, verbose)
  File "/usr/lib64/python2.7/xmlrpclib.py", line 1306, in single_request
    return self.parse_response(response)
  File "/usr/lib64/python2.7/xmlrpclib.py", line 1482, in parse_response
    return u.close()
  File "/usr/lib64/python2.7/xmlrpclib.py", line 794, in close
    raise Fault(**self._stack[0])
xmlrpclib.Fault: <Fault 1: "<class 'cobbler.cexceptions.CX'>:'login failed'">


解決辦法
[root@cobbler-node ~]# systemctl restart httpd.service
[root@cobbler-node ~]# [root@cobbler-node ~]# systemctl restart cobblerd.service
[root@cobbler-node ~]# cobbler check

2) No space left on device

出現這個錯誤的原因是虛擬機器的記憶體不足2G,將記憶體調為2G即可(這個錯誤只會出現在CentOS7.3之上)

3) 訪問cobbler_web頁面,不成功。“Forbidden You don't have permission to access /cobbler_web/on this server.”

原因是"SSL connection required",是訪問的不對,應該使用https頭!

4) 新建虛機開啟時候,出現TFTP open timeout!

這時候是cobbler的伺服器的防火牆沒關閉。關閉防火牆即可!
# systemctl stop firewalld.service

5) 執行"cobbler sync"時候報錯如下:

此時檢視message,找出具體的原因:
# tailf -100 /var/log/messages

這是IP分配的範圍錯誤,該範圍不在所屬的同一網段,這就是dhcp模板配置錯誤,重新修改:
# vim /etc/cobbler/dhcp.template

改成如上圖所示同一網段即可。

6) 新機器啟動之後會報錯如下圖所示

由於本次安裝的是IBM X伺服器,參考IBM官方論壇給出的意見:
A. Press F12 key when the IBM splash screen is shown duringsystem boot.
B. Select Legacy Only option and press Enter.
C. The operating system will boot and install in traditionallegacy boot mode.

意思就是:
從新啟動機器,出現選擇提示時,按F12鍵,進入boot啟動選擇。將Legacy Only 選項選中,再選擇啟動選項ok。然後重新啟動伺服器就可以實現Linux系統自動安裝了。

7) 新機器啟動後找不到作業系統,“Operating System not found”,如下圖所示:

系統找尋不到,這時候到cobbler伺服器上檢視掛載的系統還在麼, 基本就是之前掛載的映象不在了導致的

[root@cobbler-node ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   50G   17G   34G  33% /
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G  385M  3.5G  10% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda1               1014M  142M  873M  14% /boot
/dev/mapper/centos-home   42G   33M   42G   1% /home
tmpfs                    783M     0  783M   0% /run/user/0

之前掛載的系統不見了。只要重現掛載映象系統就可以了:

[root@cobbler-node ~]# mount -t iso9660 -o loop /mnt/CentOS-7.5-x86_64-DVD-1804.iso /iso/

[root@cobbler-node ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   50G   17G   34G  33% /
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G  385M  3.5G  10% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda1               1014M  142M  873M  14% /boot
/dev/mapper/centos-home   42G   33M   42G   1% /home
tmpfs                    783M     0  783M   0% /run/user/0
/dev/loop0               4.2G  4.2G     0 100% /iso

                                                                                                                                                                                     

上面提到了cobbler_CentOS7.x_ks配置檔案的內容參考,下面貼出一個cobbler_CentOS6.x_ks配置檔案內容參考:

# Cobbler for Kickstart Configurator for CentOS 6  by clsn
install
url --url=$tree
text
lang en_US.UTF-8
keyboard us
zerombr
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
$SNIPPET('network_config')
timezone --utc Asia/Shanghai
authconfig --enableshadow --passalgo=sha512
rootpw  --iscrypted $default_password_crypted
clearpart --all --initlabel
part /boot --fstype=ext4 --asprimary --size=200
part swap --size=1024
part / --fstype=ext4 --grow --asprimary --size=200
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
%end

%post --nochroot
$SNIPPET('log_ks_post_nochroot')
%end

%post
$SNIPPET('log_ks_post')
# Start yum configuration
$yum_config_stanza
# End yum configuration
$SNIPPET('post_install_kernel_options')
$SNIPPET('post_install_network_config')
$SNIPPET('func_register_if_enabled')
$SNIPPET('download_config_files')
$SNIPPET('koan_environment')
$SNIPPET('redhat_register')
$SNIPPET('cobbler_register')
# Enable post-install boot notification
$SNIPPET('post_anamon')
# Start final steps
$SNIPPET('kickstart_done')
# End final steps
%end

上面介紹的是基於centos7.5映象的操作,現在介紹下另追加centos6.9映象進行的操作

[root@cobbler-node mnt]# du -sh *
3.7G    CentOS-6.9-x86_64-bin-DVD1.iso
4.2G    CentOS-7.5-x86_64-DVD-1804.iso

[root@cobbler-node mnt]# mkdir /iso2
[root@cobbler-node mnt]# mount -t iso9660 -o loop /mnt/CentOS-6.9-x86_64-bin-DVD1.iso /iso2

匯入centos6.9的映象資料
[root@cobbler-node mnt]# cobbler import --path=/iso2/ --name=centos6.9 --arch=x86_64

映象資料匯入後存放在/var/www/cobbler/ks_mirror目錄下
[root@cobbler-node mnt]# ll /var/www/cobbler/ks_mirror
total 4
dr-xr-xr-x 7 root root 4096 Mar 29  2017 centos6.9-x86_64
drwxr-xr-x 8 root root  254 May  4  2018 centos7.5-x86_64
drwxr-xr-x 2 root root   64 Jan 22 17:47 config
drwxr-xr-x 2 root root    6 Jan 21 22:32 dtk5.3

檢視匯入映象
[root@cobbler-node mnt]# cobbler distro list
   centos6.9-x86_64
   centos7.5-x86_64

檢視更詳細資訊
[root@cobbler-node mnt]# cobbler profile report

配置centos6.9系統安裝時的ks檔案 (上面已經有了一個centls7.5系統安裝的ks檔案)

將上面貼出來的cobbler_CentOS6.x_ks配置檔案的參考內容複製到下面這個檔案
[root@cobbler-node ~]# vim /var/lib/cobbler/kickstarts/centos6_install.ks

[root@cobbler-node ~]# ll /var/lib/cobbler/kickstarts/centos*
-rw-r--r-- 1 root root 1381 Jan 22 17:53 /var/lib/cobbler/kickstarts/centos6_install.ks
-rw-r--r-- 1 root root 1027 Jan 22 10:17 /var/lib/cobbler/kickstarts/centos7_install.ks

指定centos6.9系統安裝時的kickstarts配置檔案
[root@cobbler-node ~]# cobbler profile edit --name=centos6.9-x86_64 --kickstart=/var/lib/cobbler/kickstarts/centos6_install.ks --kopts='net.ifname=0 biosdevname=0'

現在進行虛擬機器安裝時,啟動介面會有三個選項,即local、centos6.9-x86_64、centos7.5-x86_64

如果要實現無人值守安裝,就需要提前對/var/lib/tftpboot/pxelinux.cfg/default檔案進行修改
將local和centos7.5-x86_64的配置刪除,只保留centos6.9-x86_64部分的配置,修改如下:
[root@cobbler-node pxelinux.cfg]# vim default
DEFAULT menu
PROMPT 0
MENU TITLE kevin | come on!
TIMEOUT 200
TOTALTIMEOUT 6000
ONTIMEOUT centos6.9-x86_64

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=  text biosdevname=0 net.ifname=0 kssendmac  ks=http://172.16.60.222/cblr/svc/op/ks/profile/centos6.9-x86_64
        ipappend 2

MENU end

這樣,在虛擬機器安裝時,啟動介面就只保留了centos6.9-x86_64這一個選項,預設的20秒超時一過就可以進入該選項進行自動安裝。
這樣就可以做到了無人工干預的自動無人值守安裝需求。

以上就掛載並匯入了centos6.9和centos7.5兩個系統映象,在安裝不同版本的系統時,就提前對/var/lib/tftpboot/pxelinux.cfg/default檔案進行修改即可! 

                                                                                                                                                                                                        

其他cobbler相關維護知識

===================================================================
Cobbler管理

cobbler使用profile來為特定的需求類別提供鎖需要安裝的配置,即在distro的基礎上通過提供kiskstart檔案來生成一個特定的系統安裝配置。
distro的profile可以出現在pxe的引導選單中作為安裝的選擇之一:

指定kickstarts配置檔案
# cobbler profile edit --name=centos7.5-x86_64 --kickstart=/var/lib/cobbler/kickstarts/sample_end.ks

修改centos7核心,將新安裝完的系統的網路卡名改為eth0
# cobbler profile edit --name=centos7.5-x86_64 --kopts='net.ifname=0 biosdevname=0'

新部署機器安裝yum源,並同步。建議使用內網yum源,在這裡使用阿里雲yum源 
# cobbler repo add --name=base --mirror=http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/ --arch=x86_64 --breed=yum 

同步yum源
# cobbler reposync

每次修改profile都需要同步
# cobbler sync 

===================================================================
自定義安裝

system主要目的配置網路介面,通過system來固定機器的IP、掩碼、閘道器、DNS、主機名、等等實現基礎環境標準化。
根據機器的MAC地址,自動繫結IP,閘道器,dns等。

# cobbler system add --name=kevin-test --mac=00:0C:29:6E:41:CB --profile=centos7.5-x86_64 
--ip-address=10.0.0.110 --subnet=255.255.255.0 --gateway=10.0.0.2 --interface=eth0 
--static=1 --hostname=kevin-test --name-servers="114.114.114.114 8.8.8.8"

# cobbler sync
# cobbler system list

===================================================================
自定義登入介面

自定義裝機頁面 (修改下面檔案中的如下內容)
# grep "wangshibo" /etc/cobbler/pxe/pxedefault.template
MENU TITLE wangshibo | http://wangshibo

同步
# cobbler sync 

===================================================================
使用Cobbler_web管理Cobbler

新版cobbler的web介面使用的是https,登入https://172.16.60.222/cobbler_web

配置cobbler_web的認證功能
cobbler_web支援多種認證方式,如authn_configfil、authn_ldap或authn_pam等,預設為authn_denyall,即拒絕所有使用者登陸。

下面說明三種能認證使用者登入cobbler_web的方式
1) 使用authn_pam模組認證cobbler_web使用者
首先修改modules中[authentication]段的module引數的值為authn_pam。
接著新增系統使用者,使用者名稱和密碼按需設定即可.

例如下面的命令所示,設定使用者名稱為cblradmin, 密碼為cblrpass
# useradd cblradmin
# echo 'cblrpass' | passwd --stdin cblradmin

而後將cblradmin使用者新增至cobbler_web的admin組中。
修改/etc/cobbler/users.conf檔案,將cblradmin使用者名稱新增為admin引數的值即可,如下所示。
[admins] admin = "cblradmin"

最後重啟cobblerd服務,通過http://YOUR_COBBLERD_IP/cobbler_web訪問即可。
# systemctl restart cobblerd.service

2) 使用authn_configfile模組認證cobbler_web使用者
首先修改modules.conf中[authentication]段的module引數的值為authn_configfile。
接著建立其認證檔案/etc/cobbler/users.digest,並新增所需的使用者即可。
需要注意的是,新增第一個使用者時,需要為htdigest命令使用“-c”選項,後續新增其他使用者時不能再使用;
另外,cobbler_web的realm只能為Cobbler。
如下所示, 使用者名稱為cobbler,密碼為cobbler@123
# htdigest -c /etc/cobbler/users.digest "Cobbler" cobbler
New password:                             #輸入密碼cobbler@123
Re-type new password:                     #再次輸入密碼cobbler@123

最後重啟cobblerd服務,通過http://YOUR_COBBLERD_IP/cobbler_web訪問即可。
# systemctl restart cobblerd.service

3) 使用cobbler預設的web賬號密碼認證
user:cobbler
pass:cobbler

===================================================================
檢視cobbler版本
[root@cobbler-node ~]# cobbler --version
Cobbler 2.8.4

設定Web登入,cobbler 2.6以上版本已經無需修改
# sed -i 's/module = authn_denyall/module = authn_configfile/g' /etc/cobbler/modules.conf

設定Cobbler Web登入使用者登入密碼. 千萬注意: cobbler_web的realm只能為Cobbler !!!
比如cobbler web登入的使用者名稱為kevin, 密碼為123456

[root@cobbler-node ~]# htdigest -c /etc/cobbler/users.digest "Cobbler" kevin
Adding password for kevin in realm Cobbler.
New password:                          #輸入密碼123456
Re-type new password:                  #再次輸入密碼123456
[root@cobbler-node ~]# systemctl restart cobblerd.service  

===================================================================
Cobbler相關選項說明
cobbler check          #檢查cobbler配置
cobbler sync           #同步配置到dhcp/pxe和資料目錄
cobbler list           #列出所有的cobbler元素
cobbler import         #匯入安裝的系統映象
cobbler report         #列出各元素的詳細資訊
cobbler distro         #檢視匯入的發行版系統資訊
cobbler profile        #檢視配置資訊
cobbler system         #檢視新增的系統資訊
cobbler reposync       #同步yum倉庫到本地

匯入映象檔案
命令:cobbler import --path=映象路徑 -- name=安裝引導名 --arch=32位或64位
引數:
path 是映象所掛載的目錄
name 是匯入到cobbler裡面顯示的名字
arch 是32位系統還是64位系統

匯入kickstart檔案
命令:cobbler profile add --name=list名 --distro=映象 --kickstart=路徑
引數:
name是表示新增的ks 的名字,用cobbler report可以看到這個名字
distro 是用哪個映象,list的distros裡面選擇一個,需要版本相對應
kickstart 是具體的 ks 檔案路徑

同步DHCP、HTTPD
命令:cobbler sync
注,每次修改完dhcp.template之類的配置檔案需要執行一次使其生效。

檢視Cobbler列表
命令:cobbler list
注,列出Cobbler所有的元素。

刪除相關列表
命令:cobbler distro/profile remove --name=要刪除的引導檔名
刪除指定 distro , 也就是映象
刪除指定的 profile 檔案,也就是 ks

Cobbler安裝後目錄說明
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模組配置檔案

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/www/cobbler/repo_mirror/     #yum倉庫儲存目錄

日誌目錄 /var/log/cobbler/:
/var/log/cobbler/install.log      #客戶端的安裝系統日誌
/var/log/cobbler/cobbler.log      #cobbler日誌

=================================================================== 
多檢視錯誤日誌
# less /var/log/cobbler/cobbler.log

為cobbler-web的使用者cobbler重置密碼 (重啟cobbler服務才會生效)
# htdigest -c /etc/cobbler/users.digest "Cobbler" cobbler
# systemctl restart cobblerd.service

新增新使用者usernam
# htdigest -c /etc/cobbler/users.digest "Cobbler"  usernam
# systemctl restart cobblerd.service

DHCP多網路卡環境可以指定網路卡
# vim /etc/sysconfig/dhcpd
# Command line options here
DHCPDARGS=eth0

                                                                  Cobbler + DTK 自動批量建立 RAID的操作記錄                                                            

DTK (dell openmanage deployment toolkit) 套件,它包含了raidcfg 這個工具,使用他就可以自動化的完成 RAID 卡的設定,以及 syscfg 這個用來修改 BIOS 的工具。傳統運維階段,幾十臺甚至是上百臺機器上的 raid 全部是人肉操作,一臺機器從啟動到配置完成關機最少 10min,非常的耗時低效。但是使用了DTK 之後,效率大大的提升。raidcfg 可以對機器上的磁碟的 raid 做增刪,非常方便,適合大規模的機器部署,減少人肉操作出錯的概率。

dtk_5.3.0_1908_Linux64_A00.iso 下載地址: https://pan.baidu.com/s/1vtBGnQiZ5G2BMaOzZuY_9w
提取密碼: x59s

1) 掛載光碟檔案
[root@cobbler-node ~]# mkdir /media
[root@cobbler-node ~]# mount -o loop dtk_5.3.0_1908_Linux64_A00.iso /media

2) 新增dtk5.3到cobbler中
[root@cobbler-node ~]# mkdir /var/www/cobbler/ks_mirror/dtk5.3
[root@cobbler-node ~]# cp -r /media/* /var/www/cobbler/ks_mirror/dtk5.3
[root@cobbler-node ~]# cobbler distro add --name=dtk5.3 --kernel=/var/www/cobbler/ks_mirror/dtk5.3/isolinux/SA.1 --initrd=/var/www/cobbler/ks_mirror/dtk5.3/isolinux/SA.2
[root@cobbler-node ~]# cobbler profile add --name=dtk5.3 --distro=dtk5.3

到上面為止都比較順利,接下來新增 system 需要做一些改進,跟之前一樣,--name, --profile, --mac-address 等這些肯定是要新增的,
--hostname, --dns-name 可以選擇性的新增。最重要的是要在 –kopts 後面新增上 tftp 的相關指令碼,否則需要做 raid 的機器獲取不到配置檔案:

3) 新增system的kopts引數
[root@cobbler-node ~]# cobbler system edit --name=Dell-R720 --kopts="share_type=tftp share_location=/raidcfg share_script=raid1.sh tftp_ip=172.16.60.222"

4) 在 /vat/lib/tftpboot/raidcfg 裡面加上 raid1.sh 的指令碼
[root@cobbler-node ~]# mkdir -p /vat/lib/tftpboot/raidcfg
[root@cobbler-node ~]# cat /var/lib/tftpboot/raidcfg/raid1.sh
cat > /tmp/raid10_6 <<EOF
[vdisk0]
controllerid=1
raid=10
readpolicy=ara
writepolicy=wt
stripesize=64
cachepolicy=e
adisk=0:0:1,0:1:1,0:2:1,0:3:1,0:4:1,0:5:1
EOF

echo "…………. rst all disks …………."
raidcfg -ctrl -c=1 -ac=rst
echo "………. 6 disks for raid10  ………."
raidcfg -i=/tmp/raid10_6
echo "…………… fast init ……………"
raidcfg -vd -c=1 -vd=0 -ac=fi
shutdown

如果在製作raid的時候會提示磁碟沒有初始化,所以我把需要做raid1的兩個硬碟手動初始化了下,如下:
[root@cobbler-node ~]# cat /var/lib/tftpboot/raidcfg/raid1.sh
echo "------ rst all disks ------"
raidcfg -ctrl -c=0 -ac=rst
echo "------non-raid to raid ------"
raidcfg -ad -ac=ctr -ad=0:0:1 -c=0
echo "------non-raid to raid ------"
raidcfg -ad -ac=ctr -ad=0:1:1 -c=0
echo "------ 2 disks for raid1  ------"
raidcfg -ctrl -ac=cvd -c=0 -ad=0:0:1,0:1:1 -r=1
echo "------ fast init ------"
raidcfg -vd -c=0 -vd=0 -ac=fi
poweroff

上面指令碼中的raid10_6 這個檔案裡面的指令是怎麼來的了?
直接輸入 raidcfg 就可以看到所有的 help 選項了,看上去很多,其實整理一下非常的簡單,熟悉幾個常見縮寫就知道是幹嘛的了:
controller -> -ctrl
action -> -ac
controllerid -> -c
adisk, pdisk -> -ad, -pd
raid -> -r
size -> -sz
stripsize -> -ssz
cachepolicy -> -cp
writepolicy -> -wp
readpolicy -rp
vdisk -> -vd

其他的直接看 help 好了。

上面的全部操作完,執行"cobbler sync"重啟即可。
[root@cobbler-node ~]# cobbler sync

以上是通過方式獲取到指令碼。除了使用tftp獲取之外,應該還可以通過 nfs, http 等方式獲取到,這個沒有親自實驗過,可以後續嘗試驗證下~

相關文章