L06-Ubuntu系統中部署Vagrant和VirtualBox

来源:https://www.cnblogs.com/suhaha/archive/2018/04/08/8738910.html
-Advertisement-
Play Games

一、前言 1.Vagrant是一個搭建完整的虛擬開發環境的工具~~~更多關於Vagrant理論可查看這篇博文https://www.cnblogs.com/davenkin/p/vagrant-virtualbox.html 2.實驗環境 在Win10中利用VMWare Workstation創建一 ...


一、前言

1.Vagrant是一個搭建完整的虛擬開發環境的工具~~~更多關於Vagrant理論可查看這篇博文https://www.cnblogs.com/davenkin/p/vagrant-virtualbox.html

 

2.實驗環境

在Win10中利用VMWare Workstation創建一臺Ubuntu虛擬機,版本為64位Ubuntu Desktop 16.04,4核,4G記憶體;然後在Ubuntu中安裝Vagrant和VirtualBox,所用到的Vagrant和VirtualBox版本都是截至2018/04/08時候的最新版。

 

之所以使用VMWare Workstation來創建Ubuntu的虛擬機而不是VirtualBox,跟下麵即將說到的“ubuntu的CPU必須要支持虛擬化”有關,因為在VirtualBox中我不知道怎麼設置才能使得創建的ubuntu的CPU支持虛擬化,而在VMWare Workstation中,可以通過如下方法進行開啟。

 

3.關鍵點

因為我們所做的操作是“在Ubuntu中利用Vagrant+VirtualBox創建虛擬機”,因此,ubuntu的CPU必須要支持虛擬化才行——註意,是Ubuntu的CPU,不是本機Windows

一般我們要在筆記本電腦上利用VMWare Workstation或者VirtualBox來創建虛擬機時,是需要筆記本的CPU支持虛擬化的,通常筆記本的CPU都支持虛擬化,只需在筆記本電腦開機時進入BIOS進行設置開啟即可。而這裡因為要在ubuntu中創建虛擬機,因此需要ubuntu的CPU支持虛擬化。

如果你的ubuntu系統不支持CUP虛擬化,那麼就沒必要按下麵步驟進行安裝了,因為一定會失敗,必須要將ubuntu的CUP設置成支持虛擬化。

 

在Ubuntu中可以通過下麵的方法驗證CPU是否支持虛擬化

相關博文:https://www.linuxidc.com/Linux/2012-09/69714.htm

 

查詢實驗時的虛擬機:

 

 

4.提前列一下接下來可能會用到的vagrant命令

$ vagrant init      # 初始化,用法:vagrant init 已有的box名稱

$ vagrant up        # 啟動虛擬機,對應就是關機

$ vagrant halt      # 關閉虛擬機

$ vagrant reload    # 重啟虛擬機

$ vagrant ssh       # SSH 至虛擬機

$ vagrant suspend   # 掛起虛擬機——只是暫停,虛擬機記憶體等信息將以狀態文件的方式保存在本地,可以執行恢復操作後繼續使用

$ vagrant resume    # 喚醒虛擬機—— 與前面的暫停相對應

$ vagrant status    # 查看虛擬機運行狀態

$ vagrant destroy   # 銷毀當前虛擬機,刪除後在當前虛擬機所做進行的除開Vagrantfile中的配置都不會保留

 

#box管理命令

$ vagrant box list    # 查看本地box列表

$ vagrant box add    

# 添加box到列表,用法:vagrant box add 按需起的box名稱 box所在url或者本地路徑

$ vagrant box remove  

# 從box列表移除 ,用法:vagrant box remove 你的box名稱

 

5.安裝之前最後一點——在我初次安裝時因為ubuntu的CPU不支持虛擬化,我又沒註意到這點,因此安裝過程中遇到了一些錯誤,放在文章末尾了,有一定的參考意義。

 

 

二、安裝步驟

1、安裝Virtualbox

1.1安裝之前先安裝virtualbox的依賴包,否則會有依賴包報錯

命令:sudo apt-get install -y libsdl1.2debian

 

 

1.2安裝VirtualBox

我看其他教程有使用apt-get install命令安裝virtualbox的,我有試過,不過該命令安裝的不是最新版,所以我採取的辦法是先上網把virtualbox下載下來,然後上傳到ubuntu當中(上傳到任意目錄),接著切換到virtualbox包所在目錄,執行:

