cobbler無人值守批量安裝Linux系統 1.1 pxe安裝系統

cobbler無人值守批量安裝Linux系統

1.1 pxe安裝系統

pxe的大致過程如下圖。
cobbler無人值守批量安裝Linux系統 1.1 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的本地,也可以是互聯網上等能獲取到的地方。

1.2 cobbler基本介紹

​ 百度百科:Cobbler 可以用來快速建立 Linux 網絡安裝環境,它已將 Linux 網絡安裝的技術門檻,從大專以上文化水平,成功降低到初中以下,連補鞋匠都能學會

​ 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

本實驗環境網絡爲NAT,當然這不重要,橋接僅主機都行

關閉NAT的dhcp功能:讓dhcp服務器給新機器分配IP

1.3.0 機器初始化

https://blog.51cto.com/14012942/2427695

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@cobbler ~]# cd /etc/cobbler/

[root@cobbler cobbler]# ls
auth.conf         genders.template        named.template  secondary.template  zone.template
cheetah_macros    import_rsync_whitelist  power           settings            zone_templates
cobbler_bash      iso                     pxe             tftpd.template
completions       ldap                    reporting       users.conf
dhcp.template     modules.conf            rsync.exclude   users.digest
dnsmasq.template  mongodb.conf            rsync.template  version

cobbler無人值守批量安裝Linux系統 1.1 pxe安裝系統

先啓動httpd,再啓動cobblerd。

