#!/bin/bash # #Download onePK - all-in-one-vm ova VM from Cisco: #https://developer.cisco.com/site/networking/one/onepk/downloads/all-in-one-vm/ # #Requirements: #+21GB free disk space to convert vmdk to raw image #Root password to mount raw image function read_names { echo "" while [[ ! -f "$path" ]]; do echo -n "Enter path to the onepk file: " read path done ova=$(basename $path) if [ -z "$ova" ]; then echo "File '$path' isn't matching standard name, exiting now" exit fi dir=$(dirname $path) vmdk=$(echo $ova | grep -o 'all.*[0-9]')-disk1.vmdk raw=$(echo $ova | grep -o 'all.*[0-9]')-disk1.img name=$(echo $ova | grep -o 'all.*[0-9]'); } function convert_to_raw { echo -e "\nExtracting file '$ova' to '$dir'" tar xvf $path -C $dir vbox_manage=$(type -P vboxmanage) qemu_img=$(type -P qemu-img) if [[ ! -z "$vbox_manage" ]]; then echo -e "\nConverting file '$vmdk' to raw format with 'vboxmanage' utility" $vbox_manage internalcommands converttoraw $dir/$vmdk $dir/$raw elif [[ ! -z "$qemu_img" ]]; then check_qemu_version echo -e "\nConverting file '$vmdk' to raw format with 'qemu-img' utility" $qemu_img convert -O raw $dir/$vmdk $dir/$raw else echo -e "\nNo utility found for conversion to raw format, exiting" exit fi } function check_qemu_version { qemu_ver=$($qemu_img info $dir/$vmdk 2>&1 | grep -o 'Wrong medium') if [[ "$qemu_ver" == "Wrong medium" ]]; then echo -e "\nYour qemu version doesn't support VMDK3 disk type, exiting" exit fi } function get_offset { start=$(fdisk -l $dir/$raw | grep $dir/$raw\1 | awk '{print $3}') offset=$(($start*512)) } function mount_dir { if [[ ! -d $dir/tmp ]]; then mkdir $dir/tmp fi echo -e "\nMounting parition '$raw' to '$dir/tmp', enter root password" su -c "mount -o loop,ro,offset=$offset $dir/$raw $dir/tmp" echo -e "\nExtracting 'vios-adventerprisek9-m.vmdk' from '$dir/tmp/usr/share/vmcloud/data/images/vios-adventerprisek9-m.ova'" tar xvf $dir/tmp/usr/share/vmcloud/data/images/vios-adventerprisek9-m.ova -C $dir if [[ -f "$dir/vios-adventerprisek9-m.vmdk" ]]; then echo -e "\nFile 'vios-adventerprisek9-m.vmdk' was succesufully extracted to '$dir'" rm $dir/vios-adventerprisek9-m.mf $dir/vios-adventerprisek9-m.ovf $dir/README-BDEO.txt $dir/README-OVF.txt $dir/bdeo.sh fi echo -e "\nEnter root password to umount '$dir/tmp'" su -c "umount $dir/tmp" rm $dir/$raw rm $dir/$vmdk $dir/$name.mf $dir/$name.ovf rmdir $dir/tmp } #BODY read_names convert_to_raw get_offset mount_dir