隨着互聯網技術的不斷壯大,服務器的數量也在不斷的增長,從初期的幾臺服務器發展到龐大的數據中心,單靠人工已經沒法知足在技術、業務、管理等方面的要求,那麼標準化、自動化、架構優化、過程優化等下降IT服務成本的因素愈來愈被人們所重視。而如何自動化批量部署安裝一個穩定的系統是實現自動化的第一步。html
PXE,就是預啓動執行環境,是一種引導啓動的方式。這種協議通常由兩部分構成,一部分是服務器端,一個是客戶端。簡單來講,咱們經過這種方式能夠本身建立一個「安裝源」,在安裝系統的時候只要能找到這個「源」即可以實現系統的安裝。在實現無人值守的安裝前,咱們必需要搭建一些服務,來實現「安裝源」的創建,例如ftp、http、tftp、dhcp等。當一臺主機啓動時,標準輸入輸出會將PXE客戶端調入咱們的內存中進行相關的操做,並提示相關的選項,在這裏咱們能夠進行選擇。PXE的客戶端經過網絡下載(download)啓動文件到本地運行。具體過程是,PXE客戶端經過網卡向局域網內發送ip請求,而後DHCP服務器會提供給給它一個ip地址和系統安裝所須要的文件,接下使用接收到的文件進行系統安裝。而安裝的過程又須要其餘服務器提供的資源,例如:yum源,內核文件等,當主機拿到這些資源,即可以順利的安裝了。最終結果是:任意一臺主機在選着網絡啓動時會獲取DHCP服務器分發的ip,經過經過獲取到的ip地址與局域網內的TFTP服務器通訊並獲取啓動文件,與FTP或者HTTP通訊並獲取yum源文件及內核文件等。以後開始自動安裝,而這個過程不須要人在作任何操做。java
PXE安裝優勢,這種安裝系統的方式能夠不受光驅,光盤以及一些外部設備的限制,還能夠作到無人值守,大大減輕了運維人員的工做負荷,像在一些主機數量龐大的機房進行批量安裝,PXE將是你不二的選擇。python
1.安裝前準備
因爲涉及到主機間不一樣基於不一樣協議的通訊,因此爲了不沒必要要的麻煩,咱們選擇關閉防火牆以及selinux。
2.配置靜態IP地址mysql
修改完配置後記得重啓網卡使配置生效
3.安裝服務[root@db ~]# yum -y install dhcp tftp-server httpd syslimux xinetd
啓動服務並設爲開機自啓linux
[root@db ~]# systemctl enable dhcpd [root@db ~]# systemctl enable tftp [root@db ~]# systemctl enable httpd [root@db ~]# systemctl start httpd [root@db ~]# systemctl start tftp [root@db ~]# vim /etc/xinetd.d/tftp { ... disable =yes # 修改這一項爲"disable =no" ... } [root@db ~]# systemctl restart xinetd
4.配置DHCP服務redis
[root@db ~]# cd /etc/dhcp/ [root@db dhcp]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example dhcpd.conf #複製板配置文件
[root@db ~]# vim dhcpd.conf # 打開模板文件並添加一下內容 subnet 192.168.92.0 netmask 255.255.255.0{ #這裏寫的ip地址爲子網的地址 range 192.168.92.200 192.168.92.224; #子網的範圍,以後主機請求獲取的ip地址就是這其中的一個 next-server 192.168.92.33; # 指明tftp服務器的地址 option routers 192.168.92.33; #網關地址也就是服務器地址 filename "pxelinux.0"; # 指明PXE文件位置,這個在申請ip的時候會發送給安裝主機 } [root@db dhcp]# systemctl restart dhcpd #重啓服務
5.準備yum源文件以及kickstart文件sql
[root@db dhcp]# cd /var/www/html/ [root@db html]# mkdir -p centos/{6,7} [root@db html]# mkdir ksdir 關於Yum源文件,咱們能夠從光盤中複製,也能夠直接把光盤掛載到指定目錄,這裏我選擇把光盤掛載到指定目錄 [root@db dhcp]# mount /dev/sr0 centos/6 # 掛載CentOS 6光盤值6目錄下 [root@db dhcp]# mount /dev/sr1 centos/7 # 掛載CentOS 7光盤值7目錄下 [root@db dhcp]# yum install -y system-config-kickstart [root@db dhcp]# system-config-kickstart
能夠按照順序自定義配置,以後保存到/var/www/html/ksdir/目錄下
或者複製/root目錄下的anaconda-ks.cfg文件進行修改express
[root@db ~]# cp anaconda-ks.cfg /var/www/html/ksdir/ks7.cfg [root@db ~]# vim /var/www/html/ksdir/ks7.cfg [root@db ~]# chmod +r /var/www/html/ksdir/ks7.cfg [root@db ~]# cat /var/www/html/ksdir/ks7.cfg #version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 # Use CDROM installation media url --url="http://192.168.92.33/centos/7" #指明yum源路徑 # Use graphical install text # 將cdrom修改成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 --ipv6=auto --activate network --hostname=centos7.cyz # Root password rootpw --iscrypted $6$cvwgC8f2Z/MY2UC9$MhmVS1.BVZmfMZAnM9LeYhW19587XIJ9d4cE9mG0GLAt4ETX/HNjBxUoOkhMRLcH2gY2mOT361w0CrFaangje0 # System services services --disabled="chronyd" # System timezone timezone Asia/Shanghai # X Window System configuration information xconfig --startxonboot # System bootloader configuration bootloader --location=mbr --boot-drive=sda # Partition clearing information clearpart --all --initlabel # Disk partitioning information part /app --fstype="xfs" --ondisk=sda --size=19073 part swap --fstype="swap" --ondisk=sda --size=4096 part /boot --fstype="xfs" --ondisk=sda --size=190 part / --fstype="xfs" --ondisk=sda --size=19073 %packages #安裝軟件包,我這個是mini安裝因此安裝包比較少,能夠自定義安裝。 @^minimal @core vim %end %addon com_redhat_kdump --disable --reserve-mb='auto' %end
centos6的kickstart文件vim
#version=DEVEL install text # 基於字符界面安裝 lang en_US.UTF-8 keyboard us network --onboot yes --device eth0 --bootproto dhcp --noipv6 rootpw --iscrypted $6$hfb25YOYZDU3YZTl$VxTkHGGJGGBbr59OPnY5kTJzvJ9hb9NRwrh5FMHLIAlXh9VQ74PYoK7QzPWYN0zaJrm3mv/IP0fDkHxFglNi6/ firewall --service=ssh authconfig --enableshadow --passalgo=sha512 url --url="http://192.168.92.33/centos/6" # yum源的路徑 selinux --disabled # 關閉selinux 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 zerombr # 清除mbr clearpart --all # 清除分區信息 reboot # 安裝完成後重啓 part /boot --fstype=ext4 --size=1000 # 分區信息 part / --fstype=ext4 --size=50000 part /app --fstype=ext4 --size=40000 part swap --size=2048 #repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100 # 註釋掉此行 %packages @base @core @debugging @basic-desktop @desktop-debugging @desktop-platform @directory-client @fonts @general-desktop @graphical-admin-tools @input-methods @internet-applications @internet-browser @java-platform @kde-desktop @legacy-x @network-file-system-client @office-suite @print-client @remote-desktop-clients @server-platform @server-policy @workstation-policy @x11 mtools pax python-dmidecode oddjob wodim sgpio genisoimage device-mapper-persistent-data abrt-gui qt-mysql samba-winbind certmonger pam_krb5 krb5-workstation xterm xorg-x11-xdm libXmu rdesktop %end %post # 安裝後腳本,安裝完系統後向作什麼配置,均可以寫在%post...%end中間 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
6.準備內核文件、菜單文件centos
[root@db ~]# cd /var/lib/tftpboot/ [root@db tftpboot]# mkdir -p centos{6,7} # 建立目錄文件 [root@db tftpboot]# cp /var/www/html/centos/6/{vmlinuz,initrd.img} centos6/ # 複製內核,虛擬根文件 [root@db tftpboot]# cp /var/www/html/centos/7/{vmlinuz,initrd.img} centos7/ # 因爲以前掛載了不一樣系統,直接複製對應文件便可 [root@db tftpboot]# cp /usr/share/syslinux/pxelinux.0 . # pxelinux文件來自syslinux包,直接複製便可 [root@db tftpboot]# cp /usr/share/syslinux/vesamenu.c32 . #複製菜單文件 [root@db tftpboot]# mkdir pxelinux.cfg [root@db tftpboot]# cp /var/www/html/centos/6/isolinux/isolinux.cfg pxelinux.cfg/default # 複製並更名 [root@db tftpboot]# vim pxelinux.cfg/default [root@db tftpboot]# cat pxelinux.cfg/default # 查看修改事後的菜單文件內容 default vesamenu.c32 timeout 600 display boot.msg # Clear the screen when exiting the menu, instead of leaving the menu displayed. # For vesamenu, this means the graphical background is still displayed without # the menu itself for as long as the screen remains in graphics mode. menu clear menu background splash.png menu title CentOS 7 menu vshift 8 menu rows 18 menu margin 8 #menu hidden menu helpmsgrow 15 menu tabmsgrow 13 # Border Area menu color border * #00000000 #00000000 none # Selected item menu color sel 0 #ffffffff #00000000 none # Title bar menu color title 0 #ff7ba3d0 #00000000 none # Press [Tab] message menu color tabmsg 0 #ff3a6496 #00000000 none # Unselected menu item menu color unsel 0 #84b8ffff #00000000 none # Selected hotkey menu color hotsel 0 #84b8ffff #00000000 none # Unselected hotkey menu color hotkey 0 #ffffffff #00000000 none # Help text menu color help 0 #ffffffff #00000000 none # A scrollbar of some type? Not sure. menu color scrollbar 0 #ffffffff #ff355594 none # Timeout msg menu color timeout 0 #ffffffff #00000000 none menu color timeout_msg 0 #ffffffff #00000000 none # Command prompt text menu color cmdmark 0 #84b8ffff #00000000 none menu color cmdline 0 #ffffffff #00000000 none # Do not display the actual menu unless the user presses a key. All that is displayed is a timeout message. menu tabmsg Press Tab for full configuration options on menu items. menu separator # insert an empty line menu separator # insert an empty line label linux menu label ^Install CentOS 7 menu default #光標默認在這一行 kernel centos7/vmlinuz append initrd=centos7/initrd.img ks=http://192.168.92.33/ksdir/ks7.cfg label centos6 menu label Auto Install CentOS Linux ^6 kernel centos6/vmlinuz append initrd=centos6/initrd.img ks=http://192.168.92.33/ksdir/ks6.cfg label linux menu label Boot from ^local drive localboot 0xffff menu end
4、調試並安裝
新建立一臺虛擬機,設置網絡段在上述DHCP服務所在的網絡段,選擇使用物理驅動器自動檢測。系統已經裝好了。