วิธีสร้าง box vagrant แบบกำหนดเองจากอินสแตนซ์ libvirt / kvm


16

มีทรัพยากรมากมายบนอินเทอร์เน็ตเพื่อสร้างกล่องคนจรจัดที่กำหนดเองจากอินสแตนซ์ VirtualBox แต่ฉันต้องการทราบวิธีการโดยตรงในการสร้างกล่องคนจรจัดที่กำหนดเองโดยตรงจากอินสแตนซ์ kvm / libvirt กรุณาอย่าแนะนำคนพเนจรหรือผู้ที่แปลง VirtualBox เป็นผู้ให้บริการรายอื่น

คำตอบ:


21

หลังจากใช้เวลากับคนจรจัดฉันได้แก้ปัญหาสำหรับกล่องที่กำหนดเอง ก่อนอื่นให้ติดตั้ง Linux OS ใด ๆ ใน libvirt / qvm และล็อกอินเข้าสู่ระบบเพื่อปรับแต่งและสร้าง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 จากผู้ใช้คนจรจัด

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

เปิด sudo vi /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 ตอนนี้มาที่เครื่องโฮสต์ที่ guest VM กำลังทำงานและไปที่ /var/lib/libvirt/images/และเลือกอิมเมจดิบที่คุณทำการเปลี่ยนแปลงและคัดลอกที่อื่นเช่น/test

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

สร้างสองไฟล์metadata.jsonและVagrantfileใน/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 box add --name custom custom_box.box

ไปที่ไดเรกทอรีใด ๆ ที่คุณต้องการเริ่มต้นคนจรจัดและเรียกใช้คำสั่งร้องที่จะสร้างไฟล์ Vagrant

vagrant init custom

เริ่มต้นกำหนดค่า VM ของ vagrant

vagrant up --provider=libvirt 

สนุก !!!


2
ฉันอยากจะชี้ให้เห็นว่าหลังจากใช้เวลาตลอดเวลาในการดูแลพวกเขากิ๊กคนจรจัดใช้เวลาในการคลายบีบอัดน้ำมันดินนั้นอีกครั้ง : fubar:
ThorSummoner

2
หากต้องการข้าม tar / tripar แบบไปกลับคุณอาจปล่อย Vagrantfile, meta.json และ box.img ของคุณโดยตรงใน~/.vagrant.d/boxes/<name>/0/libvirt/
ThorSummoner

โหวตขึ้นสำหรับคำอธิบายที่ชัดเจนสำหรับขั้นตอนที่ค่อนข้างซับซ้อน ขอบคุณ
Avi Mehenwal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.