Vagrant配合VirtualBox搭建虛擬機

目錄

  • 前言
  • 一、軟件下載及安裝
    • 1.下載
    • 2.安裝
    • 擴展:
  • 二、創建一個虛擬機
    • 1.Vagrant官方鏡像倉庫
  • 三、使用遠程工具連接虛擬機
    • 1.修改相關配置文件
  • 四、虛擬機克隆及使用
    • 1.通用配置
    • 2.簡單搭建一個java環境
    • 3.克隆虛擬機
    • 1.重命名虛擬機(可選)
    • 2.打包指定名稱的虛擬機
  • 五、異常情況處理
    • 1.up啟動報錯
    • 2.身份驗證失敗

前言

????目前我用虛擬機主要作用是模擬linux系統下當服務器使用,直接用vmware虛擬機或者VirtualBox虛擬機進行搭建相關開發環境耗時,并且很多步驟冗余,至此想要探尋簡化配置步驟,并且可以一次搭建多次復用的方式,我們從使用Vagrant開始,然后我們還有去探索克隆虛擬機,搭建完基礎環境之后移植到其他機器也能快速使用的方法。

一、軟件下載及安裝

我這里是win環境下安裝相關軟件。博客那沒多,要搞就搞點不一樣的,都安裝最新版本。

1.下載

Vagrant下載
截止2024/7/8最新版本為2.4.1版本,我是win64位系統,選擇amd64,如果你的電腦是非常舊的版本或32位選擇I686

在這里插入圖片描述

VirtualBox下載
在這里插入圖片描述
我就想要下載舊一些的版本,他可能穩定或者相關資料更多一些,這里也提供舊版本下載提示。
在這里插入圖片描述
直達鏈接

2.安裝

①安裝VirtualBox
在選擇安裝位置時,你是否也把目錄切換到了其他磁盤而不是默認的系統盤
在這里插入圖片描述
解決方式有兩種
第一種:不喜歡折騰的同學,直接換回系統盤安裝。
第二種:分兩種情況
第一種情況:選擇其他盤后,建一個根目錄,把它安裝到該目錄下。需要做一些準備。
例如我把它安裝到了某個目錄下:
在這里插入圖片描述
需要創建完該文件夾后執行如下命令,以管理員身份運行cmd程序,執行如下幾行代碼。

icacls A:\VirtualBox /reset /t /c
icacls A:\VirtualBox /inheritance:d /t /c 
icacls A:\VirtualBox /grant *S-1-5-32-545:(OI)(CI)(RX) 
icacls A:\VirtualBox /deny *S-1-5-32-545:(DE,WD,AD,WEA,WA)
icacls A:\VirtualBox /grant *S-1-5-11:(OI)(CI)(RX)
icacls A:\VirtualBox /deny *S-1-5-11:(DE,WD,AD,WEA,WA)

執行完畢,重新安裝并且選擇你執行過的目錄即可安裝。
情況2:更換其他磁盤,并且不是放在更目錄,此時你需要把指定目錄和對應的根目錄都執行一次,我嫌麻煩就沒這么搞了。

②安裝Vagrant
這個就沒啥好選的了,最新版沒找到選擇安裝目錄的位置。在最后一步時,你選擇了yes會立刻重啟你的電腦。其他情況暫時未遇到問題。
在這里插入圖片描述

擴展:


icacls工具:管理文件和目錄的訪問控制列表,這些操作類似于linux對目錄用戶組進行權限分配和設置。資料來源網絡,如果錯誤還請指正。

1- icacls A:\VirtualBox /reset /t /c

這個命令將重置A:\VirtualBox目錄及其所有子目錄和文件的權限為默認設置。/t參數表示操作遞歸應用于所有子目錄和文件,/c參數則表示如果遇到錯誤,命令會繼續處理其他項。

2- icacls A:\VirtualBox /inheritance:d /t /c

此命令禁用了A:\VirtualBox目錄及其子目錄的繼承權限。inheritance:d表示刪除現有的繼承權限條目,/t/c與上一個命令相同

3- icacls A:\VirtualBox /grant *S-1-5-32-545:(OI)(CI)(RX)

這個命令向A:\VirtualBox目錄及其子目錄授予對用戶組*S-1-5-32-545(通常是本地用戶組)的讀取權限。(OI)表示對象繼承,(CI)表示容器繼承,(RX)是讀取權限的縮寫。