sudo dpkg -i virtualbox-5.2_5.2.8-121009-Ubuntu-xenial_amd64.deb

因為我已經安裝過virtualbox所需依賴包了,所以安裝過程沒有報錯,假若你安裝的時候報錯了,則將所需依賴包使用apt-get install命令進行安裝,之後再次安裝virtualbox即可。

 

1.3安裝完成之後使用virtualbox --help命令進行檢查

如下圖,輸出virtualbox幫助信息,說明virtualbox安裝成功

 

2、vagrant是ruby開發的,先安裝ruby相關的東西

命令:sudo apt-get -y install ruby rubygems

註:我不知道這一步是否必須,我看個別教程裡面有的安裝了,有的沒有,反正我是跟著做了。。。

 

3、在Vagrant官網下載Vagrant的deb軟體包

下載命令:sudo wget https://releases.hashicorp.com/vagrant/2.0.3/vagrant_2.0.3_x86_64.deb

安裝命令:sudo dpkg -i vagrant_2.0.3_x86_64.deb

安裝完成使用vagrant --version進行檢查,如上圖。

也可以直接使用apt-get安裝,命令:sudo apt-get install vagrant。

不過同樣的,apt-get命令安裝的不是最新版本。

 

4、下載官方封裝好的基礎鏡像放到合適的目錄裡面,是一個格式為box的文件,地址:http://www.vagrantbox.es/,可以在ubuntu中使用wget命令下載,也可以再本地Windows上下載下來,然後上傳到ubuntu裡面。

官網界面:

 

我下載的box鏡像:

 

5.創建一個開發目錄,並切換到該目錄下

命令:

sudo mkdir vagrant_project

cd vagrant_project/

註:創建該目錄是用來存放vagrant配置文件的,因此下麵第7步的初始化步驟必須在該目錄下執行,vagrant才會預設把Vagrantfile配置文件放在該目錄下;創建的目錄名稱是隨意的,沒有特定要求。

 

6、添加鏡像到 Vagrant

命令:sudo vagrant box add ubuntu1604 /data/ios/centos-7.0-x86_64.box

註:這裡我添加的鏡像是centos-7.0-x86_64.box,但是我給它起的名字卻是ubuntu1604,是因為一時手殘了,名字其實可以根據喜好隨便起,沒影響

執行完之後使用sudo vagrant box list查看添加的鏡像是否存在,如上圖。

 

7、初始化開發環境

命令:sudo vagrant init ubuntu1604

註:“ubuntu1604是上一步添加鏡像時所起的名字;且這一步初始化操作必須在第5步創建的開發目錄中執行,否則你創建的目錄就沒用了;最後,初始化成功後會生成配置文件Vagrantfile

 

8、啟動虛擬機

在第5步創建的工作目錄下執行下麵命令進行啟動虛擬機

命令:sudo vagrant up

(1)由輸出來看啟動沒有問題

(2)註意上圖的最後一行:vagrant預設把創建的虛擬機的/vagrant目錄映射到ubuntu的/home/suxy/vagrant_project目錄上了(/home/suxy/vagrant_project就是第5步創建的開發目錄)——這樣一來,這兩個目錄之間是共用的。

(3)Vagrant預設創建的虛擬機賬號密碼為:vagrant/vagrant

(4)如果這一步執行vagrant up失敗了,在修改完錯誤之後再次啟動虛擬機前,需要先執行vagrant halt停止虛擬機、vagrant destroy銷毀虛擬機。

 

9.驗證

使用sudo vagrant ssh命令連接vagrant創建的虛擬機

 

若還有其他個性化的設置,可參考文章頭提到的博文。

 

 

三、部署時遇到的錯誤

(1)錯誤一:這裡所列舉的錯誤是在ubuntu的CPU不支持虛擬化的情況下執行第8步啟動虛擬機時所報的錯誤,如下

錯誤解決可查看:https://www.cnblogs.com/csliwei/p/5860005.html

根據博文中的說法,如果是下載的box文件(我操作時確實是下載的box文件),vagrant box add和init之後啟動,可能出現長時間無法通過vagrant ssh登陸的問題

說是有兩種可能

