TARGET=$1 [ -z ${TARGET} ] && die "Usage: $0 meego-image.bin [size in M]" shift SIZE=$1 [ -z ${SIZE} ] && SIZE=7600
function die { echo $@ exit -1 }
function unhook {
local path=$1
[ -e "${path}" ] && {
mount | grep -q "${PWD}/${path}" && {
sudo umount "${path}" || die "Unable to unmount '${path}'"
}
rmdir "${path}" || die "Unable to rmdir '${path}'"
}
return 0
}
function hook { local path=$1 local image=$2 unhook "${path}" mkdir "${path}" || die "Unable to create directory '${path}'" local VALUE=($(echo -ne "u b\np\nq\n" | parted "${image}" | grep primary)) local OFFSET=${VALUE[1]/B} sudo mount -o loop,offset=${OFFSET} "${image}" "${path}" || die "Unable to mount '${image}' to '${path}'" return 0 }
function resize { local image=$1 local size=$2 local tmp=($(du --apparent-size -B $((1024*1024)) "${image}")) local current="${tmp[0]}" [ "${current}" != "${size}" ] && { echo -n "Settting '${image}' to ${size}M..." dd if=/dev/zero of=${image} bs=1M seek=$((size - 1)) count=1 > /dev/null local VALUE=($(echo -ne "u b\np\nq\n" | parted "${image}" | grep btrfs\$)) [ -z "${VALUE[0]}" ] && die "$0 only supports BTRFS images" local OFFSET=${VALUE[1]/B} echo -e "rm 1\nmkpart primary btrfs ${OFFSET}b -1\nq" | parted "${image}" > /dev/null echo "done" }
return 0 }
resize "${TARGET}" 7600
echo -n "Finalizing image resize..." TMP=.tmp-resize hook ${TMP} "${TARGET}" sudo btrfsctl -r ${SIZE}M -A $(mount | sed -ne "s,^\([^ ]*\) .*${PWD}/${TMP}.*$,\1,p") unhook ${TMP} echo "done"