美文网首页日常笔记
PXE部署安装Linux系统

PXE部署安装Linux系统

作者: Lisong | 来源:发表于2017-05-13 23:41 被阅读230次

pxe需要的软件

DHCP、TFTP、VSFTP/httpd、syslinux

DHCP : 分配网络参数 如 IP、子网掩码
TFTP :简单的文件传输协议,提供tftp服务器 
syslinux : 提供pxe 启动镜像
vsftp/httpd : 提供,网络安装的资源

目录结构

lpxelinux.0     可使用http和ftp协议,传输内核文件vmlinuz和最小化系统文件initrd
pxelinux.0       则必须使用tftp协议,传输内核文件vmlinuz和最小化系统文件initrd
vmlinuz文件:       是一个可引导的、压缩的内核映像文件vmlinuz,"vm"代表"Virtual Memory",Linux支持虚拟内存,能够使用硬盘空间作为虚拟内存,因此得名“vm”。
initrd.img文件:    是一个最小化的Linux系统initrd.img,在内核vmlinuz启动之后,加载initrd.img,从而安装其中的驱动

/web/repo               web根目录
/web/tftp/syslinux      tftp根目录
ks.cfg                  应答文件
default                 菜单文件

/web
└── repo
│    ├── centos
│    │    └──6.8
│    │    │   └───x86_64
│    │    │         ├──*
│    │    │         └──ks.cfg
│    │    └──7.2
│    │    │   └──x86_64
│    ├── othon
└── tftp
     └── syslinux
          ├──*
          └──pxelinux.cfg
              └── default

配置YUN

准备工作

如何查看服务器的系统版本

/usr/bin/python -c 'import yum, pprint; yb = yum.YumBase(); pprint.pprint(yb.conf.yumvar, width=1)'

创建目录结构

mkdir -p /web/repo/{centos/{6.8/x86_64,7.2/x86_64},other}
yum install tree -y && tree /web/repo

将光盘的数据导入到对应的目录中

