利用kickstart實現自動化安裝

這兩天學習kickstart的部署,採用 pxe + dhcp + tftp + nfs 的方式,下面把整個流程簡要地列出來。linux


我這裏用的系統是rhel6.5,對於rhel5/centos5系列的系統略有不一樣。ios


先簡單描述一下經過網絡啓動安裝的過程:centos

  1. 客戶端設置爲經過網絡啓動,可能須要在bios中設定開啓該功能bash

  2. 啓動以後在局域網內發出廣播服務器

  3. dhcp服務器響應該廣播,客戶端得到IP地址,以及一些額外信息,好比tfpt服務器的IP,須要下載的文件等網絡

  4. 客戶端從tftp服務器中獲取須要的啓動文件(pxelinux.0)及其配置文件app

  5. 客戶端經過指定方式獲取自動應答文件(ks.cfg),而後開始自動化安裝dom


下面是完整過程:ssh

dhcp服務:socket

安裝

yum install -y dhcp

修改配置文件/etc/dhcp/dhcpd.conf,內容以下:

subnet 192.168.80.0 netmask 255.255.255.0 {
  range 192.168.80.100 192.168.80.110;
  option domain-name-servers 192.168.80.12;
  option domain-name "fhjjabba.com";
  option routers 192.168.80.2;
  option broadcast-address 192.168.80.255;
  default-lease-time 600;
  max-lease-time 7200;
  
  next-server 192.168.80.12;
  filename "/pxelinux.0";
}

上面的配置中除了最後兩句以外,其它的配置項均可以直接從示例配置中複製過來修改,示例文件是/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample,關於dns的配置不是必須的(聽說是)。

next-server用於指定tftp服務器的地址,filename則指定要從該服務器下載的文件,其中的路徑"/"並不是指操做系統的根,而是tftp服務本身的根,下面講到tftp服務配置時再細說。


配置好了之後能夠啓動服務了

service dhcpd start

這裏須要注意的是,dhcpd.conf中必須至少有一個subnet與當前主機處於同一網段,不然dhcp服務將啓動失敗。根據以上配置,我當前的主機必須有一個192.168.80.0/24的地址。


tftp服務:

安裝

yum install -y tftp-server

由於tftp服務是由xinetd管理的,因此其配置文件是/etc/xinetd.d/tftp,修改後內容以下:

service tftp
{
        socket_type     = dgram
        protocol      = udp
        wait        = yes
        user        = root
        server       = /usr/sbin/in.tftpd
        server_args    = -s /var/lib/tftpboot
        disable      = no
        per_source     = 11
        cps        = 100 2
        flags       = IPv4
}

其實只是將disable = yes改爲了disable = no,而後重啓xinetd

service xinetd restart

檢驗tftp服務是否已經啓動

netstat -ulnp | grep :69

能看到結果說明tftp正常啓動了。


這裏重點關注一下tftp配置文件中的server_args項,後面的值是/var/lib/tftpboot,這就是tftp服務的根目錄,因此上面提到的"/pxelinux.0"文件的完整路徑應該是/var/lib/tftpboot/pxelinux.0。


接下來爲客戶端準備一些必要文件。

包括內核vmlinuz,內存映像initrd.img,引導程序pxelinux.0。

首先掛載系統光盤到/mnt/cdrom

mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom

複製其中的內核和內存映像

cp /mnt/cdrom/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot

另外還有不少教程說要複製/mnt/cdrom/isolinux/下的boot.msg和vesamenu.c32兩個文件,這些都不是必須的,boot.msg是系統啓動時輸出的一些提示信息,vesamenu.c32是一個菜單。這裏我就不復制了,待會修改配置時把它們去掉就好。


而後是引導程序pxelinux.0,它是由syslinux包提供的,因此要安裝syslinux

yum install -y syslinux

裝好後就能夠複製了

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot


客戶端下載了pxelinux.0後還會下載其配置文件,該配置文件規定放在tftp根目錄下的名爲pxelinux.cfg的目錄中,因此先建立這個目錄

mkdir /var/lib/tftpboot/pxelinux.cfg

配置文件能夠直接複製/mnt/cdrom/isolinux下的isolinux.cfg,名稱默認爲default

cp /mnt/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

而後爲了修改這個配置文件,還須要修改其權限

chmod u+w /var/lib/tftpboot/pxelinux.cfg/default

個人配置以下:

#default vesamenu.c32
default linux
prompt 0

#display boot.msg

label linux
  menu label ^Install or upgrade an existing system
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=nfs:192.168.80.12:/nfs_share/ks.cfg

