#!/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.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 <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}${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."
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>