您的当前位置:首页正文

基于python的pxe系统管理方法与设计方案

2020-11-04 来源:爱go旅游网
图片简介:

本技术公开一种基于python的pxe系统管理方法,涉及计算机操作系统技术领域;利用python及

wxpython模块,执行自定义图形界面程序,对pxe系统进行管理:进行相应的添加菜单和修

改菜单选项管理;进行相应的ks文件拷贝;进行相应的测试管理;进行相应的上传os镜像文件管理;利用本技术方法基于python语言,利用wxpython模块来实现来进行PXE管理,可以集成一系列功能,并利用wxpython制作图形界面,减少使用者的工作难度,并降低出错率,而且可跨平台使用,具备python环境即可进行pxe系统的管理。

技术要求

1.一种基于python的pxe系统管理方法,其特征在于利用python及 wxpython模块,执行自定

义图形界面程序,对pxe系统进行管理:

在主界面进行pxe系统的菜单功能添加,进行相应的添加菜单和修改菜单选项管理;在主界面进行pxe系统的ks文件功能添加,进行相应的ks文件拷贝;在主界面进行pxe系统的测试工具功能添加,进行相应的测试管理;

在主界面进行pxe系统的os镜像文件功能添加,进行相应的上传os镜像文件管理。

2.根据权利要求1所述的方法,其特征在于进行ks文件拷贝时,在ks文件功能界面,输入

源ks文件路径和目的ks文件路径,完成拷贝。

3.根据权利要求1或2所述的方法,其特征在于在进行上传os镜像文件管理时,输入包含os

镜像的文件夹,检测当前路径的所有镜像文件,在item中输入镜像序号输,上传镜像文件至指定目录。

4.一种基于python的pxe系统的管理系统,其特征在于所述的管理系统利用python及wxpython模块,执行自定义图形界面程序,对pxe系统进行管理:

在主界面进行pxe系统的菜单功能添加,进行相应的添加菜单和修改菜单选项管理;在主界面进行pxe系统的ks文件功能添加,进行相应的ks文件拷贝;在主界面进行pxe系统的测试工具功能添加,进行相应的测试管理;

在主界面进行pxe系统的os镜像文件功能添加,进行相应的上传os镜像文件管理。

5.根据权利要求4所述的管理系统,其特征在于所述的管理系统进行ks文件拷贝时,在ks

文件功能界面,输入源ks文件路径和目的ks文件路径,完成拷贝。

6.根据权利要求4或5所述的管理系统,其特征在于所述的管理系统在进行上传os镜像文件

管理时,输入包含os镜像的文件夹,检测当前路径的所有镜像文件,在item中输入镜像序号输,上传镜像文件至指定目录。

技术说明书

一种基于python的pxe系统管理方法技术领域

本技术公开一种基于python的pxe系统管理方法, 涉及计算机操作系统技术领域。背景技术

PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过

网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file

transfer protocol)或MTFTP(multicast trivial file transferprotocol)协议下载一个启动软件包到

本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统。而目前pxe管理,需要在linux系统下操作,步骤较繁琐,并且容易出错,对管理人员的专业技能要求较高。而本技术提供一种基于python的pxe系统管理方法, 基于python语言,利用wxpython模块来实现来进行PXE管理,可以集成一系列功能,并利用wxpython制作图形界面,减少使用者的工作难度,并降低出错率,而且可跨平台使用,具备python环境即可进行pxe系统的管理。

wxPython是Python语言的一套优秀的GUI图形库。

技术内容

本技术针对目前技术发展的需求和不足之处,提供一种基于python的pxe系统管理方法,实现图形界面控制,很大程度上降低了对操作人员技术的依赖,降低了管理成本。一种基于python的pxe系统管理方法,利用python及 wxpython模块,执行自定义图形界面程序,对pxe系统进行管理:

在主界面进行pxe系统的菜单功能添加,进行相应的添加菜单和修改菜单选项管理;在主界面进行pxe系统的ks文件功能添加,进行相应的ks文件拷贝;在主界面进行pxe系统的测试工具功能添加,进行相应的测试管理;

在主界面进行pxe系统的os镜像文件功能添加,进行相应的上传os镜像文件管理。所述的方法,进行ks文件拷贝时,在ks文件功能界面,输入源ks文件路径和目的ks文件路径,完成拷贝。

所述的方法,在进行上传os镜像文件管理时,输入包含os镜像的文件夹,检测当前路径的所有镜像文件,在item中输入镜像序号输,上传镜像文件至指定目录。

一种基于python的pxe系统的管理系统,利用python及wxpython模块,执行自定义图形界面程序,对pxe系统进行管理:

