File:  [ELWIX - Embedded LightWeight unIX -] / elwix / install2img.sh
Revision 1.8.4.1: download - view: text, annotated - select for diffs - revision graph
Wed Jun 21 12:09:14 2017 UTC (6 years, 11 months ago) by misho
Branches: elwix2_6
Diff to: branchpoint 1.8: preferred, colored
adds new feature in ELWIX to have secondary backup image

#!/bin/sh
#
# ELWIX install script for image
#
# (C) AITNET ltd - Sofia/Bulgaria <office@aitnet.org>
#    by Michael Pounov <misho@elwix.org>
#
# $Id: install2img.sh,v 1.8.4.1 2017/06/21 12:09:14 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 -n "+++ Syncing ELWIX OS image as backup OS image into ${1}f ..."
		if dd if=/dev/${1}a of=/dev/${1}f; then
			echo "OK"
		else
			echo "Failed!"
			exit 8
		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 <ELWIX.tar.gz> [CF size] [yes == make secondary backup image]"
	echo
	exit 2
else
	IMGNAME=$(basename $1 | sed -e "s/.tar.gz//")
	MD5CHK="${REL}/${IMGNAME}.md5"
	SHA1CHK="${REL}/${IMGNAME}.sha1"
	IMG="${REL}/${IMGNAME}.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

echo "ELWIX OS image $IMGNAME complete."

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>