有兩行以「#」開頭的是註釋,就是剛纔沒有複製到的兩個文件。

注意第二行default linux和下面的label linux,這兩項是對應的,表示默認就使用label linux下面的配置。重點關注label linux下面第四行的ks=...這一項,是我本身加上的,意思是指定系統安裝過程當中的自動應答文件,根據實際狀況本身填寫,若是是http或ftp的話格式就是http://ip/path/to/ks.cfg。


nfs服務:

安裝

yum install -y nfs-utils

而後設置須要共享的目錄,我設的是/nfs_share,配置文件是/etc/exports

mkdir /nfs_share
echo "/nfs_share    *(ro,async,nohide,crossmnt)" >> /etc/exports

exports文件說明了nfs須要共享的目錄,這裏建議加上nohide和crossmnt兩個選項,否則客戶端有可能沒法掛載。


而後在共享目錄中提供自動應答文件,我直接複製/root下的anaconda-ks.cfg了

cp ~/anaconda-ks.cfg /nfs_share/ks.cfg

而後手動編輯ks.cfg。

裏面具體每一項我就很少說了,下面是個人配置:

# Kickstart file automatically generated by anaconda.

#version=DEVEL
install
text
key --skip

nfs --server=192.168.80.12 --dir=/nfs_share/cdrom

lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --noipv6
rootpw  --iscrypted $6$9ZnVhZodnRm03BDB$0bVVH1uMQeHmUbKTRuaNas2wrJYebJwIa6RQTcdqOFVn0Qw/fVwowbcdGx9zhs9xL7/kvSouyeVkUbAefZtO60
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --permissive
timezone Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
reboot
clearpart --all --drives=sda
zerombr

part /boot --fstype=ext3 --size=100
part / --fstype=ext3 --size=5120
part /usr --fstype=ext3 --size=10240
part /home --fstype=ext3 --size=5120
part swap --size=1024


%packages --nobase
@core
%end

注意nfs那一項,指定了nfs服務器的ip和系統鏡像所在的目錄(即系統安裝過程當中須要下載的各類安裝包),我把系統光盤掛在了/nfs_share/cdrom下,這裏就要指定這個目錄而不是/nfs_share。另外,由於這個目錄是/nfs_share的子目錄,因此在/etc/exports中就要指定nohide和crossmnt兩個選項。

由於此前系統光盤已經掛在了/mnt/cdrom下,因此能夠用下面的方式再次掛載

mount --bind /mnt/cdrom /nfs_share/cdrom

這樣就同時存在有兩個入口了。


還有那個rootpw項就是設置root密碼的,後面一長串是我設的密碼加密後的結果,你能夠根據本身須要設置,利用grub-crypt命令便可

# grub-crypt
Password:
Retype password:
$6$eHcHyEchzEgZAkMl$dUvm9Ik06ZeYfIlFPeYsNhGqczu7SbkP19bupWj2RUQnZzjKrr9SJ03/Q9e8gHRTXCWDkcZHsExH6WtzIMiCe.

就是把最後的結果複製粘貼進去便可。

若是忘記作這一步,那麼登錄系統就要輸入我設置的密碼咯,因此你要改密碼,能夠在grub引導界面給內核添加一個啓動參數,在後面加上「1」或「s」便可,具體方法仍是去google一下吧,忘記root密碼的人太多了。。。


由於這個配置文件是從root的家目錄複製出來的,因此還要修改權限讓全部人可讀,不然客戶端將沒法下載該文件

chmod +r /nfs_share/ks.cfg

而後啓動nfs服務便可

service nfs start


好了,完整配置過程已經完成,接下來就能夠新建一臺機器作實驗了。

不過還有幾點須要說明一下:

  • 新建的虛擬機要與dhcp服務器在同一個局域網中,並且儘可能不要出現多個dhcp服務器,因此最好就是把兩臺虛擬機放在host-only網絡中。

  • 新建虛擬機時的虛擬磁盤要立刻分配足夠大小的空間,不然安裝時會出現沒法分配足夠磁盤空間的錯誤。例如個人ks.cfg中配置的分區加起來有21+G,那麼新建虛擬磁盤最好就當即分配25G,而後才能順利安裝。

  • 若是客戶端得到ip地址後沒法鏈接tftp服務器,即出現鏈接超時的狀況,就把selinux和iptables都關掉。



第一次在51CTO上寫博客,作得很差的地方還請各位見諒,哪裏寫得不對請委婉指出,有問題能夠提出來一塊兒討論。j_0057.gif

相關文章
相關標籤/搜索