Cobbler介紹:
Cobbler是一款自動化操作系統安裝的實現,與PXE安裝系統的區別就是可以同時部署多個版本的系統,而PXE只能選擇一種系統。而如今的架構動輒就是上千臺的服務器。而存在一些操作系統不統一的現象,例如最初的架構採用的是CentOS5系列的系統,而新出現了一些技術後,需要新的操作系統的支持,一方面是需要批量部署裝機,而另一方面還需要考慮到如果老版本的服務器出現故障後還需要重新去部署。並且提供Web配置頁面,可以只需要一些點擊就可以完成一些操作。
Cobbler的實現和PXE的方法大同小異,例如都需要安裝tftp,dhcp,http等,但是使用yum安裝Cobbler的時候,會自動把需要的全部安裝上,而不需要去手動一個個的安裝。
本次將實現CentOS 6.5和CentOS7的安裝。
而此次安裝CentOS7的操作系統,新的系統將不再使用默認的EXT文件系統,對新引入的XFS做下簡介:
XFS文件系統是SGI開發的高級日誌文件系統,XFS極具伸縮性。並且在CentOS7上已經是默認的文件系統。主要特性包含一下幾點:
數據完整性:
採用XFS文件系統時,如果發生宕機現象,由於文件系統開啓日誌功能,磁盤上的文件會記錄到日誌,並且可以短時間內恢復磁盤數據。
傳輸性:
XFS文件系統採用優化算法,日誌記錄對於IO影響小,而並不映像查詢與分配的性能。XFS文件系統能夠連續提供快速的反映時間。
可擴展性:
XFS是一個64bit的文件系統,可以支持上百萬T字節的存儲空間。對特大文件及小尺寸文件的支持非常好,支持大數量目錄。XFS文件系統使用表結構(B+樹)保證文件系統可以快速搜索及快速分配空間。XFS文件系統能夠持續提供高速操作,文件系統性能不受目錄及文件數量限制。
傳輸帶寬:
XFS文件系統能以接近裸設備的IO的性能存儲數據,在單個文件系統測試中,吞吐量可以達到7GB美妙,對單個文件的讀寫操作達到4GB每秒。
安裝Cobbler。
使用yum安裝cobbler。
# yum install cobbler Install 21 Package(s) Total download size: 6.0 M Installed size: 23 M Is this ok [y/N]: Y Downloading Packages: (1/21): PyYAML-3.10-3.el6.x86_64.rpm | 157 kB 00:00 (2/21): apr-util-ldap-1.3.9-3.el6_0.1.x86_64.rpm | 15 kB 00:00 (3/21): cobbler-2.4.0-1.el6.noarch.rpm | 664 kB 00:00 (4/21): createrepo-0.9.9-18.el6.noarch.rpm | 94 kB 00:00 (5/21): deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm | 71 kB 00:00 (6/21): genisoimage-1.1.9-12.el6.x86_64.rpm | 348 kB 00:00 (7/21): httpd-2.2.15-29.el6.centos.x86_64.rpm | 821 kB 00:00 (8/21): httpd-tools-2.2.15-29.el6.centos.x86_64.rpm | 73 kB 00:00 (9/21): libyaml-0.1.5-1.el6.x86_64.rpm | 52 kB 00:00 (10/21): mod_wsgi-3.2-3.el6.x86_64.rpm | 66 kB 00:00 (11/21): mtools-4.0.12-1.el6.x86_64.rpm | 194 kB 00:00 (12/21): python-cheetah-2.4.1-1.el6.x86_64.rpm | 365 kB 00:00 (13/21): python-deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm | 27 kB 00:00 (14/21): python-markdown-2.0.1-3.1.el6.noarch.rpm | 118 kB 00:00 (15/21): python-netaddr-0.7.5-4.el6.noarch.rpm | 1.0 MB 00:00 (16/21): python-pygments-1.1.1-1.el6.noarch.rpm | 562 kB 00:00 (17/21): python-setuptools-0.6.10-3.el6.noarch.rpm | 336 kB 00:00 (18/21): python-simplejson-2.0.9-3.1.el6.x86_64.rpm | 126 kB 00:00 (19/21): syslinux-4.02-8.el6.x86_64.rpm | 859 kB 00:00 (20/21): tftp-server-0.49-7.el6.x86_64.rpm | 39 kB 00:00 (21/21): xinetd-2.3.14-39.el6_4.x86_64.rpm | 121 kB 00:00 -------------------------------------------------------------------------------------------------------------------------------------- Total 5.6 MB/s | 6.0 MB 00:01
可以看到這裏是安裝了http,lftp,因爲dhcp服務還是需要手動去安裝的。
使用yum安裝dhcp。
# yum install dhcp
啓動httpd,lftp,cobbler, xinetd,rsync查看端口。
# ss -tual Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 *:bootps *:* #dhcp相關 udp UNCONN 0 0 *:bootpc *:* udp UNCONN 0 0 *:tftp *:* # tcp LISTEN 0 128 :::http :::* # tcp LISTEN 0 128 :::ssh :::* tcp LISTEN 0 128 *:ssh *:* tcp LISTEN 0 100 ::1:smtp :::* tcp LISTEN 0 100 127.0.0.1:smtp *:* tcp LISTEN 0 5 127.0.0.1:25151 *:* #cobbler默認端口 tcp LISTEN 0 64 :::rsync :::* #
啓動cobbler時,使用cobbler –help可以看到cbbler的命令選項,而使用cobbler check檢測環境時,會有如下的報錯。
# cobbler check The following are potential configuration items that you may want to fix: #錯誤指出我們的cobbler不應該是本地的IP地址,而是一個可以被解析的hostname或者IP 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. #錯誤指出next_server的IP地址不應該是127.0.0.1的主機地址,而應該是一個真正的tftp服務器地址 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. #錯誤是不一定要聯網下載某些程序,而安裝syslinux就可以 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. #debmrror沒有定義好 4 : debmirror package is not installed, it will be required to manage debian deployments and repositories #需要額外安裝pykickstart 5 : ksvalidator was not found, install pykickstart #cobbler安裝完成後的管理員密碼需要替換,因爲所有安裝後的密碼都是一致的 6 : 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 #沒有fencing設備,爲可選的 7 : 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.
編輯settings配置文件,修改上面報錯的位置信息。
# vim /etc/cobbler/settings server: 192.168.151.128#修改cobbler的主機地址 next_server: 172.16.32.10#修改tftpIP地址 default_password_crypted: "$1$f75165f2$vmkPJLhF1yCiLhosykXOC/"#修改cobbler默認加密密碼,使用如下命令生成 # openssl passwd -1 -salt `openssl rand -hex 4` Password: $1$f75165f2$vmkPJLhF1yCiLhosykXOC/
複製pxelinux.0, menu.c32到/var/lib/cobbler/loaders/。
# cd /usr/share/syslinux/ # cp -r * /var/lib/cobbler/loaders/
修改完成後執行cobbler sync。
# cobbler sync task started: 2014-10-07_231726_sync task started (id=Sync, time=Tue Oct 7 23:17:26 2014) running pre-sync triggers cleaning trees mkdir: /var/lib/tftpboot/pxelinux.cfg mkdir: /var/lib/tftpboot/grub mkdir: /var/lib/tftpboot/s390x mkdir: /var/lib/tftpboot/ppc mkdir: /var/lib/tftpboot/etc removing: /var/lib/tftpboot/grub/images copying bootloaders copying: /usr/share/syslinux/pxelinux.0 -> /var/lib/tftpboot/pxelinux.0 copying: /usr/share/syslinux/menu.c32 -> /var/lib/tftpboot/menu.c32 copying: /usr/share/syslinux/memdisk -> /var/lib/tftpboot/memdisk copying distros to tftpboot copying images generating PXE configuration files generating PXE menu structure 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 shell triggers from /var/lib/cobbler/triggers/sync/post/* running python triggers from /var/lib/cobbler/triggers/change/* running python trigger cobbler.modules.scm_track running shell triggers from /var/lib/cobbler/triggers/change/* *** TASK COMPLETE ***
Cobbler 子命令介紹。
cobbler check #檢查cobbler配置 cobbler sync #步配置到dhcp pxe和數據目錄 cobbler list #列出所有的cobbler元素 cobbler import #導入安裝的系統光盤鏡像 cobbler report #列出各元素的詳細信息 cobbler distro #查看導入的發行版系統信息 cobbler profile #查看配置信息 cobbler system #查看添加的系統信息 cobbler reposync #同步yum倉庫到本地
因爲dhcp需要還是需要手動安裝配置,而不是需要cobbler來管理的,還需要配置dhcp。
# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf cp: overwrite `/etc/dhcp/dhcpd.conf'? y # vim /etc/dhcp/dhcpd.conf subnet 172.16.32.0 netmask 255.255.255.0 { range 172.16.32.15 172.16.32.50; #dhcp分配網絡 option routers 172.16.32.10; #dhcp主機地址 next-server 172.16.32.10; #lftp地址 filename="pxelinux.0"; } # service dhcpd start
接下來開始導入光盤映像文件。
# mount /dev/cdrom /mnt/ mount: block device /dev/sr0 is write-protected, mounting read-only
導入CentOS6.5的映像文件
# cobbler import --name=CentOS_6.5_x86_64 --path=/mnt/
期間因爲導入CentOS7的鏡像文件時我的電腦磁盤滿了而虛擬機停止,觸發了一個Cobbler的BUG,再次啓動虛擬機後重新導入CentOS7的映像文件時顯示如下。
# cobbler import --name=CentOS_7_x86_64 --path=/mnt/ Traceback (most recent call last): File "/usr/bin/cobbler", line 35, in <module> sys.exit(app.main()) File "/usr/lib/python2.6/site-packages/cobbler/cli.py", line 644, in main rc = cli.run(sys.argv) File "/usr/lib/python2.6/site-packages/cobbler/cli.py", line 270, in run self.token = self.remote.login("", self.shared_secret) File "/usr/lib64/python2.6/xmlrpclib.py", line 1199, in __call__ return self.__send(self.__name, args) File "/usr/lib64/python2.6/xmlrpclib.py", line 1489, in __request verbose=self.__verbose File "/usr/lib64/python2.6/xmlrpclib.py", line 1253, in request return self._parse_response(h.getfile(), sock) File "/usr/lib64/python2.6/xmlrpclib.py", line 1392, in _parse_response return u.close() File "/usr/lib64/python2.6/xmlrpclib.py", line 838, in close raise Fault(**self._stack[0]) xmlrpclib.Fault: <Fault 1: "<class 'cobbler.cexceptions.CX'>:'login failed'">
解決方法。
# service cobblerd restart Stopping cobbler daemon: [ OK ] Starting cobbler daemon: [ OK ] # cobbler get-loaders
重新導入。
# cobbler import --name=CentOS_7_x86_64 --path=/mnt/ task started: 2014-10-08_173739_import task started (id=Media import, time=Wed Oct 8 17:37:39 2014) Found a candidate signature: breed=redhat, version=rhel6 Found a candidate signature: breed=redhat, version=fedora16 Found a candidate signature: breed=redhat, version=fedora17 Found a candidate signature: breed=redhat, version=fedora18 No signature matched in /var/www/cobbler/ks_mirror/CentOS_7_x86_64 !!! TASK FAILED !!!
這個時候又一次的出錯了:!!! TASK FAILED !!!,使用如下命令解決。
# cobbler signature update 再次導入。 # cobbler import --name=CentOS_7_x86_64 --path=/mnt/
查看/var/www/cobbler/ks_mirror路徑下的目錄。
# ls CentOS_6.5_x86_64 CentOS_7_x86_64 config
查看dirstro。
# cobbler distro list CentOS_6.5-x86_64 CentOS_7-x86_64
接下來準備ks.cfg文件。CentOS6.5的cfg文件是參考我上次PXE時使用的,而CentOS7的在軟件包安裝以及磁盤分區上有些出入,CentOS7使用的是xfs系統。
#version=RHEL7 # System authorization information auth --enableshadow --passalgo=sha512 url --url=http://172.16.32.10/cobbler/ks_mirror/CentOS_7_x86_64 # Run the Setup Agent on first boot reboot firewall --disabled ignoredisk --only-use=sda # Keyboard layouts keyboard --vckeymap=us --xlayouts='cn' # System language lang en_US.UTF-8 # Network information network --bootproto=dhcp --device=ens32 --onboot=off --ipv6=auto network --hostname=localhost.localdomain # Root password rootpw --iscrypted $6$rHQRho3gkPJXIgy7$LTVHkf8PwxnOUc8QPvotK3myXGDsp2FKfdHWjWftjwcSAAB.V/j7Ki3lTDbu6e2Kc55imnNLc/Hno./VQh2cz. # System timezone timezone Asia/Shanghai --isUtc # System bootloader configuration bootloader --location=mbr --boot-drive=sda # Partition clearing information zerombr clearpart --all clearpart --none --initlabel # Disk partitioning information part /boot --fstype="xfs" --ondisk=sda --size=500 part pv.10 --fstype="lvmpv" --ondisk=sda --size=82087 volgroup centos --pesize=4096 pv.10 logvol /var --fstype="xfs" --size=40000 --name=var --vgname=centos #此處便是XFS的LVM邏輯卷劃分 logvol / --fstype="xfs" --size=20000 --name=root --vgname=centos logvol swap --fstype="swap" --size=2080 --name=swap --vgname=centos logvol /usr --fstype="xfs" --size=20000 --name=usr --vgname=centos %packages @core @development %end
添加Cobbler Profile。
# cobbler profile add --name=CentOS7_X86_64-basic --distro=CentOS_7-x86_64 --kickstart=/tmp/CentOS7_x86_64.ks.cfg # cobbler profile add --name=CentOS_6.5_X86_64-basic --distro=CentOS_6.5-x86_64 --kickstart=/tmp/CentOS6.5_x86_64.ks.cfg # cobbler profile list CentOS7_X86_64-basic CentOS_6.5-x86_64 CentOS_6.5_X86_64-basic CentOS_7-x86_64
這時候就可以開始裝機了。先安裝CentOS7。
在安裝CentOS6.5。
CobblerWeb界面。
# yum install cobbler-web
Web頁面默認不允許任何人登錄,需要手動修改認證相關配置。
# vim /etc/cobbler/modules.conf [authentication] #module = authn_denyall module = authn_pam
創建賬戶,使其能夠登錄CobblerWeb頁面。
# useradd Cadmin [root@web tmp]# passwd Cadmin Changing password for user Cadmin. New password: BAD PASSWORD: it is too simplistic/systematic BAD PASSWORD: is too simple
修改Cobbler的用戶配置文件,添加進Cobbler管理組。
# vim /etc/cobbler/users.conf [admins] admin = "Cadmin" cobbler = ""
重啓http,Cobbler。
# service cobblerd restart Stopping cobbler daemon: [ OK ] Starting cobbler daemon: [ OK ] # service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ]
地址欄輸入172.16.32.10/cobbler_web,就可以訪問了。
登錄進去後就可以通過Web頁面來配置了。