需求来源

本地virtualbox 上有四台互联虚拟机,由于物理机是台笔记本,网络可能会发生变化
而且,由于某些原因,虚拟机需要设置成静态ip
所以,当网络发生变化时,我需要适应性的修改虚拟机的网卡中的ip(IPADDR)和路由(GATEWAY)的配置
鉴于手动修改太过于繁琐,所以想实现本地物理机脚本控制虚拟机,主要面临情况以及需要实现的功能如下:
(1)虚拟机可能已经无法联网,无法被ssh 登陆
(2)需要修改的配置可能不止一两个,很多配置 需要执行 shell 脚本 或者修改 配置 文件
(3)实现从物理机控制虚拟机,不管是通过VBoxManage 还是 python 或者是 golang 控制等
(4)主要实现,包括关机状态下自动开启虚拟机,执行shell 脚本或者bash 命令(脚本或者命令是在虚拟机中执行),最关键的是一定要能执行 bash 命令

物理环境

物理机:MAC OS X
virtualbox:版本 5.2.16
虚拟机:centos 7(四台全是)

安装准备

VBoxGuestAdditions镜像:下载地址 http://download.virtualbox.org/virtualbox/5.2.16/

后边的版本号可以修改,最好是跟virtualbox版本对应上。不过我用的小版本号不太一样,也没出啥问题
国内下载会很慢,国内镜像版本也不太齐全
好多人都是去外网下载之后放到csdn下载之后,让别人用积分才能下载,也是醉了,明明就是开源工具
最好科学上网一下

安装步骤

Step1 在存储里添加 VBoxGuestAdditions 的iso,如下图

Step2 安装并配置 VBoxGuestAdditions

# 开机之后进行操作
# mount 刚刚加入的 iso 到 /mnt 下,执行以下命令
mkdir /mnt/vbox
mount /dev/sr0 /mnt/vbox# 安装 依赖
yum update -y
yum install -y kernel-devel kernel-headers
yum install -y gcc make perl# 执行安装脚本
cd /mnt/vbox
ls -l# 其中有很多脚本,有windows 上用的,也有Linux 上用的

# 执行Linux 上的安装脚本, 下图是成功的标志
./VBoxLinuxAdditions.run


# 有可能成功,也有可能会因为缺少其他依赖失败,如我遇到的是缺少 bzip2
# 如果是缺少依赖,继续把依赖装上,重新执行上述安装脚本即可
# 如果是成功,原来的虚拟机窗口,会变大一号# 重启
reboot

网上有很多人说,安装成功之后,还会有两个标志:

(1)执行 df 命令时,会出现一个带有 vbox 字样的共享目录,但是很奇怪我的虚拟机里没有,但是我的目的不是为了使用共享目录,所以没有深究。我猜测是不是因为我使用的虚拟机共用一块虚拟盘,当然没有确实的根据
(2)执行 cat /etc/group | grep box,打印结果中有 vboxsf 的用户组。但我认为即使打印了这个用户组并不代表 VBoxLinuxAdditions.run 执行安装就成功了。原因是,当我在其中某一台虚拟机,在缺少gcc 依赖的时候,执行脚本安装的时候,依然有用户组vboxsf,但是实际上,通过VBoxManage 操作的时候并没有成功,返回错误依旧是VBoxManage: error: The guest execution service is not ready (yet),我认为此时安装根本没有成功

综上,确认安装成功的特征是,虚拟机窗口变大

确认安装成功的检验标准是,在物理机上执行一个VBoxManage 命令,操纵下虚拟机,看是否返回结果
VBoxManage 命令行 API 介绍地址:https://www.virtualbox.org/manual/ch08.html#vboxmanage-controlvm

