implement support for qcow2 images
This commit is contained in:
parent
3165af5c09
commit
a2a1ecd2c5
|
|
@ -67,21 +67,21 @@ build_iso_dist() {
|
|||
|
||||
build_vagrant_dist() {
|
||||
fn build_vagrant_dist
|
||||
req=(workdir strapdir os arch)
|
||||
req=(workdir strapdir os arch imageformat)
|
||||
ckreq || return 1
|
||||
|
||||
notice "building complete vagrant image"
|
||||
|
||||
image_raw_as_strapdir || zerr
|
||||
bootstrap_complete_base || zerr
|
||||
vm_inject_overrides || zerr
|
||||
image_${imageformat}_as_strapdir || zerr
|
||||
bootstrap_complete_base || zerr
|
||||
vm_inject_overrides || zerr
|
||||
[[ $BLEND = 1 ]] && blend_preinst || zerr
|
||||
vm_setup_grub || zerr
|
||||
vm_setup_grub || zerr
|
||||
[[ $BLEND = 1 ]] && blend_postinst || zerr
|
||||
vm_umount_raw || zerr
|
||||
vm_vbox_setup || zerr
|
||||
vm_vagrant_package || zerr
|
||||
vm_pack_dist || zerr
|
||||
vm_umount_${imageformat} || zerr
|
||||
vm_vbox_setup || zerr
|
||||
vm_vagrant_package || zerr
|
||||
vm_pack_dist || zerr
|
||||
}
|
||||
|
||||
getfield() {
|
||||
|
|
@ -127,6 +127,19 @@ findloopmapp() {
|
|||
silly sleep 4
|
||||
}
|
||||
|
||||
findfreenbd() {
|
||||
fn findfreenbd
|
||||
|
||||
notice "looking for a free /dev/nbd"
|
||||
|
||||
for i in $(seq 0 8); do
|
||||
grep "^/dev/nbd${i}" /proc/mounts >/dev/null || {
|
||||
print "/dev/nbd${i}"
|
||||
break
|
||||
}
|
||||
done
|
||||
}
|
||||
|
||||
qemu_install_user() {
|
||||
fn qemu_install_user
|
||||
req=(qemu_bin strapdir)
|
||||
|
|
@ -231,7 +244,7 @@ chroot-script() {
|
|||
*)
|
||||
local script="$1"
|
||||
notice "chrooting to execute $script..."
|
||||
sudochmod +x "$strapdir/$script" || zerr
|
||||
sudo chmod +x "$strapdir/$script" || zerr
|
||||
sudo -E chroot "$strapdir" "/$script" || zerr
|
||||
;;
|
||||
esac
|
||||
|
|
|
|||
|
|
@ -170,3 +170,28 @@ image_raw_as_strapdir() {
|
|||
|
||||
popd
|
||||
}
|
||||
|
||||
image_qcow2_as_strapdir() {
|
||||
fn image_qcow2_as_strapdir
|
||||
req=(workdir strapdir size)
|
||||
ckreq || return 1
|
||||
|
||||
pushd "$workdir"
|
||||
|
||||
notice "creating qcow2 image of $size MB"
|
||||
rm -f base.qcow2
|
||||
qemu-img create -f qcow2 base.qcow2 ${size}M || zerr
|
||||
sudo modprobe nbd max_part=8 || zerr
|
||||
loopdevice="$(findfreenbd)"
|
||||
[ -n "$loopdevice" ] || zerr
|
||||
sudo qemu-nbd --connect=${loopdevice} base.qcow2 || zerr
|
||||
notice "partitioning"
|
||||
sudo parted ${loopdevice} mktable msdos || zerr
|
||||
sudo parted ${loopdevice} mkpart primary '0%' '100%' || zerr
|
||||
sudo mkfs.ext4 ${loopdevice}p1 || zerr
|
||||
|
||||
notice "mounting qcow2 image to strapdir"
|
||||
sudo mount ${loopdevice}p1 $strapdir || zerr
|
||||
|
||||
popd
|
||||
}
|
||||
|
|
|
|||
44
zlibs/vm
44
zlibs/vm
|
|
@ -63,41 +63,49 @@ EOF
|
|||
devprocsys umount $strapdir || zerr
|
||||
}
|
||||
|
||||
vm_umount_raw() {
|
||||
fn vm_umount_raw
|
||||
req=(strapdir loopdevice)
|
||||
vm_umount_${imageformat}() {
|
||||
fn vm_umount_${imageformat}
|
||||
req=(strapdir loopdevice imageformat)
|
||||
ckreq || return 1
|
||||
|
||||
notice "remounting raw image"
|
||||
notice "remounting ${imageformat} image"
|
||||
sudo mount -o remount,ro $strapdir || zerr
|
||||
sync
|
||||
notice "flushing bytes and buffers"
|
||||
sudo blockdev --flushbufs $loopdevice || zerr
|
||||
sudo python -c 'import os; os.fsync(open("'${loopdevice}'", "r+b"))' || zerr
|
||||
notice "unmounting raw image from strapdir"
|
||||
silly sleep 1
|
||||
notice "unmounting ${imageformat} image from strapdir"
|
||||
sudo umount $strapdir || zerr
|
||||
silly sleep 1
|
||||
sudo rmdir $strapdir || zerr
|
||||
|
||||
sync
|
||||
silly sleep 1
|
||||
notice "cleaning up"
|
||||
sudo losetup -d ${loopdevice} || zerr
|
||||
case "$imageformat" in
|
||||
raw)
|
||||
sudo losetup -d ${loopdevice} || zerr
|
||||
;;
|
||||
qcow2)
|
||||
sudo qemu-nbd --disconnect ${loopdevice} || zerr
|
||||
;;
|
||||
*)
|
||||
zerr
|
||||
;;
|
||||
esac
|
||||
silly sleep 1
|
||||
}
|
||||
|
||||
vm_vbox_setup() {
|
||||
fn vm_vbox_setup
|
||||
req=(workdir)
|
||||
req=(workdir imageformat)
|
||||
ckreq || return 1
|
||||
|
||||
notice "converting raw image to vdi"
|
||||
notice "converting ${imageformat} image to vdi"
|
||||
pushd $workdir
|
||||
sudo qemu-img convert -f raw -O vdi base.raw base.vdi || zerr
|
||||
sudo chown $USER base.vdi || zerr
|
||||
qemu-img convert -f ${imageformat} -O vdi base.${imageformat} base.vdi || zerr
|
||||
#sudo chown $USER base.vdi || zerr
|
||||
VBoxManage modifyhd base.vdi --type immutable --compact || zerr
|
||||
act "removing old raw image"
|
||||
rm -f base.raw
|
||||
#act "removing old raw image"
|
||||
#rm -f base.raw
|
||||
|
||||
vmname="${os}-${release}-prevagrant"
|
||||
notice "importing base.vdi to a VBox"
|
||||
|
|
@ -153,15 +161,17 @@ EOF
|
|||
|
||||
vm_pack_dist() {
|
||||
fn vm_pack_dist
|
||||
req=(workdir)
|
||||
req=(workdir imageformat)
|
||||
ckreq || return 1
|
||||
|
||||
notice "packing up dist"
|
||||
mkdir -p $R/dist
|
||||
mv $workdir/${vm_name}.box $R/dist
|
||||
act "calculating sha256sum..."
|
||||
mv $workdir/base.${imageformat} $R/dist/${vm_name}.${imageformat}
|
||||
act "calculating sha256 sums..."
|
||||
silly
|
||||
sha256sum $R/dist/${vm_name}.box > $R/dist/${vm_name}.box.sha
|
||||
sha256sum $R/dist/${vm_name}.${imageformat} > $R/dist/${vm_name}.${imageformat}.sha
|
||||
# TODO: XXX: cleanup vagrant/virtualbox leftovers
|
||||
notice "done!"
|
||||
ls -1 $R/dist
|
||||
|
|
|
|||
Loading…
Reference in New Issue