热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PXE网络系统部署(自动装机和无人值守)

PXE高效批量网络装机1、部署PXE远程安装服务在大规模的Linux应用环境中,如Web群集、分布式计算等,服务器往往并不配备光驱设备,

PXE高效批量网络装机

1、部署 PXE 远程安装服务
在大规模的 Linux 应用环境中,如 Web 群集、分布式计算等,服务器往往并不配备光驱
设备,在这种情况下,如何为数十乃至上百台服务器裸机快速安装系统呢?传统的 USB 光驱、
移动硬盘等安装方法显然已经难以满足需求。
本章将学习基于 PXE(Preboot eXecution Environment,预启动执行环境)技术的网
络装机方法,并结合 Kickstart 配置实现无人值守自动安装。

上述服务器的批量部署方法,具备以下三个优点:
●规模化:同时装配多台服务器;
●自动化:安装系统、配置各种服务;
●远程实现:不需要光盘、 U 盘等安装介质。

PXE 是由 Intel 公司开发的网络引导技术,工作在 Client/Server 模式,允许客户机通

过网络从远程服务器下载引导镜像,并加载安装文件或者整个操作系统。若要搭建 PXE 网络
体系,必须满足以下几个前提条件。
●客户机的网卡支持 PXE 协议(集成 BOOTROM 芯片),且主板支持网络引导。
●网络中有一台 DHCP 服务器以便为客户机自动分配地址、指定引导文件位置。
●服务器通过 TFTP(Trivial File Transfer Protocol,简单文件传输协议)提供引导镜像文件的下载。

其中,第一个条件实际上是硬件要求,目前绝大多数服务器和大多数 PC 都能够提供此
支持,只需在 BIOS 设置中允许从 Network 或 LAN 启动即可。下面将介绍 PXE 远程安装服务
的基本部署过程。

2、搭建PXE远程安装服务器
本例的 PXE 远程安装服务器集成了 CentOS 7 安装源、 TFTP 服务、 DHCP 服务,能够向客
户机裸机发送 PXE 引导程序、 Linux 内核、启动菜单等数据,以及提供安装文件。

规划:
一台Linux系统搭建服务 20.0.0.254

一台Linux系统做PXE测试 DHCP获取

软件版本:Centos 7.6

####准备 CentOS 7 安装源##
CentOS 7 的网络安装源一般通过 HTTP、 FTP 协议发布,另外也支持 NFS(Network File
System,网络文件系统)协议,关于 NFS 的配置请参阅其他资料,这里不再赘述。
例如,若采用 FTP 协议发布安装源,可以在服务器上部署一个 YUM 软件仓库。

[root@localhost ~]# mkdir -p /var/ftp/centos7
[root@localhost ~]# mount /dev/cdrom /mnt
[root@localhost ~]# cp -rf /mnt/* /var/ftp/centos7
[root@localhost ~]# yum -y install vsftpd
[root@localhost ~]# systemctl start vsftpd
[root@localhost ~]# systemctl enable vsftpd

####注意啦#####
架设ftp一定要关闭防火墙和核心防护


####安装并启用 TFTP 服务###
TFTP 服务由 tftp-server 软件包提供,配置文件位于/etc/xinetd.d/tftp。配置时只
要将“disable = yes”改为“disable = no”,然后启动 TFTP 服务即可。

[root@localhost ~]# yum -y install tftp-server
[root@localhost ~]# vi /etc/xinetd.d/tftp
service tftp
{
####省略部分信息
protocol = udp ###TFTP 采用 UDP 传输协议
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot ###指定 TFTP 根目录
disable = no
####省略部分信息
}

[root@localhost ~]# systemctl start tftp
[root@localhost ~]# systemctl enable tftp
Created symlink from
/etc/systemd/system/sockets.target.wants/tftp.socket to
/usr/lib/systemd/system/tftp.socket.

####准备 Linux 内核、初始化镜像文件#####
用于 PXE 网络安装的 Linux 内核、初始化镜像文件可以从 CentOS 7 系统光盘获得,分
别为 vmlinuz 和 initrd.img,位于文件夹 images/pxeboot 下。找到这两个文件并将其复制
到 tftp 服务的根目录下。

[root@localhost ~]# cd /mnt/images/pxeboot/ ####切换到挂载目录/mntimages/pxeboot/

[root@localhost pxeboot]# cp vmlinuz initrd.img /var/lib/tftpboot/ ###两个文件并将其复制到 tftp 服务的根目录下

