kumquat-buildroot/scripts/build-ext3-img
2008-05-01 15:21:47 +00:00

153 lines
3.6 KiB
Bash
Executable File

#!/bin/sh
BLOCKSIZE=516096
WORKING_DIR=`pwd`
echo "This script will create a bootable ext3 image from buildroot."
echo "Enter the path to the image (${WORKING_DIR})"
read IMG_PATH
if [ "${IMAGE_PATH}" = "" ]; then
IMAGE_PATH=${WORKING_DIR}
fi
echo "Enter the name of the image file (buildroot.img)"
read IMG_NAME
if [ "${IMAGE_NAME}" = "" ]; then
IMAGE_NAME="buildroot.img"
fi
IMAGE=${IMAGE_PATH}/${IMAGE_NAME}
echo "Enter the path and filename for the root filesystem"
echo "tarball that you want to install into the image"
read ROOT_PATH
if [ "${ROOT_PATH}" = "" ]; then
echo "Error: you must specify a path."
exit 1
fi
CYLINDERS=`du --summarize --block-size=${BLOCKSIZE} ${ROOT_PATH}`
BYTE_SIZE=`du --summarize --block-size=${BLOCKSIZE} --human-readable ${ROOT_PATH}`
CYLINDERS=${CYLINDERS%${ROOT_PATH}}
BYTE_SIZE=${BYTE_SIZE%${ROOT_PATH}}
CYLINDERS=`expr ${CYLINDERS} "*" 2`
echo "Now I will create an ext3 image file"
echo "using ${CYLINDERS} cylinders, with ${BLOCKSIZE} bytes per block"
echo "in other words, ${BYTE_SIZE}bytes..."
dd if=/dev/zero of=${IMAGE} bs=${BLOCKSIZE}c count=${CYLINDERS}
# Create file partition and filesystem
# STEP 1. create partition
/sbin/losetup /dev/loop3 ${IMAGE}
# probably should figure out how to use GNU parted to do this non-interactively
/sbin/fdisk -u -C${CYLINDERS} -S63 -H16 /dev/loop3
/sbin/losetup -d /dev/loop3
# STEP 2. make file system (ext3)
/sbin/losetup -o 32256 /dev/loop3 ${IMAGE}
/sbin/mkfs.ext3 /dev/loop3
/sbin/losetup -d /dev/loop3
# Install Software to the image
mkdir -p ${IMAGE_PATH}/temp
mount -o offset=32256,loop ${IMAGE} ${IMAGE_PATH}/temp
tar -xvf ${ROOT_PATH} --directory ${IMAGE_PATH}/temp
# make sure to unmount the image
umount ${IMAGE_PATH}/temp
rm -rf ${IMAGE_PATH}/temp
# Create a VMware .vmx file
cat > ${IMAGE_PATH}/buildroot.vmx <<EOF
config.version = "8"
virtualHW.version = "3"
uuid.location = "56 4d 5c cc 3d 4a 43 29-55 89 5c 28 1e 7e 06 58"
uuid.bios = "56 4d 5c cc 3d 4a 43 29-55 89 5c 28 1e 7e 06 58"
uuid.action = "create"
checkpoint.vmState = ""
displayName = "Buildroot"
annotation = ""
guestinfo.vmware.product.long = ""
guestinfo.vmware.product.url = "http://dcgrendel.be/vmbuilder/"
guestOS = "linux"
numvcpus = "1"
memsize = "256"
paevm = "FALSE"
sched.mem.pshare.enable = "TRUE"
MemAllowAutoScaleDown = "FALSE"
MemTrimRate = "-1"
nvram = "nvram"
mks.enable3d = "FALSE"
vmmouse.present = "TRUE"
tools.syncTime = "TRUE"
tools.remindinstall = "FALSE"
isolation.tools.hgfs.disable = "FALSE"
isolation.tools.dnd.disable = "FALSE"
isolation.tools.copy.enable = "TRUE"
isolation.tools.paste.enabled = "TRUE"
gui.restricted = "FALSE"
ethernet0.present = "TRUE"
ethernet0.connectionType = "bridged"
ethernet0.addressType = "generated"
ethernet0.generatedAddress = "00:0c:29:7e:06:58"
ethernet0.generatedAddressOffset = "0"
usb.present = "TRUE"
usb.generic.autoconnect = "FALSE"
sound.present = "TRUE"
sound.virtualdev = "es1371"
ide0:0.present = "TRUE"
ide0:0.fileName = "buildroot.vmdk"
ide0:0.deviceType = "disk"
ide0:0.mode = ""
ide0:0.redo = ""
ide0:0.writeThrough = "FALSE"
ide0:0.startConnected = "TRUE"
ide1:0.present = "FALSE"
ide1:0.fileName = ""
ide1:0.deviceType = "disk"
ide1:0.mode = ""
ide1:0.redo = ""
ide1:0.writeThrough = "FALSE"
ide1:0.startConnected = "FALSE"
floppy0.present = "FALSE"
serial0.present = "FALSE"
serial1.present = "FALSE"
parallel0.present = "FALSE"
EOF
# Install GRUB
/sbin/grub --no-floppy --batch <<EOT
device (hd0) ${IMAGE}
geometry (hd0) ${CYLINDERS} 16 63
root (hd0,0)
setup (hd0)
quit
EOT