批量裝機工具cobbler簡介及其安裝使用


前言:如果僅有幾台機器的話,使用U盤或者光盤裝起來還不是很費事,一旦數量到了一定程度,使用手動方法就是一件費時費力的事,PXE+kistart就可以解決這個問題,降低難度,加快速度,而cobbler更優於PXE+kistart的解決方案,難度甚至降到普通的修補匠都可以勝任的工作(cobbler的英譯意思,誇張了),總的來說,降低工作中的復雜度是一件非常有意義的事情,它相比它的前輩,它的優越之處在哪里呢?它的功能是如何實現的呢?下面我們來簡單的介紹一下:

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

  在搭建過程中借鑒了CSDN慘綠少年、linux公社Masuri、博客園linuxliu等同仁的技術文章,在此表示感謝!基於其各自的表達內容所長與不足,撰文對cobbler的搭建與使用進行介紹,如有不足,歡迎指正:

一、基本環境准備:

1.測試平台:vmware workstation之上的linux系統,配置如下圖,值得注意的是,我選擇了NAT的網絡模式。在同仁的文章中,有使用主機模式來進行測試的,這樣做也可以,但安裝軟件包的時候,就需要修改網卡配置和更換虛擬機的網絡模式,是非常麻煩的。

 

2.修改NAT網絡模式的dhcp服務,將其關閉,自己搭建的dhcp服務器的ip地址池與NAT模式的網段相同,這樣既可以完成測試,也不需要進行ip的更換等操作,網關與DNS也可以由虛擬網絡編輯器來承擔,非常的方便。我的NAT網絡是網關與DNS為192.168.249.2,虛擬網絡編輯器的地址池為192.168.249.128-192.168.249.254,所以本地的dhcp配置可以避開這個范圍。

關閉虛擬網絡編輯器的dhcp功能,虛擬網絡編輯器的地址池如圖:

 

 3.系統環境准備:

[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@localhost ~]# uname -r 3.10.0-957.21.3.el7.x86_64 [root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# ifconfig ens33 | awk 'NR==2 {print $2}' 192.168.249.10

 [root@localhost ~]# cat /etc/selinux/config | awk 'NR==7'
 SELINUX=disabled

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=a76470a8-756d-4726-b527-aa321f621586
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.249.10
NETMASK=255.255.255.0
GATEWAY=192.168.249.2

4.更換yum源為阿里源