####准备 PXE 引导程序####
用于 PXE 网络安装的引导程序为 pxelinux.0,由软件包 syslinux 提供。安装好软件包
syslinux,然后将文件 pxelinux.0 也复制到 tftp 服务的根目录下。

[root@localhost ~]# yum -y install syslinux
[root@localhost pxeboot]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

####安装并启用 DHCP 服务####
由于 PXE 客户机通常是尚未装系统的裸机,因此为了与服务器取得联系并正确下载相关
引导文件,需要预先配置好 DHCP 服务来自动分配地址并告知引导文件位置。如 PXE 服务器
的 IP 地址为 20.0.0.254, DHCP 地址池为 20.0.0.100~20.0.0.200,则可以参考
以下操作来搭建 DHCP 服务器。

[root@localhost ~]# yum -y install dhcp
[root@localhost ~]# vi /etc/dhcp/dhcpd.conf
####省略部分信息#####
subnet 20.0.0.0 netmask 255.255.255.0 {
option routers 20.0.0.254;
option subnet-mask 255.255.255.0;
option domain-name “bdqn.com”;
option domain-name-servers 20.0.0.254,202.106.0.20;
default-lease-time 21600;
max-lease-time 43200;
range 20.0.0.100 20.0.0.200;
next-server 20.0.0.254;
filename “pxelinux.0”;
}

##########################################
subnet 20.0.0.0 netmask 255.255.255.0 {
option routers 20.0.0.254;
option subnet-mask 255.255.255.0;
option domain-name “bdqn.com”;
option domain-name-servers 20.0.0.254,202.106.0.20;
default-lease-time 21600;
max-lease-time 43200;
range 20.0.0.100 20.0.0.200;
next-server 20.0.0.254; #####指定 TFTP 服务器的地址
filename “pxelinux.0”; ####指定 PXE 引导程序的文件名
}
[root@localhost ~]# systemctl start dhcpd
[root@localhost ~]# systemctl enable dhcpd
Created symlink from
/etc/systemd/system/multi-user.target.wants/dhcpd.service to
/usr/lib/systemd/system/dhcpd.service.

从上述过程可以看到,与一般 DHCP 服务不同的是,配置文件中增加了 netx-server 和

filename 这两行记录,分别用来指定 TFTP 服务器的地址和 PXE 引导程序的文件名。

####配置启动菜单文件#####
启动菜单用来指导客户机的引导过程,包括如何调用内核,如何加载初始化镜像。默认
的启动菜单文件为 default,应放置在 tftp 根目录的 pxelinux.cfg 子目录下,典型的启动
菜单配置可参考以下操作手动建立。

[root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@localhost ~]# vi /var/lib/tftpboot/pxelinux.cfg/default


default auto ###指定默认入口名称
prompt 1 ###1 表示等待用户控制
label auto
kernel vmlinuz
append initrd=initrd.img method=ftp://20.0.0.254/centos7
label linux text
kernel vmlinuzd
append text initrd=initrd.img method=ftp://20.0.0.254/centos7
label linux rescue
kernel vmlinuz
append rescue initrd=initrd.img method=ftp://20.0.0.254/centos7

上述配置记录中定义了三个引导入口,分别为图形安装(默认)、文本安装、救援模式。

其中, prompt 用来设置是否等待用户选择; label 用来定义并分隔启动项; kernel 和 append
用来定义引导参数。引导入口的个数及内容根据需要自行定义。例如,实现无人值守安装时
只需要一个入口就够了。

####验证 PXE 网络安装####

搭建好 PXE 远程安装服务器以后,就可以使用客户机进行安装测试了。对于新购买的服
务器或 PC 裸机,一般不需要额外设置;若要为已有系统的主机重装系统,则可能需要修改
BIOS 设置,将“Boot First”设为“NETWORK”或“LAN”,然后重启主机;若使用 VMware
创建的虚拟机进行测试,虚拟机内存至少需要 2GB,否则在启动安装时会报错。
如果服务器配置正确,网络连接、 PXE 支持等都没有问题,则客户机重启后将自动配
置 IP 地址,然后从 TFTP 服务器中获取引导程序 pxelinux.0,并根据引导菜单配置提示用
户指定启动入口,

在提示字串“boot:”后直接按 Enter 键(或执行“auto”命令),将会进入默认的图形
安装入口;若执行“linux text”命令,则进入文本安装入口;若执行“linux rescue”命
令,则进入救援模式。
直接按 Enter 键确认后将自动通过网络下载安装文件,并进入图形安装程序界面,如图
6.2 所示。若能够成功到达这一步,说明 PXE 网络安装基本成功。后续安装步骤与使用光盘
的正常安装类似,这里不再叙述。

