#!/bin/bash
set -e
export PATH=/sbin:/bin
tftp_server=10.0.0.1
nic_module=3c59x.o
major_a=(2 3 22)
family_a=(fd hda hdc)
image_a=(img0001 img0002 img0003 img0004)
operation_a=( "Copy from network to device" \
"Copy from device to network" \
"Run fdisk")
mount -t proc proc /proc
insmod /lib/${nic_module}
/sbin/dhcpcd
while true; do \
[ ! -z "${image}" ] && unset image
echo
echo "Clone Menu"
echo
echo "Operation"
echo
PS3="Choose operation (1-${#operation_a[*]}): "
select operation in "${operation_a[@]}"; do \
[ -z "${operation}" ] && continue
echo
echo $REPLY - $operation
echo
break
done
echo "Device Family"
echo
PS3="Choose device family (1-${#family_a[*]}): "
select family in "${family_a[@]}"; do \
[ -z "${family}" ] && continue
echo
echo $REPLY - $family
echo
break
done
major_i=$[REPLY-1]
major=${major_a[$major_i]}
echo "Minor Number"
echo
PS3="Choose minor number (0-255): "
echo -n "$PS3" >&2
read minor
minor=$[minor%256]
echo
echo $minor
echo
if [ "${operation}" != "${operation_a[2]}" ]; then \
echo "Image"
echo
PS3="Choose image (1-${#image_a[*]}): "
select image in "${image_a[@]}"; do \
[ -z "${image}" ] && continue
echo
echo $REPLY - $image
echo
break
done
image_i=$[REPLY-1]
image=${image_a[${image_i}]}
fi
echo
echo -e "Operation:\t$operation"
device_name=/dev/${family_a[${major_i}]}${minor}
echo -e "Device:\t\t${device_name} ($major, $minor)"
[ ! -z "${image}" ] && echo -e "Image:\t\t${image}"
echo
echo "Confirmation"
echo
PS3="Ok/Cancel (1-2): "
select ok in Ok Cancel; do \
[ -z "${ok}" ] && continue
echo
echo $REPLY - $ok
echo
break
done
if [ "${ok}" = "Ok" ]; then \
if [ ! -b ${device_name} ]; then \
echo "Creating ${device_name}"
mknod ${device_name} b ${major} ${minor}
fi
if [ ! -z "${image}" ]; then \
if [ ! -p ${image} ]; then \
echo "Creating pipe"
mknod ${image} p
fi
fi
if [ "${operation}" = "${operation_a[0]}" ]; then \
tftp ${tftp_server} <<-EOT &
binary
get ${image}
EOT
gzip -c -d < ${image} | dd of=${device_name}
elif [ "${operation}" = "${operation_a[1]}" ]; then \
tftp ${tftp_server} <<-EOT &
binary
put ${image}
EOT
dd if=${device_name} | gzip -c > ${image}
elif [ "${operation}" = "${operation_a[2]}" ]; then \
fdisk ${device_name}
fi
echo
fi
echo "Continuation"
echo
PS3="Continue/Exit (1-2): "
select new in Continue Exit; do \
[ -z "${new}" ] && continue
echo
echo $REPLY - $new
echo
break
done
[ "${new}" = "Exit" ] && break
done
exit 0
|