[root@cobbler cobbler]# systemctl start httpd.service && systemctl enable httpd.service
[root@cobbler cobbler]# systemctl start cobblerd.service && systemctl enable cobblerd.service
[root@cobbler 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:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3656/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      3784/master         
tcp        0      0 127.0.0.1:25151         0.0.0.0:*               LISTEN      4217/python2        
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::80                   :::*                    LISTEN      4138/httpd          
tcp6       0      0 :::22                   :::*                    LISTEN      3656/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      3784/master         
tcp6       0      0 :::443                  :::*                    LISTEN      4138/httpd    

啓動之後,首先執行cobbler check檢查配置是否正確。根據提示修改相關的配置項。

[root@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 : 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 : comment out 'dists' on /etc/debmirror.conf for proper debian support
7 : comment out 'arches' on /etc/debmirror.conf for proper debian support
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@cobbler ~]# sed -r '/^next_server/s/^.*$/next_server: 192.168.38.140/'  /etc/cobbler/settings -i
[root@cobbler ~]# sed -ri '/^server/s/^.*$/server: 192.168.38.140/' /etc/cobbler/settings

第三個問題:/etc/xinetd.d/tftp,改下

[root@cobbler ~]# sed -ri '/disable/s/yes/no/' /etc/xinetd.d/tftp
[root@cobbler ~]# systemctl restart tftp

第四個問題:獲取pxelinux.0和menu.c32文件(對於centos來說只需這兩個文件),可以像pxe一樣從syslinux包中手動複製到/var/lib/cobbler/loaders目錄下,也可以執行cobbler get-loaders自動下載,但要求聯網。

[root@cobbler ~]# cobbler get-loaders

第五個問題:有可能該問題不是如此的,而是說要將rsyncd.service使用給start且enable,只需systemctl enable rsyncd,systemctl start rsyncd(網上抄的,重啓rsync服務就對了)。

[root@xuexi cobbler]# vim /etc/xinetd.d/rsync
disable=no
[root@xuexi cobbler]# service xinetd start

[root@cobbler ~]# systemctl start rsyncd && systemctl enable rsyncd

第6、7個問題,註釋掉/etc/debmirror.conf中相關項即可。

[root@cobbler ~]# sed -ri '/^@arches/s/^/#/' /etc/debmirror.conf
[root@cobbler ~]# sed -ri '/^@dists/s/^/#/' /etc/debmirror.conf

第8個問題:

[root@cobbler ~]# openssl passwd -1 -salt `openssl rand -hex 8` '123456'
$1$0f145a6c$jYnj8pwZrHh5VcA4f52jD.
[root@cobbler ~]# vim /etc/cobbler/settingsdefault_password_crypted: "$1$0f145a6c$jYnj8pwZrHh5VcA4f52jD."

第九個問題和電源管理有關,不用管了。直接重啓cobbler,然後cobbler sync。

[root@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

Restart cobblerd and then run 'cobbler sync' to apply changes.
[root@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@cobbler ~]# cat > /etc/dhcp/dhcpd.conf <<EOF
ddns-update-style none;
default-lease-time 259200;
max-lease-time 518400;
subnet 192.168.38.0 netmask 255.255.255.0 {
        range 192.168.38.10 192.168.38.100;
        option subnet-mask 255.255.255.0;
        option routers 192.168.38.2;
        option domain-name-servers 180.76.76.76;
        next-server 192.168.38.140;
        filename "pxelinux.0";
}
EOF
[root@cobbler ~]# systemctl restart dhcpd && systemctl enable dhcpd

​ 關於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/目錄(默認)下

[root@cobbler ~]# mkdir /mnt -p
[root@cobbler ~]# mount /dev/cdrom /mnt
[root@cobbler ~]# cobbler import --name=CentOS7.6 --path=/mnt

等待導入完成,則表示distro生成完成。

[root@cobbler ~]# ls -l /var/www/cobbler/images/CentOS7.6-x86_64/
total 57844
-rw-r--r-- 3 root root 52584760 Nov 26  2018 initrd.img
-rwxr-xr-x 3 root root  6639904 Nov  9  2018 vmlinuz
[root@cobbler ~]# ls /var/www/cobbler/ks_mirror/CentOS7.6/      # 此目錄完全來源於鏡像
CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL

確保url路徑http://192.168.38.140/cobbler/ks_mirror/CentOS7.6/是有效的。

cobbler無人值守批量安裝Linux系統 1.1 pxe安裝系統

1.4.2 提供kickstart文件

以下是CentOS7的Kickstart內容。如果要改爲適合CentOS6的內容,只需將keyboard項設置爲"keyboard us",並修改下分區方式(如有必要的話)以及%post腳本段的內容即可。

如何寫kickstat:

1.可以參考家目錄的anaconda-ks.cfg

2.使用圖形化工具:system-config-kickstart(需要桌面環境)

3.參考/var/lib/cobbler/kickstarts/下面的模板

參考:http://ju.outofmemory.cn/entry/194801

參考:https://www.cnblogs.com/f-ck-need-u/p/7342022.html

kickstat中密碼生成方法:

md5:openssl passwd -1 '123456'

sha256:CentOS6可以用grub-crypt --sha-256

sha512:CentOS6中可以grub-crypt --sha-512

也可以直接拷貝shadow中的密碼:
[root@localhost ~]# awk -F: '/^root/ {print $2}' /etc/shadow
$6$TwMc7kHxAYSdICBU$yUVPcTo.SWi6FpWrZsx3.X.yjbrvqvgMxu0Jvqims55ZU6hQKPaR5DeQISwhcMBkmyVK/UJ1SFnpmu9E3S/Wu0

ksvalidator 命令可以驗證ks文件語法有沒有問題

ksvalidator /var/lib/cobbler/kickstarts/CentOS7.6.ks

[root@cobbler mnt]# cat  /var/lib/cobbler/kickstarts/CentOS7.6.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.xuexi.com
# Reboot after installation
reboot
# Root password
rootpw --iscrypted $6$TwMc7kHxAYSdICBU$yUVPcTo.SWi6FpWrZsx3.X.yjbrvqvgMxu0Jvqims55ZU6hQKPaR5DeQISwhcMBkmyVK/UJ1SFnpmu9E3S/Wu0
# 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
bootloader --append="net.ifnames=0" --location=mbr
# 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://192.168.38.140/cobbler/ks_mirror/CentOS7.6/"。

1.4.3 提供profile

在導入鏡像生成distro的過程中,會自動生成一個profile。

[root@cobbler ~]# cobbler profile list
   CentOS7.6-x86_64

該profile默認使用的kickstart是/var/lib/cobbler/kickstarts/sample_end.ks,所以需要修改此項。

[root@cobbler mnt]# cobbler profile report CentOS7.6-x86_64
Name                           : CentOS7.6-x86_64
TFTP Boot Files                : {}
Comment                        : 
DHCP Tag                       : default
Distribution                   : CentOS7.6-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@cobbler mnt]# cobbler profile edit --name=CentOS7.6-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS7.6.ks
[root@cobbler mnt]# cobbler profile report CentOS7.6-x86_64 | grep kickstart -i
Kickstart                      : /var/lib/cobbler/kickstarts/CentOS7.6.ks
Kickstart Metadata             : {}

對於centos7系列,則加上內核啓動參數net.ifnames和biosdevname使得網卡名使用ethN系列而不使用enoXXXXXXX這樣的隨機名稱。這個寫在ks的文件中開機執行腳本那一段,修改/etc/default/grub也可以的

[root@cobbler mnt]# cobbler profile edit --name=CentOS7.6-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS7.6.ks --kopts="net.ifnames=0 biosdevname=0"
[root@cobbler mnt]# cobbler profile report CentOS7.6-x86_64 | grep -Ei 'kernel|kickstart'
Kernel Options                 : {'biosdevname': '0', 'net.ifnames': '0'}
Kernel Options (Post Install)  : {}
Kickstart                      : /var/lib/cobbler/kickstarts/CentOS7.6.ks
Kickstart Metadata             : {}

當然,不使用自生成的profile,自己添加一個profile也可以,同時還可以設置profile選項,如"--kickstart"項。如下:其中"--distro"指定該profile是添加到哪個distro下的。

[root@cobbler mnt]# cobbler profile remove --name=CentOS7.6-x86_64
[root@cobbler mnt]# cobbler profile add --name=CentOS7.6-x86_64 --distro=CentOS7.6-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS7.6.ks
[root@cobbler mnt]# cobbler profile list
   CentOS7.6-x86_64

實際上,每添加一個profile都是在向/var/lib/tftpboot/pxelinux.cfg/default中添加一個label。

[root@cobbler mnt]#  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.6-x86_64
        kernel /images/CentOS7.6-x86_64/vmlinuz
        MENU LABEL CentOS7.6-x86_64
        append initrd=/images/CentOS7.6-x86_64/initrd.img ksdevice=bootif lang=  text net.ifnames=0 biosdevname=0 kssendmac  ks=http://192.168.38.140/cblr/svc/op/ks/profile/CentOS7.6-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.

查看下錯誤日誌

[root@cobbler ~]# cobbler sync
[root@cobbler ~]# tail /var/log/cobbler/cobbler.log  -f
Sat Sep  7 08:59:25 2019 - INFO | REMOTE generate_kickstart; user(?)
Sat Sep  7 08:59:25 2019 - INFO | generate_kickstart
Sat Sep  7 08:59:25 2019 - INFO | Exception occured: <type 'exceptions.UnicodeDecodeError'>
Sat Sep  7 08:59:25 2019 - INFO | Exception value: 'ascii' codec can't decode byte 0xe6 in position 322: ordinal not in range(128)
Sat Sep  7 08:59:25 2019 - INFO | Exception Info:
  File "/usr/lib/python2.7/site-packages/cobbler/remote.py", line 1052, in generate_kickstart
    return self.api.generate_kickstart(profile,system)
   File "/usr/lib/python2.7/site-packages/cobbler/api.py", line 680, in generate_kickstart
    return self.kickgen.generate_kickstart_for_profile(profile)
   File "/usr/lib/python2.7/site-packages/cobbler/kickgen.py", line 295, in generate_kickstart_for_profile
    return self.generate_kickstart(profile=g)
   File "/usr/lib/python2.7/site-packages/cobbler/kickgen.py", line 277, in generate_kickstart
    data = self.templar.render(raw_data, meta, None, obj)
   File "/usr/lib/python2.7/site-packages/cobbler/templar.py", line 116, in render
    data_out = self.render_cheetah(raw_data, search_table, subject)
   File "/usr/lib/python2.7/site-packages/cobbler/templar.py", line 201, in render_cheetah
    t = Template(source=raw_data, searchList=[search_table], compilerSettings={'useStackFrame':False})
   File "DynamicallyCompiledCheetahTemplate.py", line 58, in __init__
   File "_etc_cobbler_cheetah_macros.py", line 58, in __init__
   File "/usr/lib64/python2.7/site-packages/Cheetah/Template.py", line 1259, in __init__
    self._compile(source, file, compilerSettings=compilerSettings)
   File "/usr/lib64/python2.7/site-packages/Cheetah/Template.py", line 1553, in _compile
    keepRefToGeneratedCode=True)
   File "/usr/lib/python2.7/site-packages/cobbler/template_api.py", line 127, in compile
    return Cheetah.Template.Template.compile(*args, **kwargs)
   File "/usr/lib64/python2.7/site-packages/Cheetah/Template.py", line 740, in compile
    settings=(compilerSettings or {}))
   File "/usr/lib64/python2.7/site-packages/Cheetah/Compiler.py", line 1575, in __init__
    source = unicode(source)