3、实现 Kickstart 无人值守安装

通过 PXE 技术远程安装 CentOS 7 系统的方法,安装介质不再受限于光盘、

移动硬盘等设备,大大提高了系统安装的灵活性。然而,安装期间仍需要手动选择语言、键
盘类型、指定安装源等一系列交互操作,当需要批量安装时非常不方便。
本节将进一步学习如何实现无人值守自动安装,通过使用 Kickstart 工具配置安装应答
文件,自动完成安装过程中的各种设置,从而无须手动干预,提高网络装机效率。

#####准备安装应答文件####
在 CentOS 7 系统中安装 system-config-kickstart 工具之后,即可通过图形化向导工
具来配置安装应答文件。如果用户对自动应答文件的配置比较熟悉,也可以直接编辑 CentOS
7 安装后自动创建的应答文件(/root/anaconda-ks.cfg),根据需要适当修订后使用。

[root@localhost ~]# yum -y install system-config-kickstart

####配置安装应答参数####
通过桌面菜单“应用程序”→“系统工具”→“Kickstart”即可打开“Kickstart 配
置程序”窗口。在“Kickstart 配置程序”窗口中,可以针对基本配置、安装方法、引导装
载程序选项、分区信息、网络配置等各种安装设置进行指定
########基本配置##########

基本配置:
默认语言:Chinese (P.R. of China)—中文(简体)
键盘:U.S English
时区:Asia/Shanghai
Root密码:Abc123
默认密码:Abc123
勾选√:给root密码加密
高级配置:
目标架构:X86、AMD64、活IntelEm64T
勾选√:安装后重启
不勾选:在文本模式中执行安装(默认为图形化模式)

########安装方法##########
安装方法:
勾选√:执行全新安装

安装方法:
勾选√:FTP
FTP服务器:ftp://20.0.0.254
FTP目录:centos

########引导装载程序选项######
安装类型:
勾选√:安装新引导装载程序

########分区信息##########
在“分区信息”界面中,需正确规划硬盘分区方案。例如,可划分一个 500MB 的/boot
分区、 4GB 的/home 分区、 2GB 的 swap 分区,将剩余空间划分给根分区

/boot xfs 是 500
/home xfs 是 4096
swap swap 是 2048
/ xfs 是 1
########################

#####网络配置及防火墙配置####
在“网络配置”界面中,添加一个网络设备“ens33”,将网络类型设为“DHCP”。
在“防火墙配置”界面中,可以选择禁用 SELinux、禁用防火墙。
#####软件包选择#####
CentOS 7 系统开始不再提供软件包的选择,如图 6.6 所示。如果需要安装软件包,可
以根据需要将/root/anaconda-ks.cfg 的软件包安装脚本复制到 ks.cfg 文件中,只需要复
制%packages 到%end 部分即可,在%packages 到%end 之间,包含以@开头的软件包列表,将
不需要的软件名删除,剩下的就是系统会自动安装的软件包。例如,仅保留以下内容即为采
用最小化安装


%packages
@^minimal
%end


###安装脚本###
在“预安装脚本”界面、“安装后脚本”界面中,可以分别添加在安装前、安装后自动
运行的可执行语句。此项设置使服务器的自动化配置变得更加容易。例如,可以使客户机在
完成安装后自动设置 YUM 软件仓库,如图 6.7 所示。需要注意的是,应确保所编写的代码能
够正确执行,以免安装失败。

###其他信息###
若没有特殊需求,在“验证”界面、“显示配置”界面中,保持默认设置就可以了

####安装脚本后####
勾选√:使用解释程序:/bin/bash
在下面键入您的%post脚本:

