我已经厌倦了早上开始我需要多少步骤。是的,启动我的整个环境只需要几分钟,但我真的宁愿在启动时运行一个命令并准备好立即启动。
我在连接到SqlServer的Rails上编写应用程序。为了开发它,我有一个我在VM上使用的本地版本的DB。我的手动过程如下:
Run VirtualBox.
Start the VM.
When the VM is done booting:
Open terminal
Run `rails s`
When rails is done starting:
open browser
navigate to localhost:3000 and start developing
Run Sublime
我想在一个脚本中这样做:
VirtualBox Windows7 &
sublime &
google-chrome &
但我无法弄清楚如何在VM完成启动后运行此命令:
gnome-terminal --working-directory=git/my_project --tab -e 'rails s' --tab -e 'git status'
此外,在rails s成功之后启动chrome会很好(但不是必须)。
这甚至可能吗?
我并不反对投票,但感觉这是VirtualBox应该能够更自然地做的事情。
编辑
来自评论:
我正在使用具有两个桥接接口的主机网络(一个用于无线接口,一个用于有线接口)可用。 (它允许我使用VM,无论我是否连接到网络,并允许我在有线和无线之间自由切换,而不会注意到差异)。
我将这样做:
ipconfig /all
,可以用vbscript / python完成。)route -n
输出)。由于两者都使用相同的物理接口,因此网关将是相同的(假设NAT和ONE物理接口)。使用tcpdump,等待ping数据包到网关。选择“默认网关”是因为这是主机和VM可以彼此独立发现的东西。其他选择是硬编码主机的地址。
主机上的主机tcpdump退出后,表示虚拟机处于活动状态并启动到Windows桌面。
之前我调查过这一行调查,我认为Devil's Pie是最接近你设置的:
您可以尝试从此开始(VBoxManager startvm):
How to automatically start and shut down VirtualBox machines?
然后查看一些工作脚本,以便在VM完成后按顺序添加到init.d和/或rc.local:
我需要编排类似的东西。我正在使用Windows VM(来宾)作为我的Linux笔记本电脑(主机)的代理(它运行仅限Windows的企业VPN客户端)。方法是让客户完全自动化并等待它准备好:
(Squid也可用作这个复杂但非常方便的机制的备份,我仍然可以通过开瓶器等ssh)
所以,我在主机上运行此脚本(显示的简化版本):
#!/bin/bash
VM=vm #Name of the Virtual Machine
SCRIPT_DIR=/some/dir
PROXY_ADDRESS=localhost:3128
REMOTE_CURL_HOST=any.corporate.hostname
function waitloop() {
echo -n "Waiting to hear from $REMOTE_CURL_HOST "
while ! curl -s -m 5 --proxy $PROXY_ADDRESS $REMOTE_CURL_HOST > /dev/null ; do
echo -n .
sleep 10
done
echo "!"
}
# a separate script that takes down my routes, you may not need this.
bash $SCRIPT_DIR/network-config-vboxnet0.sh down
# error is OK if it's already running
vboxmanage startvm $VM
waitloop && bash $SCRIPT_DIR/network-config-vboxnet0.sh up && echo "Completed"
本质上,脚本等待curl通过VM工作。