问题其实比较简单的,主要是解决的方法是相当简单的。
问题源起我用烦了 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
,在主机里就不会有问题了!