相信有很多鞋童和我一个样是一枚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开发环境的更多相关文章

  1. 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   北京海淀区  ...

  2. windows下STM32开发环境的搭建

    一.概述 1.说明 笔者已经写了一篇Linux下STM32开发环境的搭建 ,这两篇文章的最区别在于开发环境所处的系统平台不一样,而其实这个区别对于开发环境的搭建其实影响不大,制作局部上的操作上发生了改 ...

  3. windows下vue开发环境的搭建

    一 介绍: vue.js是什么? Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库 ...

  4. Windows 下 Ionic 开发环境搭建

    Ionic 介绍 首先,Ionic 是什么. Ionic 是一款基于 Cordova 及 Angular 开发 Hybrid/Web APP 的前端框架,类似的其他框架有:Intel XDK等. 简单 ...

  5. NDK在windows下的开发环境搭建及开发过程

    在Android应用的开发工程中,不管是游戏还是普通应用,都时常会用到.so即动态链接库,关于.so是什么玩意儿,有什么好处,这个大家可以在网上查一下,本人不做过多解释..so本是linux下的文件类 ...

  6. 环境搭建文档——Windows下的Python3环境搭建

    前言 背景介绍: 自己用Python开发了一些安卓性能自动化测试的脚本, 但是想要运行这些脚本的话, 本地需要Python的环境. 测试组的同事基本都没有安装Python环境, 于是乎, 我就想直接在 ...

  7. windows下android开发环境搭建

    JDK的安装和Java环境变量的设置 1 JDK下载地址 JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.h ...

  8. Windows下PHP开发环境搭建

    PHP集成开发环境有很多,如XAMPP.AppServ......只要一键安装就把PHP环境给搭建好了.但这种安装方式不够灵活,软件的自由组合不方便,同时也不利于学习.所以我还是喜欢手工搭建PHP开发 ...

  9. windows下php开发环境的搭建

    环境搭建软件组合为:Apache2.2.9+mysql5.2.32+php5.2.6  下载地址如下 http://download.csdn.net/detail/xttxqjfg/5670455 ...

随机推荐

  1. outlook 无法搜索邮件的解决方法

    我的outlook版本是2007 SP3,英文版.一直有搜索不到邮件的问题,例如在搜索框输入发件人的名字,或者邮件中的词语,就是搜索不到邮件,即使那封邮件确实存在. 在网上搜索,Microsoft 的 ...

  2. 转:【深入Java虚拟机】之五:多态性实现机制——静态分派与动态分派

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17965867   方法解析 Class文件的编译过程中不包含传统编译中的连接步骤,一切方法 ...

  3. python--对于装饰器的理解

    1.首先,有个原来写好的函数,完成一定的功能,比如下面的,就打印一句话(某程序被调用).简单点,容易帮我们想清楚程序是怎么执行的. ''' 原函数 ''' def fun1(): print(&quo ...

  4. HTML5 贝塞尔绘画 桃心

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 团队作业8——第二次项目冲刺(Beta阶段)第三天

    BETA阶段冲刺第三天 1.当天站立式会议 2.每个人的工作 (1)昨天已完成的工作: 编写页面讨论 (2)今天计划完成的工作: 完成编写页面 (3)工作中遇到的困难: 验证码正确度 (4)每个人的贡 ...

  6. Swing-JComboBox用法-入门

    JComboBox是Swing中的下拉菜单控件.它永远只能选中一个项目,然而比单选按钮节省空间.如果使用setEditable设置为true则内部选项的文本可以编辑,因此这种组件被称为组合框.注意,对 ...

  7. Java程序设计第五周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 2. 书面作业 **代码阅读:Child压缩包内源代码 Child.java源代 ...

  8. 201521123033《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

  9. Java课程设计——学生成绩管理系统(201521123003 董美凤)

    Java课程设计--学生成绩管理系统(201521123003 董美凤) 1.团队课程设计博客链接 学生成绩管理系统博客链接 2.个人负责模块或任务说明 信息修改 密码修改 部分界面设计 3.自己的代 ...

  10. 浅谈SQL优化入门:1、SQL查询语句的执行顺序

    1.SQL查询语句的执行顺序 (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_ ...