df
cp -Rfv /dvd/* /web/repo/centos/6.8/x86_64/

Centos 6.8 两张光盘数据处理:

先将 CentOS 6.8 x86_64 DVD1光盘文件,拷贝到/web/repo/centos/6.8/x86_64/目录中
cp -Rfv /dvd/* /web/repo/centos/6.8/x86_64/
再将 CentOS 6.8 x86_64DVD2光盘文件中的Packages目录中的rpm包,拷贝到/web/repo/centos/6.8/x86_64/Packages/目录中
cp -Rfv /dvd/* /web/repo/centos/6.8/x86_64/Packages

安装 createrepo 工具 <生成光盘数据的repo元数据>

yum install -y createrepo

centos 6.8 生成包组数据

查看包组信息

[root@li-pc x86_64]pwd
/web/repo/centos/6.8/x86_64
[root@li-pc x86_64]# grep -P "comps.xml$" repodata/TRANS.TBL
F D0DF041D.XML;1                                               d0df041d26b67f7e9b5c5828e5126ddbfeb3a998ec8e8426de2d260d8e1215f6-c6-x86_64-comps.xml
[root@li-pc x86_64]# 

生成软件包组数据

createrepo -g repodata/6221039e7e3dabf7d538c76571d82aaf42b6292b8f6fe6cf56b8fcf1cff3d3ab-comps-rhel6-Server.xml

createrepo -g repodata/为grep 查到的 一长串的字符文件

[root@li-pc x86_64]# createrepo -g repodata/d0df041d26b67f7e9b5c5828e5126ddbfeb3a998ec8e8426de2d260d8e1215f6-c6-x86_64-comps.xml .
Spawning worker 0 with 6696 pkgs
Workers Finished
Gathering worker results
输入的结果为:
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

使用createrepo 创建第三方的rpm 的repo 元数据

[root@localhost other]# cd /web/repo/other
[root@localhost other]# createrepo .

Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@localhost other]# 

配置TFTP

准备工作

创建: syslinux 文件的tftp根目录,用于tftp传送启动文件

mkdir -p /web/tftp/syslinux/

修改安全上下文

chcon -R -t tftpdir_rw_t /web/tftp/syslinux

安装TFTP软件

yum install -y tftp*

修改tftp配置文件

vim /etc/xinetd.d/tftp

service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /web/tftp/syslinux/    #tftp 共享路径
        disable                 = no  #开启
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

配置开机启动

chkconfig xinetd on

启动服务

service xinetd restart

防火墙允许通过

vi /etc/sysconfig/iptables
-A INPUT -m udp -p udp --dport 69 -j ACCEPT

重新加载防火墙配置文件

service iptables reload

安装syslinux

yum install gcc gcc-c++ nasm libuuid-devel mtools libc.so.6 libc.so.6* syslinux perl -y

cd ~
yum install wget -y     #安装wget 软件

获取syslinux源码包

wget https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.gz    

解压和编译安装syslinux

tar -axf syslinux-6.03.tar.gz
cd syslinux-6.03
make && make install        #编译并安装

备注:syslinux-6.03默认编译安装在</usr/share/syslinux>目录中

将syslinux数据复制到TFTP根目录

\cp -Rf /usr/share/syslinux/* /web/tftp/syslinux/

配置DHCP

安装DHCP

yum install dhcp -y

添加配置

vim /etc/dhcp/dhcpd.conf
option domain-name "test.com";
option domain-name-servers 192.168.100.8,114.114.114.114;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
## 定义:本地作用域
subnet 192.168.100.0 netmask 255.255.255.0 {
    range dynamic-bootp 192.168.100.100 192.168.100.200;
    option routers 192.168.100.1;
    option broadcast-address 192.168.100.255;
    next-server 192.168.100.8;
    filename "/lpxelinux.0";
}

#开机启动dhcpd
chkconfig dhcpd on
#启动dhcpd 服务
service dhcpd restart
#允许dhcp通过防火墙
vi /etc/sysconfig/iptables      
配置:    -A INPUT -m udp -p udp --dport 67 -j ACCEPT
service iptables  reload      #重新加载防火墙配置文件

配置DNS

安装软件

yum install bind* -y

备份dns配置文件

test -e /etc/named.conf.bak && echo "已经存在!" || \cp -rf /etc/named.conf /etc/named.conf.bak

修改 监听端口为any

sed -r -i '/[ \t]*listen-on[ \t]+[ \t]*port[ \t]+/c \\tlisten-on port 53 { any; };' /etc/named.conf
sed -r -i '/[ \t]*allow-query[ \t]+/c \\tallow-query { any; };' /etc/named.conf

添加区域文件

vim /etc/named.rfc1912.zones
zone "test.com" IN {
    type master;
    file "zone.test.com";
    allow-update { none; };
};

配置区域主机记录文件

cat > /var/named/zone.test.com <<EOF
\$TTL    3H
@ IN SOA dns.test.com. 156405304.qq.com. (
                                0
                                1D
                                1H
                                1W
                                3H )
@               IN      NS      dns.test.com.
dns             IN      A       192.168.100.8
pxe             IN      CNAME   dns.test.com.
repo             IN      CNAME   dns.test.com.
EOF

设置防火墙允许通过

vi /etc/sysconfig/iptables
-A INPUT -p tcp --dport 53 -j ACCEPT
-A INPUT -p udp --dport 53 -j ACCEPT
service iptables reload

修改本机的DNS为本服务器

vi /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=127.0.0.1
DNS2=114.114.114.114

重启网络服务

service network restart

开启启动DNS服务

chkconfig named on

开启启动DNS服务

service named restart

配置httpd服务

安装httpd

yum install httpd -y

备份httpd配置文件

test -f /etc/httpd/conf/httpd.conf.bak || \cp -f /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak

sed -r -i -e '/(^[ \t]*#|^[ \t]*$)/d' /etc/httpd/conf/httpd.conf

vi /etc/httpd/conf/httpd.conf

添加如下内容:

ServerName *:80
DocumentRoot "/web/repo"
<Directory /web/repo>
    Options Indexes FollowSymLinks
    IndexOptions Charset=UTF-8
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

修改安全上下文件

chcon -R -t httpd_sys_content_t /web/repo/

注释掉 vim /etc/httpd/conf.d/welcome.conf 欢迎文件中所有的内容,否则,就自动显示欢迎页面了。

开机启动

chkconfig httpd on

服务启动

service httpd restart

允许防火墙通过

vi /etc/sysconfig/iptables
-A INPUT -p tcp -m tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j ACCEPT

重新加载防火墙

service iptables reload

准备ks.cfg自动应答文件

为密码生产Hash值

[root@localhost other]# openssl passwd -crypt root
cuXs2IVTMhUAw

手动创建ks.cfg自动应答文件

创建应答文件

cd /web/repo/centos/6.8/x86_64/
vi ks.cfg

#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
firewall --enabled --ssh
install
url --url="http://192.168.100.8/centos/6.8/x86_64/"  #为安装包网络位置
rootpw --iscrypted TSampmgIqzVWA
auth  --useshadow  --passalgo=sha512
graphical
firstboot --disable
keyboard us
lang zh_CN
selinux --enforcing
logging --level=info
reboot
timezone --isUtc Asia/Shanghai
network  --bootproto=dhcp --device=eth0 --onboot=on
bootloader --location=mbr
zerombr
clearpart --all --initlabel 
part /boot --asprimary --fstype="ext4" --size=500
part swap --fstype="swap" --size=4000
part / --fstype="ext4" --grow --size=1

%packages
@core
@chinese-support
@server-policy
@workstation-policy
%end

准备default网络引导菜单

mkdir -p /web/tftp/syslinux/pxelinux.cfg/

创建引导文件

vim /web/repo/tftp/syslinux/pxelinux.cfg/default

default vesamenu.c32    
timeout 60
display http://pxe.test.com/centos/6.8/x86_64/isolinux/boot.msg
menu background http://pxe.test.com/centos/6.8/x86_64/isolinux/splash.jpg 
menu title Welcome to CentOS 6.8!!!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
label CentOS6.8-Auto
    menu label ^1 Auto-Install CentOS 6.8
    kernel  http://192.168.100.8/centos/6.8/x86_64/isolinux/vmlinuz  repo=http://192.168.100.8/centos/6.8/x86_64/ ip=dhcp  
    append  initrd=http://192.168.100.8/centos/6.8/x86_64/isolinux/initrd.img  ks=http://192.168.100.8/centos/6.8/x86_64/ks.cfg

客户机配置本机yum 源

vi /web/repo/create_lan_yum_repo.sh

#!/bin/bash
rpm -qa | grep redhat-lsb-core || yum install redhat-lsb-core -y
R=`lsb_release -a | awk -F "[: .\t]*" '/Release/{print $2 }'`
case $R in
"6")
echo "本系统是CentOS_$R系列!!!"
cat >/etc/yum.repos.d/lan_centos_dvd.repo<<EOF
    [00-lan-centos6.8_dvd]
    name= LAN-CentOS6.8-DVD
    baseurl=http://repo.test.com/centos/\$releasever.8/\$basearch/
    enabled=1
    gpgcheck=1
    gpgkey="http://repo.test.com/centos/\$releasever.8/\$basearch/RPM-GPG-KEY-CentOS-6"
    [00-lan-other]
    name= LAN-Other-RPM
    baseurl=http://repo.test.com/other
    enabled=1
    gpgcheck=0
    EOF
;;
"7")
echo "本系统是CentOS_$R系列!!!"
cat >/etc/yum.repos.d/lan_centos_dvd.repo<<EOF
    [00-lan-centos7.2_dvd]
    name= LAN-CentOS7.2-DVD
    baseurl=http://repo.test.com/centos/\$releasever.2/\$basearch/
    enabled=1
    gpgcheck=1
    gpgkey="http://repo.test.com/centos/\$releasever.2/\$basearch/RPM-GPG-KEY-CentOS-7"
    [00-lan-other]
    name= LAN-Other-RPM
    baseurl=http://repo.test.com/other
    enabled=1
    gpgcheck=0
    EOF
;;
esac
ll /etc/yum.repos.d
cat /etc/yum.repos.d/00_lan_centos_dvd.repo
yum clean all
yum makecache
yum repolist enable

相关文章

网友评论

    本文标题:PXE部署安装Linux系统

    本文链接:https://www.haomeiwen.com/subject/ejufxxtx.html