前言

是一个测试向的Demo,在实验环境中改改还是可以用的,有助理解PXE服务器的原理。可以结合PXE服务器原理细节来看,传送门:点这里

软件环境

  • 系统

    • RHEL7
  • 软件
    • Python 27
    • RHEL7 ISO文件

Code

PXE Server所需要的所有服务的配置文件都是以重定向输出的方式来写入。建议在干净的系统中测试。 : )

#!/usr/local/bin/python
#coding=utf8
import commands
import osdef set_network(ipaddr,gateway,dns):"网络设置!"IPADDR = ipaddrGATEWAY = gatewayDNS = dnsif len(IPADDR) != 0 and len(GATEWAY) != 0 and len(DNS) != 0:checkIP1=commands.getstatusoutput('nmcli connection modify eno16777736 ipv4.addresses "%s %s" ipv4.dns "%s" ipv4.method manual connection.autoconnect yes' % (IPADDR,GATEWAY,DNS))checkIP2=commands.getstatusoutput('nmcli connection down eno16777736')checkIP3=commands.getstatusoutput('nmcli connection up eno16777736')if checkIP1[0] == 0 and checkIP2[0] == 0 and checkIP3[0]== 0:print '成功设定IP为%s:' % IPADDRprint '正在关闭防火墙...'return 0else:return 1
def set_firewall():"防火墙设置!"commands.getstatusoutput('systemctl mask ebtables.service')commands.getstatusoutput('systemctl mask iptables.service')commands.getstatusoutput('systemctl stop firewalld.service')return 0
def set_yum(yumDir):"yum源配置!"MKDIR = yumDircheckMkdir=commands.getstatusoutput('mkdir -p %s' % MKDIR)checkMount=commands.getstatusoutput('mount /dev/cdrom %s' % MKDIR)if checkMkdir[0] == 0 and checkMount[0] == 0:checkYum1 = commands.getstatusoutput('printf \'[local-video]\nname=local-video\nbaseurl=file://%s\nenabled=1\ngpgcheck=0\n\' > /etc/yum.repos.d/local.repo' % MKDIR)checkYum2 = commands.getstatusoutput('yum list')if checkYum1[0] == 0 and checkYum2[0] ==0:return 0def set_dhcp(subNet,subMask,subAddrMix,subAddrMax,gateway,ipaddr):SUBMASK = subMaskSUBADDRMIX = subAddrMixSUBADDRMAX = subAddrMaxSUBROUTERS = subRoutersGATEWAY = gatewayIPADDR = ipaddrinDhcp=commands.getstatusoutput('yum install -y dhcp')if inDhcp[0] == 0:print '安装DHCP成功!'checkDhcp=commands.getstatusoutput('printf \'default-lease-time 600;\nmax-lease-time 7200;\nlog-facility local7;\nsubnet %s netmask %s {\n range %s %s;\n option routers %s;\n option broadcast-address 192.168.8.255;\n default-lease-time 601;\n max-lease-time 7201;\n next-server %s;\n filename "/pxelinux.0";\n}\n\' > /etc/dhcp/dhcpd.conf' % (SUBNET,SUBMASK,SUBADDRMIX,SUBADDRMAX,GATEWAY,IPADDR)) commands.getstatusoutput('systemctl restart dhcpd.service')commands.getstatusoutput('systemctl enable dhcpd.service')checkDhcp=commands.getstatusoutput('netstat -lpunt | grep :67')if checkDhcp[0] == 0:return 0else:return 1def set_tftp():"配置tftp"inTftp=commands.getstatusoutput('yum install -y tftp-server')if inTftp[0] == 0:print 'tftp install Successful!'inSyslinux=commands.getstatusoutput('yum install -y syslinux')if inSyslinux[0] == 0:print 'syslinux install Successful!'os.system('cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot')os.system('cp %s/isolinux/vmlinuz %s/isolinux/initrd.img %s/isolinux/boot.msg /var/lib/tftpboot' % (MKDIR,MKDIR,MKDIR))os.system('mkdir /var/lib/tftpboot/pxelinux.cfg')checkTftp=commands.getstatusoutput('printf "default linux\ntimeout 600\ndisplay boot.msg\nmenu clear\nmenu background splash.png\nmenu title Red Hat Enterprise Linux 7.0\nmenu vshift 8\nmenu rows 18\nmenu margin 8\nmenu helpmsgrow 15\nmenu tabmsgrow 13\nmenu color border *\nmenu color sel 0\nmenu color title 0\nmenu color tabmsg 0\nmenu color unsel 0\nmenu color hotsel 0\nmenu color hotkey 0\nmenu color help 0\nmenu color scrollbar 0\nmenu color timeout 0\nmenu color timeout_msg 0\nmenu color cmdmark 0\nmenu color cmdline 0\nmenu tabmsg Press Tab for full configuration options on menu items.\nmenu separator\nmenu separator\nlabel linux\n  menu label ^Install Red Hat Enterprise Linux 7.0\n  kernel vmlinuz\n  append initrd=initrd.img inst.stage2=http://%s/cdrom ks=http://%s/jmilk.cfg quiet\nlabel check\n  menu label Test this ^media & install Red Hat Enterprise Linux 7.0\n  menu default\n  kernel vmlinuz\n  append initrd=initrd.img inst.stage2=hd:LABEL=RHEL-7.0\x20Server.x86_64 rd.live.check quiet\nmenu separator\nmenu begin ^Troubleshooting\n  menu title Troubleshooting\nlabel vesa\n  menu indent count 5\n  menu label Install Red Hat Enterprise Linux 7.0 in ^basic graphics mode\n  text help\n  Try this option out if you\'re having trouble installing\n       Red Hat Enterprise Linux 7.0.\n  endtext\n  kernel vmlinuz\n  append initrd=initrd.img inst.stage2=hd:LABEL=RHEL-7.0\x20Server.x86_64 xdriver=vesa nomodeset quiet\nlabel rescue\n  menu indent count 5\n  menu label ^Rescue a Red Hat Enterprise Linux system\n  text help\n  If the system will not boot, this lets you access files\n       and edit config files to try to get it booting again.\n  endtext\n  kernel vmlinuz\n  append initrd=initrd.img inst.stage2=hd:LABEL=RHEL-7.0\x20Server.x86_64 rescue quiet\nlabel memtest\n  menu label Run a ^memory test\n  text help\n       If your system is having issues, a problem with your\n  system\'s memory may be the cause. Use this utility to\n see if the memory is working correctly.\n  endtext\n  kernel memtest\nmenu separator\nlabel local\n  menu label Boot from ^local drive\n  localboot 0xffff\nmenu separator\nmenu separator\nlabel returntomain\n  menu label Return to ^main menu\n  menu exit\nmenu end\n" > /var/lib/tftpboot/pxelinux.cfg/default' % (GATEWAY,GATEWAY))checkTftp=commands.getstatusoutput('printf "service tftp\n{\n       socket_type             = dgram\n       protocol                = udp\n wait                    = yes\n user                    = root\n        server                  = /usr/sbin/in.tftpd\n  server_args             = -s /var/lib/tftpboot\n        disable                 = no\n  per_source              = 11\n  cps                     = 100 2\n       flags                   = IPv4\n}\n" > /etc/xinetd.d/tftp')os.system('systemctl restart xinetd.service')checkTftpPort=commands.getstatusoutput('netstat -lputn | grep :69')if checkTftpPort[0] == 0:return 0else:return 1def set_http():os.system('mkdir /var/www/html/cdrom')checkMountHtml=commands.getstatusoutput('mount /dev/cdrom /var/www/html/cdrom')commands.getstatusoutput('systemctl restart httpd.service')commands.getstatusoutput('systemctl enable httpd.service')checkHttp=commands.getstatusoutput('netstat -lputn | grep :80')if checkHttp[0] == 0:return 0else:return 1def set_kickstart():kickString='install\nkeyboard \'us\'lnreboot\nrootpw --iscrypted $1$xzjcWSZ/$TKDTy17oHtL9o2PW2X13c/\ntimezone Asia/Shanghai\nurl --url="http://'+GATEWAY+'/cdrom"\nlang zh_CN\nfirewall --disabled\nnetwork  --bootproto=dhcp --device=eth0\nauth  --useshadow  --passalgo=sha512\ngraphical\nfirstboot --disable\nselinux --disabled\nbootloader --location=mbr\nzerombr\nclearpart --all --initlabel\npart /boot --fstype="xfs" --size=200\npart / --fstype="xfs" --size=51200\npart /var --fstype="xfs" --size=10240\npart swap --fstype="swap" --size=4096\npart /tmp --fstype="xfs" --size=10240\n%post\nuseradd -u 9999 jmilk\n%end\n%packages\n@backup-server\n@base\n@compat-libraries\n@core\n@desktop-debugging\n@development\n@dial-up\n@directory-server\n@dns-server\n@file-server\n@fonts\n@ftp-server\n@gnome-desktop\n@guest-agents\n@guest-desktop-agents\n@hardware-monitoring\n@identity-management-server\n@infiniband\n@input-methods\n@internet-browser\n@java-platform\n@kde-desktop\n@large-systems\n@load-balancer\n@mail-server\n@mainframe-access\n@mariadb\n@multimedia\n@network-file-system-client\n@performance\n@postgresql\n@print-client\n@print-server\n@remote-desktop-clients\n@remote-system-management\n@smart-card\n@virtualization-client\n@virtualization-hypervisor\n@virtualization-tools\n@x11\n%end\n'os.system('touch /var/www/html/jmilk.cfg')kickFile=open('/var/www/html/jmilk.cfg','w+')kickFile.writelines(kickString)kickFile.flush()return 0
if __name__ == '__main__':"开始搭建PXE Server"print '网络设置...'while True:ipaddr=raw_input('\033[36;1m请输入你要设定的IP/MASK:\033[0m')     #为Output配色gateway=raw_input('\033[36;1m请输入你要设定的网关:\033[0m')dns=raw_input('\033[36;1m请输入你要设定的DNS:\033[0m')if len(IPADDR) != 0 and len(GATEWAY) != 0 and len(DNS) != 0:check_network = set_network(ipaddr,gateway,dns)if check_network == 0:breakelse:print '\033[31;1m请重新输入正确网络配置...\033[0m'print '关闭防火墙...'while True:check_firewall = set_firewall()if check_firewall == 0:print '防火墙关闭OK!'breakelse:print '防火墙关闭失败...尝试重新关闭...'print '配置yum源...'while True:yumDir=raw_input('请输入你要挂载光盘的目录(绝对路径):')lengthDir=len(yumDir)if lengthDir != 0:check_yum = set_yum(yumDir)if check_yum == 0:print 'yum源配置成功!'breakelse:print 'yum源配置失败,重新输入目录!'else:print '挂载目录不能为空,重新输入目录!'print '搭建DHCP...'while True:ipaddr=raw_input('请输入你的IP地址:')subNet=raw_input('请输入要配置的DHCP子网(subnet):')subMask=raw_input('请输入要配置的DHCP子网掩码:')subAddrMix=raw_input('请输入地址池的最小ip:')subAddrMax=raw_input('请输入地址池的最大ip:')subRouters=raw_input('请输入网关IP:')if subNet != '' and subMask != '' and subAddrMix != '' and subAddrMax != '' and subRuters != '':check_dhcp = set_dhcp(subNet,subMask,subAddrMix,subAddrMax,gateway,ipaddr)if check_dhcp == 0:print 'DHCP running!'breakelse:print 'DHCP 启动失败,请重新输入...'print '搭建tftp...'while True:check_tftp = set_tftp()if check_tftp == 0:print 'tftp running!'breakelse:print 'tftp 启动失败...尝试重新启动...'print '搭建http...'while True:check_http = set_http()if check_http == 0:print 'httpd running!'breakelse:print 'httpd 启动失败...尝试重新启动...'print '正在生成无人值守文件...'check_kickstart = set_kickstart()if check_kickstart == 0:print 'PXE配置完毕!请打开虚拟机测试...'

