From d59ef0beaaa0c171ba6671904fc5829514addfae Mon Sep 17 00:00:00 2001 From: vpeter4 Date: Tue, 22 Jan 2013 18:54:21 +0100 Subject: [PATCH] update create_virtualimage script copied changes from commit 34854f9 and commit 467914e. --- .../tools/syslinux/files/create_virtualimage | 206 +++++++++++++----- 1 file changed, 151 insertions(+), 55 deletions(-) diff --git a/packages/tools/syslinux/files/create_virtualimage b/packages/tools/syslinux/files/create_virtualimage index 565b6266fb..531e1256ed 100755 --- a/packages/tools/syslinux/files/create_virtualimage +++ b/packages/tools/syslinux/files/create_virtualimage @@ -1,8 +1,8 @@ #!/bin/sh ################################################################################ -# Copyright (C) 2009-2010 OpenELEC.tv -# http://www.openelec.tv +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) # # This Program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,49 +20,94 @@ # http://www.gnu.org/copyleft/gpl.html ################################################################################ -# usage: sudo ./create_virtualmachine -# example: sudo ./create_virtualmachine /home/test/VM +# usage: sudo ./create_virtualmachine [] [system partition size(MB)] +# example: sudo ./create_virtualmachine /home/test/VM 512 [vdi] [128] if [ "$(id -u)" != "0" ]; then - clear - echo "#########################################################" - echo "# please execute with 'sudo' or -DANGEROUS!!!- as root #" - echo "# example: sudo ./create_virtualmachine #" - echo "#########################################################" + echo "##############################################################" + echo "# please execute with 'sudo' or -DANGEROUS!!!- as root #" + echo "# example: #" + echo "# sudo ./create_virtualmachine [] #" + echo "##############################################################" exit 1 fi -if [ -z "$1" ]; then - clear - echo "#########################################################" - echo "# please execute with target folder drive as option #" - echo "# example: sudo ./create_virtualmachine /home/test/VM/ #" - echo "#########################################################" +if [ -z "$1" -o -z "$2" ]; then + echo "##############################################################" + echo "# please execute as follows #" + echo "# example: #" + echo "# sudo ./create_virtualmachine [] #" + echo "##############################################################" exit 1 fi +if [ ! -d "$1" ]; then + echo "##############################################################" + echo "# please create target directory #" + echo "# example: #" + echo "# mkdir #" + echo "##############################################################" + exit 1 +fi + +if [ "$2" -lt "200" -o "$2" -gt "2048" ]; then + echo "##############################################################" + echo "# use a value between 200MB and 2048MB (2GB) #" + echo "# example: #" + echo "# sudo ./create_virtualmachine /home/test/VM 512 #" + echo "##############################################################" + exit 1 +fi + +if [ ! -z "$3" -a "$3" != "vdi" -a "$3" != "vmdk" ]; then + echo "##############################################################" + echo "# only vdi or vmdk types are supported #" + echo "# example: #" + echo "# sudo ./create_virtualmachine /home/test/VM 512 [vdi] #" + echo "##############################################################" + exit 1 +elif [ "$3" = "vdi" ]; then + TYPE="vdi" +elif [ -z "$3" -o "$3" = "vmdk" ]; then + TYPE="vmdk" +fi + +if [ -z "$4" ]; then + SYSTEM_SIZE=192 +else + if [ "$4" -lt "128" -o "$4" -gt "1024" -o "$4" -gt "$2" ]; then + echo "##############################################################" + echo "# use a value between 128MB and 1024MB #" + echo "# example: #" + echo "# sudo ./create_virtualmachine /home/test/VM 512 [vdi] [256] #" + echo "##############################################################" + exit 1 + else + SYSTEM_SIZE=$4 + fi +fi + DISK="$1/OpenELEC.img" -VMDK="$1/OpenELEC.vmdk" +IMAGE="$1/OpenELEC.$TYPE" LOOP=$(losetup -f) +DISK_SIZE=$2 +STORAGE_SIZE=$(( $DISK_SIZE - $SYSTEM_SIZE )) -clear -echo "#########################################################" -echo "# #" -echo "# OpenELEC.tv USB Installer #" -echo "# #" -echo "#########################################################" -echo "# #" -echo "# This will wipe any data off your chosen drive #" -echo "# Please read the instructions and use very carefully.. #" -echo "# #" -echo "#########################################################" +echo "" +echo " folder: $1" +echo " loop: $LOOP" +echo " disk: $DISK" +echo " image: $IMAGE" +echo " type: $TYPE" +echo " disk size: $DISK_SIZE MB" +echo " system size: $SYSTEM_SIZE MB" +echo "storage size: $STORAGE_SIZE MB" # check for some required tools # this is needed to create a bootloader which syslinux > /dev/null if [ "$?" = "1" ]; then - clear echo "#########################################################" echo "# #" echo "# OpenELEC.tv missing tool - Installation will quit #" @@ -75,10 +120,24 @@ echo "#########################################################" exit 1 fi + # this is needed to create a bootloader + which extlinux > /dev/null + if [ "$?" = "1" ]; then + echo "#########################################################" + echo "# #" + echo "# OpenELEC.tv missing tool - Installation will quit #" + echo "# #" + echo "# We can't find the required tool \"extlinux\" #" + echo "# on your system. #" + echo "# Please install it via your package manager. #" + echo "# #" + echo "#########################################################" + exit 1 + fi + # this is needed by syslinux which mcopy > /dev/null if [ "$?" = "1" ]; then - clear echo "#########################################################" echo "# #" echo "# OpenELEC.tv missing tool - Installation will quit #" @@ -96,7 +155,6 @@ echo "#########################################################" # this is needed to partion the drive which parted > /dev/null if [ "$?" = "1" ]; then - clear echo "#########################################################" echo "# #" echo "# OpenELEC.tv missing tool - Installation will quit #" @@ -109,10 +167,9 @@ echo "#########################################################" exit 1 fi - # this is needed fo convert harddisk image to vmdk format + # this is needed fo convert harddisk image to vmdk or vdi format which qemu-img > /dev/null if [ "$?" = "1" ]; then - clear echo "#########################################################" echo "# #" echo "# OpenELEC.tv missing tool - Installation will quit #" @@ -125,13 +182,12 @@ echo "#########################################################" exit 1 fi - # check MD5 sums + echo "" echo "checking MD5 sum..." md5sumFailed() { - clear echo "#########################################################" echo "# #" echo "# OpenELEC.tv failed md5 check - Installation will quit #" @@ -153,32 +209,42 @@ echo "#########################################################" md5sumFailed fi -# ensure loop0 not in use +# ensure loopX not in use + echo "" + echo "next two errors can be ignored..." umount "$LOOP" losetup -d "$LOOP" # create an image + echo "" echo "creating new empty harddisk image: $DISK..." - dd if=/dev/zero of="$DISK" bs=1M count=512 + dd if=/dev/zero of="$DISK" bs=1M count="$DISK_SIZE" # write a disklabel + echo "" echo "creating new partition table: $DISK..." losetup "$LOOP" "$DISK" parted -s "$LOOP" mklabel msdos # create partition1 + echo "" echo "creating partition1 on $DISK..." - parted -s "$LOOP" -a min unit s mkpart primary ext4 64 262208 + SYSTEM_PART_END=$(( $SYSTEM_SIZE * 1024 * 1024 / 512 + 64 )) + parted -s "$LOOP" -a min unit s mkpart primary ext4 64 $SYSTEM_PART_END # create partition2 + echo "" echo "creating partition2 on $DISK..." - parted -s "$LOOP" -a min unit s mkpart primary ext4 262209 100% + STORAGE_PART_START=$(( $SYSTEM_PART_END + 1 )) + parted -s "$LOOP" -a min unit s mkpart primary ext4 $STORAGE_PART_START 100% # make partition1 active (bootable) + echo "" echo "marking partition1 active..." parted -s "$LOOP" set 1 boot on # write mbr + echo "" echo "writing mbr..." if [ -f /usr/lib/syslinux/mbr.bin ]; then MBR="/usr/lib/syslinux/mbr.bin" # example: debian, ubuntu @@ -186,71 +252,101 @@ echo "#########################################################" MBR="/usr/share/syslinux/mbr.bin" # example: fedora else echo "Can't find syslinux's mbr.bin on Host OS" + exit 1 fi if [ -n "$MBR" ]; then cat "$MBR" > "$LOOP" fi +# sync disk + echo "" + echo "syncing disk..." + sync + # create filesystem on partition1 - echo "creating filesystem on partition1..." + echo "" losetup -d "$LOOP" - losetup -o 32768 --sizelimit 134218240 "$LOOP" "$DISK" - mke2fs -t ext4 -m 0 "$LOOP" + echo "creating filesystem on partition1..." + OFFSET=$(( 64 * 512 )) + SIZELIMIT=$(( $SYSTEM_SIZE * 1024 * 1024 )) + losetup -o $OFFSET --sizelimit $SIZELIMIT "$LOOP" "$DISK" + mke2fs -q -t ext4 -m 0 "$LOOP" tune2fs -U random -L "System" "$LOOP" sync # mount partition + echo "" echo "mounting partition1 on /tmp/vmware_install..." mkdir -p /tmp/vmware_install mount "$LOOP" /tmp/vmware_install # create bootloader configuration + echo "" echo "creating bootloader configuration..." - echo "DEFAULT linux" > /tmp/vmware_install/syslinux.cfg - echo "PROMPT 0" >> /tmp/vmware_install/syslinux.cfg - echo " " >> /tmp/vmware_install/syslinux.cfg - echo "LABEL linux" >> /tmp/vmware_install/syslinux.cfg - echo " KERNEL /KERNEL" >> /tmp/vmware_install/syslinux.cfg - echo " APPEND boot=LABEL=System disk=LABEL=Storage quiet ssh" >> /tmp/vmware_install/syslinux.cfg + cat >/tmp/vmware_install/syslinux.cfg << EOF +DEFAULT linux +PROMPT 0 + +LABEL linux + KERNEL /KERNEL + APPEND boot=LABEL=System disk=LABEL=Storage quiet ssh + +EOF # install extlinux + echo "" echo "installing extlinux to partition1..." extlinux --heads=4 --sector=32 -i /tmp/vmware_install # copy files + echo "" echo "copying files to partition1..." cp target/KERNEL /tmp/vmware_install cp target/SYSTEM /tmp/vmware_install # sync disk + echo "" echo "syncing disk..." sync # unmount partition1 + echo "" echo "unmounting partition1..." umount "$LOOP" sync # create filesystem on partition2 - echo "creating filesystem on partition2..." + echo "" losetup -d "$LOOP" - losetup -o 134251008 "$LOOP" "$DISK" - mke2fs -t ext4 -m 0 "$LOOP" + echo "creating filesystem on partition2..." + OFFSET=$(( $STORAGE_PART_START * 512 )) + losetup -o $OFFSET "$LOOP" "$DISK" + mke2fs -q -t ext4 -m 0 "$LOOP" tune2fs -U random -L "Storage" "$LOOP" sync -# detach loop0 +# detach loopX losetup -d "$LOOP" # cleaning + echo "" echo "cleaning tempdir..." + [ -f /tmp/vmware_install/ldlinux.sys ] && chattr -i /tmp/vmware_install/ldlinux.sys rm -rf /tmp/vmware_install -# convert image to vmdk - echo "converting $DISK to vmdk format..." - qemu-img convert -O vmdk "$DISK" "$VMDK" +# convert image to vmdk or vdi + echo "" + echo "converting $DISK to $TYPE format..." + qemu-img convert -O $TYPE "$DISK" "$IMAGE" rm -f "$DISK" -echo "...installation finished" +# sync disk + echo "" + echo "syncing disk..." + sync + + echo "" + echo "installation finished..." + echo ""