(1)其一是虛擬機確實啟動失敗,由於vagrant預設不顯示虛機啟動界面,所以不太好判斷。因此需要在Vagrantfile配置中增加vb.gui = true選項,就可以查看虛機的啟動過程(我的理解是加上該選項之後,可以使得在vagrant up啟動虛擬機的時候顯示virtualbox啟動界面,以便查看是否是PC的vt-x支持沒有開啟)。常見問題是沒有開啟PC的vt-x支持,進BIOS修改配置即可。

(2)其二是如果使用拷貝過來的Vagrantfile進行up啟動

可能會由於ssh認證機制導致失敗。vagrant預設採用key登錄,但所用的KeyPair可能沒有正常配置。

 

於是先對第一種可能的錯誤進行驗證

在Vagrantfile文件中加入:

  config.vm.provider :virtualbox do |vb|

    vb.gui = true

  end

如下:

 

因為前面執行vagrant up失敗了,所以先執行vagrant halt停止虛擬機、vagrant destroy銷毀虛擬機

 

接著使用sudo vagrant up命令再次啟動虛擬機,果然再次出錯了,不過因為在Vagrantfile配置中增加vb.gui = true選項,所以這次報錯時virtualbox的報錯也顯示出來了,如下圖——果然是因為CUP不支持虛擬化的緣故

 

為了確認是否Ubuntu的CPU確實不支持虛擬化,通過下圖中所說的方法查看

實際查詢如下圖:

果然。。。

 

(2)錯誤二:在ubuntu的CPU支持虛擬化的情況下執行第8步啟動虛擬機時出現的問題

正如上圖紅框中所說的,使用的box鏡像可能有問題,因此我換了Centos的box進行,之後安裝成功。


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

-Advertisement-
Play Games
更多相關文章
  • 題目描述 給定一個完全圖,保證$w_{u,v}=w_{v,u}$且$w_{u,u}=0$,等概率選取一個隨機生成樹,對於每一對$(u,v)$,求$dis(u,v)$的期望值對$998244353$取模。 輸入 第一行一個數$n$ 接下來$n$行,每行$n$個整數,第$i$行第$j$個整數表示$w_{ ...
  • 因為對錶達式樹有點興趣,出於練手的目的,試著寫了一個深拷貝的工具庫。支持.net standard2.0或.net framework4.5及以上。 GitHub地址https://github.com/blurhkh/DeepCopier nuget地址https://www.nuget.org/ ...
  • 一、WebApi路由機制是什麼? 路由機制通俗點來說:其實就是WebApi框架將用戶在瀏覽器中輸入的Url地址和路由表中的路由進行匹配,並根據最終匹配的路由去尋找並匹配相應的Controller和Action並執行的一個過程。 從WebApi框架接收到來自外部環境的介面調用請求到指定介面的執行大概需 ...
  • 概述 UWP Community Toolkit 中有一個為 Frmework Element 提供投影效果的控制項 - DropShadowPanel,本篇我們結合代碼詳細講解 DropShadowPanel 的實現。 DropShadowPanel 提供的陰影效果有很多應用場景,比如給文本提供陰影 ...
  • 所謂熱插拔就是插件可以 在主程式不重新啟動的情況直接更新插件, 網上有很多方案: https://www.cnblogs.com/happyframework/p/3405811.html 如下: 但是我發現有一種最簡單粗暴的辦法, 就是把插件載入到記憶體當中,然後使用Assembly從記憶體中載入DL ...
  • 使用靜態基類方案讓 ASP.NET Core 實現遵循 HATEOAS Restful Web API. 還有一個動態的方案, 以後再寫. ...
  • 做為一個碼農,對新技術的學習是必須滴,但是在學習的同時也要記錄下筆記。讓子彈飛的一句話“步子邁大了容易扯著dan” 話糙理不糙。這句感覺很貼切我們的碼農。 真正做開發滿打滿算有4年了。其中兩年的時間幾乎就像流水線工人的工作,每天也就是改改bug,寫寫存儲過程,當時的存儲過程是信手拈來,一些臨時表、游 ...
  • 首先要明確什麼是中間件?微軟官方解釋:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?tabs=aspnetcore2x 也就是中,我們需要在整個應用程式的請求管道中註入某一個中間層來做我們想做的事情。談談我 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...