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"
相关文章:
 
Vagrant配合VirtualBox搭建虚拟机
目录 前言一、软件下载及安装1.下载2.安装扩展: 二、创建一个虚拟机1.Vagrant官方镜像仓库 三、使用远程工具连接虚拟机1.修改相关配置文件 四、虚拟机克隆及使用1.通用配置2.简单搭建一个java环境3.克隆虚拟机1.重命名虚拟机(可选)2.打包指定…...
Elasticsearch 建议(Suggesters):实现自动补全和拼写检查
引言 在现代搜索引擎中,自动补全和拼写检查功能已成为提升用户体验的重要工具。Elasticsearch,作为一款强大的分布式搜索和分析引擎,提供了多种Suggesters API来帮助开发者实现这些功能。本文将详细介绍Elasticsearch中的四种主要Suggester—…...
部署过docker后,防火墙firewall与iptables的基本指令
一、iptables【无需stop docker服务】 如果服务器中部署了docker,优先选用iptables 1. 记录关闭docker中运行的mongoDB的27017端口: 由于docker与iptables存在配置规则,因此要修改docker相关端口的可访问性时需要使用下面的语句:…...
华为 RIP 协议中 RIP 兼容版本、RIPv1、RIPv2 在收发 RIP 报文时的区别
RIP (Routing Information Protocol,路由信息协议) RIP 是一个比较早期的协议,在实际部署中较少使用,但RIP 协议的机制是所有矢量跻由协议的基础,因此,掌握 RIP 协议的工作原理对研究矢量路由协议有重要的…...
 
深度学习pytorch多机多卡网络配置桥接方法
1 安装pdsh(Parallel Distributed Shell) sudo apt install pdsh sudo -s # 切换超级用户身份 …...
 
服务器信息获取工具
功能介绍 SSH连接到远程服务器: 用户可以输入目标服务器的IP地址、用户名、密码以及SSH端口(默认22)。 工具会尝试连接到远程服务器,并在连接失败时显示错误信息。 运行命令并返回输出: 工具可以在远程服务器上运…...
uniapp 防止重复提交数据
当用户快速点击按钮时候。我们可以统一在 请求拦截 中做防止重复提交数据的处理 以下是使用uview2封装的request请求 import { autoLogin, getUserInfo } from /utils/method.js import { refreshToken } from /api/login.js const serversUrl require(./serversUrl.js).ser…...
线程池工具类
线程池简述 为什么需要一个线程池工具类? 答:整个项目,用到线程执行任务的地方很多,不可能哪里用到就在那里直接new一个线程执行,这样资源得不到重复利用,一旦线程过多就会导致内存不足。 线程池的好处是…...
 
印尼“支付宝” DANA 如何借力 OceanBase 实现3个“关键零”
当前,移动支付在东南亚正迅猛发展,据谷歌、淡马锡与贝恩公司发布的报告预测,东盟地区蓬勃兴起的移动支付市场有望在2030年突破至2万亿美元的交易规模。 在此背景下,DANA作为印尼——东南亚最大经济体中的一员,秉持着推…...
 
2018-2022 年份微博签到数据集
前阵子接到一个实验室老师的需求,采集五年前(2024-52019)过年前后的北京微博签到数据。 前两年采集的深圳签到数据是 2022 年是当年的尚可,这次虽然时间跨度只有两个月,但是由于时间太过久远,但是颇费了一…...
 
Avalonia开发实践(二)——开发带边框的Grid
一、开发背景 在实际开发工作中,常常会用到Grid进行布局。为了美观考虑,会给每个格子加上边框,如下图: 原生的Grid虽然有ShowGridLines属性可以控制显示格子之间的线,但线的样式不能定义,可以说此功能非常…...
 
Java泛型的定义与运用
泛型 泛型的作用从使用层面上来说是统一数据类型,防止将来的数据转换异常。从定义层面上来说,定义带泛型的类,方法等,将来使用的时候给泛型确定什么类型,泛型就会变成什么类型,凡是涉及到泛型的都会变成确…...
 
Java如何自定义注解及在SpringBoot中的应用
注解 注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说…...
微软 Edge 浏览器全解析
微软 Edge 是微软推出的一个现代化浏览器,继承了 Internet Explorer(IE)的部分功能,但在速度、安全性和兼容性方面做出了很大改进。下面是对微软 Edge 浏览器的详细解析,包括其特点、安装、配置和常见问题的解答。 微软 Edge 浏览器的特点 基于 Chromium 内核 Edge 浏览…...
 
C++ 八股(1)
C语言中strcpy为什么不安全?如何解决? 主要原因是缺乏对输入长度的边界检查,容易导致缓冲区溢出漏洞。 解决:可以使用strncpy函数替代,或者在程序最顶端加入代码段 #define _CRT_SECURE_NO_WARNINGS 缓冲区溢出 …...
 
超高精电容传感器PCAP01调试+LABVIEW数据可视化调试手记
PCAP01超高精电容传感芯片STM32LabView可视化 文章目录 PCAP01超高精电容传感芯片STM32LabView可视化一、PCAP01介绍1.1、PCAP01引脚定义1.2、电容测量1.3、温度测量1.4、PCAP典型测试电路 二、PCAP01的STM32驱动2.1、SPI协议配置2.2、PCAP01浮空电容测量内部温度测量操作流程 …...
 
5.更多
发现一个项目与 MkDocs 类似的项目 PyMdown 拓展文档 ,等待探索。 1.排版模仿 以下网站使用 MkDocs 构建 Material for MkDocs 的美化 - Charles Les Notebook (charleschile.com) Documentation - Home Assistant (home-assistant.io) Godot Docs – master bra…...
ConditionalOnJndi注解使用介绍、应用场景以及示例代码
概述 ConditionalOnJndi 是 Spring Framework 中的一个条件注解,用于在特定的 JNDI (Java Naming and Directory Interface) 环境条件下决定是否创建一个 bean 或配置一个 bean。JNDI 是 Java EE 规范中定义的一种用于访问命名和目录服务的 API,它允许 …...
 
Spring Cloud 引入
1.单体架构: 定义:所有的功能实现都打包成一个项目 带来的后果: ①后端服务器的压力越来越大,负载越来越高,甚至出现无法访问的情况 ②业务越来越复杂,为了满足用户的需求,单体应用也会越来越…...
 
自定义波形图View,LayoutInflater动态加载控件保存为本地图片
效果图: 页面布局: <?xml version"1.0" encoding"utf-8"?><LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:la…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
 
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
 
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
 
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
 
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
 
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
