URI: 
       tMerge branch 'next' - libdevuansdk - common library for devuan's simple distro kits
  HTML git clone https://git.parazyd.org/libdevuansdk
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit fd2f5ec4ecba4e7753b3943e4d9cc6100584a992
   DIR parent 0fe5c9f3a3ae58115005273fe61c5e31eca41ed6
  HTML Author: parazyd <parazyd@dyne.org>
       Date:   Sat, 15 Apr 2017 17:36:40 +0200
       
       Merge branch 'next'
       
       Diffstat:
         M config                              |      13 +++++++++----
         M libdevuansdk                        |       2 +-
         M zlibs/bootstrap                     |      40 +++++++++++++++++++++----------
         M zlibs/helpers                       |      97 +++++++++++++++++++++++++++----
         M zlibs/imaging                       |      40 ++++++++++++++++++++++----------
         M zlibs/iso                           |      16 +++++++++-------
         M zlibs/kernel                        |      44 ++++++++-----------------------
         M zlibs/rsync                         |      15 ++++++---------
         M zlibs/sysconf                       |       2 +-
         M zlibs/vm                            |      47 +++++++++++++++++++------------
       
       10 files changed, 207 insertions(+), 109 deletions(-)
       ---
   DIR diff --git a/config b/config
       t@@ -20,22 +20,27 @@
        ## libdevuansdk configuration
        
        vars+=(release version mirror section blend_name image_name vm_name)
       +vars+=(arch earch)
       +vars+=(usercredentials rootcredentials)
       +
        arrs+=(core_packages base_packages purge_packages blend_packages)
        
       +
        os="devuan"
        release="jessie"
       -version="1.0.0-beta2"
       +version="1.0.0-RC"
        mirror="http://auto.mirror.devuan.org/merged"
        section="main"
        
        image_name="${os}_${release}_${version}_${arch}"
       -[[ -n $blend_name  ]] && image_name="${image_name}_${blend_name}"
       -[[ -n $device_name ]] && image_name="${image_name}_${device_name}"
       +[[ -n "$blend_name"  ]] && image_name="${image_name}_${blend_name}"
       +[[ -n "$device_name" ]] && image_name="${image_name}_${device_name}"
        
        vm_name="${os}_${release}_${version}_${arch}_vagrant"
        [[ -n $blend_name  ]] && vm_name="${image_name}_${blend_name}"
        
        rootcredentials="root:toor"
       +usercredentials="devuan:devuan"
        
        core_packages=(
                devuan-keyring
       t@@ -71,7 +76,7 @@ base_packages=(
                zsh
                rsync
                git-core
       -        haveged
       +        mlocate
        )
        
        purge_packages+=(
   DIR diff --git a/libdevuansdk b/libdevuansdk
       t@@ -17,7 +17,7 @@
        # You should have received a copy of the GNU General Public License
        # along with this source code. If not, see <http://www.gnu.org/licenses/>.
        
       -libdevuansdk_version="0.4"
       +libdevuansdk_version="0.5"
        LIBPATH=${LIBPATH:-$(dirname $0)}
        
        source $LIBPATH/config
   DIR diff --git a/zlibs/bootstrap b/zlibs/bootstrap
       t@@ -45,6 +45,9 @@ bootstrap_complete_base() {
        
                [[ $arch =~ "^arm.." ]] && { qemu_install_user || zerr }
        
       +        sudo mkdir -p $strapdir/tmp
       +        sudo chmod 1777 $strapdir/tmp
       +
                ## debootstrap stage 2
                notice "running debootstrap stage 2"
                sudo -E chroot $strapdir \
       t@@ -52,13 +55,13 @@ bootstrap_complete_base() {
        
                ## write all system configuration
                notice "writing system configuration"
       -        conf_print_debconf     | sudo tee $strapdir/debconf.set >/dev/null
       -        conf_print_fstab       | sudo tee $strapdir/etc/fstab >/dev/null
       -        conf_print_hostname    | sudo tee $strapdir/etc/hostname >/dev/null
       -        conf_print_hosts       | sudo tee $strapdir/etc/hosts >/dev/null
       -        conf_print_netifaces   | sudo tee $strapdir/etc/network/interfaces >/dev/null
       -        conf_print_resolvconf  | sudo tee $strapdir/etc/resolv.conf >/dev/null
       -        conf_print_sourceslist | sudo tee $strapdir/etc/apt/sources.list >/dev/null
       +        conf_print_debconf     | sudo tee $strapdir/debconf.set              >/dev/null
       +        conf_print_fstab       | sudo tee $strapdir/etc/fstab                >/dev/null
       +        conf_print_hostname    | sudo tee $strapdir/etc/hostname             >/dev/null
       +        conf_print_hosts       | sudo tee $strapdir/etc/hosts                >/dev/null
       +        conf_print_netifaces   | sudo tee $strapdir/etc/network/interfaces   >/dev/null
       +        conf_print_resolvconf  | sudo tee $strapdir/etc/resolv.conf          >/dev/null
       +        conf_print_sourceslist | sudo tee $strapdir/etc/apt/sources.list     >/dev/null
                conf_print_locales     | sudo tee $strapdir/etc/profile.d/locales.sh >/dev/null
        
                ## write third-stage for chroot
       t@@ -68,12 +71,9 @@ bootstrap_complete_base() {
                ## debootstrap stage 3
                notice "running debootstrap stage 3"
        
       -        devprocsys mount $strapdir || zerr
        
                chroot-script -d thirdstage || zerr
       -
                sleep 1
       -        devprocsys umount $strapdir || zerr
        
                bootstrap_tar_pack             || zerr
                bootstrap_tar_unpack $strapdir || zerr
       t@@ -151,18 +151,32 @@ bootstrap_tar_unpack() {
                cat <<EOF | sudo tee ${strapdir}/postunpack >/dev/null
        #!/bin/sh
        apt-get update
       +
       +## check if all our extra_packages exist
       +allpkgs="\$(apt-cache search '.' | cut -d' ' -f1)"
       +for i in ${extra_packages} ; do
       +        printf "%s" "\$allpkgs" | grep -q "^\$i$" || missing="\$missing \$i"
       +done
       +
       +[ -n "\$missing" ] && {
       +        printf "\033[1;31m[!!] some extra packages don't exist\033[0m\n"
       +        printf "%s\n" "\$missing"
       +        exit 1
       +}
       +
        apt-get --yes --force-yes upgrade
        apt-get --yes --force-yes install ${extra_packages}
        apt-get --yes --force-yes autoremove
        apt-get clean
        EOF
        
       -        devprocsys mount $strapdir
                chroot-script -d postunpack || zerr
       -        devprocsys umount $strapdir
        
                ## below typically used in arm-sdk
       -        [[ -n "$inittab" ]] && { print $inittab | sudo tee -a $strapdir/etc/inittab >/dev/null }
       +        [[ -n "$inittab" ]] && {
       +                print $inittab | sudo tee -a $strapdir/etc/inittab >/dev/null
       +        }
       +
                for i in $custmodules; do
                        print $i | sudo tee -a $strapdir/etc/modules >/dev/null
                done || return 0
   DIR diff --git a/zlibs/helpers b/zlibs/helpers
       t@@ -33,8 +33,6 @@ build_image_dist() {
                notice "building complete dist image"
                act "$image_name"
        
       -        ## TODO: add blend_prebuild; blend_midbuild; blend_postbuild
       -
                bootstrap_complete_base            || zerr
                blend_preinst                      || zerr
                image_prepare_raw                  || zerr
       t@@ -51,7 +49,6 @@ build_iso_dist() {
                ckreq || return 1
        
                notice "building complete iso image"
       -        ## XXX: TODO: upstream existing heads code
        
                bootstrap_complete_base || zerr
                blend_preinst           || zerr
       t@@ -86,7 +83,27 @@ build_vagrant_dist() {
        
        getfield() {
                fn getfield $*
       -        print "$1" | grep "^$2=" | sed -e 's:.*=\(.*\)$:\1:g' | sed -e 's:^"\(.*\)"$:\1:g'
       +        print "$1" | \
       +                grep "^$2=" | \
       +                sed -e 's:.*=\(.*\)$:\1:g' | \
       +                sed -e 's:^"\(.*\)"$:\1:g'
       +}
       +
       +add-user() {
       +        fn add-user $*
       +        local user="$1"
       +        local pass="$2"
       +        req=(strapdir user pass)
       +        ckreq || return 1
       +
       +        notice "adding user $user:$pass"
       +
       +        cat <<EOF | sudo tee ${strapdir}/adduser
       +#!/bin/sh
       +useradd -m ${user}
       +echo "${user}:${pass}" | chpasswd
       +EOF
       +        chroot-script adduser || zerr
        }
        
        devprocsys() {
       t@@ -120,11 +137,13 @@ findloopmapp() {
                notice "finding a free loopdevice"
        
                loopdevice=$(sudo losetup -f --show $workdir/${image_name}.img)
       -        mappdevice=$(sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | sed 1q)
       +        mappdevice=$(sudo kpartx -va $loopdevice | \
       +                sed -E 's/.*(loop[0-9])p.*/\1/g' | sed 1q)
       +
                func "loopdevice: $loopdevice"
                func "mappdevice: $mappdevice"
        
       -        silly sleep 4
       +        silly sleep 2
        }
        
        findfreenbd() {
       t@@ -210,7 +229,7 @@ EOF
        
        install-custdebs() {
                fn install-custdebs
       -        req=(R strapdir)
       +        req=(R strapdir custom_deb_packages)
                ckreq || return 1
        
                sudo mkdir -p $strapdir/debs
       t@@ -218,10 +237,12 @@ install-custdebs() {
        
                cat <<EOF | sudo tee ${strapdir}/install-debs >/dev/null
        #!/bin/sh
       -for deb in /debs/*.deb; do
       +cd /debs
       +for deb in ${custom_deb_packages}; do
                dpkg -i \$deb
                apt-get --yes --force-yes -f install
        done
       +cd /
        apt-get autoremove
        apt-get clean
        rm -rf /debs
       t@@ -231,27 +252,81 @@ EOF
        
        chroot-script() {
                fn chroot-script "$@"
       +        req=(strapdir)
       +        ckreq || return 1
        
       +        mkdir -p "$R/log"
                case "x$1" in
                        x-d)
                                local script="$2"
       -                        dpkgdivert on "$strapdir"
       +                        devprocsys mount "$strapdir" || zerr
       +                        dpkgdivert on "$strapdir"    || zerr
       +
       +                        ## logging
       +                        sudo sed -i "$strapdir/$script" \
       +                                -e 's@#!/bin/sh@#!/bin/sh\'$'\nset -x ; exec 2>/'$script'.log@'
                                notice "chrooting to execute $script..."
       -                        sudo chmod +x  "$strapdir/$script" || zerr
       +                        sudo chmod +x  "$strapdir/$script"    || zerr
                                sudo -E chroot "$strapdir" "/$script" || zerr
       -                        dpkgdivert off "$strapdir"
       +                        sudo mv -f "$strapdir/${script}.log" "$R/log/"
       +
       +                        dpkgdivert off "$strapdir"    || zerr
       +                        devprocsys umount "$strapdir" || zerr
                                ;;
                        *)
                                local script="$1"
       +
       +                        ## logging
       +                        sudo sed -i "$strapdir/$script" \
       +                                -e 's@#!/bin/sh@#!/bin/sh\'$'\nset -x ; exec 2>/'$script'.log@'
       +
                                notice "chrooting to execute $script..."
                                sudo chmod +x  "$strapdir/$script" || zerr
                                sudo -E chroot "$strapdir" "/$script" || zerr
       +                        sudo mv -f "$strapdir/${script}.log" "$R/log/"
                                ;;
                esac
        
                sudo rm -f $strapdir/$script
        }
        
       +install_fake_package() {
       +        fn install_fake_package "$@"
       +        req=(strapdir pkgname pkgver section)
       +        local pkgname="$1"
       +        local pkgver="$2"
       +        local section="$3"
       +        ckreq || return 1
       +
       +        local _tmp="$strapdir/tmp"
       +        sudo mkdir -p "$_tmp/$pkgname"
       +
       +        cat <<EOF | sudo tee ${_tmp}/${pkgname}/${pkgname}_${pkgver}.control >/dev/null
       +Section: ${section}
       +Priority: optional
       +Homepage: https://devuan.org/
       +Standards-Version: 3.9.6
       +
       +Package: ${pkgname}
       +Version: ${pkgver}
       +Maintainer: Devuan developers <onelove@devuan.org>
       +Architecture: all
       +Description: (Fake) ${pkgname}
       +  Dummy package used to meet some dependencies without installing the
       +  real ${pkgname} package.
       +EOF
       +
       +        cat <<EOF | sudo tee ${strapdir}/install-fake-package >/dev/null
       +#!/bin/sh
       +cd /tmp/${pkgname}
       +equivs-build ${pkgname}_${pkgver}.control \
       +        && dpkg -i ${pkgname}_${pkgver}_all.deb || exit 1
       +cd /tmp
       +rm -rf ${pkgname}
       +EOF
       +        chroot-script install-fake-package || zerr
       +}
       +
        blend_preinst() {
                fn blend_preinst
                func "not overriden"
   DIR diff --git a/zlibs/imaging b/zlibs/imaging
       t@@ -73,7 +73,8 @@ image_partition_raw_gpt() {
                        -l kernel -S 1 -T 5 -P 10 $workdir/${image_name}.img
        
                cgpt add -i 2 -t data -b ${gpt_root[1]} \
       -                -s $(expr $(cgpt show $workdir/${image_name}.img | awk '/Sec GPT table/ {print $1}') - ${gpt_root[1]}) \
       +                -s $(expr $(cgpt show $workdir/${image_name}.img | \
       +                awk '/Sec GPT table/ {print $1}') - ${gpt_root[1]}) \
                        -l Root $workdir/${image_name}.img
        
                findloopmapp
       t@@ -104,13 +105,21 @@ image_pack_dist() {
                        sleep 1
                }
        
       -        sudo kpartx -dv $loopdevice || { die "kpartx  failed to remove $loopdevice"; zerr }
       -        sudo losetup -d $loopdevice || { die "losetup failed to remove $loopdevice"; zerr }
       +        sudo kpartx -dv $loopdevice || {
       +                die "kpartx  failed to remove $loopdevice"
       +                zerr
       +        }
       +        sudo losetup -d $loopdevice || {
       +                die "losetup failed to remove $loopdevice"
       +                zerr
       +        }
        
       -        notice "compressing image with xz"
       +        _xz="xz -zv"
       +        [[ $(command -v pixz) ]] && _xz=pixz
       +        notice "compressing image with $_xz"
                silly
                pushd $workdir
       -        xz -zv ${image_name}.img
       +        ${=_xz} ${image_name}.img
        
                notice "generating sha256 for ${image_name}.img.xz"
                sha256sum ${image_name}.img.xz > ${image_name}.img.xz.sha
       t@@ -133,9 +142,14 @@ image_raw_mount() {
                ckreq || return 1
        
                mkdir -p $workdir/mnt
       -        sudo mount $rootpart $workdir/mnt && act "mounted root partition" || zerr
       -        sudo mkdir $workdir/mnt/boot
       -        sudo mount $bootpart $workdir/mnt/boot && act "mounted boot partition" || zerr
       +        sudo mount $rootpart $workdir/mnt && \
       +                act "mounted root partition" || zerr
       +
       +        [[ "$parted_type" == gpt ]] || {
       +                sudo mkdir $workdir/mnt/boot
       +                sudo mount $bootpart $workdir/mnt/boot && \
       +                        act "mounted boot partition" || zerr
       +        }
        }
        
        image_raw_umount() {
       t@@ -143,8 +157,10 @@ image_raw_umount() {
                req=(workdir bootpart rootpart)
                ckreq || return 1
        
       -        sudo umount $workdir/mnt/boot && act "unmounted boot partition" || zerr
       -        sleep 1
       +        [[ "$parted_type" == gpt ]] || {
       +                sudo umount $workdir/mnt/boot && act "unmounted boot partition" || zerr
       +                sleep 1
       +        }
                sudo umount $workdir/mnt      && act "unmounted root partition" || zerr
        }
        
       t@@ -167,7 +183,7 @@ image_raw_as_strapdir() {
        
                notice "mounting raw image to strapdir"
                sudo mount ${loopdevice}p1 $strapdir
       -        echo 1 | sudo tee ${strapdir}/.keep >/dev/null ## hack? XXX: bootstrap_tar_unpack couldn't see it
       +        echo 1 | sudo tee ${strapdir}/.keep >/dev/null
                popd
        }
        
       t@@ -193,6 +209,6 @@ image_qcow2_as_strapdir() {
        
                notice "mounting qcow2 image to strapdir"
                sudo mount ${loopdevice}p1 $strapdir || zerr
       -        echo 1 | sudo tee ${strapdir}/.keep >/dev/null ## hack? XXX: bootstrap_tar_unpack couldn't see it
       +        echo 1 | sudo tee ${strapdir}/.keep >/dev/null
                popd
        }
   DIR diff --git a/zlibs/iso b/zlibs/iso
       t@@ -31,12 +31,12 @@ iso_prepare_strap() {
                cat <<EOF | sudo tee ${strapdir}/isoprep >/dev/null
        #!/bin/sh
        apt-get update
       -apt-get --yes --force-yes install dialog live-boot
       +apt-get --yes --force-yes install dialog live-boot live-boot-initramfs-tools
        apt-get --yes --force-yes autoremove
        apt-get clean
        EOF
        
       -        chroot-script -d isoprep || zerr
       +        chroot-script -d isoprep    || zerr
        }
        
        iso_setup_isolinux() {
       t@@ -53,9 +53,9 @@ iso_setup_isolinux() {
                sudo cp $strapdir/boot/initrd*  binary/live/initrd
        
                sudo cp /usr/share/live/build/bootloaders/isolinux/isolinux.bin \
       -                binary/isolinux
       +                binary/isolinux || zerr
                sudo cp /usr/share/live/build/bootloaders/isolinux/*.c32 \
       -                binary/isolinux
       +                binary/isolinux || zerr
                popd
        }
        
       t@@ -72,7 +72,7 @@ menu title ${os} boot menu
        timeout 300
        
        label live-${arch}
       -menu label ^${os} Live (${arch})
       +menu label ^${os} live (${arch})
        menu default
        linux /live/vmlinuz
        append initrd=/live/initrd boot=live
       t@@ -89,7 +89,8 @@ iso_squash_strap() {
                notice "creating squashfs out of strapdir"
        
                pushd $workdir
       -                sudo mksquashfs $strapdir binary/live/filesystem.squashfs -comp xz -e boot
       +        sudo mksquashfs $strapdir binary/live/filesystem.squashfs \
       +                -noappend -comp xz || zerr
                popd
        }
        
       t@@ -101,6 +102,7 @@ iso_xorriso_build() {
                notice "building iso..."
                isoname="${image_name}-live.iso"
        
       +        mkdir -p $R/dist
                pushd $workdir
                sudo xorriso -as mkisofs -r -J -joliet-long -l \
                        -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
       t@@ -112,7 +114,7 @@ iso_xorriso_build() {
                        -boot-load-size 4 \
                        -boot-info-table \
                        -o $R/dist/$isoname \
       -                binary
       +                binary || zerr
                popd
        }
        
   DIR diff --git a/zlibs/kernel b/zlibs/kernel
       t@@ -19,44 +19,22 @@
        
        ## all windows users are suckers
        
       -build_kernel_amd64() {
       -        fn build_kernel_amd64
       +build_kernel_${arch}() {
       +        fn build_kernel_${arch}
                req=(strapdir arch)
       -        #freq=($strapdir/.keep)
                ckreq || return 1
        
                local kernel_base="linux-image"
       -        local kernel="${kernel_base}-amd64"
       +        case "$arch" in
       +                amd64) local kernel="${kernel_base}-amd64";;
       +                i386)  local kernel="${kernel_base}-586";;
       +        esac
        
                notice "installing stock kernel for $arch"
        
       -        dpkgdivert on $strapdir
       -        devprocsys mount $strapdir
       -
       -        sudo -E chroot $strapdir \
       -                apt-get --yes --force-yes install $kernel
       -
       -        devprocsys umount $strapdir
       -        dpkgdivert off $strapdir
       -}
       -
       -build_kernel_i386() {
       -        fn build_kernel_i386
       -        req=(strapdir arch)
       -        #freq=($strapdir/.keep)
       -        ckreq || return 1
       -
       -        local kernel_base="linux-image"
       -        local kernel="${kernel_base}-586"
       -
       -        notice "installing stock kernel for $arch"
       -
       -        dpkgdivert on $strapdir
       -        devprocsys mount $strapdir
       -
       -        sudo -E chroot $strapdir \
       -                apt-get --yes --force-yes install $kernel
       -
       -        devprocsys umount $strapdir
       -        dpkgdivert off $strapdir
       +        cat <<EOF | sudo tee ${strapdir}/install-linux
       +#!/bin/sh
       +apt-get --yes --force-yes install ${kernel}
       +EOF
       +        chroot-script -d install-linux || zerr
        }
   DIR diff --git a/zlibs/rsync b/zlibs/rsync
       t@@ -26,17 +26,14 @@ rsync_to_raw_image() {
        
                notice "rsyncing strapdir to raw image..."
                image_raw_mount
       -        sleep 1
       +        silly sleep 1
        
       -        silly
                pushd $strapdir
       -        #sudo rm -f .done
       -
       -        sudo rsync -HPavz -q ./* $workdir/mnt || {
       -                image_raw_umount
       -                die "not enough space, please report a bug"
       -                zerr
       -        }
       +                sudo rsync -HPavz -q ./* $workdir/mnt || {
       +                        image_raw_umount
       +                        die "not enough space, please report a bug"
       +                        zerr
       +                }
                popd
        
                image_raw_umount
   DIR diff --git a/zlibs/sysconf b/zlibs/sysconf
       t@@ -76,7 +76,7 @@ conf_print_netifaces() {
        # For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
        
        # Include files from /etc/network/interfaces.d:
       -source-directory /etc/network/interfaces.d
       +# source-directory /etc/network/interfaces.d
        
        auto lo
        iface lo inet loopback
   DIR diff --git a/zlibs/vm b/zlibs/vm
       t@@ -27,7 +27,7 @@ vm_inject_overrides() {
                ckreq || return 1
        
                notice "injecting rootfs overrides"
       -        cat <<EOF | sudo -E tee ${strapdir}/etc/rc.local >/dev/null
       +        cat <<EOF | sudo tee ${strapdir}/etc/rc.local >/dev/null
        #!/bin/sh
        # rc.local for base images
        
       t@@ -39,7 +39,8 @@ EOF
        
                print "rootfs / rootfs rw 0 0" | sudo tee ${strapdir}/etc/fstab >/dev/null
        
       -        sudo sed -i -e 's/without-password/yes/' ${strapdir}/etc/ssh/sshd_config || zerr
       +        sudo sed -i ${strapdir}/etc/ssh/sshd_config \
       +                -e 's/without-password/yes/' || zerr
        }
        
        vm_setup_grub() {
       t@@ -54,13 +55,12 @@ export DEBIAN_FRONTEND=noninteractive
        apt-get --yes --force-yes install linux-image-amd64 grub-pc
        sed -e 's:GRUB_TIMEOUT=5:GRUB_TIMEOUT=1:' -i /etc/default/grub
        update-grub
       -grub-install --no-floppy --recheck --modules="biosdisk part_msdos" ${loopdevice}
       +grub-install --no-floppy --recheck --modules="biosdisk part_msdos" \
       +        ${loopdevice}
        sed -e 's:${loopdevice}p1:/dev/sda1:g' -i /boot/grub/grub.cfg
        sync; sync; sync
        EOF
       -        devprocsys mount $strapdir  || zerr
                chroot-script -d setupgrub  || zerr
       -        devprocsys umount $strapdir || zerr
        }
        
        vm_umount_${imageformat}() {
       t@@ -70,10 +70,11 @@ vm_umount_${imageformat}() {
        
                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
       +        sudo python -c 'import os;os.fsync(open("'${loopdevice}'", "r+b"))' || zerr
       +
                notice "unmounting ${imageformat} image from strapdir"
                sudo umount $strapdir || zerr
                silly sleep 1
       t@@ -101,22 +102,27 @@ vm_vbox_setup() {
        
                notice "converting ${imageformat} image to vdi"
                pushd $workdir
       -        qemu-img convert -f ${imageformat} -O vdi base.${imageformat} base.vdi || zerr
       -        #sudo chown $USER base.vdi || zerr
       +        qemu-img convert \
       +                -f ${imageformat} \
       +                -O vdi \
       +                base.${imageformat} \
       +                base.vdi || zerr
                VBoxManage modifyhd base.vdi --type immutable --compact || zerr
       -        #act "removing old raw image"
       -        #rm -f base.raw
        
                vmname="${os}-${release}-prevagrant"
                notice "importing base.vdi to a VBox"
                act "creating vm"
                VBoxManage createvm --name "$vmname" --ostype Debian_64 --register || zerr
       +
                act "setting up ram and group"
                VBoxManage modifyvm "$vmname" --memory 256 --groups /vmsdk || zerr
       +
                act "setting up storage"
                VBoxManage storagectl "$vmname" --name "IDE Controller" --add ide || zerr
       +
                act "attaching storage"
       -        VBoxManage storageattach "$vmname" --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium base.vdi || zerr
       +        VBoxManage storageattach "$vmname" --storagectl "IDE Controller" --port 0 \
       +                --device 0 --type hdd --medium base.vdi || zerr
        
                vminfo="$(VBoxManage showvminfo "$vmname" --machinereadable)"
                diskuuid="$(getfield "$vminfo" '"IDE Controller-ImageUUID-0-0"')"
       t@@ -155,7 +161,8 @@ EOF
        }
        EOF
                notice "actually packaging..."
       -        vagrant package --base "$vmname" --output ${vm_name}.box --include metadata.json --vagrantfile Vagrantfile || zerr
       +        vagrant package --base "$vmname" --output ${vm_name}.box \
       +                --include metadata.json --vagrantfile Vagrantfile || zerr
                popd
        }
        
       t@@ -168,15 +175,19 @@ vm_pack_dist() {
                mkdir -p $R/dist
                mv $workdir/${vm_name}.box $R/dist
                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
       +        sha256sum $R/dist/${vm_name}.box > \
       +                $R/dist/${vm_name}.box.sha
       +        sha256sum $R/dist/${vm_name}.${imageformat} > \
       +                $R/dist/${vm_name}.${imageformat}.sha
       +
                notice "cleaning up virtualbox leftovers"
                pushd "$workdir"
       -        VBoxManage unregistervm "$vmname" --delete
       -        rm -f metadata.json Vagrantfile
       -        rm -rf .vagrant
       +                VBoxManage unregistervm "$vmname" --delete
       +                rm -f metadata.json Vagrantfile
       +                rm -rf .vagrant
                popd
                rm -rf "$workdir"
                rm -rf "$HOME/VirtualBox VMs/vmsdk"