APP下载

基于Vagrant部署程序设计类课程实验教学环境

2018-12-07郭海智

实验科学与技术 2018年5期
关键词:宿主机配置文件网卡

郭 亮 ,郭海智,谢 光

(三亚学院 理工学院,海南 三亚 572022)

随着社会需求及信息技术的发展,软件开发相关的语言、平台及应用呈现出多样性。高校计算机类专业为满足各类人才培养需求,其应对的程序设计类课程的设置也紧跟其变化,相应的试验环境也需跟随调整。为减少实践教学过程中各类开发环境搭建产生的相互干扰、软件版本冲突、操作系统差异性和兼容性等引入的诸多问题,当前部分高校机房采用一机安装多重操作系统,并在其中针对特定程序设计类课程建立开发环境的方式并不利于教学环境的灵活调整,以及解决相关配置发生变化和软件升级引入等各类问题。随着作为云计算[1-3]基础的虚拟化技术[4-5]逐渐成熟,越来越多的教学环境中引入虚拟化方式是对现有实验课程建设的有力补充[6-7]。Vagrant作为一种创建和部署虚拟化开发环境的开源工具,提供了易于配置、重复性好、便携式的工作环境搭建方法,能够简化程序设计类教学相关的准备工作,提升实验室教学实践环境的部署能力,有利于教和学的开展。

1 工具简介

Vagrant[8]是Hashicorp公司推出的一款开源DevOps[9]基础设施工具,是该公司对数据中心管理技术研发系列产品的一部分,支持软件的持续交付及持续部署[10-11]。Vagrant基于Ruby语言建立,通过统一管理 VirtualBox、VMWare、KVM等多种虚拟机系统软件,以及AWS等多种云计算服务平台上的VPS,为开发者提供了控制各类虚拟机的单一接口,如图1所示。通过该单一接口统一了工作环境的配置、重构、分享,保证了开发环境与实施环境的一致性。使用者只需通过简单的一条命令就可基于自定义方式快速搭建所需环境。

图1 Vagrant分层架构

