#!/bin/sh # # ELWIX install script for image # # (C) AITNET ltd - Sofia/Bulgaria # by Michael Pounov # # $Id: install2img.sh,v 1.9 2021/03/11 13:59:50 misho Exp $ # [ -r ./config/rc.elwix ] && . ./config/rc.elwix if [ X"${ELWIX_IS_CONFIGURED}" != X"YES" ]; then echo echo "ELWIX project is not configured !?!" echo exit 1 fi if [ "${USER}" != "root" ]; then echo echo "ELWIX project is not configured - install must build under root !?!" echo exit 1 fi MNT="/mnt" DEV="" mkdevice() { echo "+++ Make prepare file image ... " rm -f $1 dd if=/dev/zero of=$1 bs=1024 count=$2 echo -n "+++ Assign memory device to image $1 ... " DEV=`mdconfig -a -tvnode -f $1` echo $DEV if [ -z "$DEV" ]; then rm -f $1 exit 3 fi } initdev() { echo -n "+++ Init device label ... " if disklabel -w $1; then echo "OK" else echo "Failed!" exit 3 fi if [ X"$2" != X"no" ]; then disklabel $1 2>&- | awk -vcfgsize=${CFG_NAND_SIZE:-65536} '($1 == "a:") { cfgsize /= 512; bootoff = $3; freesize = $2 - cfgsize; imgsize = freesize / 2; printf(" a: %d %d unused 0 0 0\n", imgsize, cfgsize + bootoff); printf(" f: %d %d unused 0 0 0\n", imgsize, imgsize + cfgsize + bootoff); printf(" g: %d %d cfg 0 0 0\n", cfgsize, bootoff); next; } { printf("%s\n", $0); }' >/tmp/disklabel.tmp else disklabel $1 2>&- | awk -vcfgsize=${CFG_NAND_SIZE:-65536} '($1 == "a:") { cfgsize /= 512; bootoff = $3; freesize = $2 - cfgsize; imgsize = freesize; printf(" a: %d %d unused 0 0 0\n", imgsize, cfgsize + bootoff); printf(" g: %d %d cfg 0 0 0\n", cfgsize, bootoff); next; } { printf("%s\n", $0); }' >/tmp/disklabel.tmp fi if disklabel -R -m ${TARGET} $1 /tmp/disklabel.tmp; then rm -f /tmp/disklabel.tmp echo "OK" else echo "Failed!" exit 3 fi if newfs -b8192 -f1024 -m0 -Lelwix ${1}a; then echo "+++ Formatting ... OK" else echo "+++ Formatting ... Failed!" exit 3 fi } mountdev() { echo -n "+++ Mount device $1 to $MNT ... " if mount /dev/${1}a $MNT; then echo "OK" else echo "Failed!" exit 4 fi } umountdev() { echo -n "+++ Unmount $MNT ... " if umount $MNT; then echo "OK" else echo "Failed!" exit 4 fi } enablejfs() { if tunefs -n enable -j enable ${1}a; then echo "Start FS Journaling ... OK" else echo "Start FS Journaling ... Failed!" exit 6 fi } boot2dev() { echo -n "+++ Installboot to device $1 ... " if disklabel -B -b ${WORLD}/boot/boot -m ${TARGET} $1; then echo "OK" else echo "Failed!" exit 7 fi } install2() { echo -n "+++ Install ELWIX OS from $1 into $MNT ... " if tar -xzvpf $1 -C $MNT; then echo "OK" else echo "Failed!" exit 5 fi } mkbak2() { if [ X"$2" != X"no" ]; then echo "+++ Syncing ELWIX OS image as backup OS image into ${1}f ..." if dd if=/dev/${1}a of=/dev/${1}f; then tunefs -L elwix2 /dev/${1}f echo "OK" else echo "Failed!" exit 8 fi else echo "+++ Make ELWIX OS system image partion for upgrade into ${REL}/sys4up_${IMGNAME}.bin ..." if dd if=/dev/${1}a of=${REL}/sys4up_${IMGNAME}.bin; then echo "OK" else echo "Failed!" exit 9 fi fi if [ ! -f ${REL}/sys4up_${IMGNAME}.bin ]; then echo "+++ Make ELWIX OS system image partion for upgrade into ${REL}/sys4up_${IMGNAME}.bin ..." if dd if=/dev/${1}a of=${REL}/sys4up_${IMGNAME}.bin; then echo "OK" else echo "Failed!" exit 9 fi fi } cleandev() { mdconfig -d -u $1 } gencksum() { echo -n "+++ Generate check sums ... " md5 $1 >$2 sha1 $1 >$3 echo "OK" } ### main() if [ -z "$1" -o ! -r "$1" ]; then echo echo "Error:: ELWIX OS tar file '$1' not found!" echo "Syntax:: ./install2img.sh [CF size] [yes == make secondary backup image]" echo exit 2 else IMGNAME=$(basename $1 | sed -e "s/.tar.gz//") MD5CHK="${REL}/${IMGNAME}${3:+"_2nd"}.md5" SHA1CHK="${REL}/${IMGNAME}${3:+"_2nd"}.sha1" IMG="${REL}/${IMGNAME}${3:+"_2nd"}.img" fi mkdevice $IMG ${2:-"${IMG_SIZE}"} initdev $DEV ${3:-"no"} mountdev $DEV install2 $1 umountdev #enablejfs $DEV boot2dev $DEV mkbak2 $DEV ${3:-"no"} cleandev $DEV gencksum $IMG $MD5CHK $SHA1CHK gencksum ${REL}/sys4up_${IMGNAME}.bin ${REL}/sys4up_${IMGNAME}.md5 ${REL}/sys4up_${IMGNAME}.sha1 echo "ELWIX OS image ${IMGNAME}${3:+"_2nd"} complete."