PythonScript_demo--搭建PXE服务器相关推荐

  1. 搭建Pxe服务器无人听应答全自动网络安装VMWare esxi 6.0系统

    前面我们已经使用CentOS6.7平台搭建了pxe服务器,现在我们利用此服务器继续安装vmware esxi6.0系统的客户机.参阅 http://1130739.blog.51cto.com/112 ...

  2. UEFI调试网络启动-WINDOWS搭建PXE服务器

    这里使用tftpd64搭建此服务器,PXE设置两个服务器: 1.DHCP服务器:用来动态分配IP地址(同时分配子网掩码.网关.TFTP服务器地址.启动文件名.DNS服务器.时间服务器等等). 2.TF ...

  3. 使用tftpd32搭建PXE服务器——从FTP服务器下载内核及INITRD文件

    2019独角兽企业重金招聘Python工程师标准>>> 必备工具 tftpd32-4.5.0 syslinux-6.0.3 vmware workstation 以上工具都可以从网上 ...

  4. debian9.6搭建pxe服务器+preseed,并在虚拟机上测试(完善中)

    首先感谢N(81855776)的帮助,跟他学到了很多. 一,介绍 pxe(preboot execute envionment,预启动执行环境),很多人叫它无盘安装,就是不需要我们平时安装系统用光盘或 ...

  5. 服务器安装系统sles系统,搭建Pxe服务器无人听应答全自动安装SLES11 SP3系统(示例代码)...

    前面我已经介绍了基于CentOS6.7的平台搭建的pxe服务器,今天我们利用此pxe服务器继续安装部署SLES11 SP3系统的客户机.参考http://1130739.blog.51cto.com/ ...

  6. 服务器推送系统安装,搭建PXE服务器,推送安装linux系统

    搭建环境: 推送服务器: Ip:192.168.189.138 系统:CentOS 5.8 推送系统:RHEL 5.4 1:配置dhcpd服务. 如果没有安装dhcpd服务,请安装: 1 2 3 4 ...

  7. [PXE] Linux(centos6)中PXE 服务器搭建,PXE安装、启动及PXE理论详解

    本篇blog主要讲述了[PXE] linux(centos)PXE无盘服务器搭建,安装,启动及pxe协议详解 , Kickstart (PXE+DHCP+TFTP+HTTP). PXE环境概述 作为中 ...

  8. 搭建pxe远程安装服务器

    目录 一.PXE概述 二.PXE批量部署的优点 三.搭建PXE网络体系所需条件 四.搭建PXE远程安装服务器 1.安装DHCP服务 2.安装tftp 3.准备pxe引导程序 4.安装ftp源 5.配置 ...

  9. 搭建PXE装机服务器(实验详解)

    文章目录 概述 优点 搭建需要满足的条件 搭建 PXE 远程安装服务器 1.安装并启用 TFTP 服务 安装TFTP服务 修改TFTP服务的配置文件并启动 2.安装并启用 DHCP 服务 安装DHCP ...

最新文章

  1. c语言sprt的程序怎么用,sqrt函数在c语言中怎么用?
  2. ds证据理论python实现_你好,Julia!再见,Python!
  3. private static final long serialVersionUID = 1L;详解
  4. Hello Blazor:(8)启用深色模式
  5. C#正则_取出标签内的内容(非贪婪)
  6. 利用SqlBuikCopy实现数据批量写入
  7. dispatch类 java_WebWork2中ServletDispatch类中的service方法
  8. spring2中jpa的配置和使用
  9. 什么是二维码?为什么需要一个二维码?
  10. 我的小感悟(个人愚见)
  11. 爸妈老了而我还未长大--《Coraline》观后感
  12. Matplotlib饼图实例
  13. DB2根据指定列筛选重复数据
  14. 暑期实训二20220621
  15. python牛顿法解非线性方程组_用牛顿迭代法解非线性方程组
  16. IPv9 或许又是一个虚头!
  17. linux 虚拟机大量udp请求失败_linux遭受UDP攻击解决办法
  18. 我的世界java版如何装mod_我的世界mod怎么安装图文教程
  19. 网络营销常用的几种策略
  20. linux 查询文件大小大于1g_Linux文件的常用操作命令

热门文章

  1. python invalid type promotion_17个新手常见Python运行时错误
  2. oracle中查看pga大小,oracle调整sga、pga大小
  3. mysql 集群切换_完美起航-MySQLMHA高可用集群部署及故障切换(图文详解)
  4. 脑与神经类开放数据库汇总
  5. Ultrahaptics公司为Holodeck型触觉关闭了2300万美元的资金回合
  6. Android Bluetooth模块学习笔记
  7. 全球第三位艾滋病痊愈者出现,靠脐带血干细胞新疗法抵抗病毒,此前已患病9年...
  8. 2019诺贝尔生理学\医学奖率先颁出!英美3学者加冕,揭秘血与氧关系,抗击肿瘤和癌症...
  9. 吴恩达团队发起X射线AI诊断竞赛,这家中国公司登上了榜首
  10. File ipython-input-20-ac8d4b51998e