虛擬機+橋接模式+Host-only模式 搭建完美的Windows下Linux開發環境

来源:http://www.cnblogs.com/pangchol/archive/2017/10/13/7662178.html
-Advertisement-
Play Games

相信有很多鞋童和我一個樣是一枚Linux碼農(我現在還是嵌入式方向). 做Linux開發勢必需要一個Linux環境, 大多數開發者會首先選擇一個Linux發行版, 其中Ubuntu LTS版本應該是選取最多的一個了, 原因也很簡單, 該發行版簡單易用的同時足夠穩定和普及. 選擇完發行版就要選擇怎麼安 ...


      相信有很多鞋童和我一個樣是一枚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的話, 那麼更不爽事情也將會發生:所有你終端上所有打開的軟體都關閉了!!! 好了, 我就是這種情況, 雖然我用了tmux, 但還是很不爽每次休眠都要重連SSH. 出現這種情況的原因也比較顯而易見: 睡眠後wifi將有可能自動關閉(休眠後wifi必然會關閉), 當你重新啟動後wifi將重連, 雖然重連後的ip一般不會變, 但這個連接已經不是睡眠之前的連接了, 對於SSH來說, 連接都變了, 它自然是會罷工的.

       這個問題我忍受了很久, 直接今天閑來無事, 想看看有沒有解決辦法, 在嘗試了幾次之後, 還真的找到了一個比較完美的解決辦法:

  不論是virtualbox還是vmware, 都有一個網路模式叫Host-only, 這個模式特點是他自己在主機中虛擬一個網卡, 如果你安裝了virtualbox, 那麼"網路連接"中多出來的"VritalBox Host-only Network" 網卡就是它虛擬出來的網卡, 如果我們在虛擬機中配置使用host-only模式, 則虛擬機中網路將會連接到這個塊虛擬的網卡上, 他的IP也將由這個虛擬網卡自動分配, 預設情況下這個host-only虛擬網卡主機IP地址是192.168.56.1, 分配給第一個虛擬機的地址一般是192.168.56.101. 由於虛擬網卡的存在, 在預設情況下的如果通過192.168.56.101去SSH連接虛擬機, 即便主機沒有外網連接, 主機和虛擬機之間也總是互通的, 這就解決了上面提到了第一問題, 實現了在沒有外網的情況下正常使用SSH登錄虛擬機. 怎麼樣是不是小開心了一下, 更加令人興奮的是由於該網卡是虛擬的, 因此即便是休眠也不會出現喚醒後斷開網路重連的問題, 人家根本不會斷開!!! 這又解決了上面提到了第二個問題!

  喔, 我想你肯定會問這個看起來IP比較獨特的網卡應該沒有外網連接能力吧, 沒錯, 這貨的確不能直接連接外網! 但是, 有兩個方法可解決這個問題: 第一個方法是如果你主機的真實網卡是有線網路, 那麼可以過在網卡的屬性中設置共用網路來解決. 不過這個方法對wifi網卡無效. 第二個方法就比較通用了, 也是像我這種使用筆記本+wifi的唯一解決方法: 在你虛擬機配置項中額外勾選增加第二個網卡, 將其設置為橋接模式! 這樣一來啟動虛擬機之後Ubuntu將擁有兩個連接, 一個是host-only獲得的IP,它幾乎是固定的192.168.56.101, 另一個則是在外網通暢的情況下外網路由器DHCP分配的IP. 這兩個IP都很有用, 192.168.56.101可以用來實現無論何時Windows都可以通過SSH連接虛擬機的需求, 同時由於這個ip比較固定, 因此的SSH軟體完全可以寫死配置中的IP地址為192.168.56.101, 另外由於這個網卡只和本地主機有關, 因此訪問速度永遠都是杠杠滴. 第二個IP是從路由器那裡得來IP, 用處就和單獨的橋接網路一樣了, 你訪問外網將自動使用這個IP, 同一個路由器局下的域網路中的設備對虛擬機主機訪問也可以通過這個IP來實現, 因此, 諸如 FTP/NFS等嵌入式開發需要用到的常用開發方法都是可以正常進行的.

  怎麼樣, 大聲的告訴我, 這個方案完不完美?!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 還原資料庫時,提示還原成功,可是資料庫列表中該資料庫顯示正在還原中: 執行此命令即可: RESTORE DATABASE EnterPriseBuilding WITH RECOVERY 1. 至少有一個誤刪除之前的資料庫完全備份。 2. 資料庫的恢復模式(Recovery mode)是“完整(Fu ...
  • 剛剛大學畢業,接觸大數據有一年的時間了,把自己的一些學習筆記分享給大家,希望同熱愛大數據的伙伴們一起學習,成長! 資料準備: Hadoop-2.7.1下載:http://pan.baidu.com/s/1o7LKaSU 密碼:64du Jdk下載(文中使用1.7,這裡給得1.8,不影響使用):htt ...
  • 1.mysql中or語法的使用,在mysql語法中or使用註意點。 項目遇到坑,遍歷發放獎勵數據查詢錯誤!!! sql中的or語法一般用於多個條件的查詢,上面的語法查詢的相當於:兩個sql查詢出來的數據集合。 2. 要想查詢act_type = 4 and user_id = 11123 或者等於 ...
  • 參考資料: Oracle Database 11g Release 2 安裝詳解 - WIN 10 系統 準備工作: 安裝 Oracle 11g 之前,要確保在此操作系統上未安裝過 Oracle,或者已完全卸載曾經安裝過的 Oracle。 卸載參考資料:完全卸載 Oracle Database 11 ...
  • Mysql函數 select password(‘123456’); #加密密碼 select md5(‘123456’); #md5加密密碼(貌似mysql資料庫相同密碼每次加密後的md5字元串都是一樣) select AES_ENCRYPT('123456','key') ; #加密 selec ...
  • 參考文檔: 本文涉及postgresql的yum安裝,訪問配置及簡單使用。 一.驗證環境 1. 操作系統 CentOS-7-x86_64-Everything-1511 2. PostgresSQL版本 PostgreSQL 9.6.3:https://www.postgresql.org/down ...
  • case when 對錶進行條件分組 case簡單函數 case age when then select name , sex , age , ( case age /*when 條件成立顯示then中內容 then 成立是顯示 else 不成立顯示 end*/ when age = 18 the ...
  • 1、匯流排的基本概念 1.為什麼要用匯流排? 馮諾依曼將電腦分為五部分:運算器、存儲器、控制器、輸入設備和輸出設備。要將這些設備連接起來需要較多的通路。 2.匯流排 匯流排式連接各個部件的信息傳輸線,是各個部件共用的傳輸介質。 3.匯流排上信息的傳送 串列:一次傳輸一位信號。 並行:傳輸距離較短, 4.匯流排 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...