解決:參考:https://blog.csdn.net/qq_34284638/article/details/86493535

發現是ks文件中有些中文的註釋,刪掉後,重新cobber sync即可

修改kickstart文件後,需要重新編譯profile加載新的kickstart文件。只需使用cobbler profile edit --name=XXXXX --kickstart=YYYYY即可重新編譯XXXXX這個profile,或者執行cobbler sync命令。直到瀏覽器中能獲取到kickstart的內容時纔算成功。

或者,使用cobbler profile getks --name=XXXXX命令獲取名爲XXXXX的profile的ks內容。

總之,必須要保證能正確獲取到ks內容。

同理,加上CentOS6到cobbler裏面:

[root@cobbler ~]# mkdir /data/iso -p
[root@cobbler ~]# mkdir /CentOS6.10-mini
[root@cobbler ~]# cd /data/iso/
[root@cobbler iso]# wget https://mirrors.huaweicloud.com/centos/6/isos/x86_64/CentOS-6.10-x86_64-minimal.iso
[root@cobbler iso]# echo '/data/iso/CentOS-6.10-x86_64-minimal.iso  /CentOS6.10-mini iso9660 defaults 0 0' >> /etc/fstab
[root@cobbler iso]# mount -a
[root@cobbler ~]# cobbler import --name=CentOS6.10-mini --path=/CentOS6.10-mini
[root@cobbler iso]# vim /var/lib/cobbler/kickstarts/CentOS6.10-mini.ks 
[root@cobbler iso]# ksvalidator /var/lib/cobbler/kickstarts/CentOS6.10-mini.ks 
[root@cobbler iso]# cobbler profile remove --name=CentOS6.10-mini-x86_64
[root@cobbler iso]# cobbler profile add --name=CentOS6.10-mini-x86_64 --distro=CentOS6.10-mini-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS6.10-mini.ks
#確認下

