当前位置: 首页 > 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"

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 设计模式8-桥模式
  • Windows之nslookup命令
  • 图解数据结构---绪论
  • # Redis 入门到精通(一)数据类型(4)
  • 创建yum源、NFS共享存储
  • C++惯用法: 通过std::decltype来SFINAE掉表达式
  • 有关去中心化算路大模型的一些误区:低带宽互连导致训练速度太慢;小容量设备无法生成基础规模的模型;去中心化总是会花费更多;虫群永远不够大
  • 内容协商源码解析与自定义 MessageConverter
  • 100个C++面试题
  • C#实现Winform程序右下角弹窗消息提示
  • Web组成架构
  • Spring Boot项目中JPA操作视图会改变原表吗?
  • Spring源码十九:Bean实例化流程二
  • 离线下载linux mysql和mysql基本库
  • JS实现:统计字符出现频率/计算文字在文本中的出现次数
  • [nginx文档翻译系列] 控制nginx
  • 【Amaple教程】5. 插件
  • android图片蒙层
  • CSS 专业技巧
  • ESLint简单操作
  • javascript从右向左截取指定位数字符的3种方法
  • js ES6 求数组的交集,并集,还有差集
  • Laravel核心解读--Facades
  • Redis 懒删除(lazy free)简史
  • Redis学习笔记 - pipline(流水线、管道)
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 排序算法之--选择排序
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何设计一个比特币钱包服务
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 深度学习在携程攻略社区的应用
  • 我的面试准备过程--容器(更新中)
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • ### RabbitMQ五种工作模式:
  • ###项目技术发展史
  • #、%和$符号在OGNL表达式中经常出现
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $forceUpdate()函数
  • (10)STL算法之搜索(二) 二分查找
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (笔记)M1使用hombrew安装qemu
  • (纯JS)图片裁剪
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (含笔试题)深度解析数据在内存中的存储
  • (十一)c52学习之旅-动态数码管
  • (四)JPA - JQPL 实现增删改查
  • (转载)PyTorch代码规范最佳实践和样式指南
  • **PHP分步表单提交思路(分页表单提交)
  • .Net Core 微服务之Consul(二)-集群搭建
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)
  • .Net实现SCrypt Hash加密
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)