December 24, 2014

解决 vagrant 的 fedora box 里端口映射的问题

概述

问题其实比较简单的,主要是解决的方法是相当简单的。

问题产生

问题源起我用烦了 ubuntu 的 box,总感觉各种库略旧,vivid 又还只是 alpha,肯定会有坑。于是我就选择了 fedora 21 的 server 版本。恰好谷歌一会后,发现 vagrant cloud 上已经有人 做了 box,于是直接下载来用。

夜晚的网络比较稳定高速,安装也是一路顺利。可等到我把自己的 github pages 给 clone 下来后,想在本地看看能否查看,结果运行下面命令后,jekyll serve --watch,在主机的浏览器里怎么也看不到网页的出现。问题也就产生了,端口映射出问题了。

寻找答案

谷歌一下,最先找到的是说 iptables。可我运行sudo systemctl status iptables.service 发现,这服务dead了。压根没它什么事。

然后再找,说是 fedora 的防火墙,firewalld.service。结果我一查,确实是开着。开发的机器不需要什么防火墙,至少我是这么认为的。于是,干掉防火墙——sudo systemctl disable firewalld.service。可在主机里问题仍旧。

最后,找到了一种可能的答案,把 vagrant 的启动过程 debug 一下。我一想,这日志输出有点恐怖,不能这么做。对于 vagrant,我装了插件 vagrant-vbguest。于是我试试把 vbguest 的检查更新选项打开。

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vbguest.auto_update=true

end

结果问题就很明显了,启动时的控制台输出表明虚拟机的 vbox 相关服务出问题了。于是,我就去寻找虚拟机里的 vbox 相关服务与软件包的安装情况。因为在更新时我发现,内核有更新,但 vbox 相关的 kmod 却没有,问题估计会出现在软件包上。

解决

一查,vboxservice.service启动失败(failed),所报的错误,网上也没有解决办法。于是,我尝试从软件包问题上进行解决。fedora 最麻烦的一点是,像 virtualbox、音视频解码等一些软件包自己不维护,或者说因为许可证什么的自己不去搞,让使用者自行去找。

果断把rpmfusion的两个包下回来,直接sudo yum localinstall之,把这个仓库激活。yum makecache建立元数据缓存,查找VirtualBox,就找到了未随内核升级的kmod-virtualbox模块。于是就简单了,安装缺失的软件包,重启vboxservice.service

在主机的 cmd 里输入vagrant vbguest --status,输出的结果是GuestAdditions 4.3.20 running --- OK.,证明端口映射方面已经不是问题。再运行jekyll serve --watch,在主机里就不会有问题了!