当前位置: 首页 > news >正文

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相关端口的可访问性时需要使用下面的语句&#xff1a…...

华为 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动态加载控件保存为本地图片

效果图&#xff1a; 页面布局&#xff1a; <?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…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构

React 实战项目&#xff1a;微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇&#xff01;在前 29 篇文章中&#xff0c;我们从 React 的基础概念逐步深入到高级技巧&#xff0c;涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...

比特币:固若金汤的数字堡垒与它的四道防线

第一道防线&#xff1a;机密信函——无法破解的哈希加密 将每一笔比特币交易比作一封在堡垒内部传递的机密信函。 解释“哈希”&#xff08;Hashing&#xff09;就是一种军事级的加密术&#xff08;SHA-256&#xff09;&#xff0c;能将信函内容&#xff08;交易细节&#xf…...

Python爬虫(52)Scrapy-Redis分布式爬虫架构实战:IP代理池深度集成与跨地域数据采集

目录 一、引言&#xff1a;当爬虫遭遇"地域封锁"二、背景解析&#xff1a;分布式爬虫的两大技术挑战1. 传统Scrapy架构的局限性2. 地域限制的三种典型表现 三、架构设计&#xff1a;Scrapy-Redis 代理池的协同机制1. 分布式架构拓扑图2. 核心组件协同流程 四、技术实…...

Java + Spring Boot + Mybatis 插入数据后,获取自增 id 的方法

在 MyBatis 中使用 useGeneratedKeys"true" 获取新插入记录的自增 ID 值&#xff0c;可通过以下步骤实现&#xff1a; 1. 配置 Mapper XML 在插入语句的 <insert> 标签中设置&#xff1a; xml 复制 下载 运行 <insert id"insertUser" para…...