# 提供一个命令,在mac 上执行的,用于检验上述安装是否成功。在windows 上执行也有,可以去 上面的 链接里找,这里不赘述
# 解释一下这个命令的所做的事情以及需要的条件
# 需要的条件:虚拟机开机状态下才能执行(可以不用登入),VBoxManage 有一个开启虚拟机的命令,可以在上面 的链接里找一下
# 所做的事情:连接名称为 bg03 的虚拟机,其用户名 --username 为 root ,其密码 --password 为root,ls 目录 /user
VBoxManage --nologo guestcontrol "bg03" run --exe "/bin/ls" --username root --password root --wait-stdout -- -l /usr# 如果上述成功,则打印 /usr 目录下的文件以及目录。如同真的在虚拟机里执行  ls /usr 命令执行的结果一摸一样
# 如果不成功,返回的错误是 VBoxManage: error: The guest execution service is not ready (yet) ,说明上述安装 没有成功

附录,关于 virtualbox-python

解释一下,为什么要附录这一部分
一开始,当我意识到我需要一个自动化脚本,从物理机直接控制虚拟机脚本的时候,我首先想到的不是 VBoxManage ,因为在此之前操作虚拟机我都是鼠标键盘操作,从未通过命令行控制virtualBox,更不用说是虚拟机。
所以,最早我想到的是用 python 脚本打开虚拟机、并加入连接,最后进行操纵。
当时,我最早使用的就是 virtualbox-python 这个python 的第三方的模块,在 github 上可以搜到,安装(在mac上有点复杂)以及使用就不赘述。之后加上我用python写的代码链接。
当我使用 virtualbox-python 实现了虚拟机开机、以及关机之后,怎么都无法实现在虚拟机中执行一个脚本,其中执行虚拟机脚本的大致代码如下:

guestSession = session.console.guest.create_session('root', 'root')
try:# print guestSession.state# Do somethingproc, stdout, stderr = guestSession.execute('/bin/ls', arguments=['/usr'])print stdout
except Exception, err:print err
finally:# Close the machinesession.console.power_down()

这段代码是在 python 2.7(mac os 自带的python 版本)上运行的,代码的意思是通过 create_session 创建一个session 连接 , 然后使用连接 执行一个命令 ls /usr ,打印结果 stdout。最后关闭虚拟机。
当时,这段操作的返回结果一直都如下所示。当时找了很多资料,包括stackoverflow、github 、google 等,都没有很好的解决方法,很多帖子都石沉大海。

0x80bb0005 (The guest execution service is not ready (yet))

这个输出和没有安装 VBoxGuestAdditions 之前,直接执行 VBoxManage 命令操作虚拟机命令的返回结果其实非常相似。
其实,原因就是因为需要安装 VBoxGuestAdditions 。但是很奇怪的是 virtualbox-python 的作者,没有提及 必须要安装 VBoxGuestAdditions ,是不是大佬思维都太跳了。
由此,说明 virtualbox-python 是基于 VBoxGuestAdditions 实现的,除此之外,它还依赖于vboxapi(这个没有找到太多资料,确实有这么一说),在 Mac 自带python 的库里有。

