]> xenbits.xensource.com Git - people/sstabellini/mojo.git/.git/commitdiff
Import library functions and utils for image management
authorStefano Stabellini <sstabellini@kernel.org>
Wed, 8 Nov 2017 00:43:49 +0000 (16:43 -0800)
committerStefano Stabellini <sstabellini@kernel.org>
Wed, 8 Nov 2017 18:33:29 +0000 (10:33 -0800)
Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
build.sh
lib.sh [new file with mode: 0644]
scripts/lopartsetup [new file with mode: 0755]

index 4c49aed75fe8ec2aacf2a2be7b3515f8e5a7edde..ca15cb6c327bb96a0ae5b8ba427224b980cbae77 100644 (file)
--- a/build.sh
+++ b/build.sh
@@ -5,6 +5,8 @@ OUT_DIR=$HOME_DIR/out
 BUILDER_LABEL="xenbuilder"
 DOM0_LABEL="dom0"
 
+source lib.sh
+
 
 # Create build container
 exists=`docker images $BUILDER_LABEL | grep $BUILDER_LABEL`
diff --git a/lib.sh b/lib.sh
new file mode 100644 (file)
index 0000000..5c09580
--- /dev/null
+++ b/lib.sh
@@ -0,0 +1,42 @@
+#!/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
+}
diff --git a/scripts/lopartsetup b/scripts/lopartsetup
new file mode 100755 (executable)
index 0000000..a2a66f3
--- /dev/null
@@ -0,0 +1,87 @@
+#!/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