为此,宿主机需先安装Git、Virtualbox和Vagrant,获取Vagrant专用工具打包的虚拟机镜像Box文件(该文件可通过http://www.vagrantbox.es或https://atlas.hashicorp.com/boxes/search云平台选取经过测试并广泛认可的各类Linux基础镜像文件后按需加入功能软件构成,也可以完全自定义构建),然后通过命令Vagrant box add添加镜像,最后需按特定环境编写Vagrantfile配置文件。具体使用中通过Vagrant up、Vagrant ssh及Vagrant halt三条命令完成虚拟机的启动、登录和关机操作。

2 搭建实验教学环境

2.1 准备工作

以下以网络编程课程及计算机网络教学过程为例,对利用Vagrant工具搭建基于真实操作系统的虚拟环境试验平台进行说明。首先使用centos7从头搭建基础Box文件,其制作基本过程为用centos7.3在VirtualBox中创建新虚拟机,安装所需开发工具,安装VirtualBox增强功能以满足共享目录设置等需要,完成登录学生user1的创建及其权限设置等基础设定后,用Vagrant package打包该虚拟机为centos73.box,并执行Vagrant box add centos73.box添加到本地Box仓库。

2.2 网络拓扑结构设计

网络编程和计算机网络课程所需的典型实验环境的拓扑结构中,至少需要两台互联的虚拟机以完成网络通信和数据抓包需要,并且宿主机可通过ssh登录虚拟机以完成代码编译及调试运行工作。根据教学需要还要实现局域网内虚拟机的网络互联以实现一对多的服务测试,拓扑设计如图2所示。其中,Host代表学生使用的宿主机,Guest代表宿主机上运行的虚拟机。虚拟机通过eth0以NAT模式(网络地址转换模式)连接宿主机以方便用户登录到server和client完成程序编译、运行及调试。C/C++网络程序通过eth1以Host-only模式(主机模式)在虚拟机server和client间运行和测试。所有宿主机中的虚拟机通过eth2以Publicnetwork模式(网桥模式)接入整个教室局域网并可从DHCP服务器获得ip地址及DNS相关配置信息,以方便网站开发、网络聊天等多人参与类程序的验证和测试。

图2 实验环境拓扑结构

2.3 配置文件及说明

配置文件Vagrantfile采用Ruby语言进行编写,易于上手。通过配置文件可完成虚拟机的各类设定及网络配置等工作。依照图2的实验环境拓扑结构设计,相应Vagrantfile配置文件及说明如下:

01 Vagrant.configure("2")do |config|

02 config.vm.box="centos73"

03 config.vm.synced_folder".","/vagrant",disab led:true

04 config.vm.define"serv"do |serv|

05 serv.vm.provider"virtualbox"do |v|

06 v.customize["modifyvm",:id,"--name","serv","--memory","256","--cpus","1"]

07 end

08 serv.vm.hostname="server"

09 serv.vm.synced_folder"serv_share","/home/user1/codes"

10 serv.vm.network"private_network",ip:"192.168.200.10"

11 serv.vm.network"public_network",ip:"192.168.19.222",netmask:"255.255.255.0"

12 #serv.vm.network"public_network"

13 serv.vm.network"forwarded_port",guest:9090,host_ip:"192.168.1.186",host:9090

14 end

15 config.vm.define"clnt"do |clnt|

16 clnt.vm.provider"virtualbox"do |v|

17 v.customize["modifyvm",:id,"--name","clnt","--memory","256","--cpus","1"]

18 end

19 clnt.vm.hostname="client"

20 clnt.vm.synced_folder"clnt_share","/home/user1/codes"

21 clnt.vm.network"private_network",ip:"192.168.200.11",netmask:"255.255.255.240"

22 clnt.vm.network"public_network",ip:"192.168.19.223",netmask:"255.255.255.0"

23 clnt.vm.network"forwarded_port",guest:22,host_ip:"192.168.19.186",host:9999

24 end

25 end

代码第1行设定配置信息以Vagrant配置文件的版本2格式编写;第2行设定虚拟机系统所对应的本地仓库中特定Box文件,此处也可改为网络下载地址;第3行关闭默认的共享目录设置;第4~第14行对虚拟机server进行配置,其中第5~第7行调用已安装的虚拟化软件程序,如VirtrualBox的VBoxManage,完成特定虚拟机的资源分配及其配置,如cpu数量1,内存大小256 MB以及虚拟机名称;第8行对虚拟机系统主机名进行设置;第9行建立宿主机和特定虚拟机的同步目录;第10行安装网卡eth1配置为主机模式并设定ip地址,如需进行特定子网分配可仿照第21行进行;第11行安装网卡eth2配置为网桥模式并设定好ip地址;第12行如果局域网配置了DHCP服务器可放开该注释行以安装网卡eth3并配置为网桥模式,且设定该网卡以DHCP方式获取网络配置信息;第13行配置端口转发,对虚拟机的9090端口对外暴露为宿主机ip地址上的9090端口,使得局域网内宿主机中的虚拟机上的网络客户端程序通过接入宿主机的9090端口连入server端口为9090的网络服务端程序,方便多人参与类程序的测试;第15~第23行配置虚拟机client,过程与server配置类似,其中,第23行功能类似第13行,通过端口转发以192.168.19.186:9999端口暴露虚拟机client的ssh端口,使得外部机器可远程登录该虚拟机以进行管理。

2.4 环境验证

首先下发上述配置文件到学生机工作目录test,并在其中建立子目录serv_share和clnt_share以分别对应共享目录放置服务器和客户机的程序代码,然后在工作目录运行命令Vagrant up同时启动server和 client虚拟机,使用命令 Vagrant ssh server和Vagrant ssh client分别登录到server和client系统中。在server中以 ip address查看网络配置,特别是验证第12行配置对启用DHCP后server的eth3通过dhcp获得的配置信息。在server中ping 192.168.200.11测试与client通过eth1的连通性,ping 192.168.19.223测试与client通过eth2的连通性,从其他宿主机或其上的虚拟机telent 192.168.1.186 9090或 ssh-p 9999 user1@192.168.19.186测试端口转发。在test/serv_share及test/clnt_share中编写网络回显测试程序,验证共享目录设定正确。

2.5 扩展管理

Vagrant构建的基础Box文件可能不满足特定课程的软件配置需要,此时可在Vagrantfile配置文件中调用外部shell脚本或联合Ansible[12]和Puppet[13]等自动化运维工具完成虚拟机的自动化配置管理。如要对上述环境进行缺省路由配置及telnet软件的安装,可在配置文件中加入配置命令 (config.vm.provision"shell"),路径"script.sh",并在工作目录中建立script.sh文件加入shell命令:

01 routedel default

02 route add defaultgw 10.36.192.1

03 cat/dev/null>/etc/resolv.conf

04 echo"nameserver 8.8.8.8">/etc/resolv.conf

05 echo"nameserver 8.8.4.4">>/etc/resolv.conf

06 yum install-y telnet>> /tmp/provision.log 2>&1

上述代码第1行删除已建立的缺省路由,第2行添加新的缺省路由,第3行删除原有dns服务器配置,第4~第5行设定新的 dns服务器配置,第6行完成telnet软件的安装并记录安装日志。修改配置文件后通过命令Vagrant reload重启虚拟机即可使得扩展配置生效。

对于其他程序设计类实验课程,只需利用上述Box文件作为基础镜像,对Vagrantfile配置文件设定虚拟机基本配置、ip地址和端口转发设置,修改script.sh以安装相应编译工具及库文件并进行配置,最后下发Vagrantfile和script.sh到学生机即可。以搭建python web开发环境为例,只需在Vagrantfile中配置虚拟机,以Public-network模式添加网卡并设定ip地址加入内网,在script.sh文件最后加入下面三行语句即可。

sudo yum-y install python-pip

sudo pip install--upgrade pip

sudo pip installflask

3 结束语

从以上课程所需的实验搭建过程可见,只需进行很少的部署操作,3~5 min左右就能完成特定开发环境的搭建,方法简单且易于掌握。该方法减少了开发环境不一致所导致的各类问题,简化了实验室的相关配置工作且扩展性强,方便了学生在其个人电脑上快速完成开发环境的搭建并保持与教学环境的完全一致,有利于学生深入理解课程本身的知识要点。通过共享目录以及学生已熟悉的开发环境,一定程度上降低了学习Linux相关技术的门槛,保障了教学的顺利实施。

猜你喜欢

宿主机配置文件网卡
嵌入式计算机软件测试关键技术研究
互不干涉混用Chromium Edge
Server 2016网卡组合模式
基于Zookeeper的配置管理中心设计与实现
忘记ESXi主机root密码怎么办
虚拟网络实验室在农村职校计算机网络技术教学中的应用研究
为View桌面准备父虚拟机
挑战Killer网卡Realtek网游专用Dragon网卡
RHEL7 Network Teaming(网卡绑定)配置与测试
USB故障又一原因