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.mzph.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的…

【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的时候,编译…

Java内存区域与内存溢出异常(自动内存管理)

序言:Java与C之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。 1.1概述 对于从事C、C程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的“皇帝”&#xff0c…

在FPGA程序中Handshake(握手)和Register(寄存器)区别

在FPGA程序中,Handshake(握手)和Register(寄存器)是两种不同的通信和数据传输机制。它们各有特点和适用场景。以下是它们的区别和应用场景的详细解释: Register(寄存器) 特点&#…

SQLServer用户们,你们摊上大事了!

最近一段时间,我们经常会收到了许多用户的咨询,问我们何时能纳管SQLServer?耐不住小伙伴们的猛烈催促及热切期待,本不想纳管SQLServer的研发团队也抓紧将这项需求提上日程。并在DBdoctor v3.2.2版本中成功实现了对SQLServer的纳管…

班级录取查询系统如何制作

在教育的长河中,我们每位老师都曾面临过这样一个问题:如何高效、准确地完成班级录取查询的任务?记得在以往,每当新学期伊始,我们不得不手忙脚乱地整理学生名单,然后逐一通知他们所在的班级。这个过程不仅耗…

《mysql篇》--索引事务

索引 索引的介绍 索引是帮助MySQL高效获取数据的数据结构,是一种特殊的文件,包含着对数据表里所有记录的引用指针,因为索引本身也比较大,所以索引一般是存储在磁盘上的,索引的种类有很多,不过如果没有特殊…

[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…

自定义@AnonymousAccess注解

一.目的&#xff1a; 自定义AnonymousAccess注解&#xff0c;可以直接在controller上添加该注解使请求绕过权限验证进行匿名访问&#xff0c;便于快速调用调试以及部分不需要进行安全验证的接口。而不是每次都需要去SecurityConfig文件中进行修改。 二.流程&#xff1a; 三.实…

通用后台管理(二)——项目搭建

目录 前言 一、安装vue-cli依赖 1、使用yarn下载vue-cli 2、使用npm下载 3、检查一下是否下载成功 二、创建项目 1、创建项目&#xff0c;my-app是项目名称 2、 这里选择vue 2&#xff0c;蓝色表示选中的。 3、启动项目 三、下载项目依赖 四、配置项目 1、修改esli…

VS2019_新建窗体应用文件SOP

文章目录 1. 打开VS2. 创建新项目3. 选择Windows窗体应用4. 起名&#xff0c;选位置&#xff0c;框架版本选择4.5及之后&#xff0c;这里选的4.85. 新建完成 1. 打开VS 2. 创建新项目 3. 选择Windows窗体应用 注意要选.NET的 4. 起名&#xff0c;选位置&#xff0c;框架版本…

原来Kimi不是不作为,而是在准备大招!

月之暗面Kimi 作为一款我每天都在使用的AI智能助手&#xff0c;是真正的帮助我解决了不少工作及日常创作的一些事情。 它的表现能力也是毋庸置疑&#xff0c;不论是业内还是普通人&#xff0c;10个人当中可能就有9个人在使用Kimi。 而昨天&#xff08;7月8日&#xff09;Kimi…

Civil3D 2025:工程设计的智慧之友

初识Civil3D 2025 当我第一次打开Civil3D 2025时&#xff0c;仿佛置身于湘西的山水之间&#xff0c;那种熟悉而又新奇的感觉扑面而来。Civil3D 2025不仅仅是一款软件&#xff0c;它更像是一位老友&#xff0c;带着温暖和智慧&#xff0c;陪伴我走过每一个设计的日夜。 功能丰…