解析超级虚拟实验室eve Ng的工作模式
转载自https://www.douban.com/note/629657625/
近些年来,基于虚拟环境的网络设备或者实验室层出不穷。其中最为成功的虚拟实验室产品线以iou-web,unetlab,以及后来继承者eve-ng最为成功。因为原UNetlab的环境依旧在更新,因此现有比较吸引眼球的实验室就有UNetlabv2和eve-ng俩个了。
在对eve-ng有了一定了解后,有必要将eve-ng的工作模式进行一个简单的说明,便于大家了解。这个解析从以下几个层面进行:架构,安装与更新,使用。
eve-ng的安装
首先,安装eve-ng时,需要在网上下载上G的iso或者ova的虚拟机文件。如果我告诉你,无论是iso还是ova,你下载的都只是ubuntu的安装介质,你会相信吗? 事实也是如此,eve-ng的安装,只要依靠第一次开机时的联网更新所完成的。在安装介质里,与eve-ng有关的安装文件只有一个,唯一的一个,eve-setup.sh。
|
|
从eve.iso的封装脚本就可以看出,整版iso,实际有用的文件非常非常少,不超过100k.
在启动虚机或者iso时,会调用eve-setup.sh脚本,然后联网,开始下载并安装必备组件和eve-ng.deb本身。eve-ng.deb里包含了三部分内容,有核心的unetlab的服务器信息,必要的后台服务加载配置文件,还有一部内容是script脚本,这个脚本负责下载并配置dynamips和qemu等各种虚机。
当然了,必要的组件包括eve-ng本身都可以离线下载,上传到ubuntu内,进行单独更新
|
|
eve-ng的deb是不能单独下载的,必须通过ubuntu的apt-get完成,需要签名验证。
|
|
eve-ng的安装文件,都保存在/opt的目录下。
事实上,unetlab,以及unetlabv2的安装也是这么玩的。
|
|
作为linux平台上运行的eve-ng,各种平台的依附的不同依赖关系确实比较头疼而烦躁,由此指定ubuntu为基础平台我也能理解。但是,在搭载了ubuntu的介质后,启动时又下载重新和安装一次全新的ubuntu,我就很不能理解,哪你索性在发布时给个简版的ubuntu好了。此外,eve-ng并没有很好的去检测和分析依赖关系,安装和部署了相当多不必要的东西,实际上安装了ubuntu的整张介质。 ====注:关于update,这是ubuntu本身的问题。每次系统启动,都会调用apt-get执行update动作,确实很烦,而且没任何好办法。=====
eve-ng的架构
相比unetlab,eve-ng并没有太多独立开发的部分出来。从结构就可以看出来,它是以集合多种组件为一体为优势存在的。
|
|
从架构来看,eve-ng本身。eve-ng本质上就是在unetlab的基础上进行了定制和改进,集成了dynamips,qemu和vcps,以及涵盖了现有的所有类型的模拟器和虚拟设备。其中guacamole和schema都是对unetlab定制和改进的具体措施。
说明:
- control, 包含eve-ng安装的俩个重要脚本,preinstall和postinstall.
preinstall: 对eve-ng安装必须的mysql进行初始化和用户创建,迁移,以及eve-ng-schema里的sql脚本等。
postinstall: 安装后配置脚本,包括启动服务,apache2的配置,grub安装,plymouth配置,tap配置等。这是保证系统重启后能正常工作的必要前提。 - /opt/ovf: EVE-NG setup脚本。主要包括密码,hostname及网络配置。该脚本通过/etc/init/ovfconfig.conf和/etc/profile.d/ovf.sh在系统启动时调用。
- /opt/unetlab/includes unetlab基于php的管理控制脚本,诸如节点,网络,试验环境等。
- /opt/unetlab/includes/init.php unetlab的初始化脚本。
- /opt/unetlab/includes/templates 不同类型节点的配置模板,如asav, junos,xrv等。
- /opt/unetlab/scripts eve-ng平台的管理脚本。这些脚本主要是做发布所用,而不是实际管理和操作。
- /usr eve-ng的主题目录,plymouth调用。
- /etc 各不同组件的配置文件。如apache2,lograte, systemd等。
eve-ng的使用
eve-ng缺省登录: http://x.x.x.x username: admin passwd: eve eve-ng的使用确实比iou-web要快捷很多,也稳定很多。所有工作都可以通过web点击完成,速度很快,这点很好。 个人安装完成的eve-ng,不支持ftp传输,连ftp的命令都没有。文件传不上去,也拉不下来,太头疼了。很多必备的工具都需要手动配置 apt-get install ftp nano
unetlab的缺省登录: root with default passwd unl
eve-ng平台迁移
能不能顺利迁移至其他平台,安装和更新脚本都是次要的,如何处理好其中组件的依赖关系才最重要。我们先看看UnetLabv2的依赖关系。 UNetLabv2 is based on:
|
|
现在可以确认的依赖组件有 必备组件:
- php
- apache
- mysql/mariadb
- guacamole
- python 3
- bridge-utils/cpulimit/iptables/logrotate/lsb-release/tcpdump/telnet/uml-utilities
- openvswitch
- sqlite3
- libguestfs-tools
除了必要的依赖组件外,比较麻烦是各种组件需要有一个初始化配置,诸如apache, guacamole等需要处理。这些脚本要全抓出来,并梳理出来,比较麻烦。
eve-ng的移植流程 尝试从ubuntu到gentoo的移植,非常有挑战性,经历了重重困难,有所收获但是也有诸多问题。总体来说,这是一个不怎么成功的尝试,从实践的角度来看,收益颇丰,尝试还是非常值得的。
- 安装必备的依赖程序。诸如sqlite, mysql, php, guacamole等。之后进行必要的配置和启动服务
- mysql安装完成后,需要对mysql进行初始化。
emerge --config dev-db/mariadb #设置mysql的root密码。
- mysql安装完成后,需要对mysql进行初始化。
- 安装guacamole应用及配置。
- 运行guacamole的preinst脚本 *执行guac_install_v1.5.sh安装配置脚本,主要是执行guac的sql设置脚本。 *运行postinstall脚本,设置guacamole的启动脚本。 *guacamole要用tomcat提供www服务,因此需要特别设置tomcat的启动进程。
|
|
- 安装和配置eve-ng
- 运行eve-ng的preinstall脚本,主要设置eve-ng的数据库参数,诸如用户口令等。同时执行schema里的sql脚本,进行数* 据库初始化。
- 解包并复制eve-ng的文件到/opt指定位置
- 运行eve-ng的postinstall脚本,进行权限设置,各组件的自启动进程设定,以及虚拟站点的设置等。
- 解包eve-ng各组件的配置文件到/etc,/usr等目录。
安装配置其他各组件到/opt对应位置。
查找_lab.php和unl_fixpermission里,关于chown的代码并修改为正确的apache启动用户。 改代码太复杂了,不如直接改/etc/passwd和/etc/group
|
|
注意:这里切记,www-data的用户一定要和运行apache的用户保持一致。
从理论上来讲,到此为止,所有的安装配置已经完成。事实上来看,到此已经可以通过浏览器访问并登录eve-ng,很多功能已经可以实现。 成功之处:
- 可以通过PDO连接mysql,实现Eve-ng的登录控制。
- 可以实现用户的增减等管理操作。
- 可以实现对文件和目录的操作。
- 增加或删除lab,编辑lab内的节点并进行配置。
- 正确显示system status。 不足之处:
- 在运行iol node时,提示Error when connect to AF_Unix,网上高人指点是iou的license设置不对。但是我的license没问题,单独跑iol都可以。直接挂在iol_wrapper下就过不去,肯定不管license事。
- qemu采用特定的参数在ubuntu下编译,在gentoo下运行会报缺少动态库。
以上这俩个问题比较难处理,iol_wrapper和qemu都是编译过的二进制代码。qemu可以重新编译,但是iol_wrapper只能重新自己写个wrapper了。否则就只能运行一些windows或者原生的系统,无法做到全兼容。
在对iol_wrapper的源码分析后,可以得知,不同linux下对于connect返回值的不同,导致结果截然不同。
|
|
到此为止,就可以清理战场了。
结论:在gentoo下移植eve-ng,也并非完全不可能,只是这个成本太高。如果一定要用eve-ng,后续可以单独分一个分区安装ubuntu,并在此基础上运行eve-ng。如果能处理好ubuntu对grub的复写问题,这将是最为简洁也最为可能的一种方式了。
- 原文作者:mlyixi
- 原文链接:https://mlyixi.github.io/post/network/%E8%A7%A3%E6%9E%90%E8%B6%85%E7%BA%A7%E8%99%9A%E6%8B%9F%E5%AE%9E%E9%AA%8C%E5%AE%A4eve-ng%E7%9A%84%E5%B7%A5%E4%BD%9C%E6%A8%A1%E5%BC%8F/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。