1.4.4 開始安裝

準備一個新的機器開機就會自動進入菜單,2-3秒超時後自動進行安裝,安裝完成後自動重啓,重啓時自動從本地啓動。

所以,除了對新機器進行開機,其他的一切完完全全是全自動的。

建議在真正開始安裝前,將dhcpd/rsyncd/tftp/cobbler等給重啓一遍,防止中間改過哪些地方忘記重啓而導致裝機時出錯。

[root@cobbler ~]# systemctl restart dhcpd httpd cobblerd tftp
[root@cobbler ~]# systemctl enable  dhcpd httpd cobblerd tftp

1.5 比pxe+kickstart好的地方

僅就cobbler基本功能而言,它跟pxe的能力基本是一樣的,只是提供了更多花哨的功能。

但cobbler能夠使用變量,能夠通過幾個命令自動完成文件複製,修改等繁瑣的動作,另外它提供了api接口,常用的是它的圖形界面。在這一點上,它還是不錯的。

1.6 讓新機器自動執行腳本

有些時候新機器上要進行很多配置,在kickstart的%post段也可以配置,但是這裏能進行的配置是有限的。

可以在cobbler服務端寫好要執行的腳本,然後在新機器上將腳本使用scp複製過去,但是scp複製需要確認和輸入密碼,所以需要在kickstart的選包部分指定安裝expect包,然後使用expect進行非交互scp。

最後在%post段直接執行此腳本即可。

cobbler無人值守批量安裝Linux系統 1.1 pxe安裝系統

cobbler無人值守批量安裝Linux系統 1.1 pxe安裝系統

cobbler無人值守批量安裝Linux系統 1.1 pxe安裝系統

出問題的地方總結:

1、要關掉NAT的dhcp

2、ks文件中別有中文註釋

3、開始安裝前重啓下httpd,tftp,dhcpd,cobblerd

4、ks文件中的url別寫url --url=$tree,寫成http連接:url --url="http://192.168.38.140/cobbler/ks_mirror/CentOS7.6/"

5、CentOS7機器的內存爲1G時安裝失敗

6、安裝CentOS7 mini安裝包步驟都找不到,所以全部放到post裏,安裝後yum裝包

7、ks文件中的rootpw可以通過shadow文件來獲取

8、如果無特殊情況,一定要將/var/lib/tftpboot/pxelinux.cfg/default 默認啓動項設置爲local

9、CentOS6也出現了上圖的問題:you have specified that the group base should be installed,解決方法:參考:https://www.fangc.xyz/detail/pxean-zhuang-you-have-specifie/ ,但是,這個報了個小錯誤(報這個錯誤的原因是我這個鏡像太mini了,沒有base包,我把ks文件中的url換成網絡源就可以了)

