2021-05-12 14:32:11
使用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的工作流程,可以用下面的圖進行概括。
實驗環境準備
因為我們正在搭建的是網路服務,所以需要有至少兩台主機,其中一台主機承擔伺服器的角色。我在在這個實驗中,使用的CentOS 7 搭建的網路服務,承擔Server角色。
關閉防火牆和SELinux
防火牆和SELinux 在實驗過程中有可能會導致意想不到的問題,所以我們這裡將其關閉,實際生產中,請根據自己的實際情況進行調整。至於關閉防火牆和SELinux就不列出了,這很簡單。
安裝Cobbler
Cobbler 預設不在附帶在光碟中,所以要通過EPEL源進行下載安裝。 設定好epel源以後,執行
yum install cobbler
就可以安裝Cobbler了。
在安裝好Cobbler之後,我們就會發現,Cobbler還附帶安裝了很多其他的服務,如下圖所示 。這也就是解釋了在Cobbler的工作流程中為什麼能夠用到那麼多服務,從圖中可以看出,還缺少DHCP服務,所以接下裡我們也要安裝一下。其中,syslinux 就是安裝的就是PXE服務。
設定常用服務
將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地址。
修改完成之後,我們注意到,之前的提示資訊末尾有一段提示資訊
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的地址修改為我們本機的地址。
修改之後,重新啟動服務,並進行同步。
#重新啟動服務 [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/settings
中default_password_crypted
欄位中。
重新啟用並同步服務,然後看看還有什麼問題。
[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下 /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
啟動網路安裝
重新新建一個虛擬機器,作為用戶端,然後啟動網路安裝,就可以看到我們剛剛製作的介面了。
自定義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 mediaurl --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 的環境就成功了。
注意事項
在實際生產中,一般是區域網環境,所以在設定DHCP服務的時候,要注意區域網的工作環境。
Cobbler實際上就是對PXE的封裝,它幫助我們實現了很多的內容,免去了我們很多的手動設定,但是這樣的話,我們也不能清楚的了解底層的執行機制,出了問題,不便於處理,所以最好還是嘗試手動設定一下PXE來搭建網路作業系統安裝環境,以便了解的更詳細一下其中的執行機制。
最好手動設定ks檔案,這樣能夠最大限度上客製化自己的叢集作業系統。
結語
Cobbler 其實還支援基於Web的管理方式。在設定好Cobbler 服務環境之後,安裝一個
cobbler-web
的軟體包,然後就可以進行相應的設定管理了,這裡我們不做詳細介紹,感興趣的朋友可以去查閱一下資料。 Cobbler_web 的圖形管理介面如下圖所示,從圖中我們能夠看到我們自己指定的選單和系統yum源。
通過上面的操作,我們已經能夠完全搭建一個基於Cobbler的網路服務,用來給生產環境中批次的安裝作業系統了。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-10/147354.htm
相關文章