虚拟机+桥接模式+Host-only模式 搭建完美的Windows下Linux开发环境
相信有很多鞋童和我一个样是一枚Linux码农(我现在还是嵌入式方向). 做Linux开发势必需要一个Linux环境, 大多数开发者会首先选择一个Linux发行版, 其中Ubuntu LTS版本应该是选取最多的一个了, 原因也很简单, 该发行版简单易用的同时足够稳定和普及. 选择完发行版就要选择怎么安装了, 一批人会选择将linux系统直接安装在开发主机上来产生一个纯的Linux环境. 这种环境的优点是纯净和速度快, 不过也有一个明显的缺点:就是Windows上大多数好用的东西都与你无缘了. 为了充分利用windows和liunx两大系统各自的优势, 我想肯定会很多人和我一样, 最终的选择是Win10(或Win7)主机+Virtualbox(或Vmware)虚拟机的搭配来实现双系统共用, 这种搭配在几年有一个弊端是虚拟机的性能太差,速度比较慢而导致有些人无法接受, 不过这个缺点在这几年已经没有了, 因为在 i5+固态盘+8g内存 配置满天飞的今天, 硬件速度已经不再是问题, 加上cpu的虚拟化支持以及虚拟机在3d方面的强化, 只要你不做linux游戏开发, 我想再说虚拟机速度慢就是偏见问题了.
使用windows+虚拟机搭配的一个问题是在两个系统间切换并不那么的方便自然, 因为你每次进入虚拟机后键盘就被虚拟机独占了, 想要切回windows主机, 你得先按下一个切换键盘控制权的快捷键(virtualbox里是右边的Ctrl键). 像我这种嵌入式的linux开发人员几乎所有开发活动都是在终端里完成, 为了更加方便在windows和linux之间切换程序(同时也为了使用windows下我看着最顺眼的字体: Microsoft YaHei Mono), 一个很自然选择便是通过 Xshell/Putty/SecureCRT 这类SSH登录软件来在windows上透过网络来登录虚拟机中的Ubuntu.
用到了SSH, 那就必须配置好虚拟机的网络模式, 怎么配置虚拟机的网络模式就是今天主题了. NET模式肯定是不能用的(单通), 我想大多数小伙伴和我之前一样, 一直使用的模式肯定是桥接模式, 这种模式最大的优点就是他的外在表现几乎和实际的网卡没有什么区别, 这导致虚拟机看起来就像是一台完全独立的PC主机插在了同一个路由器上一样. 不过这种模式还是有一些缺点, 其中最关键的缺点就是桥接模式的通畅与否取决于外部的路由是否通畅, 也就是说, 如果你的电脑的有线或无线网络没能正常的连接网络, 那么你的windows主机和Linux虚拟机将没法联通, 结果就是没有外网SSH就无法正常使用, 这也意味着如果你用笔记本在一个没有网络的环境中干活, 你将不能使用SSH. 另一个缺点也是由这个关键的缺点引起的, 如果你的开发环境在一台笔记本,上同时联网方式是wifi无线, 你正常的开了几个SSH连接来做开发, 中午吃饭或者晚上睡觉时, 你的想法会是:不关机了吧, 一会来又要开机打开一堆软件, 麻烦! 于是你很开心的让电脑睡眠或休眠了, 下午或第二天开机唤醒你的老朋友时一个不太happy的事情可能会发生, 所有SSH连接都断开了, 于是你不得不一个一个的将SSH重新关闭再重新开启, 如果你没有用tmux的话, 那么更不爽事情也将会发生:所有你打开的vim都关闭了!!! 好了, 我就是这种情况, 虽然我用了tmux, 但还是很不爽每次休眠都要重连SSH. 出现这种情况的原因也比较显而易见: 睡眠后wifi将有可能自动关闭(休眠后wifi必然会断电关闭), 当你重新启动后wifi将重连, 虽然重连后的ip一般不会变, 但这个连接已经不是睡眠之前的连接了, 对于SSH,连接都变了, 自然是会罢工的.
这个问题我忍受了很久, 直接今天闲来无事, 想看看有没有解决办法, 在尝试了几次之后, 我还真的找到了一个比较完美的解决办法:
不论是virtualbox还是vmware, 都有一个网络模式叫Host-only, 这个模式特点是他自己在主机中虚拟一个网卡, 如果你安装了virtualbox, 那么"网络连接"中多出来的"VritalBox Host-only Network" 网卡就是它虚拟出来的网卡, 如果我们在虚拟机中配置使用host-only模式, 则虚拟机中网络将会连接到这个块虚拟的网卡上, 他的Ip也将由这个块虚拟网卡自动分配, 默认情况下这个块host-only虚拟网卡的网关地址是192.168.56.1, 分配给第一个虚拟机的地址将是192.168.56.101. 由于虚拟网卡的存在, 因此在默认情况下的如果通过192.168.56.101去SSH连接虚拟机, 即便主机没有外网连接, 主机和虚拟机之间总是互通的, 这就解决了上面提到了第一问题, 实现了在没有外网的情况下正常使用SSH登录虚拟机. 怎么样是不是开心了一把, 更加令人兴奋的是由于该网卡是虚拟的, 因此即便是休眠也不会出现唤醒后断开网络重连的问题, 人家根本不会断开!!! 这又解决了上面提到了第二个问题.
喔, 我想你肯定会问这个看起来ip比较独特的网卡应该没有外网连接能力吧, 没错, 恭喜你, 猜对了, 这货的确不能直接连接外网! But, 有两个方法可解决这个问题: 第一个方式是如果你主机的真实网卡是有线网络, 那么可以过在 网卡的属性中设置共享网络来解决. 不过这个方法对wifi网卡无效. 第二个方法就比较通用了, 也是像我这种使用笔记本+wifi网卡的唯一解决方法: 在你虚拟机配置项中额外勾选增加第二个网卡, 将其设置为桥接模式! 这样一来启动虚拟机之后Ubuntu将拥有两个连接, 一个host-only获得的IP,它几乎是固定的192.168.56.101, 另一个则是在外网通畅的情况下外网路由器DHCP分配的ip. 这两个ip都很有用, 192.168.56.101可以用来实现无论何时Windows都可以自由通过SSH连接虚拟机的需求, 同时由于这个ip比较固定, 因此的SSH软件完全可以写死配置并且由于这个网卡只和本地主机有关, 因此访问速度永远都是杠杠滴. 第二个从路由器那里得来IP的用处就和单独的桥接网络一个原理了, 你访问外网将自动使用这个ip, 路由器产生的局域网络中的设备对虚拟机主机访问也可以通过这个ip来实现, 因此, 诸如 FTP/NFS等嵌入式开发需要用到的常用开发方法都是可以正常进行的.
怎么样, 大声的告诉我, 这个方案完不完美?!
虚拟机+桥接模式+Host-only模式 搭建完美的Windows下Linux开发环境的更多相关文章
- Setting up a EDK II build environment on Windows and Linux:搭建Windows和Linux开发环境[2.2]
Setting up a EDK II build environment on Windows and Linux:搭建Windows和Linux开发环境[2.2] 2015-07 北京海淀区 ...
- windows下STM32开发环境的搭建
一.概述 1.说明 笔者已经写了一篇Linux下STM32开发环境的搭建 ,这两篇文章的最区别在于开发环境所处的系统平台不一样,而其实这个区别对于开发环境的搭建其实影响不大,制作局部上的操作上发生了改 ...
- windows下vue开发环境的搭建
一 介绍: vue.js是什么? Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库 ...
- Windows 下 Ionic 开发环境搭建
Ionic 介绍 首先,Ionic 是什么. Ionic 是一款基于 Cordova 及 Angular 开发 Hybrid/Web APP 的前端框架,类似的其他框架有:Intel XDK等. 简单 ...
- NDK在windows下的开发环境搭建及开发过程
在Android应用的开发工程中,不管是游戏还是普通应用,都时常会用到.so即动态链接库,关于.so是什么玩意儿,有什么好处,这个大家可以在网上查一下,本人不做过多解释..so本是linux下的文件类 ...
- 环境搭建文档——Windows下的Python3环境搭建
前言 背景介绍: 自己用Python开发了一些安卓性能自动化测试的脚本, 但是想要运行这些脚本的话, 本地需要Python的环境. 测试组的同事基本都没有安装Python环境, 于是乎, 我就想直接在 ...
- windows下android开发环境搭建
JDK的安装和Java环境变量的设置 1 JDK下载地址 JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.h ...
- Windows下PHP开发环境搭建
PHP集成开发环境有很多,如XAMPP.AppServ......只要一键安装就把PHP环境给搭建好了.但这种安装方式不够灵活,软件的自由组合不方便,同时也不利于学习.所以我还是喜欢手工搭建PHP开发 ...
- windows下php开发环境的搭建
环境搭建软件组合为:Apache2.2.9+mysql5.2.32+php5.2.6 下载地址如下 http://download.csdn.net/detail/xttxqjfg/5670455 ...
随机推荐
- Java 定时器 Timer 的使用.
一.概念 定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程的方式进行处理,所以它和多线程技术还是有非常大的关联的.在JDK中Timer类主要负责计划任务的功能, ...
- 从网络获取json数据,使用imageloader获取网络图片资源并显示在ListView上
http://www.93.gov.cn/93app/data.do?channelId=0&startNum=0 这是一个接口,通过这个接口来获取数据并解析 大体上就是把解析的数据还有图片u ...
- 电商Banner设计背后的12个人性的秘密
- 交换机端口呈现err-disable的原因
导致交换机端口呈现err-disable状态的原因有很多,为方便大家查询,特归纳如下: 1. duplex mismatch (A is correct) 2. port-channel misc ...
- Java中equals和==之间的区别
今天在写表达式求值的时候,发现了equals和==||!=和!equals()之间是不一样的. 我就从网上搜了搜关于这方面的知识,然后在下面做一个总结: Java中有两类数据类型: 基本数据类型(Pr ...
- GUI记事本+切换面板1.1版
package com.niit.javagui; import java.awt.Color; import java.awt.MenuBar; import java.awt.event.Inpu ...
- 201521123109《java程序设计》第一周学习总结
1.本章学习总结 java是我这学期学习的一门新的编程语言,个人觉得java还是很深奥的,对于一门新的计算机语言,就像打开了一扇新世界的大门,有许多东西需要不断学习不断探索,除了上课认真听讲,平时还要 ...
- 201521123053《Java程序设计》第十周学习总结
---恢复内容开始--- 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 在java多线程程序中,所有线程都不允许抛出未捕获的checked excepti ...
- Eclipse中删除tomcat server 导致不能重新创建该版本的tomcat server
在Eclipse中创建了一个Web工程后,需要将该工程部署到Tomcat中进行发布.有时就会遇到在New Server对话框中选择了Tomcat 6/7后却无法单击“Next”按钮的问题,如下图所示: ...
- OSGi-入门篇之模块层(02)
1 什么是模块化 模块层是OSGi框架中最基础的一部分,其中Java的模块化特性在这一层得到了很好的实现.但是这种实现与Java本身现有的一些模块化特性又有明显的不同. 在OSGi中模块的定义可以参考 ...