[root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# rm -rf * [root@localhost yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost yum.repos.d]# yum makecache

ok,到此環境基本准備完成!

 二、組件安裝:

1.安裝基本的工具:

[root@localhost ~]# yum -y install wget net-tools curl epel-release

2.安裝功能組件:

[root@localhost ~]# yum install cobbler cobbler-web dhcp tftp-server pykickstart httpd rsync xinetd -y  #安裝完成了檢查一下,這些包一個都不能少

3.修改cobbler主配置文件:

[root@localhost ~]# sed -i 's/^server: 127.0.0.1/server: 192.168.249.10/' /etc/cobbler/settings #修改server的IP為本地的IP [root@localhost ~]# sed -i 's/^next_server: 127.0.0.1/next_server: 192.168.249.10/' /etc/cobbler/settings #修改tftp的ip為本地的IP [root@localhost ~]# sed -i 's/manage_dhcp: 0/manage_dhcp: 1/' /etc/cobbler/settings #啟用dhcp [root@localhost ~]# sed -i 's#yes#no#' /etc/xinetd.d/tftp    #啟用tftp

[root@localhost ~]# sed -i 's/pxe_just_once: 0/pxe_just_once: 1/' /etc/cobbler/settings  #修改參數,防止系統循環安裝
 

4.先啟動http與cobbler:

[root@localhost ~]# systemctl start httpd cobblerd

5.生成通過cobbler服務安裝系統的默認root密碼,並替換(會出現一串加密字符,把字符添加到cobbler主配置文件相應的位置):

[root@localhost ~]# openssl passwd -1 -salt '123456' '123456' $1$123456$wOSEtcyiP2N/IfIl15W6Z0

 

 6.下載cobbler引導操作系統的必須文件:

[root@localhost ~]# cobbler get-loaders task started: 2019-09-02_220712_get_loaders task started (id=Download Bootloader Content, time=Mon Sep  2 22:07:12 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
*** TASK COMPLETE ***

PS:我在做的時候,這一步報錯了,說是python文件不完整,實際上呢,根本原因是第三步修改/etc/cobbler/settings時,server與next-server對應的IP不是本地ens33網卡的IP,這一步只要網絡沒有問題,IP地址沒有問題,是不會報錯的。

7.修改dhcp文件,配置本地dhcp地址池。

 

 這一步呢,基本上沒有問題,但一般出問題就在這里,啟動之后status查看dhcp服務的狀態,如果錯誤那么就需要排查,先關閉networkmanager服務,且一般網卡/網口只留一個,dhcp服務的網關與dns由虛擬網絡編輯器來提供,子網掩碼也是正常的24/0,虛擬網絡編輯器的地址池為192.168.249.128-192.168.249.254,所以我們避開這個網段。

8.同步cobbler的配置到dhcp服務。

[root@localhost ~]# cobbler sync task started: 2019-09-02_221653_sync task started (id=Sync, time=Mon Sep  2 22:16:53 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 ***

9.基本的配置就是這些,然后重啟下這些組件服務,並配置開機啟動,然后使用cobbler自帶的工具命令檢查一下配置。

[root@localhost ~]# systemctl restart httpd cobblerd xinetd rsyncd tftp dhcpd [root@localhost ~]# systemctl enable httpd cobblerd xinetd rsyncd tftp dhcpd Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service. Created symlink from /etc/systemd/system/multi-user.target.wants/cobblerd.service to /usr/lib/systemd/system/cobblerd.service. Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service. Created symlink from /etc/systemd/system/sockets.target.wants/tftp.socket to /usr/lib/systemd/system/tftp.socket.
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.

 [root@localhost ~]# 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
 2 : 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是debian系統,2是fence系統,說明我們的配置沒有問題

10.掛載鏡像,之前呢,我們已經將鏡像掛載到了系統本地,現在先把鏡像掛載到/mnt目錄下,然后再將mnt目錄導入cobbler的目錄位置:

 

 

[root@localhost ~]# mount /dev/cdrom /mnt mount: /dev/sr0 is write-protected, mounting read-only [root@localhost ~]# cobbler import --path=/mnt/ --name=CentOS-7.6-1810-x86_64 --arch=x86_64 task started: 2019-09-02_222411_import task started (id=Media import, time=Mon Sep  2 22:24:11 2019) #因為鏡像文件比較大,所以需要較長的時間。
  • # --path 鏡像路徑
  • # --name 為安裝源定義一個名字
  • # --arch 指定安裝源是32位、64位、ia64, 目前支持的選項有: x86│x86_64│ia64
  • # 安裝源的唯一標示就是根據name參數來定義,本例導入成功后,安裝源的唯一標示就是:CentOS-7.1-x86_64,如果重復,系統會提示導入失敗
 

 11.檢查一下鏡像:

[root@localhost ~]# cobbler list distros: CentOS-7.6-1810-x86_64 profiles: CentOS-7.6-1810-x86_64 systems: repos: images: mgmtclasses: packages: files:

ok,鏡像也沒有問題,然后呢,我們就可以使用cobbler來進行無人值守安裝。

12.檢測結果:

PS:這個界面的內容我們是可以手動調整的,配置文件為/etc/cobbler/pxe/pxedefault.template

 ok,沒有問題,同一網絡模式下可以看到centos的鏡像,並且也從dhcp服務中獲取到了ip地址,選擇鏡像安裝的話,就沒有問題了,安裝好之后的密碼就是我們之前設置的123456。這個虛擬機,我們可以保留着,如果需要進行批量裝機的話,我們可以選擇網絡模式為橋接,然后將本地虛擬機的IP修改為192.168.249.2即可,網關服務由本地網卡來承擔,dns的話,就沒有辦法了,畢竟我們只是想裝系統而已。

三、使用KS進行定制化安裝。

1.在安裝系統的時候,像分區,安裝基礎軟件包這些個工作量也不小,但我們可以使用ks文件來進行定制化的安裝,在導入第一個鏡像的時候,在/var/lib/cobbler/kickstarts/目錄下會生成sample_end.ks文件,這個文件就是安裝系統時的默認配置文件,我們可以進行修改,來完成自己的個性化配置,配置文件詳解如下:

 

關鍵字 含義
install 告知安裝程序,這是一次全新安裝,而不是升級upgrade
url    --url=" "      通過FTPHTTP從遠程服務器上的安裝樹中安裝。
url --url="http://10.0.0.7/CentOS-6.7/"
url --url ftp://<username>:<password>@<server>/<dir>
nfs 從指定的NFS服務器安裝。
nfs --server=nfsserver.example.com --dir=/tmp/install-tree
text|graphical            tesxt:使用文本模式安裝。  graphical:在圖形模式下根據kickstart執行安裝,默認該選項
lang 設置在安裝過程中使用的語言以及系統的缺省語言。lang en_US.UTF-8
keyboard 設置系統鍵盤類型。keyboard us
zerombr 清除mbr引導信息。
bootloader 系統引導相關配置。
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
--location=,指定引導記錄被寫入的位置.有效的值如下:mbr(缺省),partition(在包含內核的分區的第一個扇區安裝引導裝載程序)或none(不安裝引導裝載程序)。
--driveorder,指定在BIOS引導順序中居首的驅動器。
--append=,指定內核參數.要指定多個參數,使用空格分隔它們。
network 為通過網絡的kickstart安裝以及所安裝的系統配置聯網信息。
network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6
--bootproto=[dhcp/bootp/static]中的一種,缺省值是dhcpbootpdhcp被認為是相同的。
static方法要求在kickstart文件里輸入所有的網絡信息。
network --bootproto=static --ip=10.0.0.100 --netmask=255.255.255.0 --gateway=10.0.0.2 --nameserver=10.0.0.2
請注意所有配置信息都必須在一行上指定,不能使用反斜線來換行。
--ip=,要安裝的機器的IP地址.
--gateway=,IP地址格式的默認網關.
--netmask=,安裝的系統的子網掩碼.
--hostname=,安裝的系統的主機名.
--onboot=,是否在引導時啟用該設備.
--noipv6=,禁用此設備的IPv6.
--nameserver=,配置dns解析.
timezone 設置系統時區。timezone --utc Asia/Shanghai
authconfig 系統認證信息。authconfig --enableshadow --passalgo=sha512
設置密碼加密方式為sha512 啟用shadow文件。
rootpw root密碼
clearpart 清空分區。clearpart --all --initlabel
--all 從系統中清除所有分區,--initlable 初始化磁盤標簽
part

磁盤分區。
part /boot --fstype=ext4 --asprimary --size=200       centos7 是--fstype=xfs
part swap --size=1024
part / --fstype=ext4 --grow --asprimary --size=200
--fstype=,為分區設置文件系統類型.有效的類型為ext2,ext3,swapvfat
--asprimary,強迫把分區分配為主分區,否則提示分區失敗。
--size=,以MB為單位的分區最小值.在此處指定一個整數值,如500.不要在數字后面加MB
--grow,告訴分區使用所有可用空間(若有),或使用設置的最大值。

--ondisk,指明使用的磁盤

firstboot 負責協助配置redhat一些重要的信息。
firstboot --disable
selinux 關閉selinuxselinux --disabled
firewall 關閉防火牆。firewall --disabled
logging 設置日志級別。logging --level=info
reboot 設定安裝完成后重啟,此選項必須存在,不然kickstart顯示一條消息,並等待用戶按任意鍵后才重新引導,也可以選擇halt關機。

 

以一個ks.cfg 文件為例

 

 
         
  1. install
  2. url --url="http://10.0.0.7/CentOS-6.7/"
  3. text
  4. lang en_US.UTF-
  5. keyboard us
  6. zerombr
  7. bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
  8. network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6
  9. timezone --utc Asia/Shanghai
  10. authconfig --enableshadow --passalgo=sha512
  11. rootpw --iscrypted $$X20eRtuZhkHznTb4$dK0BJByOSAWSDD8jccLVFz0CscijS9ldMWwpoCw/ZEjYw2BTQYGWlgKsn945fFTjRC658UXjuocwJbAjVI5D6/
  12. clearpart --all --initlabel
  13. part /boot --fstype=ext4 --asprimary --size=
  14. part swap --size=
  15. part / --fstype=ext4 --grow --asprimary --size=
  16. firstboot --disable
  17. selinux --disabled
  18. firewall --disabled
  19. logging --level=info
  20. reboot
  21. %packages
  22. @base
  23. @compat-libraries
  24. @debugging
  25. @development
  26. tree
  27. nmap
  28. sysstat
  29. lrzsz
  30. dos2unix
  31. telnet
  32. %post
  33. wget -O /tmp/optimization.sh http://*.*.*.*/ks_config/optimization.sh &>/dev/null
  34. /bin/sh /tmp/optimization.sh
  35. %end

配置文件中的%packages指的是安裝系統時,安裝的軟件包,截止到%end,%post指的是系統安裝完成后執行的命令,一般的命令或者腳本都是在這個范圍里,有的ks文件還會有%pre,它的意思是在系統安裝前執行的命令,因為系統尚未安裝,所以能夠執行的命令也是非常少的,所以呢基本的命令或者腳本都是放在%post這個區間來做。

這里再給大家介紹兩個命令:

[root@localhost kickstarts]# cobbler profile report #查看鏡像對應的ks配置文件 Name : CentOS-7.6-1810-x86_64 TFTP Boot Files : {} Comment : DHCP Tag : default Distribution : CentOS-7.6-1810-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 [root@localhost kickstarts]# cobbler profile edit --name=CentOS-7.6-1810-x86_64 --kickstart=/var/lib/cobbler/kickstarts/ks.cfg    #為鏡像配置默認的ks文件

至於ks文件,可以使用kickstart的圖形化工具來生成,工具安裝命令如下:

[root@localhost ~]# yum install system-config-kickstart

使用教程如下,在圖形化界面輸入system-config-kickstart:

PS:使用cobbler安裝的機器,內存不能少於2G,否則就會報錯,至於其他的配置,如果是虛擬情況,也盡量配置高點。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

四、Cobbler-web配置管理與報錯解決:

1.先說報錯吧,安裝后web訪問https://192.168.249.10/cobbler_web,結果出現了報錯,如下:

 

 2.在網上找了下,果然不止我一個人遇到了這個問題,解決方法如下:

[root@localhost ~]# wget https://bootstrap.pypa.io/get-pip.py
[root@localhost ~]# python get-pip.py DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won'of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/eport
Collecting pip Downloading https://files.pythonhosted.org/packages/30/db/9e38760b32e3e7f40cce46dd5fb107b8c73840df38f0046d8e6514e675a1/p
     |████████████████████████████████| 1.4MB 57kB/s Collecting wheel Downloading https://files.pythonhosted.org/packages/00/83/b4a77d044e78ad1a45610eb88f745be2fd2c6d658f9798a15e384b7d57c9/wheel-0.33.6-py2.py3-none-any.whl
Installing collected packages: pip, wheel Successfully installed pip-19.2.3 wheel-0.33.6 [root@localhost ~]# pip install Django==1.8.9 DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Collecting Django==1.8.9 Downloading https://files.pythonhosted.org/packages/a7/a2/f4e7926062f5c61d98e87b9d0365ca1a0fab6be599dbea90ce2fab27f395/Django-1.8.9-py2.py3-none-any.whl (6.2MB)
     |████████████████████████████████| 6.2MB 56kB/s Installing collected packages: Django Found existing installation: Django 1.11.23 Uninstalling Django-1.11.23: Successfully uninstalled Django-1.11.23 Successfully installed Django-1.8.9 [root@localhost ~]# systemctl restart httpd cobblerd

ok,果然解決了問題,在此感謝51CTO JasonMingHao 博主:

 

 訪問的賬號密碼為:cobbler/cobbler(沒錯,賬號密碼都一樣)

3.管理選項詳解:

 

   咳咳,坦白了,這張圖是我盜來的,再次感謝CSDN慘綠少年博主,具體的操作功能和命令行的操作實際上是一致的,具體的操作使用web端感覺也就那樣子,都習慣命令行了,ok,cobbler教程到此結束,如有不足,歡迎私信,一起進步!

 最后:附上文章的參考鏈接

https://www.linuxidc.com/Linux/2018-03/151347.htm

https://www.linuxidc.com/Linux/2019-05/158647.htm

https://www.cnblogs.com/linuxliu/p/7668048.html

https://blog.csdn.net/admin_root1/article/details/78911718

https://blog.51cto.com/13746824/2148981

https://blog.whsir.com/post-3157.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM