dhcp、tftp及pxe簡介


 

pxe安裝注意問題(注:這里只是我自己踩過的坑)

1、防火牆要關閉

2、如果使用pxe安裝虛擬機,則需要客戶端的內存大於1G

 

 

 

DHCP:

全稱:Dynamic Host Configuration Protocol  動態主機配置協議

DHCP配置內容:

IP/Netmask

Gateway

DNS Server

 

bootp: boot protocol --> dhcp  動態指派IP,永久有效

租約:即使用期限,DHCP服務器為客戶端分配IP后,客戶端使用IP地址是有期限的

2hours:假如租約期限為2小時

50%: 1hours --> 2hours        過了一個小時之后就要續租

50%1hours --> 2hours   續租后又過了一個小時,就再續租,如果不用的時候,地址會自動被釋放

75%: 0.5hours --> 2hours

87.5%: 0.25hours --> 2hours

dhcp discover   如果租約快要到期一直無法續租就要提前廣播尋找DHCP服務器

RARP:(Reverse Address Resolution Protocol),是一種網絡協議互聯網工程任務組(IETF)在RFC903中描述了RARP。RARP使用與ARP相同的報頭結構,作用與ARP相反。                            RARP用於將MAC地址轉換為IP地址。其因為較限於IP地址的運用以及其他的一些缺點,因此漸為更新的BOOTPDHCP所取代。

RARP工作原理  

  1. 源主機發送一個本地的RARP廣播,在此廣播包中,聲明自己的MAC地址並且請求任何收到此請求的RARP服務器分配一個IP地址;
  2. 本地網段上的RARP服務器收到此請求后,檢查其RARP列表,查找該MAC地址對應的IP地址;
  3. 如果存在,RARP服務器就給源主機發送一個響應數據包並將此IP地址提供給對方主機使用;
  4. 如果不存在,RARP服務器對此不做任何的響應;
  5. 源主機收到從RARP服務器的響應信息,就利用得到的IP地址進行通訊;如果一直沒有收到RARP服務器的響應信息,表示初始化失敗。

DHCP的工作流程:

在客戶端關機的時候地址是被釋放的了,所以客戶端開機后要重新做地址獲取。地址獲取是通過RARP協議獲取的,所以客戶端廣播請求DHCP服務為其分配一個IP地址。分以一下4個步驟,都是以廣播的方式進行的。

1Client: dhcp discover客戶端發送廣播尋找DHCP服務器

2Server: dhcp offer(IP/netmask, gw)  DHCP服務器端收到廣播報文后會做出響應,提供與客戶端MAC匹配的IP/network,gw

3Clientdhcp request  客戶端選擇DHCP服務器提供的IP后,要發出一個廣播說采用了哪個IP。假如采用了DHCP服務器1的提供的IP,那么這台服務器就要在地址池中刪除這次被采用的地                                                 址。而沒有被采用的IP,DHCP服務器會回收過來 

                                             (有兩種情況:1:多台DHCP服務器同時響應客戶端的廣播請求為客戶端提供IP,2:客戶端MAC相匹配的IP已經被占用)

4Server: dhcp ack DHCP  被選定地址的服務器確認

 

續租:是以單播的方式

Client: dhcp request   客戶端直接給DHCP服務器發送請求采用續租的地址

服務器的響應分兩種情況,一種是響應並續租地址,一種的拒絕續租

Server: dhcp ack        服務器端響應,

       Server: dhcp nak       DHCP服務器拒絕續租,如果DHCP服務器拒絕續租,有可能DHCP服務器上的地址范圍被修改了,客戶端請求續租的地址不在此范圍內

 

假如公司的網絡做了兩個區域,一個區域是財務,另一個區域是技術部門,彼此之間使用路由器鏈接。在財務部門的網絡區域中提供了一台DHCP服務器,所以財務部門獲取IP地址是沒有問題。但技術部門如何獲取IP地址?由於路由器是廣播報文的屏障,所以財務部門這邊的DHCP服務器是無法收到技術部門的客戶端發送的廣播。那么如何才能讓DHCP服務器為技術部門的客戶端分配地址呢?由於DHCP協議是可以被中繼的,但是需要路由器開啟中繼功能,即路由器在右側網絡接口上安裝一個提供DHCP服務的程序,這里稱為A,監聽在某個接口上接收技術部門客戶端的請求並分配地址。所以技術部門的客戶端廣播的時候路由器的A是可以接收到廣播報文的。但路由器是沒有DHCP功能的,所以路由器在收到報文后會定向單播給財務部門的DHCP服務器,DHCP服務器收到路由器的報文后,會定向把響應報文定向單播給路由器,路由器接收響應報文后再有A把此報文廣播給技術部門的客戶端。技術部門的客戶端接收到IP地址后會再廣播一個request,路由器接會把這個廣播報文封裝后再次單播給DHCO服務器。DHCP服務器接收到報文后再次單播給路由器,路由器A再次廣播給技術部門的客戶端。

問題:

1、DHCP服務器本身有地址,同時DHCP服務器自己的地址是不能動態分配的。

2、DHCP服務器應該跟財務部門一體。首先先滿足財務部門客戶端的需求,才能提供其他網絡提供DHCP服務。

為每一個網絡提供地址服務的功能稱為作用域。所謂作用域就是能夠為哪些網絡提供地址池列表,從而能夠完成地址分配。首先保證本地作用域,才能為其他網絡提供。

 

Linux DHCP協議的實現程序:dhcp, dnsmasq

dnsmasq既可以配置成DNS轉發器又可以作為DHCP server使用

# yum info dnsmasq

Dnsmasq is lightweight, easy to configure DNS forwarder and DHCP server.
: It is designed to provide DNS and, optionally, DHCP, to a small network.
: It can serve the names of local machines which are not in the global
: DNS. The DHCP server integrates with the DNS server and allows machines
: with DHCP-allocated addresses to appear in the DNS with names configured
: either in each host or in a central configuration file. Dnsmasq supports
: static and dynamic DHCP leases and BOOTP for network booting of diskless
: machines.

Linux也可以充當DHCP中繼器

 

# yum install dhcp     //提供了兩個守護進程,dhcp服務器和dhcp中繼器,且二者取其一

/etc/dhcp/dhcpd.conf      //配置文件
/etc/dhcp/dhcpd6.conf
/etc/dhcp/scripts
/etc/dhcp/scripts/README.scripts
/etc/openldap/schema/dhcp.schema
/etc/sysconfig/dhcpd
/usr/bin/omshell
/usr/lib/systemd/system/dhcpd.service 
/usr/lib/systemd/system/dhcpd6.service
/usr/lib/systemd/system/dhcrelay.service
/usr/sbin/dhcpd      -->   /etc/rc.d/init.d/dhcpd(centos6)   //啟動進程
/usr/sbin/dhcrelay  -->   /etc/rc.d/init.d/dhcrelay     //中繼器不需要配置文件

 

如何配置使用DHCP

# cat /etc/dhcp/dhcpd.conf   //是一個空文件

#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example   //這里有一個模板
# see dhcpd.conf(5) man page
#

# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf    //把模板copy過來用

# vim /etc/dhcp/dhcpd.conf

在dhcpd.conf配置文件中:如果定義了多個option,那么范圍最小的option優先級最高

subnet {   //每一個subnet用來定義一個子網,在windows中叫作用域,所以地址池就是在子網中定義的,每一個地址再分配是,額外的屬性如網關、DNS服務器等都

    ...    //通過option指定,而option既可以放在subnet之外也可以放在subnet之內,如果option放在subnet之外,則全局有效,對每一個subnet都有效。

}

host {     //固定分配給某一個主機的保留地址,有些主機來請求IP地址,都期望使用固定地址,這個地址不在地址池中,而是額外保留給某個主機使用

    ...

}

share-network {  //超級作用域,把多個對應的地址網段在同一個池中進行同一分配

#option指明除了地址和掩碼以外分配的其他屬性,既可以定義在全局位置,也可以定義在subnet中

option domain-name "example.org";   //搜索域,比如在主機上#ping www,這時候是不通的,如果在此處定義了搜索域,他會在www后面自動補全的
option domain-name-servers ns1.example.org, ns2.example.org;   //域名服務器,如果是域名,則需要先把域名轉換成IP地址,再分配給客戶端,因為客戶端本來就沒有域名服務器指向,沒辦法解析

#全局配置選項

default-lease-time 600; //默認租約期限,單位是秒鍾,比如改為1天86400,后面必須是分號結尾

max-lease-time 7200; //最大租約期限

log-facility local7;  //日志

 

subnet 10.152.187.0 netmask 255.255.255.0 {    //先滿足本子網,再服務其他網段。這里是為10.152.187.0分配IP地址,注意:這里定義的網絡一定是配置文件當前主機所在的網絡

range  10.152.187.120 10.152.187.130;     //指明起始地址和結束地址,叫地址池,這里一共定義了10個地址

}

 

對本機的dhcpd.conf進行修改

option domain-name "dongshi.com";
option domain-name-servers 8.8.8.8,8.8.4.4;

default-lease-time 86400;
max-lease-time 86400;

log-facility local7;

  subnet 192.168.184.0 netmask 255.255.255.0 {
     range 192.168.184.130 192.168.184.160;
  }

 

:.,$s/^[^#]/#/g     //然后把后面的不以#開頭的內容加上#號

# systemctl start dhcpd   //  啟動

監聽在udp的67號端口

在另外一個主機上進行測試

# dhclient -d  //用另一個主機以工作於前台的方式動態獲取地址,dhclient進程只能啟動一次

此時綁定的192.168.184.130是可以登錄的,客戶端監聽在68號端口上

如何知道DHCP服務器把地址分配給哪個主機?

# cat /var/lib/dhcpd/dhcpd.leases   //記錄了DHCP的租約位置

# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.2.5

server-duid "\000\001\000\001#\260\371l\000\014)\316\370\004";

lease 192.168.184.130 {             //130地址被分配到MAC地址是最下面一行的主機
  starts 6 2018/12/22 13:41:57;     //租約的起始時間
  ends 0 2018/12/23 13:41:57;       //租約的到期時間
  cltt 6 2018/12/22 13:41:57;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 00:0c:29:67:09:fe;    //被分到IP地址的主機的MAC地址
}
lease 192.168.184.145 {
  starts 6 2018/12/22 13:47:32;
  ends 0 2018/12/23 13:47:32;
  cltt 6 2018/12/22 13:47:32;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 00:0c:29:cf:00:6b;
}

 在node2上查看綁定的地址

在node3上查看綁定的地址

如何分配網關呢?

# vim dhcpd.conf   //編輯配置文件指定網關

option domain-name "dongshi.com";
option domain-name-servers 8.8.8.8,8.8.4.4;
option routers 192.168.184.141; //添加此行,放在這里是全局使用,如果有subnet的話,也可以把option放在指定的subnet中,一般routers都是定義在subnet中

# systemctl restart dhcpd

再在node2上查看網關,依然沒有,因為dhclient功能有限,所以在設置node2網絡采用內部網關通道,自定義下的VMnet2

這里未能實驗成功

如何指定DNS服務器?

在/etc/dhcp/dhcpd.conf配置文件中已經定義了

可以在利用動態獲取IP地址的主機進行查看

# cat /etc/resolv.conf   //這個文件是自動覆蓋的

如果不想使用DHCP服務器端分配的地址,該怎么做?在網卡設備的配置文件中進行設置

# vim /etc/sysconfig/network-scripts/ifcfg-eth0

PEERDNS=no   //添加此行,此時再查看#cat /etc/resolv.conf中的就沒有變化  https://www.jianshu.com/p/63153f37158c

當在eth接口啟用DHCP后,本地resolv.conf文件將被修改,resolv.conf文件中的DNS地址將被改為從DHCP獲取到的地址。這種從DHCP獲得的DNS即是Peer DNS。

啟用DHCP后即便修改/etc/resolv.conf,不久又恢復成原樣。如何解決這個問題?此時,你得要在 /etc/sysconfig/network-scripts/ifcfg-eth0 內,增加一行:『PEERDNS=no』,然后重新啟動網絡即可。

其它配置選項:https://www.jianshu.com/p/2cbebcb7a00f

filename:指明引導文件名稱,用於指定PXE的運行程序文件,一般是在TFTP服務器的工作目錄下,這個是關於PXE啟動的配置。流程如下:

    1. 客戶機通過網絡啟動,一般采用的就是intel的PXE來啟動;

    2. PXE首先指定DHCP,獲取自身IP地址、TFTP服務器或者NFS服務器的IP地址、PXE程序等內容;

    3. 執行獲取的PXE程序,獲得詳細配置內容,再獲取linux虛擬系統和intrid等內容;

    4. 最后加載整個linux系統到內核。

next-server server-name(一般是IP):客戶端啟動后,獲得了IP地址,會加載引導文件,這里就定義提供引導文件的服務器IP地址,默認是0.0.0.0

       group {
         filename "Xncd19r";      //指明文件名,一般是絕對路徑
         next-server ncd-booter;  //指明主機,即通過ncd-booter主機加載Xncd19r文件,注意:這個主機通常是TFTP server

         host ncd1 { hardware ethernet 0:c0:c3:49:2b:57; }
         host ncd4 { hardware ethernet 0:c0:c3:80:fc:32; }
         host ncd8 { hardware ethernet 0:c0:c3:22:46:81; }
       }

如何提供TFTP服務器

TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議)是TCP/IP協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,提供不復雜、開銷不大的文件傳輸服務。端口號為69。

TFTP是一個傳輸文件的簡單協議,它基於UDP協議而實現,但是我們也不能確定有些TFTP協議是基於其它傳輸協議完成的。此協議設計的時候是進行小文件傳輸的。因此它不具備通常的FTP的許多功能,它只能從文件服務器上獲得或寫入文件,不能列出目錄,不進行認證,它傳輸8位數據。

# yum install tftp-server

# rpm -ql tftp-server        //查看安裝文件

/etc/xinetd.d/tftp      //配置文件,超級進程管理下的一個瞬時守護進程
/usr/lib/systemd/system/tftp.service   //啟動腳本
/usr/lib/systemd/system/tftp.socket
/usr/sbin/in.tftpd      //啟動程序
/usr/share/doc/tftp-server-5.2
/usr/share/doc/tftp-server-5.2/CHANGES
/usr/share/doc/tftp-server-5.2/README
/usr/share/doc/tftp-server-5.2/README.security
/usr/share/man/man8/in.tftpd.8.gz
/usr/share/man/man8/tftpd.8.gz
/var/lib/tftpboot

由於in.tftpd進程是一個超級進程管理下的瞬時守護進程,如果在centos6上啟動,需要做以下工作

# chkconfig tftp on

# service xinetd restart

# netstat -unlp  //就可以看到

在centos7上進行配置

# vim /etc/xinetd.d/tftp    //編輯配置文件

# default: off
# description: The tftp server serves files using the trivial file transfer \
#   protocol.  The tftp protocol is often used to boot diskless \
#   workstations, download configuration files to network-aware printers, \
#   and to start the installation process for some operating systems.
service tftp
{
    socket_type     = dgram
    protocol        = udp 
    wait            = yes 
    user            = root
    server          = /usr/sbin/in.tftpd
    server_args     = -s /var/lib/tftpboot
    disable         = no    //此處改為no
    per_source      = 11
    cps         = 100 2
    flags           = IPv4
}

# systemctl restart xinetd   //重新啟動守護進程

Failed to restart xinetd.service: Unit not found.  //如果顯示此錯誤信息

# yum -y install xinetd     //安裝此程序

# service xinetd restart   //也可以直接在centos7上使用centos6的啟動服務命令
   Redirecting to /bin/systemctl restart xinetd.service  

# vim /etc/xinetd.d/tftp   //在centos7中修改此文件

disable     =yes   //此處改為yes

# service xinetd restart    //重新啟動守護進程

# systemctl start tftp   //此時是無法啟動的,所以依然安裝上面的方法把disable后面的值改為no,再利用# systemctl restart xinetd進行啟動

# rpm -ql tftp-server   //對應目錄下有

/var/lib/tftpboot   //提供文件訪問的根目錄,文件映射的根目錄,即通過tftp server訪問的所有文件都在這個目錄下

# cp /etc/fstab /var/lib/tftpboot/    //將fstab文件復制到此目錄下,然后利用另外一台主機訪問tftp server,查看此目錄下的的文件

# yum install tftp   //適用192.168.184.142進行訪問,但首先需要在此主機上安裝tftp客戶端程序包

tftp [ options... ] [host [port]] [-c command]   //通過man文檔可以看出是指明主機和端口即可

# tftp 192.168.184.141   //這里指指明主機IP,使用get下載文件后,直接退出,可以在根目錄即/root目錄下看到下載的文件

 

以上就是TFTP server的配置和使用,非常簡單

PXE配置和使用

重要:https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/installation_guide/index

 

PEX:Preboot eXecution Environment    wiki.archlinux.org/index.php/PXE_(簡體中文)   zh.wikipedia.org/wiki/預啟動執行環境

PXE可以讓客戶端從服務器端加載域引導啟動文件即DHCP服務器上指定的filename文件,把這個文件下載到客戶端本地,並基於這個文件引導啟動客戶端操作系統。

依賴於dhcp服務(提供地址),tftp服務(提供文件),yum源(提供操作系統的安裝文件,可以是ftp服務或http服務)

預啟動執行環境也被稱為預執行環境,提供了一種使用網絡接口(Network Interface)啟動計算機的機制。這種機制讓計算機的啟動可以不依賴本地數據存儲設備(如硬盤)或本地已安裝的操作系統。

通過使用像網際協議(IP)、用戶數據報協議(UDP)、動態主機設定協定(DHCP)、小型文件傳輸協議(TFTP)等幾種網絡協議全局唯一標識符(GUID)、通用網絡驅動接口(UNDI)、通用唯一識別碼(UUID)的概念並通過對客戶機(通過PXE自檢的計算機)固件擴展預設的API來實現目的。

PXE客戶機(client)這個術語是指機器在PXE啟動過程中的角色。一個PXE客戶機(client)可以是一台服務器、桌面級計算機、筆記本電腦或者其他裝有PXE啟動代碼的機器。

協議

PXE 協議大致上結合了DHCP和TFTP,雖然都有在兩者上面有改進。DHCP用於查找合適的啟動服務器,TFTP用於下載初始引導程序和附加文件。

為了開始一個PXE自檢會話,PXE固件廣播一個帶有明確的PXE選項DHCPDISCOVER包(擴展DHCPDISCOVER)到67/UDP端口(DHCP服務端口)。PXE選項是PXE固件有PXE能力的鑒定,但是會被一般的DHCP服務忽略。當固件受到從這樣的服務受到DHCPOFFER包時,它會通過要求其提供配置信息來自我配置。

DHCP代理

當PXE重定向服務(DHCP代理)收到一個擴展DHCPDISCOVER 包時,它會通過發送一個帶有明確的PXE選項DHCPDISCOVER包到PXE客戶機的68/UDP端口 (DHCP 客戶機端口)來回答。 一個擴展DHCPDISCOVER包主要包含:

    • 一個PXE發現控制領域,以決定是使用多播廣播(網路)單播來聯系PXE啟動服務器。
    • 一個列出可用的PXE啟動服務器類型的地址表。
    • 一個代表每個PXE啟動服務器類型的條目單。
    • 一個帶有提示用戶按下哪一個鍵來看到啟動菜單的PXE啟動菜單
    • 一個超過多長時間就啟動第一啟動菜單的超時數值。

一個DHCP代理服務可能在相同的主機上運行一個標准的DHCP服務器。盡管兩個服務不可以共享67/UDP 端口,DHCP代理服務在4011/UDP 端口上運行,要求從客戶端來的DHCPDISCOVER 包變成DHCPREQUEST 包。標准DHCP服務在其發送的DHCPOFFER 包中加入特殊的PXE 選項組合,這樣PXE客戶端知道可以在同一個主機的 4011/UDP 端口找到一個DHCP代理服務。

聯系啟動服務

和一個正在啟動系統的啟動服務聯系必須有一個IP地址(可能來自DHCP服務)。

通過多播單播一個帶有特殊的PXE選項的 DHCPREQUEST 包(擴展DHCPREQUEST包)到 4011/UDP端口,或者廣播(網路)這種包到 67/UDP端口。這種包包含有PXE啟動服務類型和PXE啟動層,一個守護進程允許運行多個啟動服務類型。 一個擴展 DHCPREQUEST包可能是一個DHCPINFORM包。

配置實例(環境是:centos7)

首先准備DHCP服務器,並指明通過那台服務器讓客戶端加載所需要用到的引導文件,通過網絡引導Linux安裝的文件叫pxelinux.0,由syslinuxe提供

# yum install syslinux   //需要安裝

# rpm -ql syslinux | grep -w pxelinux.0

/usr/share/syslinux/pxelinux.0  //需要把這個文件復制到tftp的所能夠提供文件的目錄里面去,即上面講到的/var/lib/tftpboot

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

另外

需要把發行版操作系統所提供的光盤提供的isolinux和/images/pxeboot目錄中的文件復制到/var/lib/tftpboot目錄下,三種方法:

1、登錄centos的官方網站,找到yum源,里面有iso目錄

2、使用U盤制作了啟動盤,直接從windows可以看到isolinux和/images/pxeboot文件,可以用ssh復制到虛擬機中。

3、把U盤制作啟動盤或者直接把制作好的光盤掛載到主機上,找到/isolinux和/images/pxeboot目錄 

   https://jingyan.baidu.com/article/6525d4b163d167ac7c2e9443.html

首先把鼠標指向所要掛載的wmvare虛擬機里,插入成功后會有如下顯示

# fdisk -l

# mount /dev/sdb4 /mnt/    //掛載U盤到/mnt目錄下

# cd /mnt   //可以看到/images/pxeboot文件,把此目錄下的initrd.img和vmlinuz文件復制到/var/lib/tftpboot目錄下

 

# cp vmlinuz initrd.img /var/lib/tftpboot/                  //先復制/images/pxeboot目錄下的文件

# cp boot.cat vesamenu.c32 splash.png /var/lib/tftpboot/    //復制isolinux下面的文件

# mkdir /var/lib/tftpboot/pxelinux.cfg                      //創建目錄

# cp isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default    //復制isolinux下面的文件isolinux.cfg到此目錄,並命名為default

下面配置dhcpd.conf文件

# vim /etc/dhcp/dhcpd.conf

subnet 192.168.184.0 netmask 255.255.255.0 { range 192.168.184.160 192.168.184.170; option routers 192.168.184.167;  filename "pxelinux.0"; //引導文件 next-server 192.168.184.141;  }

# systemctl restart dhcpd  //重啟服務

下面新建一個虛擬機

啟動虛擬機,然后選擇Install Centos 7

首先此主機先動態申請IP,

啟動過程完成,如果有kickstart文件的話,就可以直接啟動安裝過程

為了能夠完整的啟動,可以找一台主機(這里是DHCP服務器192.168.184.141)配置為一個web服務器或者ftp服務器來提供yum源

一、       http://hmli.ustc.edu.cn/doc/linux/centos-autoinstall.htm

# yum install httpd

# mkdir /var/www/html/centos7   //可以把剛才配置的U盤掛在至此目錄下,當作本地yum源使用

# mount --bind /mnt/ /var/www/html/centos7/      //因為之前已經把U盤掛載至/mnt目錄下,所以直接用bind至/var/www/html/centos7/   

 

二、

# vim /var/www/html/centos7.cfg   //提供kickstart文件,這個目錄在httpd服務的目錄下

實驗所有ks文件

 

 1 auth --enableshadow --passalgo=sha512
  2 install
  3 url --url="http://192.168.128.131/centos7/"
  4 text
  5 firstboot --disable
  6 firewall --disabled
  7 ignoredisk --only-use=sda
  8 # Keyboard layouts
  9 keyboard --vckeymap=us --xlayouts='us'
 10 # System language
 11 lang en_US.UTF-8
 12 
 13 # Network information
 14 network  --bootproto=dhcp --device=ens33 --ipv6=auto --activate
 15 network  --hostname=localhost.localdomain
 16 reboot
 17 # Root password
 18 rootpw --iscrypted $6$N2EKWmWYNJhq64I6$KgBYf9dG9vPprEDc.DS/fpkqawRS69qqG1sAaJm7BpqcBmafVYX9qU.Zoy7TT/Zp4rK9AC/6ksGvW.GalD.CD/
 19 selinux --disabled
 20 # System services
 21 services --enabled="chronyd"
 22 skipx
 23 # System timezone
 24 timezone Asia/Shanghai
 25 # System bootloader configuration
 26 bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
 27 # Partition clearing information
 28 clearpart --all --initlabel
 29 part /boot --fstype="ext4" --ondisk=sda --size=512
 30 part / --fstype="ext4" --ondisk=sda --size=2850
 31 
 32 %packages
 33 @^minimal
 34 @core
 35 chrony
 36 kexec-tools
 37 
 38 %end
 39 
 40 %addon com_redhat_kdump --enable --reserve-mb='auto'
 41 
 42 %end

對ks.cfg文件進行檢查

# yum -y install pykickstart

[root@node1 html]# pwd
/var/www/html
[root@node1 html]# ksvalidator centos7.cfg    //此處無錯誤輸出表示ks文件沒有問題

可參考KS文件

 

setform=x86, AMD64, 或 Intel EM64T
#version=CentOS7
# Install OS instead of upgrade #全新安裝而不是升級
xconfig --startxonboot
keyboard --vckeymap=cn --xlayouts='cn'
reboot
# Root password
rootpw --iscrypted $1$y10oqPAp$qCWLZ7KzL/QgFYlg3C2R10 #采用加密記錄
#rootpw --plaintext 123456 #采用明文記錄
# System language
timezone Asia/Shanghai
url --url="http://192.168.184.141/centos7" //這里修改為本地yum源的路徑,即httpd服務提供的頁面路徑
lang en_US

network --bootproto=dhcp --device=eth0
# System authorization information #設定NIS信息
auth  --useshadow  --passalgo=123456
# Use text mode install #安裝方式,文本界面,圖形的話graphy
text
firstboot --disable
# SELinux configuration #關閉SELinux
selinux --permissive
# Do not configure the X Window System #不配置X圖形界面
#skipx

# Use NFS installation media #設定安裝方式
#nfs --server=192.168.100.254 --dir=/centos
# Use http installation source
#url --url=http://192.168.100.254/centos/7/
# Network information #采用DHCP獲取IP
#network  --bootproto=dhcp
#reboot
# System timezone
#timezone Asia/Shanghai
# System bootloader configuration
ignoredisk --only-use=sda
bootloader --location=mbr --boot-drive=sda
# Partition clearing information #清除原有分區
clearpart --all
# Disk partitioning information
part / --fstype="xfs" --size=10000
part /boot --fstype="xfs" --size=200
part swap --fstype="swap" --size=8000
part /tmp --fstype="xfs" --grow --size=1

%packages #設定所需要的軟件包,按需要調整
@base #@表示一組軟件包
@network-server
@performance
@system-admin-tools
sdparm
tree
tuned
tuned-utils
ypbind
nfs-utils
vim-enhanced
#-表示從默認軟件包的需要去除的軟件包
-lvm2
-nano
-pcmciautils
-plymouth
-rfkill
-rsync
-system-config-firewall-tui
-system-config-network-tui
-unzip
-vconfig
-wireless-tools
%end #%packages結尾

%pre #預案裝腳本,非必須
date
%end #%pre結尾

%post #安裝后腳本,非必須
cat >>/root/.bashrc <>/etc/fstab
%end #%post結尾rver 3.centos.pool.ntp.org iburst                         

# systemctl restart httpd

# cd /var/lib/tftpboot/

# vim /var/lib/tftpboot/pxelinux.cfg/default //定義剛開始啟動時引導過程顯示的內容的

.......
label linux menu label
^Install CentOS 7 kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet ks=http://192.168.184.141/centos7.cfg //在此段添加ks=,但是此處是之前用USB安裝的文件,需要對此做一下修改,不然會出錯
.......

# systemctl restart xinetd

# systemctl restart dhcpd

# sync

此時dhcp服務器192.168.184.141主機掛載的U盤一直在持續閃爍,表示在工作,但是此次實現沒有完成,應該是kickstart沒有配置正確,待后續

總結上述步驟

PXE:preboot execute environment, Intel

dhcp, tftp, file server(yum repository)

 

CentOS 6 PXE:

yum -y install syslinux tftp-server

 

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

cp /media/cdrom/images/pxelinux/{vmlinuz,initrd.img} /var/lib/tftp/boot/

cp /media/cdrom/isolinux/{boot.cfg,vesamenu.c32,splash.png} /var/lib/tftp/boot/

mkdir /var/lib/tftpboot/pxelinux.cfg/

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

 

以上配置是centos6的,下面配置自動安裝的另外一種方法是centos7的,基於以上的配置進行修改

把cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/復制的文件刪除掉

# rm -f boot.cat splash.png vesamenu.c32    //刪除之前復制的文件

# cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/   //復制新的文件到此目錄下,大小寫無所謂

# vim /var/lib/tftpboot/pxelinux.cfg/default   可以參考這個目錄  # cat /mnt/isolinux/isolinux.cfg

:.,$d     //內容全部刪除並添加新配置

default menu.c32
    prompt 0   
    timeout 30       //等待用戶選擇的時間
    MENU TITIL CentOS 7 PXE Menu   //顯示菜單

    LABEL centos7
    MENU LABEL Install Centos7 x86_64
    KERNEL vmlinuz       //指明內核文件
    APPEND initrd=initrd.img inst.repo=http://192.168.184.141/centos7 ks=http://192.168.184.141/centos7.cfg  //inst.repo指安裝時使用的yum源,centos7.cfg就是kickstart文件

 

以上配置好之后就可以重新啟動虛擬機了

 

此處出現了/dev/root does not exist錯誤,是因為本次的iso文件是制作U盤啟動后,U盤里面的文件,所以isolinux.cfg(即default)文件中啟動是從U盤啟動的,而不是從linux硬盤啟動的,所以需要更改

參考文章:

https://funcptr.net/2015/07/08/cobbler-with-centos-7-failure-to-boot/kickstart/

https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/installation_guide/sect-kickstart-syntax

http://hmli.ustc.edu.cn/doc/linux/centos-autoinstall.htm

#vim /var/lib/tftpboot/pxelinux.cfg/default   //修改此文件

........
 61 label linux
 62   menu label ^Install CentOS 7
 63   kernel vmlinuz
 64   append initrd=initrd.img ksdevice=bootif lang= kssendmac text ks=http://192.168.128.131/centos7.cfg   //以此為准
 65   #append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet ks=http://192.168.128.131/centos7.cfg
.......

 

總結

CentOS 7 PXE:

yum -y install syslinux tftp-server

 

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

cp /media/cdrom/images/pxelinux/{vmlinuz,initrd.img} /var/lib/tftp/boot/

cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/

mkdir /var/lib/tftpboot/pxelinux.cfg/

 

創建/var/lib/tftpboot/pxelinux.cfg/default

以上適合於centos7

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM