2021-05-12 14:32:11
Cobbler無人值守批次安裝Linux系統
本文目錄:
1.1 pxe安裝系統
1.2 cobbler基本介紹
1.3 安裝和設定cobbler
1.3.1 安裝cobbler
1.3.2 設定dhcp和tftp
1.4 cobbler從本地光碟安裝系統
1.4.1 生成distro
1.4.2 提供kickstart檔案
1.4.3 提供profile
1.4.4 開始安裝
1.5 比pxe+kickstart好的地方
1.6 讓新機器自動執行指令碼
1.1 pxe安裝系統
pxe的大致過程如下圖。
其中pxelinux.0為bootloader。pxelinux.cfg目錄下的檔案(一般使用預設的default檔案)定義了安裝作業系統前的選單項,如kernel和Initrd的路徑,kickstart的路徑等。
首先用戶端請求pxe伺服器上的dhcp,dhcp上指定了next-server和filename,它們分別是tftpd的地址和pxelinux.0的路徑;然後用戶端請求tftpd獲取pxelinux.0,執行pxelinux.0後將引導進入安裝介面,隨後獲取pxelinux.cfg目錄下的檔案並讀取其中的設定,從中獲取kernel和initrd的路徑所在,如果有定義kickstart項則還會去獲取kickstart檔案並讀取設定;再然後用戶端請求獲取kernel和initrd檔案,以展開核心並進入到根檔案系統;最後用戶端獲取完成系統安裝所需的其他檔案,這些檔案可以是在pxe的本地,也可以是網際網路上等能獲取到的地方。
在閱讀本文之前,如果不懂pxe+kickstart,建議先學習下,對學習cobbler很有幫助。
PXE+Kickstart實現無人值守批次安裝Linux http://www.linuxidc.com/Linux/2015-11/125040.htm
RHEL7/CentOS7 PXE+Kickstart自動化系統安裝 http://www.linuxidc.com/Linux/2017-07/145399.htm
PXE+Kickstart安裝CentOS 7.3 http://www.linuxidc.com/Linux/2017-06/144789.htm
Linux運維自動化工具 Kickstart http://www.linuxidc.com/Linux/2016-04/129978.htm
PXE+Kickstart無人值守安裝CentOS 7 http://www.linuxidc.com/Linux/2017-08/146169.htm
RHCE認證之無人值守安裝Linux系統(FTP+TFTP+DHCP+Kickstart+PXE) http://www.linuxidc.com/Linux/2013-10/91013.htm
CentOS Kickstart及引導映象檔案製作 http://www.linuxidc.com/Linux/2017-05/143714.htm
Kickstart 全自動安裝部署RHEL 7.0 http://www.linuxidc.com/Linux/2015-09/123312.htm
PXE+Kickstart無人值守安裝CentOS 6 http://www.linuxidc.com/Linux/2017-08/146170.htm
1.2 cobbler基本介紹
cobbler可以看作是一個更多功能的pxe,它實現系統安裝和pxe也差不多,需要的檔案和過程大致都一樣。
cobbler能自動管理dns/tftp/dhcp/rsync這四個服務(但似乎對tftp的管理有點bug,需要手動啟動tftp),且cobbler依賴於httpd(pxe支援http/nfs/ftp)。
基本的系統安裝,cobbler只需生成一個distro和一個profile即可。
distro相當於一個映象,它提供安裝系統過程中所需的一切檔案,如vmlinuz,initrd以及rpm包等。
profile的作用是為了自動修改pxelinux.cfg/default檔案,每生成或修改一次profile,都會在default檔案中修改或追加對應的label。
除了distro/profile之外,cobbler還管理system/images/repositories等,但是用的很少。
1.3 安裝和設定cobbler
1.3.1 安裝cobbler
cobbler在epel源中提供。由於還依賴於httpd、dhcp,所以httpd和dhcp也應該裝上。
yum -y install cobbler cobbler-web pykickstart debmirror httpd dhcp
其中cobbler-web是提供web管理介面的,pykicstart是檢查kicstart檔案語法錯誤的,debmirror是維護debian源的工具,此處用不上但有依賴關係,所以裝上。
安裝後,在/etc/cobbler生成以下檔案。
[root@linuxidc ~]# cd /etc/cobbler/ [root@linuxidc cobbler]# ls auth.conf distro_signatures.json modules.conf reporting tftpd.template zone_templates cheetah_macros dnsmasq.template mongodb.conf rsync.exclude users.conf cobbler_bash import_rsync_whitelist named.template rsync.template users.digest completions iso power secondary.template version dhcp.template ldap pxe settings zone.template
先啟動httpd,再啟動cobblerd。
[root@linuxidc cobbler]# systemctl start httpd.service
[root@linuxidc cobbler]# systemctl start cobblerd.service
[root@linuxidc cobbler]# netstat -tnlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1298/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1402/master tcp 0 0 127.0.0.1:25151 0.0.0.0:* LISTEN 14091/Python2 tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2261/mysqld tcp 0 0 :::22 :::* LISTEN 1298/sshd tcp 0 0 ::1:25 :::* LISTEN 1402/master tcp 0 0 :::443 :::* LISTEN 14037/httpd tcp 0 0 :::80 :::* LISTEN 14037/httpd
啟動之後,首先執行cobbler check檢查設定是否正確。根據提示修改相關的設定項。
[root@linuxidc cobbler]# 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 : 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. 4 : change 'disable' to 'no' in /etc/xinetd.d/rsync 5 : comment out 'dists' on /etc/debmirror.conf for proper debian support 6 : comment out 'arches' on /etc/debmirror.conf for proper debian support 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.
第一和第二個問題:
[root@linuxidc cobbler]# vim /etc/cobbler/settings next_server: 172.16.10.10 server: 172.16.10.10
第三個問題:獲取pxelinux.0和menu.c32檔案(對於centos來說只需這兩個檔案),可以像pxe一樣從syslinux包中手動複製到/var/lib/cobbler/loaders目錄下,也可以執行cobbler get-loaders自動下載,但要求聯網。
[root@linuxidc cobbler]# cobbler get-loaders
第四個問題:有可能該問題不是如此的,而是說要將rsyncd.service使用給start且enable,只需systemctl enable rsyncd,systemctl start rsyncd。
[root@linuxidc cobbler]# vim /etc/xinetd.d/rsync
disable=no
[root@linuxidc cobbler]# service xinetd start
第5、6個問題,注釋掉/etc/debmirror.conf中相關項即可。
第7個問題:因為之前安裝的時候寫成了pykicstart,所以出錯了這裡。
[root@linuxidc cobbler]# yum -y install pykickstart
第8個問題:
[root@linuxidc cobbler]# openssl passwd -1 -salt `openssl rand -hex 8` '123456' $1$77e1022c$D9rxuxUWdc0NN46gzj9XT.
[root@linuxidc cobbler]# vim /etc/cobbler/settings default_password_crypted: "$1$77e1022c$D9rxuxUWdc0NN46gzj9XT."
第九個問題和電源管理有關,不用管了。直接重新啟動cobbler,然後cobbler sync。
[root@linuxidc cobbler]# service cobblerd restart [root@linuxidc cobbler]# cobbler check The following are potential configuration items that you may want to fix: 1 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them
[root@linuxidc cobbler]# cobbler sync
cobbler sync命令用於將tftpboot目錄和/var/www/cobbler保持最新,當/var/lib/cobbler或者kickstart檔案發生了變化,應該執行一次cobbler sync或者直接重新啟動cobbler服務。
1.3.2 設定dhcp和tftp
如果在/etc/cobbler/setting中設定了manage_dhcp:1,表示由cobbler管理dhcp(預設為0即人為手動管理),則cobbler管理的dhcp的設定模板/etc/cobbler/dhcp.template會覆蓋/etc/dhcp/dhcpd.conf中設定,所以應該修改dhcp.template。
此處採用預設的不由cobbler管理dhcp。
[root@linuxidc cobbler]# yum-y install dhcp [root@linuxidc cobbler]# vim /etc/dhcp/dhcpd.conf ddns-update-style none; default-lease-time 259200; max-lease-time 518400; subnet 172.16.10.0 netmask 255.255.255.0 { range 172.16.10.20 172.16.10.50; option subnet-mask 255.255.255.0; next-server 172.16.10.10; # tftp的地址 filename "pxelinux.0"; # pxelinux.0的路徑,此為tftp根目錄(/var/lib/tftpboot)的相對路徑 }
[root@linuxidc cobbler]# service dhcpd restart
關於tftp,在/etc/cobbler/settings中預設啟用了由cobbler管理tftp,所以此處無需設定它。只要知道它的根目錄為/var/lib/tftpboot即可。但是如果後面裝系統的時候如果找不到tftp(應該是cobbler管理tftp的bug),則手動啟動tftp即可。
1.4 cobbler從本地光碟安裝系統
1.4.1 生成distro
生成distro的方法有多種,可以從本地映象匯入生成,也可以根據網路上的資源生成。顯然,從本地生成的效率是最好的。
從本地匯入的過程實際上是將系統映象中的檔案複製到/var/www/cobbler/目錄(預設)下。
mkdir /mnt mount /dev/cdrom /mnt cobbler import --name=CentOS7.2 --path=/mnt
等待匯入完成,則表示distro生成完成。
[root@linuxidc cobbler]# ls -l /var/www/cobbler/images/CentOS7.2-x86_64/ total 38056 -r--r--r-- 3 root root 34815427 Oct 24 2014 initrd.img -r-xr-xr-x 3 root root 4152336 Oct 24 2014 vmlinuz
[root@linuxidc cobbler]# ls -l /var/www/cobbler/ks_mirror/CentOS7.2/ # 此目錄完全來源於映象 total 340 -r--r--r-- 1 root root 14 Oct 24 2014 CentOS_BuildTag dr-xr-xr-x 3 root root 4096 Oct 24 2014 EFI -r--r--r-- 1 root root 212 Nov 28 2013 EULA -r--r--r-- 1 root root 18009 Nov 28 2013 GPL dr-xr-xr-x 3 root root 4096 Oct 24 2014 images dr-xr-xr-x 2 root root 4096 Oct 24 2014 isolinux dr-xr-xr-x 2 root root 278528 Oct 24 2014 Packages -r--r--r-- 1 root root 1354 Oct 20 2014 RELEASE-NOTES-en-US.html dr-xr-xr-x 2 root root 4096 Oct 24 2014 repodata -r--r--r-- 1 root root 1706 Nov 28 2013 RPM-GPG-KEY-CentOS-6 -r--r--r-- 1 root root 1730 Nov 28 2013 RPM-GPG-KEY-CentOS-Debug-6 -r--r--r-- 1 root root 1730 Nov 28 2013 RPM-GPG-KEY-CentOS-Security-6 -r--r--r-- 1 root root 1734 Nov 28 2013 RPM-GPG-KEY-CentOS-Testing-6 -r--r--r-- 1 root root 3380 Oct 24 2014 TRANS.TBL
確保url路徑http://172.16.10.10/cobbler/ks_mirror/CentOS7.2/是有效的。
1.4.2 提供kickstart檔案
以下是CentOS7的Kickstart內容。如果要改為適合CentOS6的內容,只需將keyboard項設定為"keyboard us",並修改下分割區方式(如有必要的話)以及%post指令碼段的內容即可。
[root@linuxidc ~]# vim /var/lib/cobbler/kickstarts/CentOS7.2.ks #version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 # Install OS instead of upgrade install # Use network installation url --url=$tree # Use text mode install text # Firewall configuration firewall --disabled firstboot --disable # ignoredisk --only-use=sda # 此項是CentOS7預設的項,但cobbler編譯ks檔案時不支援此語法,所以必須將此項註釋掉 # Keyboard layouts # old format: keyboard us # new format: keyboard --vckeymap=us --xlayouts='us' # System language lang en_US.UTF-8 # Network information network --onboot=yes --bootproto=dhcp --device=eth0 --noipv6 network --hostname=node1.linuxidc.com # Reboot after installation reboot # Root password rootpw --iscrypted $6$KIPkwGVYqtjHln80$quxmkE5MKKA2LyzLOAc/s3FWH/jX76sObq6hqwOsEBoeMc/wIrzGG4xm72lkXwLeOfRLS/sl5vdajY9j34D4J. # SELinux configuration selinux --disabled # Do not configure the X Window System skipx # System timezone timezone Asia/Shanghai # System bootloader configuration bootloader --append="quiet crashkernel=auto" --location=mbr --boot-drive=sda # Clear the Master Boot Record zerombr # Partition clearing information clearpart --all --initlabel # Disk partitioning information part /boot --asprimary --fstype="xfs" --size=250 part swap --fstype="swap" --size=2000 part / --asprimary --fstype="xfs" --grow --size=5000 # 如果是要LVM分割區,則考慮以下分割區 # part /boot --fstype ext4 --size=100 # part swap --fstype=swap --size=2048 # part pv26 --size=100 --grow # volgroup VG00 --pesize=32768 pv26 # logvol / --fstype ext4 --name=LVroot --vgname=VG00 --size=29984 # logvol /data --fstype ext4 --name=LVdata --vgname=VG00 --size=100 --grow %post rm -f /etc/yum.repos.d/* cat >>/etc/yum.repos.d/my.repo<<eof [base] name=sohu baseurl=http://mirrors.sohu.com/centos/7/os/x86_64/ gpgcheck=0 enable=1 [epel] name=epel baseurl=http://mirrors.aliyun.com/epel/7Server/x86_64/ enable=1 gpgcheck=0 eof sed -i "s/rhgb //" /boot/grub2/grub.cfg sed -i "/UUID/d" /etc/sysconfig/network-scripts/ifcfg-eth0 echo "DNS1=114.114.114.114" >> /etc/sysconfig/network-scripts/ifcfg-eth0 echo "UseDNS no" >> /etc/ssh/sshd_config sed -i "s/GSSAPIAuthentication yes/GSSAPIAuthentication no/" /etc/ssh/ssh_config sed -i "s/^SELINUX=.*$/SELINUX=disabled/" /etc/sysconfig/selinux systemctl disable firewalld %end %packages @base @core @development @platform-devel kexec-tools lftp tree lrzsz %end %addon com_RedHat_kdump --enable --reserve-mb='auto' %end
上面的url也可以寫成url --url="http://172.16.10.10/cobbler/ks_mirror/CentOS7.2/"。
1.4.3 提供profile
在匯入映象生成distro的過程中,會自動生成一個profile。
[root@linuxidc cobbler]# cobbler profile list CentOS7.2-x86_64
該profile預設使用的kickstart是/var/lib/cobbler/kickstarts/sample_end.ks,所以需要修改此項。
[root@linuxidc cobbler]# cobbler profile report --name=CentOS7.2-x86_64 Name : CentOS7.2-x86_64 TFTP Boot Files : {} Comment : DHCP Tag : default Distribution : CentOS7.2-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@linuxidc cobbler]# cobbler profile edit --name=CentOS7.2-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS7.2.ks
[root@linuxidc cobbler]# cobbler profile report --name=CentOS7.2-x86_64 | grep -i kickstart Kickstart : /var/lib/cobbler/kickstarts/CentOS7.2.ks Kickstart Metadata : {}
對於centos7系列,則加上核心啟動引數net.ifnames和biosdevname使得網絡卡名使用ethN系列而不使用enoXXXXXXX這樣的隨機名稱。
[root@linuxidc cobbler]# cobbler profile edit --name=CentOS7.2-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS7.2.ks --kopts="net.ifnames=0 biosdevname=0" [root@linuxidc cobbler]# cobbler profile report --name=CentOS7.2-x86_64 | grep -Ei 'kernel|kickstart'
Kernel Options : {'biosdevname': '0', 'net.ifnames': '0'} Kernel Options (Post Install) : {} Kickstart : /var/lib/cobbler/kickstarts/CentOS7.2.ks Kickstart Metadata : {}
當然,不使用自生成的profile,自己新增一個profile也可以,同時還可以設定profile選項,如"--kickstart"項。如下:其中"--distro"指定該profile是新增到哪個distro下的。
[root@linuxidc cobbler]# cobbler profile add --name=CentOS7.2.1-x86_64 --distro=CentOS7.2-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS7.2.ks
實際上,每新增一個profile都是在向/var/lib/tftpboot/pxelinux.cfg/default中新增一個label。
[root@linuxidc cobbler]# 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 CentOS7.2-x86_64 kernel /images/CentOS7.2-x86_64/vmlinuz MENU LABEL CentOS7.2-x86_64 append initrd=/images/CentOS7.2-x86_64/initrd.img ksdevice=bootif lang= text net.ifnames=0 biosdevname=0 kssendmac ks=http://172.16.10.10/cblr/svc/op/ks/profile/CentOS7.2-x86_64 ipappend 2 LABEL CentOS7.2.1-x86_64 kernel /images/CentOS7.2-x86_64/vmlinuz MENU LABEL CentOS7.2.1-x86_64 append initrd=/images/CentOS7.2-x86_64/initrd.img ksdevice=bootif lang= kssendmac text ks=http://172.16.10.10/cblr/svc/op/ks/profile/CentOS7.2.1-x86_64 ipappend 2 MENU end
也就是說,其實可以不用生成profile,自己手動編輯label也可以。
預設使用的選單背景圖片是menu.c32,此處我改為vesamenu.c32,該背景圖片是從syslinux包中提取的,背景圖片而已,看個人喜好了。另外預設選單等待時間是2秒,在自動安裝的環境中,可以將其設定的短些。並且進入選單預設停留在local,即從本地啟動系統,但是此時系統還沒裝,所以要實現自動化,建議修改此項。
以下是修改後的項。
DEFAULT vemamenu DEFAULT menu PROMPT 0 MENU TITLE Cobbler | http://cobbler.github.io/ TIMEOUT 20 TOTALTIMEOUT 6000 ONTIMEOUT CentOS7.2-x86_64 LABEL local MENU LABEL (local) LOCALBOOT -1 LABEL CentOS7.2-x86_64 kernel /images/CentOS7.2-x86_64/vmlinuz MENU DEFAULT MENU LABEL CentOS7.2-x86_64 append initrd=/images/CentOS7.2-x86_64/initrd.img ksdevice=bootif lang= text net.ifnames=0 biosdevname=0 kssendmac ks=http://172.16.10.10/cblr/svc/op/ks/profile/CentOS7.2-x86_64 ipappend 2 LABEL CentOS7.2.1-x86_64 kernel /images/CentOS7.2-x86_64/vmlinuz MENU LABEL CentOS7.2.1-x86_64 append initrd=/images/CentOS7.2-x86_64/initrd.img ksdevice=bootif lang= kssendmac text ks=http://172.16.10.10/cblr/svc/op/ks/profile/CentOS7.2.1-x86_64 ipappend 2 MENU end
在開始安裝之前,要確保該ks路徑是有效的且kickstart內容是正確的。有時候提供的Kickstart內容錯誤了,在製作成profile的時候不會報錯,但實際上瀏覽器存取該ks路徑的內容提示錯誤。例如,存取CentOS7.2.1-x86_64這個LABEL的kickstart檔案,將其ks檔案url地址http://172.16.10.10/cblr/svc/op/ks/profile/CentOS7.2.1-x86_64輸入瀏覽器中。如果得到如下結果,則表示出錯了,很大的可能是cobbler不支援kickstart中的某指令,這個需要慢慢檢查。
# This kickstart had errors that prevented it from being rendered correctly.
# The cobbler.log should have information relating to this failure.
修改kickstart檔案後,需要重新編譯profile載入新的kickstart檔案。只需使用cobbler profile edit --name=XXXXX --kickstart=YYYYY即可重新編譯XXXXX這個profile,或者執行cobbler sync命令???直到瀏覽器中能獲取到kickstart的內容時才算成功。
或者,使用cobbler profile getks --name=XXXXX命令獲取名為XXXXX的profile的ks內容。
總之,必須要保證能正確獲取到ks內容。
1.4.4 開始安裝
準備一個新的機器開機就會自動進入選單,2-3秒超時後自動進行安裝,安裝完成後自動重新啟動,重新啟動時自動從本地啟動。
所以,除了對新機器進行開機,其他的一切完完全全是全自動的。
建議在真正開始安裝前,將dhcpd/rsyncd/tftp/cobbler等給重新啟動一遍,防止中間改過哪些地方忘記重新啟動而導致裝機時出錯。
1.5 比pxe+kickstart好的地方
僅就cobbler基本功能而言,它跟pxe的能力基本是一樣的,只是提供了更多花哨的功能。
但cobbler能夠使用變數,能夠通過幾個命令自動完成檔案複製,修改等繁瑣的動作,另外它提供了api介面,常用的是它的圖形介面。在這一點上,它還是不錯的。
1.6 讓新機器自動執行指令碼
有些時候新機器上要進行很多設定,在kickstart的%post段也可以設定,但是這裡能進行的設定是有限的。
可以在cobbler伺服器端寫好要執行的指令碼,然後在新機器上將指令碼使用scp複製過去,但是scp複製需要確認和輸入密碼,所以需要在kickstart的選包部分指定安裝expect包,然後使用expect進行非互動scp。
最後在%post段直接執行此指令碼即可。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-08/146171.htm
相關文章