rm -rf /etc/yum.repos.d/*
echo -e ‘[base]\nname=CentOS7.6\nbaseurl=ftp://20.0.0.254/centos7\nenabled=1\ngpgcheck=1\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7’>/etc/yum.repos.d/centos7.repo

####保存自动应答文件####
选择“Kickstart 配置程序”窗口的“文件”→“保存”命令,指定目标文件夹、文件
名,将配置好的应答参数保存为文本文件,如/root/ks.cfg。以后若要修改此应答配置,可
以在“Kickstart 配置程序”窗口中打开进行调整,或者直接用 VI 等文本编辑工具进行修改
[root@localhost ~]# grep -v ^# /root/ks.cfg
#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
#Install OS instead of upgrade
install
#Keyboard layouts
keyboard ‘us’
#Root password
rootpw --iscrypted 111shju34zu$daGbX0sh0z8Ru6wGRzQ9h.
#Use network installation
url --url=“ftp://20.0.0.254/centos7”
#System language
lang zh_CN
#System authorization information
auth --useshadow --passalgo=sha512
#Use graphical install
graphical
firstboot --disable
#SELinux configuration
selinux --disabled

#Firewall configuration
firewall --disabled
#Network information
network --bootproto=dhcp --device=ens33
#Reboot after installation
reboot
#System timezone
timezone Asia/Shanghai
#System bootloader configuration
bootloader --location=mbr
#Partition clearing information
clearpart --all --initlabel
#Disk partitioning information
part /boot --fstype=“xfs” --size=500
part /home --fstype=“xfs” --size=4096
part swap --fstype=“swap” --size=2048
part / --fstype=“xfs” --grow --size=1

%post --interpreter=/bin/bash
rm -rf /etc/yum.repos.d/*
echo -e ‘[base]\nname=CentOS7.6\nbaseurl=ftp://20.0.0.254/centos7\nenabled=1\ngpgcheck=1\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7’>/etc/yum.repos.d/centos7.repo
%end

%packages
@^minimal
%end


#############采用手动编辑 #################
[root@localhost ftp]# cat ks.cfg
#version=DEVEL
#Use network installation
url --url=“ftp://20.0.0.254/centos7”
#Use text mode install
text
reboot
#System authorization information
auth --enableshadow --passalgo=sha512
#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=localhost.localdomain

#Root password
rootpw --iscrypted 111M14l7E9w$Hvn1NTMW0uSUpkh99rJUJ1
#System services
services --disabled=“chronyd”
#System timezone
timezone Asia/Shanghai --isUtc --nontp
user --name=ningmeng --password=666HKbLyKFeh5SNc5GQ$1Pu.e/zWxzqcvinnzRw4MylFgX5pkzStRLQp7U5aMgevpXOfWyOOijTDPtju.cY7b/nvtKLnGF0qlV.I4r1vB. --iscrypted --gecos=“ningmeng”
#System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
#Partition clearing information
clearpart --none --initlabel
#Disk partitioning information
part swap --fstype=“swap” --ondisk=sda --size=2048
part /boot --fstype=“xfs” --ondisk=sda --size=1024
part /data --fstype=“xfs” --ondisk=sda --size=10240
part / --fstype=“xfs” --ondisk=sda --size=5000

%packages
@^minimal
@core
kexec-tools

%end

%addon com_redhat_kdump --enable --reserve-mb=‘auto’

%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
####实现批量自动装机####
有了自动安装的应答文件之后,只要将其放置 PXE 安装服务器的 FTP 目录下,并适当修
改引导菜单,就可以实现基于网络的批量自动装机了。

1、启用自动应答文件
在 PXE 远程安装服务器中,将上一节建立的应答文件复制到/var/ftp/centos7 目录下,
使客户机能够通过 ftp://20.0.0.254/centos7/ks.cfg 访问;然后编辑引导菜单文件
default,添加 ks 引导参数以指定 ks.cfg 应答文件的 URL 路径。

[root@localhost ~]# cp /root/ks.cfg /var/ftp/ks.cfg
[root@localhost ~]# vi /var/lib/tftpboot/pxelinux.cfg/default
default auto
prompt 0
label auto
kernel vmlinuz
append initrd=initrd.img method=ftp://20.0.0.254/centos7 ks=ftp://20.0.0.254/ks.cfg

###########
default auto
prompt 0 ###0表示不等待
label auto
kernel vmlinuz
append initrd=initrd.img method=ftp://20.0.0.254/centos7 ks=ftp://20.0.0.254/ks.cfg

2.验证无人值守安装
启用自动应答安装之后,当客户机每次以 PXE 方式引导时,将自动下载 ks.cfg 应答配
置文件,然后根据其中的设置安装 CentOS 7 系统,而无须手工干预,如图 6.8 所示,这样
就可以同时为多台客户机安装系统了。
客户机安装完成以后,检查其 YUM 软件仓库配置,可以发现已经按照“安装后脚本”的
设置自动建立了/etc/yum.repos.d/centos7.repo 文件。

[root@localhost ~]# cat /etc/yum.repos.d/centos7.repo
[base]
name=CentOS7.6
baseurl=ftp://20.0.0.254/centos7
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/ RPM-GPG-KEY-CentOS-7


推荐阅读
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
author-avatar
树缝中间_324
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有