在主界面进行pxe系统的菜单功能添加,进行相应的添加菜单和修改菜单选项管理;在主界面进行pxe系统的ks文件功能添加,进行相应的ks文件拷贝;在主界面进行pxe系统的测试工具功能添加,进行相应的测试管理;

在主界面进行pxe系统的os镜像文件功能添加,进行相应的上传os镜像文件管理。所述的管理系统进行ks文件拷贝时,在ks文件功能界面,输入源ks文件路径和目的ks文件路径,完成拷贝。

所述的管理系统在进行上传os镜像文件管理时,输入包含os镜像的文件夹,检测当前路径的所有镜像文件,在item中输入镜像序号输,上传镜像文件至指定目录。本技术与现有技术相比具有的有益效果是:

本技术提供一种基于python的pxe系统管理方法,利用python及 wxpython模块,执行自定义图形界面程序,对pxe系统进行管理:进行相应的添加菜单和修改菜单选项管理;进行相应的ks文件拷贝;进行相应的测试管理;进行相应的上传os镜像文件管理;利用本技术方法基于python语言,利用wxpython模块来实现来进行PXE管理,可以集成一系列功能,并利用wxpython制作图形界面,减少使用者的工作难度,并降低出错率,而且可跨平台使用,具备python环境即可进行pxe系统的管理。附图说明

图1本技术方法流程示意图;图2 本技术主界面示意图;

图3本技术主界面的菜单功能添加示意图;图4本技术主界面的ks文件功能添加示意图;图5本技术主界面的镜像文件上传功能添加示意图。

具体实施方式

本技术提供一种基于python的pxe系统管理方法,利用python及 wxpython模块,执行自定义图形界面程序,对pxe系统进行管理:

在主界面进行pxe系统的菜单功能添加,进行相应的添加菜单和修改菜单选项管理;在主界面进行pxe系统的ks文件功能添加,进行相应的ks文件拷贝;在主界面进行pxe系统的测试工具功能添加,进行相应的测试管理;

在主界面进行pxe系统的os镜像文件功能添加,进行相应的上传os镜像文件管理。同时,提供相对应的一种基于python的pxe系统的管理系统。

为使本技术的目的、技术方案和优点更加清楚明白,以下结合具体实施例,对本技术进一步详细说明。

利用本技术方法,环境准备,安装linux系统,安装python及wxpython模块,准备安装要用到使用的镜像,

执行图形界面程序,实现pxe管理的功能,实现如下:其中主界面主要包含四种功能:参考图2

在主界面进行pxe系统的菜单功能添加,即菜单添加选择add os,跳转至添加菜单和修改菜单选项,参考图3,进行相应的添加菜单和修改菜单选项管理;

在主界面进行pxe系统的ks文件功能添加,即选择add ks, 直接输入源ks文件路径和目标ks文件路径,即可完成拷贝,支持网络拷贝,参考图4;

在主界面进行pxe系统的测试工具功能添加,即选择add tool,添加工具,可自定义测试工具,编写对应的测试脚本,添加到此处,进行相应的测试管理;

在主界面进行pxe系统的os镜像文件功能添加,即选择upload os image, 输入包含系统镜像的文件夹,点击check,会自动检测当前路径的所有镜像文件, 在item中输入镜像序号,点击upload会自动上传镜像文件至指定目录,参考图5进行相应的上传os镜像文件管理。上述过程的主要源代码为:#!/usr/bin/python

# -*- coding:utf-8 -*-import wximport os

class MainFrame(wx.Frame):def __init__(self):

self.rhel_config_file = '/var/lib/tftpboot/images/iauto/rhel.cfg'self.centos_config_file = '/var/lib/tftpboot/images/iauto/centos.cfg'self.suse_config_file = '/var/lib/tftpboot/images/iauto/suse.cfg'wx.Frame.__init__(self,None,-1,\"PXE Support\panel = wx.Panel(self,-1)

btn_os = wx.Button(panel,label='1. add os',pos=(20,5),size=(200,25),style=wx.BU_LEFT)btn_ks = wx.Button(panel,label='2. add ks',pos=(20,40),size=(200,25),style=wx.BU_LEFT)btn_tool = wx.Button(panel,label='3. add tool',pos=(20,75),size=(200,25),style=wx.BU_LEFT)btn_tool = wx.Button(panel,label='4. upload os image',pos=(20,110),size=(200,25),style=wx.BU_LEFT)

btn_os.Bind(wx.EVT_BUTTON,self.addOS)btn_ks.Bind(wx.EVT_BUTTON,self.addKS)

btn_tool.Bind(wx.EVT_BUTTON,self.UploadOS)def UploadOS(self,event):

self.panel_upload = wx.Panel(self,-1,size=(400,300))

sour = wx.StaticText(self.panel_upload,-1,'sour path:',pos=(10,7),size=(80,25))self.sourPath = wx.TextCtrl(self.panel_upload,-1,'',pos=(100,5),size=(200,25))self.btnCheck = wx.Button(self.panel_upload,-1,'Check',pos=(320,5),size=(60,25),style=wx.BU_LEFT)

self.btnCheck.Bind(wx.EVT_BUTTON,self.Check)

dest = wx.StaticText(self.panel_upload,-1,'dest path:',pos=(10,42),size=(80,25))self.destiBox = wx.TextCtrl(self.panel_upload,-1,'/var/www/html/xxx',pos=(100,40),size=(200,25))

os_item = wx.StaticText(self.panel_upload,-1,'Item:',pos=(10,77),size=(60,25))self.itemBox = wx.TextCtrl(self.panel_upload,-1,'Nu.',pos=(100,75),size=(40,25))mount = wx.Button(self.panel_upload,-1,'Upload',pos=(150,75),size=(60,25))mount.Bind(wx.EVT_BUTTON,self.osMount)

self.contents = wx.TextCtrl(self.panel_upload,-1,pos=(10,110),size=(370,80),style=wx.TE_MULTILINE | wx.HSCROLL)

btnEx = wx.Button(self.panel_upload,-1,'Back',pos=(10,200),size=(60,25),style=wx.BU_LEFT)btnEx.Bind(wx.EVT_BUTTON,self.ExitUpload)def ExitUpload(self,event):self.panel_upload.Destroy()

def osMount(self,event):

os_abs_path = self.sourPath.GetValue()+'/'+self.oslist[int(self.itemBox.GetValue())]os.system('mount -o loop '+os_abs_path+' /mnt')os.system('cp -Rpf /mnt/* '+self.destiBox.GetValue())# self.message('OS mount and upload done!')self.message('OS upload done!','upload')os.system('umount /mnt')def Check(self,event):

filelist = os.listdir(self.sourPath.GetValue())self.oslist=[]temp = ''for each in filelist:if 'iso' in each:self.oslist.append(each)for i in range(len(self.oslist)):temp = temp+str(i)+'. '+self.oslist[i]+'\\n'self.contents.SetValue(temp)def addKS(self,event):

self.panel_ks = wx.Panel(self,-1,pos=(10,5),size=(400,300))

sour = wx.StaticText(self.panel_ks,-1,'sour file:',pos=(10,7),size=(60,25))

self.sourBox = wx.TextCtrl(self.panel_ks,-1,'',pos=(80,5),size=(300,25))dest = wx.StaticText(self.panel_ks,-1,'dest file:',pos=(10,42),size=(60,25))

self.destBox = wx.TextCtrl(self.panel_ks,-1,'only path here',pos=(80,40),size=(300,25))self.btnUpload = wx.Button(self.panel_ks,-1,'Send',pos=(10,120),size=(160,25),style=wx.BU_LEFT)

self.btnUpload.Bind(wx.EVT_BUTTON,self.transfer)

btnEx = wx.Button(self.panel_ks,-1,'Back',pos=(180,120),size=(160,25),style=wx.BU_LEFT)btnEx.Bind(wx.EVT_BUTTON,self.Exit)def Exit(self,event):self.panel_ks.Destroy()def transfer(self,event):

os.system('cp '+self.sourBox.GetValue()+' '+self.destBox.GetValue())self.btnUpload.SetLabel('done')def addOS(self,event):

self.panel_os = wx.Panel(self,-1,pos=(10,5),size=(400,300))

btn_add = wx.Button(self.panel_os,label='1. add item',pos=(20,5),size=(300,25),style=wx.BU_LEFT)

btn_modify = wx.Button(self.panel_os,label='2. modify item',pos=(20,40),size=(300,25),style=wx.BU_LEFT)

btn_add.Bind(wx.EVT_BUTTON,self.addMenu)btn_modify.Bind(wx.EVT_BUTTON,self.modifyMenu)

btnEx = wx.Button(self.panel_os,-1,'Back',pos=(20,120),size=(160,25),style=wx.BU_LEFT)btnEx.Bind(wx.EVT_BUTTON,self.ExitOS)def ExitOS(self,event):self.panel_os.Destroy()def modifyMenu(self,event):

self.panel_modify = wx.Panel(self,-1,pos=(10,5),size=(300,200))btn_rhel = wx.Button(self.panel_modify,label='1. RHEL',pos=(20,5),size=(200,25),style=wx.BU_LEFT)

btn_rhel.Bind = (wx.EVT_BUTTON,self.rhel_modify)

btn_centos = wx.Button(self.panel_modify,label='2. CentOS',pos=(20,40),size=(200,25),style=wx.BU_LEFT)

btn_centos.Bind = (wx.EVT_BUTTON,self.centos_modify)

btn_suse = wx.Button(self.panel_modify,label='3. SUSE',pos=(20,75),size=(200,25),style=wx.BU_LEFT)

btn_suse.Bind = (wx.EVT_BUTTON,self.suse_modify)

btnEx = wx.Button(self.panel_modify,-1,'Back',pos=(20,110),size=(160,25),style=wx.BU_LEFT)btnEx.Bind(wx.EVT_BUTTON,self.ExitMod)def ExitMod(self,event):self.panel_modify.Destroy()def rhel_modify(self,event):os.system('vi '+self.rhel_config_file)

def centos_modify(self,event):

os.system('gedit '+self.centos_config_file)def suse_modify(self,event):

os.system('gedit '+self.suse_config_file)def addMenu(self,event):line0 = 'RHELx.x-iauto'line1 = 'images/os/release/vmlinuz'line2 = 'initrd=images/os/release/initrd.img'self.panel_menu = wx.Panel(self,-1,size=(400,300))

title = wx.StaticText(self.panel_menu,-1,'title',pos=(10,7),size=(60,25))self.titleBox = wx.TextCtrl(self.panel_menu,-1,line0,pos=(80,5),size=(300,25))kernel = wx.StaticText(self.panel_menu,-1,'kernel',pos=(10,42),size=(60,25))self.kernelBox = wx.TextCtrl(self.panel_menu,-1,line1,pos=(80,40),size=(300,25))append = wx.StaticText(self.panel_menu,-1,'append',pos=(10,77),size=(60,25))self.appendBox = wx.TextCtrl(self.panel_menu,-1,line2,pos=(80,75),size=(300,25))btnRhel = wx.Button(self.panel_menu,-1,'Save for rhel',pos=(10,120),size=(160,25),style=wx.BU_LEFT)

btnRhel.Bind(wx.EVT_BUTTON,self.confirmRhel)

btnCentos = wx.Button(self.panel_menu,-1,'Save for centos',pos=(10,155),size=(160,25),style=wx.BU_LEFT)

btnCentos.Bind(wx.EVT_BUTTON,self.confirmCentos)

btnSuse = wx.Button(self.panel_menu,-1,'Save for suse',pos=(10,190),size=(160,25),style=wx.BU_LEFT)

btnSuse.Bind(wx.EVT_BUTTON,self.confirmSuse)

btnEx = wx.Button(self.panel_menu,-1,'Back',pos=(10,225),size=(160,25),style=wx.BU_LEFT)btnEx.Bind(wx.EVT_BUTTON,self.ExitMenu)def ExitMenu(self,event):self.panel_menu.Destroy()def confirmRhel(self,event):

rhel_config_file = '/var/lib/tftpboot/images/iauto/rhel.cfg'file = open(rhel_config_file,'a')

file.write('\\n'+'title '+self.titleBox.GetValue()+'\\n')file.write('kernel '+self.kernelBox.GetValue()+'\\n')file.write('append '+self.appendBox.GetValue()+'\\n')self.message('RHEL ADDED SUCCESSFULLY','RHEL')def confirmCentos(self,event):

centos_config_file = '/var/lib/tftpboot/images/iauto/centos.cfg'file = open(centos_config_file,'a')

file.write('\\n'+'title '+self.titleBox.GetValue()+'\\n')file.write('kernel '+self.kernelBox.GetValue()+'\\n')file.write('append '+self.appendBox.GetValue()+'\\n')

self.message('Centos ADDED SUCCESSFULLY','SUSE')def confirmSuse(self,event):

suse_config_file = '/var/lib/tftpboot/images/iauto/suse.cfg'file = open(suse_config_file,'a')

file.write('\\n'+'title '+self.titleBox.GetValue()+'\\n')file.write('kernel '+self.kernelBox.GetValue()+'\\n')file.write('append '+self.appendBox.GetValue()+'\\n')self.message('SUSE ADDED SUCCESSFULLY','SUSE')def message(self,message,title):

dlg = wx.MessageDialog(None,message,title,wx.OK)if dlg.ShowModal() == wx.ID_OK:dlg.Destroy()

if __name__ == '__main__':app = wx.App()frame = MainFrame()frame.Show(True)app.MainLoop()

针对现有PXE系统管理的不足之处,利用上述本技术方法,对PXE系统实现更加实用、更便捷的图形界面管理方式。

因篇幅问题不能全部显示,请点此查看更多更全内容