用vagrant和CentOS7创建一个开发环境

前言

CentOS7的vagrant box网络有问题。

最近,使用vagrant在本地搭建开发环境已经不再罕见。由于各大主机提供商的VPS已经可以提供CentOS7,因此我决定将开发环境也设置为CentOS7,并开始搜索vagrant box。

搜索的结果中出现了Vagrantbox.es网站。而且,在首位之后的第二个是CentOS7的box(截至2015年6月30日)。

当在使用CentOS6时,我可以毫无顾虑地从机箱启动,并且没有任何问题。但是,当我设置并启动CentOS7时,网络无法启动。

由于有很多文章表示还需要在谷歌上搜索并应用补丁到Vagrant,所以我试着应用了vStone/vagrant-centos7_fix的补丁。

这个补丁没用啊。

从搜索开始,我就知道这篇文章中的Vagrant版本已经过时了。

在1.6.4版本中存在问题,而在1.6.5版本中得到了解决,我也知道我Mac上安装的vagrant是1.7.2版本。当然,我也知道自己面临的网络相关问题没有解决。

不过,说实话,即使我对此抱着一丝淡淡的期望,也没有得到任何效果。嗯,既然上面写着“问题已解决”,那就应该是这样吧。

干脆试着创建一个CentOS7的Vagrant box

我在使用Vagrant启动的CentOS7上尝试对网络进行了一些调整,但由于对CentOS7不熟悉并且没有深入学习Vagrant,所以完全弄不明白。
尤其是CentOS7的网络部分与6相比变化很大。

我原本以为只需要在VirtualBox上正常启动并开始使用CentOS7就好了。然而,由于大家都推荐使用vagrant进行操作,我相信一定会很厉害。虽然我完全不了解其强大之处,但我决定自欺欺人地尝试创建vagrant box。

使用VirtualBox来构建CentOS 7。

首先,构建一个在VirtualBox中的CentOS7虚拟机。由于是用于Web开发环境,所以最小配置就够了。下载CentOS-7-x86_64-Minimal-1503-01.iso镜像文件。我认为最好从官方网站centos.org下载。

在VirtualBox4.3.26中,可以立即创建新的虚拟环境。例如CentOS7等,只需给它们命名,并自动选择类型和版本。请务必首先输入名称。然后按照提示继续,并一次性创建虚拟区域。

然后,在左侧的窗格中选择并点击设置按钮,就可以创建一个虚拟环境(仅有空间)并关闭电源。在设置中选择启动的存储并添加到IDE控制器中。点击带有+标志的硬盘,然后按下选择硬盘的按钮,选择之前的CentOS-7-x86_64-Minimal-1503-01.iso文件并启动!

嗯,如果是处理Vagrant的人,应该至少能够做到安装CentOS7,至少通过搜索也应该能够实现。所以,我会跳过安装过程。
安装是GUI界面,非常简单。至少我个人认为是这样。安装时可选择日语。对于使用英语键盘的人可能需要注意一下,但最差的情况下,可以用USB连接日语键盘。

首先要确认的是,使用Vagrant Box启动时出现的网络问题。

# systemctl status network

请确认程序已正确启动。
实际上

# systemctl status network.service

也许必须打“とか”。

闲谈一下,CentOS7的服务检查、启动和停止命令已经改变了,所以需要注意。不过,就算输入”service”命令,系统也会自动转换,非常贴心。虽然我觉得这可能只会发生在最初阶段。另外,ifconfig命令已经不再存在了,这个命令大概是从很久以前就开始不推荐使用了。

为创建Vagrant盒子做准备。

更新软件

# yum update
# yum install gcc kernel-devel perl bzip2
# reboot

顺便提一句,我确认下还有没有”shutdown -r now”这样的命令,结果成功重新启动了。

创建用户

好的工作日志:关于将CentOS 7.0打包为Vagrant使用的备忘录,可以参考一下。

在使用Vagrant进行启动时,可以进行各种配置,但需要创建一个登录到虚拟机操作系统中的用户。该用户账户为vagrant,密码也是vagrant,通常称之为Joe Account。

使用 visudo 命令编辑 sudoers 文件,以实现无需密码即可执行 sudo 命令。

# visudo
...
vagrant ALL=(ALL)       NOPASSWD:ALL
...

此外,在使用vagrant启动VirtualBOX之后,需要设置密钥以进行密钥认证。

# su - vagrant
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ curl -L -o ~/.ssh/authorized_keys  https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub
$ chmod 600 ~/.ssh/authorized_keys

更改grub的设置。

当使用 yum 更新内核时,会通过 grub 确认从哪个内核启动。在 CentOS6 上是否有被询问过我不记得了,可能没有吧…所以,为了尽量减少启动时间,将等待时间修正为0。
另外,请注意不要从旧内核启动。

GRUB_DEFAULT=1
GRUB_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT=0
...

GRUB_DEFAULT是一个数字,表示希望启动的操作系统位于列表的第几个位置,以0开始计数。
据说还可以写想要启动的操作系统的标签,但是这方面未经过验证。

应用更改后的设置。

$sudo grub-mkconfig -o /boot/grub/grub.cfg

如果启动时菜单不再显示,那暂且认为是没问题的。

把网络设置删除掉

首先,在VirtualBox上尝试建立一个公共网络和私有网络,确保网络成功启动。

當在這個確認時已經設定完成的網路設定存在時,vagrant進行Box化時會導致網路中斷。因為vagrant會自動進行網路設定(據說),所以設定會發生衝突。
至少需要刪除ifcfg-enp0s3和ifcfg-enp0s8這些文件。可以先備份。

此外,还需要删除udev规则。

# rm /etc/udev/rules.d/70-persistent-ipoib.rules

安装VirtualBox Guest Additions

郝的工作记录:将 CentOS7.0 应用于 vagrant 进行框架化的备忘录。毋庸置疑,这篇文章非常有参考价值。工作需要在 VirtualBOX 进行操作,还需在虚拟环境中进行操作。

在VirtualBOX中,点击菜单中的Devices,选择Insert Guest Additions CD image。
然后,在虚拟环境中进行安装,但是在进行yum update时,如果内核已经更新,并且在GRUB2的设置中默认的启动OS版本没有被更新,就会出现错误。错误信息会友好地显示,因此只要在执行过程中确认其他错误信息即可,不应该有问题。

创建vagrant box

这次是在主机上进行的工作,创建了一个新的虚拟环境,就像保存给vagrant使用的形象一样。

$ vagrant package --base CentOS7.0 --output vagrant.box
==> CentOS7.0: Exporting VM...
==> CentOS7.0: Compressing package to: /Path/to/VirtualBox VMs/CentOS7.0/vagrant.box

— 基础部分之后将会根据虚拟环境的名称而不同。

尝试使用Vagrant启动

只需按照通常在互联网上公开的盒子注册并启动即可,与vagrant init后vagrant up几乎相同,预计可以启动CentOS7。

作者的话

有种感觉还不够,稍后我会再进行进一步验证。

广告
将在 10 秒后关闭
bannerAds