[root@cobbler iso]# vim  /var/lib/cobbler/kickstarts/CentOS6.10-mini.ks
%packages --nobase
%end

[root@cobbler iso]# ksvalidator /var/lib/cobbler/kickstarts/CentOS6.10-mini.ks 
Ignoring deprecated option on line 30:  The --nobase option has been deprecated and no longer has any effect.  It may be removed from future releases, which will result in a fatal error from kickstart.  Please modify your kickstart file to remove this option.

最後測試下ubuntu

[root@cobbler ~]# cd /data/iso/
[root@cobbler iso]# wget https://mirrors.huaweicloud.com/ubuntu-releases/bionic/ubuntu-18.04.3-live-server-amd64.iso
[root@cobbler iso]# mkdir /ubuntu18.04-mini
[root@cobbler iso]# echo '/data/iso/ubuntu-18.04.3-live-server-amd64.iso  /ubuntu18.04-mini iso9660 defaults 0 0' >> /etc/fstab 
[root@cobbler iso]# mount -a
[root@cobbler iso]# cobbler import --name=ubuntu18.04-mini --path=/ubuntu18.04-mini
#失敗告終,暫未解決,生成distro就報錯了
cobber官方文檔:https://cobbler.github.io/manuals/2.8.0/

附件

CentOS7.6.ks

[root@cobbler ~]# cat /var/lib/cobbler/kickstarts/CentOS7.6.ks
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Install OS instead of upgrade
install
# Use network installation
url --url="http://192.168.38.140/cobbler/ks_mirror/CentOS7.6/"
# Use text mode install
text
# Firewall configuration
firewall --disabled
firstboot --disable
# ignoredisk --only-use=sda   
# 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.xuexi.com
# Reboot after installation
reboot
# Root password
rootpw --iscrypted $6$TwMc7kHxAYSdICBU$yUVPcTo.SWi6FpWrZsx3.X.yjbrvqvgMxu0Jvqims55ZU6hQKPaR5DeQISwhcMBkmyVK/UJ1SFnpmu9E3S/Wu0
# 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
bootloader --append="net.ifnames=0" --location=mbr
# 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

# 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
mkdir /etc/yum.repos.d/backup
cd /etc/yum.repos.d/
mv *.repo backup/
cat >>/etc/yum.repos.d/my.repo<<eof
[base]
name=sohu
baseurl=http://mirrors.aliyun.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  -ri '/GRUB_CMDLINE_LINUX/ s/^(.*quiet)"$/\1 net.ifnames=0"/'  /etc/default/grub
sed -i "/UUID/d" /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i "/DEVICE/d" /etc/sysconfig/network-scripts/ifcfg-ens33
echo "DNS1=114.114.114.114" >> /etc/sysconfig/network-scripts/ifcfg-ens33
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
yum install lftp lrzsz vim tree  -y
%end

%packages
%end

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

kickstart模版: https://www.lanzous.com/i6293oj 密碼:20mx

CentOS6.10-mini.ks

[root@cobbler iso]# cat /var/lib/cobbler/kickstarts/CentOS6.10-mini.ks
# Kickstart file automatically generated by anaconda.

#version=DEVEL
install
text
reboot
url --url="http://192.168.38.140/cobbler/ks_mirror/CentOS6.10-mini/"
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --noipv6
rootpw  --iscrypted $6$TwMc7kHxAYSdICBU$yUVPcTo.SWi6FpWrZsx3.X.yjbrvqvgMxu0Jvqims55ZU6hQKPaR5DeQISwhcMBkmyVK/UJ1SFnpmu9E3S/Wu0
firewall --disabled
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
clearpart --all
zerombr

part /boot --fstype=ext4 --size=1024
part / --fstype=ext4 --size=100000
part /data --fstype=ext4 --size=50000
part swap --size=2048

%packages --nobase
%end

%post
mkdir /etc/yum.repos.d/backup
cd /etc/yum.repos.d/
mv *.repo backup/
cat >/etc/yum.repos.d/my.repo <<EOF
[base]
name=base
baseurl=http://mirrors.aliyun.com/centos/6/os/x86_64/
gpgcheck=0
enable=1
[epel]
name=epel
baseurl=http://mirrors.aliyun.com/epel/6/x86_64/
enable=1
gpgcheck=0
EOF
yum install -y vim wget curl lrzsz
%end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章