如何从 libvirt/kvm 实例创建自定义流浪盒?

pl_*_*ock 20 linux kvm vagrant libvirt

互联网上有很多资源可以从 VirtualBox 实例创建自定义 vagrant box。但我想知道直接从 kvm/libvirt 实例创建自定义 vagrant box 的直接方法。请不要建议 vagrant-mutate 或任何将 VirtualBox 转换为其他提供程序的工具。

pl_*_*ock 28

在与 vagrant 共度时光后,我得到了自定义框的解决方案。首先在 libvirt/qvm 中安装任何 Linux 操作系统并登录到它进行自定义并vagrant使用密码创建用户vagrant

adduser vagrant
Run Code Online (Sandbox Code Playgroud)

vagrant 用户应该能够在没有密码提示的情况下运行 sudo 命令

sudo visudo -f /etc/sudoers.d/vagrant
Run Code Online (Sandbox Code Playgroud)

并粘贴

vagrant ALL=(ALL) NOPASSWD:ALL
Run Code Online (Sandbox Code Playgroud)

做任何你想做的事情来定制你的流浪者盒子,openssh-server如果之前没有安装过,请安装

sudo apt-get install -y openssh-server
Run Code Online (Sandbox Code Playgroud)

把来自流浪用户的 ssh 密钥

mkdir -p /home/vagrant/.ssh
chmod 0700 /home/vagrant/.ssh
wget --no-check-certificate \
https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub \
-O /home/vagrant/.ssh/authorized_keys
chmod 0600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant /home/vagrant/.ssh
Run Code Online (Sandbox Code Playgroud)

打开 sudovi /etc/ssh/sshd_config并更改

PubKeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
PermitEmptyPasswords no
PasswordAuthentication no
Run Code Online (Sandbox Code Playgroud)

使用重新启动 ssh 服务

 sudo service ssh restart
Run Code Online (Sandbox Code Playgroud)

为工具安装额外的开发包以正确编译和安装

sudo apt-get install -y gcc build-essential linux-headers-server
Run Code Online (Sandbox Code Playgroud)

做任何你想做的改变并关闭虚拟机。现在,来到运行来宾 VM 的主机,然后转到 /var/lib/libvirt/images/并选择您在其中进行更改并复制到某处的原始图像/test

cp /var/lib/libvirt/images/test.img  /test 
Run Code Online (Sandbox Code Playgroud)

创建两个文件metadata.json,并Vagrantfile/test 做报名中metadata.json

{
  "provider"     : "libvirt",
  "format"       : "qcow2",
  "virtual_size" : 40
}
Run Code Online (Sandbox Code Playgroud)

并在 Vagrantfile

Vagrant.configure("2") do |config|
         config.vm.provider :libvirt do |libvirt|
         libvirt.driver = "kvm"
         libvirt.host = 'localhost'
         libvirt.uri = 'qemu:///system'
         end
config.vm.define "new" do |custombox|
         custombox.vm.box = "custombox"       
         custombox.vm.provider :libvirt do |test|
         test.memory = 1024
         test.cpus = 1
         end
         end
end
Run Code Online (Sandbox Code Playgroud)

使用将 test.img 转换为 qcow2 格式

sudo qemu-img convert -f raw -O qcow2  test.img  ubuntu.qcow2
Run Code Online (Sandbox Code Playgroud)

将 ubuntu.qcow2 重命名为 box.img

mv ubuntu.qcow2 box.img 
Run Code Online (Sandbox Code Playgroud)

注意:目前,libvirt-vagrant 只支持 qcow2 格式。因此,不要更改格式,只需将其重命名为 box.img。因为默认情况下它接受名称为 box.img 的输入。
创建框

tar cvzf custom_box.box ./metadata.json ./Vagrantfile ./box.img 
Run Code Online (Sandbox Code Playgroud)

将框添加到流浪者

vagrant box add --name custom custom_box.box
Run Code Online (Sandbox Code Playgroud)

转到要初始化 vagrant 的任何目录并运行下面的命令以创建 Vagrant 文件

vagrant init custom
Run Code Online (Sandbox Code Playgroud)

开始配置流浪虚拟机

vagrant up --provider=libvirt 
Run Code Online (Sandbox Code Playgroud)

请享用 !!!

  • 我想指出的是,在花了所有时间为他们的演出加焦油之后,vagrant 再次花费了相同的时间来解压该焦油。:fubar: (2认同)
  • 要跳过往返 tar/untar,您可以将 Vagrantfile、meta.json 和 box.img 直接放在 `~/.vagrant.d/boxes/<name>/0/libvirt/` 中 (2认同)