4- icacls A:\VirtualBox /deny *S-1-5-32-545:(DE,WD,AD,WEA,WA)

此命令拒絕A:\VirtualBox目錄及其子目錄中*S-1-5-32-545用戶組的多種權限:刪除、寫入數據、添加子目錄、寫入擴展屬性、寫入屬性等。

5- icacls A:\VirtualBox /grant *S-1-5-11:(OI)(CI)(RX)

類似于第三個命令,但這次是向*S-1-5-11(通常是管理員組)授予讀取權限。

6- icacls A:\VirtualBox /deny *S-1-5-11:(DE,WD,AD,WEA,WA)

同第四個命令,但這次是對*S-1-5-11用戶組拒絕多種權限。


如果你的電腦沒有開啟虛擬化,需要進入bois進行開始虛擬化設置!!!每個人電腦多少有一些差異,如果沒有找到請按照自己電腦型號去網上查一下在哪塊開啟

在這里插入圖片描述
在這里插入圖片描述


二、創建一個虛擬機

1.Vagrant官方鏡像倉庫

倉庫地址
我們使用vagrant 進行虛擬機的創建,使用他對應的官方鏡像進行linux系統的創建。
相關命令在他的文檔中有體現
在這里插入圖片描述
初始化一個centos7虛擬機,啟動虛擬機。
cmd執行如下命令

vagrant init centos/7
vagrant up

在這里插入圖片描述
啟動虛擬機

vagrant up

在這里插入圖片描述
在這里插入圖片描述


三、使用遠程工具連接虛擬機

1.修改相關配置文件

使用遠程工具連接虛擬機。

這里的網絡和之前博客不太一樣,注意甄別。找到對應的虛擬機網卡信息

ipconfig

從這里開始看就行
修改vagrant配置文件,把對應的ip設置為靜態ip,在192.168.56.xx網段下即可
在這里插入圖片描述
我的在第35行
在這里插入圖片描述
首先,使用win的cmd進行遠程ssh連接,修改一下linux中的一些ssh連接設置。

vagrant ssh

切換root用戶,密碼為:vagrant
在這里插入圖片描述
·改參數值,找到 PasswordAuthentication 改為yes

vi /etc/ssh/sshd_config

剛進入文件時,使用vi的搜索功能。

/Passw

此時定位到對應的內容后,按i鍵進行編輯。
在這里插入圖片描述

:wq

重啟ssh服務

systemctl restart sshd

此時使用你自己的ssh工具即可進行訪問
ip:192.168.56.10
username:root
password:vagrant

四、虛擬機克隆及使用

1.通用配置

更換一下國內yum源
先備份原有配置

sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

創建一個新的repo文件

sudo vi /etc/yum.repos.d/alimirror.repo

編輯新的源

[alimirror]
name=alimirror
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=0
enabled=1

清理緩存并更新元數據

yum clean all
yum makecache fast

更新yum

yum update

安裝vim

yum install -y vim-enhanced

2.簡單搭建一個java環境

下載一個jdk包
此處省略相關配置環境變量等,主要為了驗證克隆之后是否能生效和使用。
在這里插入圖片描述

3.克隆虛擬機

為虛擬機配置環境變量,這塊不需要非得抄我的知道怎么配環境變量的同學自行配置即可
1.在這里插入圖片描述

1.重命名虛擬機(可選)

為什么要對虛擬機重命名?
因為這樣克隆虛擬機時,可以指定克隆那個虛擬機,當然你如果不想進行重命名,也有支持打包當前運行中的虛擬機方式。但是如果你同時需要啟動多個虛擬機時,這塊隨意,不影響功能使用,這塊也稍微麻煩一些,不想麻煩的可以跳過,個人感覺用處不大。

查詢當前虛擬機名稱

vagrant status

在這里插入圖片描述
就叫default

重命名虛擬機名稱,為第一步使用vagrant 打包做準備。
先關閉當前虛擬機。

1.修改Vagrantfile配置文件,增加虛擬機名稱配置,就挨著config.vm.box配置再上放增加一行即可,結束時需要增加end。

  config.vm.define "vm1" do |node|xxxxconfig.vm.box = "centos/7"end

示例:

Vagrant.configure("2") do |config|config.vm.define "vm1" do |node|node.vm.box = "ubuntu/focal64"# ... 其他配置 ...end
end

我命名為vm1

config.vm.define "vm1" do |node|

在這里插入圖片描述
2.重命名還未結束,還需要根據uuid更新底層邏輯

vboxmanage list vms

這個命令如果提示不是內外部命令,那就是你沒有成功配置box的環境變量。
在這里插入圖片描述
3.更新虛擬機名稱

vboxmanage modifyvm {UUID} --name "虛擬機名稱"

我的命令

vboxmanage modifyvm {604009aa-cd0c-40a6-978a-380b23c8b873} --name "vm1"

在這里插入圖片描述
再次查詢當前虛擬機名稱

vagrant status

在這里插入圖片描述
至此重命名完成。

2.打包指定名稱的虛擬機

方式1:cmd命令方式(已經驗證成功,可以正常使用)
使用vagrant命令打包當前的虛擬機
①查詢所有虛擬機列表

vboxmanage list vms

在這里插入圖片描述
打包指定名稱的虛擬機
你想把打包的文件放到哪里,此時你就使用cmd進行切換目錄
示例

cd A:\DATA\copy

此時執行打包命令后會把打包的文件放在該目錄下
③進行打包
示例打包名為vm1虛擬機,輸出文件為vagrant01.box

vagrant package --base vm1 --output copy.box 

這一步非常的耗時!!!,并且控制臺無進度條,此時需要耐心等待。我的文件8個多G,從任務管理器能看出磁盤io每秒達到50mb左右的速度,也可能我電腦拉胯些比較慢。
兩種方式判斷是否完成
第一種:控制臺出現不在阻塞之后Compressing即可
在這里插入圖片描述

第二種:保存目錄的文件不再是0kb大小
在這里插入圖片描述
④將打包好的box文件add到vagrant
copy 可以理解為虛擬機的名字copy ,copy .box是我們打包的文件名稱。
注意:需要切換到copy.box目錄再執行下方命令

vagrant box add copy copy.box

⑤初始化一個新的vagrant環境

vagrant init copy 

執行完成后只有一個Vagrantfile文件
⑥編輯這個新的Vagrantfile文件

Vagrant.configure("2") do |config|config.vm.define "copy"config.vm.box = "copy"config.vm.network "private_network", ip: "192.168.56.20"config.ssh.username = "vagrant"config.ssh.password = "vagrant"
end

全量替換成我的,如果你不是交copy則替換你對應的虛擬機名稱,ssh這塊是因為解決某個異常添加的,具體異常請在下方查閱。
⑦更改默認的虛擬機位置
在這里插入圖片描述
選擇其他,找到你init的目錄即可
在這里插入圖片描述
啟動這個虛擬機

vagrant up copy

此時啟動后virtual box頁面會有一個虛擬機,但是名稱不是我們起的copy,而是一個很長一串的名稱,加上copy內容,這塊還在研究,不影響使用。

⑧再次修改ip地址
進入控制臺,使用默認的username和password進行登錄,在切換到root用戶

vagrant ssh

username和password都為

vagrant
su root
vagrant

先查詢一下ip地址是否還是之前打包的ip地址

ip addr show

我這塊已經手動改過了,你的話應該還是192.168.56.10,此時需要在服務器端更改一下。
在這里插入圖片描述
更改ip地址
切換到該目錄下,查詢自己需要更改的文件,我的文件是eth1文件,你的可能不是

cd /etc/sysconfig/network-scripts/

在這里插入圖片描述

vi ifcfg-eth1

在這里插入圖片描述
修改完保存重啟網路服務一下

systemctl restart network

驗證一下是否生效

ip addr show eth1

至此以命令方式的克隆虛擬機完成,之前搭建的java環境也正常使用。

方式2:virtual box方式打包(未驗證成功,正在解決問題)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
復制成功之后,還是需要把對應的文件夾放到系統盤的默認路徑下,否則檢測不到(這塊需要再研究一下,目前只能是放在原來虛擬機的文件夾下)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
打開我們復制的這個虛擬機文件
在這里插入圖片描述
在這里插入圖片描述
正在解決ing

五、異常情況處理

vagrant官方網站
有問題實在解決不了,那就只能肝官網文檔了。

1.up啟動報錯

