Linux

如何從 libvirt/kvm 實例創建自定義流浪盒?

  • October 15, 2015

Internet 上有許多資源可以從 VirtualBox 實例創建自定義 vagrant box。但我想知道直接從 kvm/libvirt 實例創建自定義 vagrant 框的直接方法。請不要建議 vagrant-mutate 或任何將 VirtualBox 轉換為其他提供商的方法。

在與 vagrant 共度時光後,我得到了自定義盒子的解決方案。首先在 libvirt/qvm 中安裝任何 Linux 作業系統並登錄到它進行自定義並vagrant使用密碼創建使用者vagrant

adduser vagrant

vagrant使用者應該能夠在沒有密碼提示的情況下執行 sudo 命令

sudo visudo -f /etc/sudoers.d/vagrant

並粘貼

vagrant ALL=(ALL) NOPASSWD:ALL

做任何你想做的事情來定制你的流浪盒並安裝openssh-server如果以前沒有安裝

sudo apt-get install -y openssh-server

將 ssh 密鑰從 vagrant 使用者

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

打開 sudovi /etc/ssh/sshd_config並更改

PubKeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
PermitEmptyPasswords no
PasswordAuthentication no

使用重啟 ssh 服務

sudo service ssh restart

為工具安裝額外的開發包以正確編譯和安裝

sudo apt-get install -y gcc build-essential linux-headers-server

做任何你想要的改變並關閉虛擬機。現在,來到執行來賓VM的主機並轉到 /var/lib/libvirt/images/並選擇您在其中進行更改並複製到某處的原始圖像/test

cp /var/lib/libvirt/images/test.img  /test 

創建兩個 文件metadata.jsonVagrantfile進入/test``metadata.json

{
 "provider"     : "libvirt",
 "format"       : "qcow2",
 "virtual_size" : 40
}

並且在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

使用將 test.img 轉換為 qcow2 格式

sudo qemu-img convert -f raw -O qcow2  test.img  ubuntu.qcow2

將 ubuntu.qcow2 重命名為 box.img

mv ubuntu.qcow2 box.img 

**注意:**目前,libvirt-vagrant 僅支持 qcow2 格式。所以,不要改變格式只是重命名為box.img。因為它預設使用名稱 box.img 進行輸入。

創建框

tar cvzf custom_box.box ./metadata.json ./Vagrantfile ./box.img 

將框添加到 vagrant

vagrant box add --name custom custom_box.box

轉到您要初始化 vagrant 的任何目錄並執行下面將創建 Vagrant 文件的命令

vagrant init custom

開始配置 vagrant VM

vagrant up --provider=libvirt 

請享用 !!!

引用自:https://unix.stackexchange.com/questions/222427