(Created page with "#!/bin/bash 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 unh…") |
|||
| Line 1: | Line 1: | ||
| - | #!/bin/bash | + | #!/bin/bash |
| - | TARGET=$1 | + | TARGET=$1 |
| - | [ -z ${TARGET} ] && die "Usage: $0 meego-image.bin [size in M]" | + | [ -z ${TARGET} ] && die "Usage: $0 meego-image.bin [size in M]" |
| - | shift | + | shift |
| - | SIZE=$1 | + | SIZE=$1 |
| - | [ -z ${SIZE} ] && SIZE=7600 | + | [ -z ${SIZE} ] && SIZE=7600 |
| - | + | ||
| - | function die { | + | function die { |
| - | + | echo $@ | |
| - | + | exit -1 | |
| - | } | + | } |
| - | + | ||
| - | + | function unhook { | |
| - | 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 { | |
| - | 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 { | |
| - | 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 | |
| - | resize "${TARGET}" 7600 | + | |
| - | + | echo -n "Finalizing image resize..." | |
| - | echo -n "Finalizing image resize..." | + | TMP=.tmp-resize |
| - | TMP=.tmp-resize | + | hook ${TMP} "${TARGET}" |
| - | hook ${TMP} "${TARGET}" | + | sudo btrfsctl -r ${SIZE}M -A $(mount | sed -ne "s,^\([^ ]*\) .*${PWD}/${TMP}.*$,\1,p") |
| - | sudo btrfsctl -r ${SIZE}M -A $(mount | sed -ne "s,^\([^ ]*\) .*${PWD}/${TMP}.*$,\1,p") | + | unhook ${TMP} |
| - | unhook ${TMP} | + | echo "done" |
| - | echo "done" | + | |
#!/bin/bash
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"