The machine with the name ‘copy’ was not found configured for this Vagrant environment.

解決方式
Vagrantfile文件增加配置內容

config.vm.define "copy"

2.身份驗證失敗

copy:Warning: Authentication failure. Retrying…

直接使用明文username和password,目前還沒有進行更加深入的研究,只用這個方式先解決,如果大家有其他優雅的方式歡迎一起交流討論。

config.ssh.username = "vagrant"
config.ssh.password = "vagrant"

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43661.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43661.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43661.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

靶場練習 手把手教你通關DC系列 DC1

DC1靶場通關教程 文章目錄 DC1靶場通關教程前言一、信息收集1.主機存活2.端口收集3.網頁信息收集4.目錄收集4.1 Nikto4.2 Dirb 信息收集總結 二、漏洞發現與利用1. 發現2. 利用 三、FlagFlag1Flag2Flag3Flag4Flag5(提權) 前言 本次使用的kali機的IP地址為192.168.243.131 DC1的…

機器學習 - 比較檢驗

列聯表 列聯表(Contingency Table)是一種用于顯示兩個或多個分類變量之間關系的表格。它廣泛應用于統計學中的分類數據分析,尤其在獨立性檢驗和關聯性分析時。列聯表的每個單元格展示了相應分類變量組合的頻數(或比例&#xff09…

【2024_CUMCM】LINGO入門+動態規劃

目錄 什么是動態規劃 怎么使用動態規劃? 例題:最短路線問題 2020b-問題一 穩定性分析 靈敏度分析 什么是動態規劃 基本想法:將原問題轉換為一系列相互聯系的子問題,然后通過逐層遞推求得最后的解 基本思想:解決…

X12端口配置指南:ISA ID、測試指示符與997

通過知行之橋EDI系統實現X12 & 標準XML之間的格式轉換時,需要完善交換頭ISA ID及其限定符、測試標識符以及997的相關配置。 在X12文件中有兩組EDI ID對,分別是發送方 ID 限定符 及發送方ID ,接收方 ID 限定符及接收方ID。 比如&#xf…

STM32Cubemx配置生成 Keil AC6支持代碼

文章目錄 一、前言二、AC 6配置2.1 ARM ComPiler 選擇AC62.2 AC6 UTF-8的編譯命令會報錯 三、STM32Cubemx 配置3.1 找到stm32cubemx的模板位置3.2 替換文件內核文件3.3 修改 cmsis_os.c文件3.4 修改本地 四、編譯對比 一、前言 使用keil ARM compiler V5的時候,編譯…

RK3568 buildroot 使用dropbear實現ssh遠程的方法

RK3568 buildroot 使用dropbear實現ssh遠程的方法 文章目錄 RK3568 buildroot 使用dropbear實現ssh遠程的方法前言一、創建S99dropbear.sh腳本二、創建sshd_config三、添加root賬戶密碼到系統驗證登錄前言 rk3568 linux 的sdk中,buildroot已經集成了dropbear的所需的lib庫環境…

交替打印-GO

1 兩個channel 版本 package mainimport ("fmt""sync")var wg sync.WaitGroup var c1 chan int var c2 chan intfunc A(){defer wg.Done()for i:0;i<10;i {<-c1fmt.Println(2*i)c2<-1 //牽引協程} } func B(){defer wg.Done()for i:0…

Java內存區域與內存溢出異常(自動內存管理)

序言&#xff1a;Java與C之間有一堵由內存動態分配和垃圾收集技術所圍成的高墻&#xff0c;墻外面的人想進去&#xff0c;墻里面的人卻想出來。 1.1概述 對于從事C、C程序開發的開發人員來說&#xff0c;在內存管理領域&#xff0c;他們既是擁有最高權力的“皇帝”&#xff0c…

使用OpenCV在按下Enter鍵時截圖并保存到指定文件夾

使用OpenCV在按下Enter鍵時截圖并保存到指定文件夾 在這篇博客中&#xff0c;我們將介紹如何使用OpenCV庫來實現一個簡單的功能&#xff1a;在按下Enter鍵時從攝像頭截圖并保存到指定的文件夾中。這個功能可以用于各種應用&#xff0c;例如監控系統、視頻捕捉等。 前置條件 …

在FPGA程序中Handshake(握手)和Register(寄存器)區別

在FPGA程序中&#xff0c;Handshake&#xff08;握手&#xff09;和Register&#xff08;寄存器&#xff09;是兩種不同的通信和數據傳輸機制。它們各有特點和適用場景。以下是它們的區別和應用場景的詳細解釋&#xff1a; Register&#xff08;寄存器&#xff09; 特點&#…

SQLServer用戶們,你們攤上大事了!

最近一段時間&#xff0c;我們經常會收到了許多用戶的咨詢&#xff0c;問我們何時能納管SQLServer&#xff1f;耐不住小伙伴們的猛烈催促及熱切期待&#xff0c;本不想納管SQLServer的研發團隊也抓緊將這項需求提上日程。并在DBdoctor v3.2.2版本中成功實現了對SQLServer的納管…

班級錄取查詢系統如何制作

在教育的長河中&#xff0c;我們每位老師都曾面臨過這樣一個問題&#xff1a;如何高效、準確地完成班級錄取查詢的任務&#xff1f;記得在以往&#xff0c;每當新學期伊始&#xff0c;我們不得不手忙腳亂地整理學生名單&#xff0c;然后逐一通知他們所在的班級。這個過程不僅耗…

谷歌Google Ads新賬號推廣方案

第一階段重點 推廣地區優化&#xff1a;分析投放國家的數據&#xff0c;剔除高花費低轉化的國家&#xff0c;將預算重新分配給高性價比的國家&#xff0c;從而降低詢盤成本并增加詢盤數量。關鍵詞優化&#xff1a;識別并暫停或降價高成本低回報的關鍵詞&#xff0c;減少詢盤成本…

《mysql篇》--索引事務

索引 索引的介紹 索引是幫助MySQL高效獲取數據的數據結構&#xff0c;是一種特殊的文件&#xff0c;包含著對數據表里所有記錄的引用指針&#xff0c;因為索引本身也比較大&#xff0c;所以索引一般是存儲在磁盤上的&#xff0c;索引的種類有很多&#xff0c;不過如果沒有特殊…

[ios-h5]在ios系統瀏覽器中輸入框得到焦點時頁面自動放大

問題&#xff1a; 在ios系統瀏覽器中輸入框得到焦點時頁面自動放大。 解決&#xff1a; 添加meta標簽。 <meta name"apple-mobile-web-app-capable" content"yes" /> <meta name"viewport" content"widthdevice-width, initial-…

隱式類型轉換 算術轉換

目錄 整型提升 間接證明整型提升的代碼案例 算術轉換 整型提升 何為整型提升&#xff1a; C語言的整型算術運算總是至少以缺省&#xff08;默認&#xff09;整型類型的精度來進行的 為了獲得這個精度&#xff0c;表達式中的字符類型和短整型操作數在使用之前被轉換為普通整…

基于SpringBoot實現輕量級的動態定時任務調度

在使用SpringBoot框架進行開發時&#xff0c;一般都是通過Scheduled注解進行定時任務的開發&#xff1a; Component public class TestTask {Scheduled(cron"0/5 * * * * ? ") //每5秒執行一次public void execute(){SimpleDateFormat df new SimpleDateFormat(…

解決 NullReferenceException: Object reference not set to an instance of an object

在 Unity 中 利用 URDF Importer import UR5e_gripper 的 URDF file 時出現錯誤&#xff1a; NullReferenceException: Object reference not set to an instance of an object。 理論上是有個Object 是 Null&#xff0c;當我再次檢查URDF后仍覺得路徑沒有寫錯。 于是我 把Mesh…

軟件測試面試200問(含答案+文檔)

Part1 1、你的測試職業發展是什么&#xff1f; 測試經驗越多&#xff0c;測試能力越高。所以我的職業發展是需要時間積累的&#xff0c;一步步向著高級測試工程師奔去。而且我也有初步的職業規劃&#xff0c;前3年積累測試經驗&#xff0c;按如何做好測試工程師的要點去要求自…

spring的bean注冊

bean注冊 第三方jar包的類想添加到ioc中&#xff0c;加不了Component該怎么辦呢。 可以使用Bean和Import引入jar包&#xff0c;可以使用maven安裝到本地倉庫。 修改bean的名字&#xff1a;Bean("aaa")使用ioc的已經存在的bean對象&#xff0c;如Country&#xff1a;p…