让虚拟机初始创建时,添加自定义的包管理器的源。
准备镜像仓库的源配置文件
如本例中的:
我的虚拟机工作目录是 /Users/pollyduan/vm
虚拟机工作目录为/Users/pollyduan/vm/ubuntu
我创建了一个/Users/pollyduan/vm/data 作为保存共享所需的软件和资源。
provision中的source可以使用相对路径,因此我的用户目录/Users/pollyduan 可以省略。如:
"../data/mirrors/tsinghua/CentOS7/CentOS-Base.repo"
"../data/mirrors/tsinghua/ubuntu16.04/sources.list"
centos7:
将如下配置添加到Vagrantfile的”config.vm.synced_folder” 下面即可。
config.vm.provision "file", source: "../data/mirrors/tsinghua/CentOS7/CentOS-Base.repo", destination: "~/CentOS-Base.repo"
config.vm.provision "shell" do |s|
s.inline = "sudo cp ~vagrant/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo"
end
config.vm.provision "shell" do |s|
s.inline = "sudo yum makecache"
end
ubuntu:
同样的,ubuntu中,将如下配置添加到Vagrantfile的”config.vm.synced_folder” 下面即可。
config.vm.provision "file", source: "../data/mirrors/tsinghua/ubuntu16.04/sources.list", destination: "~/sources.list"
config.vm.provision "shell" do |s|
s.inline = "sudo cp ~vagrant/sources.list /etc/apt/sources.list"
end
config.vm.provision "shell" do |s|
s.inline = "sudo apt-get update"
end
这样,虚拟机一旦创建,就会自动把包管理器的源替换掉。
当然,如果你修改了源配置文件,也可以使用如下命令更新:
vagrant provision [实例名]
思考一下
为什么不直接使用file命令复制到目标目录?
为什么要在vm目录中创建一个data目录作为共享目录?
~vagrant 是什么东西?
不明白的,请参阅之前的文字。