--- /dev/null
+#!/bin/bash
+
+# $1 disk name
+# $2 disk size
+function allocate_disk() {
+ local disk
+ local size
+
+ disk=$1
+ size=$2
+
+ size=$((size+511))
+ size=$((size/512))
+
+ dd if=/dev/zero of=$disk bs=512 count=$size
+ sync
+}
+
+# $1 disk name
+# print loop device name
+function create_loop() {
+ local disk
+ local loop
+
+ disk=`readlink -f $1`
+
+ losetup -f $disk
+ loop=`losetup -a | grep $disk | cut -d : -f 1`
+ echo $loop
+}
+
+# $1 disk name
+# print loop device name of the partition
+function create_one_partition() {
+ local disk
+ local dev
+
+ disk=$1
+ echo -e "o\nn\np\n1\n\n\nw" | fdisk $disk &>/dev/null
+ dev=`scripts/lopartsetup $disk | head -1 | cut -d ":" -f 1`
+ echo $dev
+}
--- /dev/null
+#!/usr/bin/env bash
+#
+# Need root privileges
+#
+# Create loop devices corresponding to partitions within an existing
+# file.
+#
+
+set -e
+
+function _help() {
+ echo "Usage: lopartsetup file"
+}
+
+function _create_loop_device() {
+ local devnode
+ local filename
+ local offset
+ local index
+
+ filename="$1"
+ index="$2"
+ offset="$3"
+
+ devnode="`losetup -f 2>/dev/null`"
+ if [[ -z "$devnode" ]]
+ then
+ echo "no loop devices available"
+ exit 1
+ fi
+
+ echo "$devnode: partition $index of $filename"
+ losetup "$devnode" "$filename" -o "$offset"
+}
+
+if [[ $# -lt 1 ]]
+then
+ _help
+ exit 1
+fi
+
+if [[ -f "$1" && -r "$1" ]]
+then
+ filename="$1"
+ shift
+else
+ echo invalid image file
+ exit 1
+fi
+
+if [[ ! "`file -b $filename`" = *"boot sector"* ]]
+then
+ echo "$filename does not have a partition table"
+ exit 1
+fi
+
+unitstring=""
+column=0
+if [ `fdisk -lu $filename 2>/dev/null | grep -e "^Units = " | wc -l` -eq 1 ]
+then
+ unitstring="^Units = "
+ column=9
+elif [ `fdisk -lu $filename 2>/dev/null | grep -e "^Units:" | wc -l` -eq 1 ]
+then
+ unitstring="^Units:"
+ column=8
+else
+ exit 1
+fi
+
+unit="`fdisk -lu $filename 2>/dev/null | grep -e "$unitstring" | cut -d " " -f $column`"
+
+index=0
+for i in "`fdisk -lu $filename 2>/dev/null | grep -e "^$filename"`"
+do
+ index=$((index+1))
+ offset=`echo "$i" | tr -s " " | cut -d " " -f 2`
+ if [[ "$offset" == "*" ]]
+ then
+ offset=`echo "$i" | tr -s " " | cut -d " " -f 3`
+ fi
+ offset=$((unit*offset))
+
+ _create_loop_device "$filename" "$index" "$offset"
+done
+
+exit 0