L06-Ubuntu系统中部署Vagrant和VirtualBox
一、前言
1.Vagrant是一个搭建完整的虚拟开发环境的工具~~~更多关于Vagrant理论可查看这篇博文https://www.cnblogs.com/davenkin/p/vagrant-virtualbox.html
2.实验环境
在Win10中利用VMWare Workstation创建一台Ubuntu虚拟机,版本为64位Ubuntu Desktop 16.04,4核,4G内存;然后在Ubuntu中安装Vagrant和VirtualBox,所用到的Vagrant和VirtualBox版本都是截至2018/04/08时候的最新版。
之所以使用VMWare Workstation来创建Ubuntu的虚拟机而不是VirtualBox,跟下面即将说到的“ubuntu的CPU必须要支持虚拟化”有关,因为在VirtualBox中我不知道怎么设置才能使得创建的ubuntu的CPU支持虚拟化,而在VMWare Workstation中,可以通过如下方法进行开启。
3.关键点
因为我们所做的操作是“在Ubuntu中利用Vagrant+VirtualBox创建虚拟机”,因此,ubuntu的CPU必须要支持虚拟化才行——注意,是Ubuntu的CPU,不是本机Windows。
一般我们要在笔记本电脑上利用VMWare Workstation或者VirtualBox来创建虚拟机时,是需要笔记本的CPU支持虚拟化的,通常笔记本的CPU都支持虚拟化,只需在笔记本电脑开机时进入BIOS进行设置开启即可。而这里因为要在ubuntu中创建虚拟机,因此需要ubuntu的CPU支持虚拟化。
如果你的ubuntu系统不支持CUP虚拟化,那么就没必要按下面步骤进行安装了,因为一定会失败,必须要将ubuntu的CUP设置成支持虚拟化。
在Ubuntu中可以通过下面的方法验证CPU是否支持虚拟化
相关博文:https://www.linuxidc.com/Linux/2012-09/69714.htm
查询实验时的虚拟机:
4.提前列一下接下来可能会用到的vagrant命令
$ vagrant init # 初始化,用法:vagrant init 已有的box名称
$ vagrant up # 启动虚拟机,对应就是关机
$ vagrant halt # 关闭虚拟机
$ vagrant reload # 重启虚拟机
$ vagrant ssh # SSH 至虚拟机
$ vagrant suspend # 挂起虚拟机——只是暂停,虚拟机内存等信息将以状态文件的方式保存在本地,可以执行恢复操作后继续使用
$ vagrant resume # 唤醒虚拟机—— 与前面的暂停相对应
$ vagrant status # 查看虚拟机运行状态
$ vagrant destroy # 销毁当前虚拟机,删除后在当前虚拟机所做进行的除开Vagrantfile中的配置都不会保留
#box管理命令
$ vagrant box list # 查看本地box列表
$ vagrant box add
# 添加box到列表,用法:vagrant box add 按需起的box名称 box所在url或者本地路径
$ vagrant box remove
# 从box列表移除 ,用法:vagrant box remove 你的box名称
5.安装之前最后一点——在我初次安装时因为ubuntu的CPU不支持虚拟化,我又没注意到这点,因此安装过程中遇到了一些错误,放在文章末尾了,有一定的参考意义。
二、安装步骤
1、安装Virtualbox
1.1安装之前先安装virtualbox的依赖包,否则会有依赖包报错
命令:sudo apt-get install -y libsdl1.2debian
1.2安装VirtualBox
我看其他教程有使用apt-get install命令安装virtualbox的,我有试过,不过该命令安装的不是最新版,所以我采取的办法是先上网把virtualbox下载下来,然后上传到ubuntu当中(上传到任意目录),接着切换到virtualbox包所在目录,执行:
sudo dpkg -i virtualbox-5.2_5.2.8-121009-Ubuntu-xenial_amd64.deb
因为我已经安装过virtualbox所需依赖包了,所以安装过程没有报错,假若你安装的时候报错了,则将所需依赖包使用apt-get install命令进行安装,之后再次安装virtualbox即可。
1.3安装完成之后使用virtualbox --help命令进行检查
如下图,输出virtualbox帮助信息,说明virtualbox安装成功
2、vagrant是ruby开发的,先安装ruby相关的东西
命令:sudo apt-get -y install ruby rubygems
注:我不知道这一步是否必须,我看个别教程里面有的安装了,有的没有,反正我是跟着做了。。。
3、在Vagrant官网下载Vagrant的deb软件包
下载命令:sudo wget https://releases.hashicorp.com/vagrant/2.0.3/vagrant_2.0.3_x86_64.deb
安装命令:sudo dpkg -i vagrant_2.0.3_x86_64.deb
安装完成使用vagrant --version进行检查,如上图。
也可以直接使用apt-get安装,命令:sudo apt-get install vagrant。
不过同样的,apt-get命令安装的不是最新版本。
4、下载官方封装好的基础镜像放到合适的目录里面,是一个格式为box的文件,地址:http://www.vagrantbox.es/,可以在ubuntu中使用wget命令下载,也可以再本地Windows上下载下来,然后上传到ubuntu里面。
官网界面:
我下载的box镜像:
5.创建一个开发目录,并切换到该目录下
命令:
sudo mkdir vagrant_project
cd vagrant_project/
注:创建该目录是用来存放vagrant配置文件的,因此下面第7步的初始化步骤必须在该目录下执行,vagrant才会默认把Vagrantfile配置文件放在该目录下;创建的目录名称是随意的,没有特定要求。
6、添加镜像到 Vagrant
命令:sudo vagrant box add ubuntu1604 /data/ios/centos-7.0-x86_64.box
注:这里我添加的镜像是centos-7.0-x86_64.box,但是我给它起的名字却是ubuntu1604,是因为一时手残了,名字其实可以根据喜好随便起,没影响
执行完之后使用sudo vagrant box list查看添加的镜像是否存在,如上图。
7、初始化开发环境
命令:sudo vagrant init ubuntu1604
注:“ubuntu1604”是上一步添加镜像时所起的名字;且这一步初始化操作必须在第5步创建的开发目录中执行,否则你创建的目录就没用了;最后,初始化成功后会生成配置文件Vagrantfile
8、启动虚拟机
在第5步创建的工作目录下执行下面命令进行启动虚拟机
命令:sudo vagrant up
(1)由输出来看启动没有问题
(2)注意上图的最后一行:vagrant默认把创建的虚拟机的/vagrant目录映射到ubuntu的/home/suxy/vagrant_project目录上了(/home/suxy/vagrant_project就是第5步创建的开发目录)——这样一来,这两个目录之间是共享的。
(3)Vagrant默认创建的虚拟机账号密码为:vagrant/vagrant
(4)如果这一步执行vagrant up失败了,在修改完错误之后再次启动虚拟机前,需要先执行vagrant halt停止虚拟机、vagrant destroy销毁虚拟机。
9.验证
使用sudo vagrant ssh命令连接vagrant创建的虚拟机
若还有其他个性化的设置,可参考文章头提到的博文。
三、部署时遇到的错误
(1)错误一:这里所列举的错误是在ubuntu的CPU不支持虚拟化的情况下执行第8步启动虚拟机时所报的错误,如下
错误解决可查看:https://www.cnblogs.com/csliwei/p/5860005.html
根据博文中的说法,如果是下载的box文件(我操作时确实是下载的box文件),vagrant box add和init之后启动,可能出现长时间无法通过vagrant ssh登陆的问题
说是有两种可能
(1)其一是虚拟机确实启动失败,由于vagrant默认不显示虚机启动界面,所以不太好判断。因此需要在Vagrantfile配置中增加vb.gui = true选项,就可以查看虚机的启动过程(我的理解是加上该选项之后,可以使得在vagrant up启动虚拟机的时候显示virtualbox启动界面,以便查看是否是PC的vt-x支持没有开启)。常见问题是没有开启PC的vt-x支持,进BIOS修改配置即可。
(2)其二是如果使用拷贝过来的Vagrantfile进行up启动
可能会由于ssh认证机制导致失败。vagrant默认采用key登录,但所用的KeyPair可能没有正常配置。
于是先对第一种可能的错误进行验证
在Vagrantfile文件中加入:
config.vm.provider :virtualbox do |vb|
vb.gui = true
end
如下:
因为前面执行vagrant up失败了,所以先执行vagrant halt停止虚拟机、vagrant destroy销毁虚拟机
接着使用sudo vagrant up命令再次启动虚拟机,果然再次出错了,不过因为在Vagrantfile配置中增加vb.gui = true选项,所以这次报错时virtualbox的报错也显示出来了,如下图——果然是因为CUP不支持虚拟化的缘故
为了确认是否Ubuntu的CPU确实不支持虚拟化,通过下图中所说的方法查看
实际查询如下图:
果然。。。
(2)错误二:在ubuntu的CPU支持虚拟化的情况下执行第8步启动虚拟机时出现的问题
正如上图红框中所说的,使用的box镜像可能有问题,因此我换了Centos的box进行,之后安装成功。
L06-Ubuntu系统中部署Vagrant和VirtualBox的更多相关文章
- 在 Ubuntu 系统中部署 Git Server
http://blog.csdn.NET/poisonchry/article/details/11849781 虽然有很多开源的Git仓库,不过并非所有都尽人意,譬如Github,Gitlab等,不 ...
- Ubuntu系统中登陆阿里云服务器的方法
如果您购买了阿里云服务器,恰巧又在使用Ubuntu操作系统,那么恭喜你来对地方了,今天给大家分享一下如何在Ubuntu中登陆阿里云服务器: 主要使用两款软件:1.SecureCRT:2.SecureF ...
- Ubuntu系统中安装RPM格式包的方法
Ubuntu的软件包格式为deb,而RPM格式的包则是Red Hat 相关系统所用的软件包.当我们看到一个想用的软件包时,如果他是RPM格式,而你的操作系统是Ubuntu,那岂不是很遗憾?其实,在Ub ...
- 在Debian/Ubuntu系统中安装*.sh与*.bin文件
在Debian/Ubuntu系统中安装*.sh与*.bin文件的基本方法.一,安装*.sh文件运行命令行至文件目录下,执行:sudo sh *.sh直接运行在命令行中执行:sudo chmod +x ...
- 利用workbench对linux/Ubuntu系统中的mysql数据库进行操作
在上一篇文章中,我分享了在linux中如何安装mysql数据库,但是这只是安装了mysql的服务,并没有图形化管理界面,所以这样子操作起来并没有那么方便,那么现在我们就来实现如何利用在window中安 ...
- ubuntu系统中查看本机cpu和内存信息的命令和用法
https://zhidao.baidu.com/question/192966322.html 写出ubuntu linux系统中查看本机cpu和内存信息的命令和用法,以及如何解读这些命令 ubun ...
- 手把手教你如何在Ubuntu系统中安装Pycharm
前几天带大家一起安装了Ubuntu14.04系统,没来得及上车的伙伴可以戳这篇文章:手把手教你在VMware虚拟机中安装Ubuntu14.04系统.今天小编带大家一起在Ubuntu14.04中安装Py ...
- Ubuntu系统中创建虚拟环境
1.虚拟环境产生的原因:如果在一台电脑上, 想开发多个不同的项目, 需要用到同一个包的不同版本, 如果使用上面的命令, 在同一个目录下安装或者更新, 新版本会覆盖以前的版本, 其它的项目就无法运行了. ...
- 在Linux系统中部署NodeJS项目
在Linux系统中部署NodeJS项目 安装NodeJS 首先进入 Node 官网,下载对应的 Node包 下载下来后是一个后缀为 xz 的压缩包,我们把这个包上传到 Linux 系统中的 /usr/ ...
随机推荐
- bzr: ERROR: No push location known or specified.
出现这种错误,要先uncommit,然后拉带最新版本,再commit最后push
- boost之内存管理
内存管理一直是令C++程序员最头疼的工作,C++继承了C那高效而又灵活的指针,使用起来稍微不小心就会导致内存泄露.野指针.越界访问等访问.虽然C++标准提供了只能指针std::auto_ptr,但是并 ...
- Groovy使用List集合
获取List集合中的元素 def lst = [1,3,4,1,8,9,2,6] println lst[-1] println lst[-2] 输出结果: 输出: 6 2 使用Range(范围)对象 ...
- Scheduling the Delivery of Local Notifications
[Scheduling the Delivery of Local Notifications] Apps can use local notifications to display alerts, ...
- 高性能mysql第三版(文摘)
第1章 mysql架构与历史 1.1处理和存储相分离,用户可以选择合适的存储引擎 1.2并发控制 表锁:开销小 行级锁:开销大 1.3事务 acid特性:原子性,一致性,隔离性,持久性 1.4 多版本 ...
- JQuery中button提交表单报TypeError: elem[type] is not a function jquery
错误: TypeError: elem[type] is not a function jquery 解决: 出现这种现象的原因是,提交的表单中,有标签的name,有以submit命名的 name中不 ...
- Linux的进程/线程间通信方式总结
Linux系统中的进程间通信方式主要以下几种: 同一主机上的进程通信方式 * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal) * System V进程 ...
- oracle ebs 11i > concurrent programs –> request group –> responsibility
--concurrent programs --request group --responsibility SELECT fr.responsibility_key, fr.respon ...
- The J-Link hardware debugging Eclipse plug-in
Quicklinks If you already know what are the features of the new plug-in and just want to know how to ...
- 使用Object.create()实现继承
一.常见继承方式 我们日常开发中常见的继承方式主要有: 1.默认模式: Child.prototype = new Parent(); 2.借用构造函数: function Child(a, b, c ...