centos7:安装配置 virtualbox 增强功能 VBoxGuestAdditions,并实现物理机脚本控制虚拟机相关推荐

  1. 安装VBox共享文件增强功能VBoxGuestAdditions

    以前常用的安装VBox共享文件增强功能,博客记录下,以备查用. 预备: VBox版本:5.0.6, r103037 debian版本:debian-8.3.0-i386-CD-1.iso 增强版本:V ...

  2. linux的增强文件夹,在linux系统中安装virtualbox增强功能(增强包)的详细步骤是什么...

    在linux系统中安装virtualbox增强功能(增强包)的详细步骤是什么 1. 点击菜单栏 设备 –> 分配光驱 –> 选择一个虚拟光盘,找到VirtualBox安装目录下的`VBox ...

  3. 深度linux安装virtualbox,【玩转deepin】如何安装VirtualBox增强功能使得deepin系统全屏显示?...

    原标题:[玩转deepin]如何安装VirtualBox增强功能使得deepin系统全屏显示? 在Windows上通过Virtualbox安装deepin深度操作系统,安装完成后,为了让deepin可 ...

  4. virtualbox mac (免费) 安装 centOS8 (含支持屏幕分辨率设置的VirtualBox增强功能安装)

    一. 官网下载virtualbox及其增强功能安装包 本教程版本:6.1.4 mac版,官方下载地址:http://download.virtualbox.org/virtualbox/6.1.4/ ...

  5. 在CentOS6虚拟机上安装VirtualBox增强功能

    1. 安装编译需要的库和头文件 yum install gcc -y yum install kernel sources -y yum install kernel-devel -y 2. 安装Vi ...

  6. Kali安装VirtualBox增强功能

    文章目录 前言 一.安装前 二.安装步骤 1.获取增强功能包 2.复制`VBoxLinuxAdditions.run`到`/home` 三.安装后 前言 目的:安装VirtualBox增强功能后,可以 ...

  7. vmware linux 3d加速,Ubuntu虚拟机安装Virtualbox增强功能启用3D加速

    本文介绍如何为ubuntu虚拟机安装Virtualbox增强功能(英文名叫Guest Additions),很多同学都感觉ubuntu虚拟机非常卡,这是因为Unity桌面需要3D支持,而要在virtu ...

  8. 解决VirtualBox增强功能异常

    VirtualBox增强功能异常的排查 每次安装完vbox的增强功能总是会有各种异常问题,比如: 共享文件不能使用. 复制粘贴不能使用. 显示器分辨率不能自动调整. OpenGL 3D加速不能使用. ...

  9. VirtualBox增强功能包

    最近一直用Harvard的CS50 Applicance学C语言,可惜蛋疼的网速想同步 文件都难,因此决定设置共享文件夹,虽然折腾了好几个小时了,不过这增强 功能包竟然连分辨率都搞掂了,以后我不用一直 ...

  10. centos7安装配置vsftp搭建FTP

    参考文章: CentOS7下安装FTP服务 详解CentOS7安装配置vsftp搭建FTP centos7之vsftp安装和使用 1.安装vsftp # 查看是否已安装 方法一 [root@local ...

最新文章

  1. “智源论坛Live”报名 | 清华大学游凯超:领域适配前沿研究--场景、方法与模型选择...
  2. WindowsPhone后台新特性
  3. poj 2352 线段树
  4. Jmeter(二)Jmeter目录介绍
  5. Oracle EXP/IMP参数详解
  6. 这28张图绝非超现实,都是在真实世界中存在的
  7. VC与Matlab混合编程的快速实现(3-1)
  8. Kali学习笔记5:被动信息收集工具集
  9. c#中onclick事件请求的两种区别
  10. 二胎妈妈,35岁,年薪70万,家庭工作平衡太难,要不要辞职?
  11. 改进的冒泡排序算法一
  12. Tensorflow2.0入门教程(一)
  13. 并查集路径压缩_并查集简单教学
  14. java随机点名器的代码_巧用Excel制作随机点名器,简单易学,快来尝试吧
  15. eclipse运行jsp文件时出现乱码解决方法
  16. 产生分类中的双月问题的数据集
  17. gfs和hdfs文件系统的区别
  18. Django项目——CRM
  19. [转载]Emit学习之旅(1):Emit概览
  20. 图码详解算法|理解八大思想,胜刷百道力扣!

热门文章

  1. cad墙线打断lisp_autocad 2010怎么打断墙线?
  2. Nexus私服下载及安装
  3. DoIP(四)—— 时间参数
  4. 《思考,快与慢》读书笔记
  5. gaussian软件linux版本,Gaussian 09的版本与平台。
  6. 小王在CSDN的六年创作历程
  7. Android开源项目及库汇总
  8. 探究Ptcms小说采集规则
  9. python机器学习教程_从零开始掌握Python机器学习:十四步教程
  10. 经典蝙蝠算法MATLAB实现