#!/bin/sh
KERNEL_SOURCE=$PWD/../linux-2.4.18
RAMFSDIR=$PWD/rootfs
UCLIBCDIR=/usr/local/gcc333/lexra-nnop-v5/mips-linux-uclibc/lib
#UCLIBCDIR=uClibc-0.9.26/lib
MOUNTDIR=/mnt
MKSQUASHFS=$PWD/tools/mksquashfs

CVIMG=$PWD/tools/cvimg
if [ "$1" = ""  ]; then
	echo "mkimg {AP=1 | GW=1 | GW_8M=1 | GW_VPN=1}"
	exit 1
fi

eval $1

if [ "$GW" = 1 ]; then
	COMPRESS_RAMDISK=1
fi

if [ "$AP" = 1 ]; then
	RAMDISK_SIZE=4800
	APPIMG_DIR=appimg-ap
elif [ "$GW" = 1 ]; then
	RAMDISK_SIZE=3200
	APPIMG_DIR=appimg-gw
elif [ "$GW_VPN" = 1 ]; then
	RAMDISK_SIZE=5200
	APPIMG_DIR=appimg-vpn
elif [ "$GW_8M" = 1 ] ; then
	RO_FS=1
fi


rm -rf $RAMFSDIR $RAMDISK_TMP

#create root file system dir

ROOTDIRS="dev bin sbin usr etc/1x var proc tmp"
for dir in $ROOTDIRS ; do
	mkdir -p $RAMFSDIR/$dir
done

if [ "$RO_FS" = 1  ];then
	rm -rf $RAMFSDIR/tmp
	ln -s /var/tmp $RAMFSDIR/tmp
fi

DEVICES="ttyS0,c,4,64	console,c,4,64  null,c,1,3 	mtd,b,31,0
	wl_chr0,c,13,0  wl_chr1,c,13,1"

if [ "$GW" = 1 -o  "$GW_8M" = 1 -o "$GW_VPN" = 1 ];then
DEVICES="$DEVICES  ttyS1,c,4,65   ppp,c,108,0 	ptyp0,c,2,0
	ptyp1,c,2,1	ttyp0,c,3,0	ttyp1,c,3,1	urandom,c,1,9"
fi
if [ "$RO_FS" = 1  ];then
DEVICES="$DEVICES  mtdblock1,b,31,1"
fi

if [ "$GW_VPN" = 1  ];then
DEVICES="$DEVICES  random,c,1,8"
fi

if [ "$RO_FS" = 1 ] ;then
	ln -s /tmp/log $RAMFSDIR/dev/log  	
fi

for dev in $DEVICES; do
	name=`echo $dev |cut -d"," -f1`
	type=`echo $dev |cut -d"," -f2 `
	major=`echo $dev |cut -d"," -f3 `
	minor=`echo $dev |cut -d"," -f4 `
	mknod -m666 $RAMFSDIR/dev/$name $type $major $minor
done

# busybox
cp -R -p ./busybox-1.00-pre8/_install/* $RAMFSDIR/

cp ./bridge-utils/brctl/brctl $RAMFSDIR/bin

if [ "$GW" = 1 -o "$GW_8M" = 1 -o "$GW_VPN" = 1 ];then
	cp ./iptables-1.2.6a/iptables $RAMFSDIR/bin
fi


# web sever
if [ "$GW" = 1 ];then
	cp ./goahead-2.1.1/LINUX/flash-gw $RAMFSDIR/bin/flash
	cp ./goahead-2.1.1/LINUX/webs-gw $RAMFSDIR/bin/webs
elif [ "$GW_VPN" = 1 ];then
	cp ./goahead-2.1.1/LINUX/flash-vpn $RAMFSDIR/bin/flash
	cp ./goahead-2.1.1/LINUX/webs-vpn $RAMFSDIR/bin/webs
elif [ "$GW_8M" = 1 ];then
	cp ./goahead-2.1.1/LINUX/flash-gw $RAMFSDIR/bin/flash
	cp ./goahead-2.1.1/LINUX/webs-gw $RAMFSDIR/bin/webs
elif [ "$AP" = 1 ];then
	cp ./goahead-2.1.1/LINUX/flash-ap $RAMFSDIR/bin/flash
	cp ./goahead-2.1.1/LINUX/webs-ap $RAMFSDIR/bin/webs
fi
if [ "$RO_FS" = 1 ];then
	ln -s /var/web $RAMFSDIR/web
fi
# script files

if [ "$GW" = 1  -o "$GW_8M" = 1 -o "$GW_VPN" = 1  ];then
	cp ./script/*.sh $RAMFSDIR/bin
	if [ "$GW_VPN" != 1 ];then
		rm  $RAMFSDIR/bin/vpn.sh
	fi
elif [ "$AP" = 1  ];then
	cp ./script/init.sh $RAMFSDIR/bin
	cp ./script/bridge.sh $RAMFSDIR/bin
	cp ./script/fixedip.sh $RAMFSDIR/bin
	cp ./script/dhcpc.sh $RAMFSDIR/bin
	cp ./script/dhcpd.sh $RAMFSDIR/bin
	cp ./script/wlan.sh $RAMFSDIR/bin
	cp ./script/wlanapp.sh $RAMFSDIR/bin
	cp ./auth/Package/openssl-0.9.7d/apps/openssl $RAMFSDIR/bin
	cp ./auth/src/xsup_src/config_files/xsuplicant/cert.sh $RAMFSDIR/bin
fi

# udhcp DHCP client

#cp ./udhcp-0.9.9-pre/udhcpc $RAMFSDIR/bin
mkdir $RAMFSDIR/usr/share
mkdir $RAMFSDIR/usr/share/udhcpc
cp ./udhcp-0.9.9-pre/mips-scripts/* $RAMFSDIR/usr/share/udhcpc
if [ "$RO_FS" = 1  ]; then
	ln -s /var/udhcpc $RAMFSDIR/etc/
	rm $RAMFSDIR/usr/share/udhcpc/*.deconfig
	ln -s /var/udhcpc/br0.deconfig $RAMFSDIR/usr/share/udhcpc/br0.deconfig
	ln -s /var/udhcpc/eth0.deconfig $RAMFSDIR/usr/share/udhcpc/eth0.deconfig
	ln -s /var/udhcpc/eth1.deconfig $RAMFSDIR/usr/share/udhcpc/eth1.deconfig
	ln -s /var/udhcpc/wlan0.deconfig $RAMFSDIR/usr/share/udhcpc/wlan0.deconfig
else
	mkdir $RAMFSDIR/etc/udhcpc
fi

# udhcpd DHCP server
cp ./udhcp-0.9.9-pre/udhcpd $RAMFSDIR/bin
ln -s udhcpd $RAMFSDIR/bin/udhcpc
if [ "$RO_FS" = 1  ]; then
	ln -s /var/udhcpd $RAMFSDIR/etc
else
	mkdir -p $RAMFSDIR/var/lib/misc
fi

# for uclibc shared library
mkdir $RAMFSDIR/lib
#cp $UCLIBCDIR/libuClibc-0.9.26.so $RAMFSDIR/lib/libc.so.0
#if [ "$GW" = 1  -o "$GW_8M" = 1  -o "$GW_VPN" = 1 ];then
#	cp $UCLIBCDIR/libcrypt-0.9.26.so $RAMFSDIR/lib/libcrypt.so.0
#fi
#if [ "$GW_VPN" = 1 ];then
	#cp $UCLIBCDIR/libm-0.9.26.so $RAMFSDIR/lib/libm.so.0
#fi

# add DNS relay (dnrd)
if [ "$GW" = 1  -o "$GW_VPN" = 1 -o "$GW_8M" = 1 ];then
    if [ "$RO_FS" = 1 ] ;then
        cp ./dnrd-2.10/src/dnrd $RAMFSDIR/bin
	ln -s /var/dnrd $RAMFSDIR/etc/
    else
	cp ./dnrd-2.10/src/dnrd $RAMFSDIR/bin
	mkdir $RAMFSDIR/etc/dnrd
    fi
fi

# wireless LAN configure tool
cp ./wireless_tools.25/iwpriv $RAMFSDIR/bin

# for 802.1x
cp ./auth/src/auth $RAMFSDIR/bin
cp ./auth/src/dlisten/iwcontrol $RAMFSDIR/bin

# for IAPP
cp ./IAPP/iapp $RAMFSDIR/bin
# for DDNS 
if [ "$GW" = 1 -o "$GW_VPN" = 1 -o "$GW_8M" = 1 ];then
	cp ./updatedd-2.0/src/updatedd $RAMFSDIR/bin
fi

# UPNP
if [ "$GW" = 1 -o "$GW_VPN" = 1 -o "$GW_8M" = 1 ];then
	if [ "$RO_FS" = 1 ] ; then
		cp ./upnpd/pseudoicsd/upnpd $RAMFSDIR/bin/upnpd
		ln -s /var/linuxigd $RAMFSDIR/etc/
		mkdir -p $RAMFSDIR/etc/tmp
		cp ./script/pics* 	$RAMFSDIR/etc/tmp
	else
		mkdir $RAMFSDIR/etc/linuxigd
		cp ./upnpd/pseudoicsd/upnpd $RAMFSDIR/bin/upnpd
		cp ./script/pics* $RAMFSDIR/etc/linuxigd
	fi
fi
# PPPoE
if [ "$GW" = 1  -o "$GW_VPN" = 1 -o "$GW_8M" = 1 ];then
	if [ "$RO_FS" = 1 ] ; then
		cp ./ppp-2.4.2/pppd/pppd $RAMFSDIR/bin
		ln -s /var/ppp $RAMFSDIR/etc/ 
	else
		cp ./ppp-2.4.2/pppd/pppd $RAMFSDIR/bin
		mkdir $RAMFSDIR/etc/ppp
		touch $RAMFSDIR/etc/ppp/pap-secrets
		chmod 600 $RAMFSDIR/etc/ppp/pap-secrets
		touch $RAMFSDIR/etc/ppp/chap-secrets
		chmod 600 $RAMFSDIR/etc/ppp/chap-secrets
	fi
fi

#PPTP
if [ "$GW" = 1 -o "$GW_VPN" = 1 -o "$GW_8M" = 1 ];then
	if [ "$RO_FS" = 1 ] ; then
		cp ./pptp-linux-1.3.1/pptp $RAMFSDIR/bin
		cp ./pptp-linux-1.3.1/pptp /mnt/bin
	else
		mkdir $RAMFSDIR/etc/ppp/peers
		touch $RAMFSDIR/etc/ppp/peers/rpptp
		cp ./pptp-linux-1.3.1/pptp $RAMFSDIR/bin
	fi
fi

# auto-discovery daemon
cp ./discover/disc_server $RAMFSDIR/bin

# etc and var dir 
cp -R -p ./etc/* $RAMFSDIR/etc
cp -R -p ./var/var/* $RAMFSDIR/var
if [ "$GW" = 1 ];then
	RM_FILES="profile.ap profile.gw-vpn profile.gw-8m group"
	for i in $RM_FILES ; do
		rm -rf $RAMFSDIR/etc/$i
	done
elif [ "$GW_8M" = 1  ];then
	RM_FILES="profile.ap profile.gw-vpn group "
	for i in $RM_FILES ; do
		rm -rf $RAMFSDIR/etc/$i
	done
	mv $RAMFSDIR/etc/profile.gw-8m $RAMFSDIR/etc/profile

elif [ "$GW_VPN" = 1  ];then
	RM_FILES="profile.gw-8m profile.ap"
	for i in $RM_FILES ; do
		rm -rf $RAMFSDIR/etc/$i
	done
	mv $RAMFSDIR/etc/profile.gw-vpn $RAMFSDIR/etc/profile
elif [ "$AP" = 1  ];then
	RM_FILES="profile.gw-8m profile.gw-vpn group ppp"
	for i in $RM_FILES ; do
		rm -rf $RAMFSDIR/etc/$i
	done
	mv $RAMFSDIR/etc/profile.ap $RAMFSDIR/etc/profile
fi

if [ "$RO_FS" = 1 ];then
	rm -rf $RAMFSDIR/var/*
fi
#ntp
if [ "$GW" = 1  -o "$GW_8M" = 1 -o "$GW_VPN" = 1 ];then
	cp  ntpclient/ntpclient $RAMFSDIR/bin
	if [ "$RO_FS" = 1 ];then
		ln -s /var/TZ $RAMFSDIR/etc/TZ
	fi
fi


#ipsec
if [ "$GW_VPN" = 1 ];then
	FREESWAN=./openswan-1.0.1/_install
	cp mawk-1.3.3/mawk $RAMFSDIR/bin/awk
	mkdir -p $RAMFSDIR/usr/local/lib/ipsec
	rm -f ${FREESWAN}/usr/local/lib/ipsec/*.old
	cp -p ${FREESWAN}/usr/local/lib/ipsec/* $RAMFSDIR/usr/local/lib/ipsec
	cp ${FREESWAN}/usr/local/sbin/ipsec $RAMFSDIR/sbin
	mkdir -p $RAMFSDIR/etc/rc.d/init.d
	cp ${FREESWAN}/etc/rc.d/init.d/ipsec $RAMFSDIR/etc/rc.d/init.d
fi

cp ./autoconf/autoconf $RAMFSDIR/bin

#library  strip

OBJ_FILES=`find $RAMFSDIR \( -type d -o -type f -o -type b -o -type c -o -type l \) -print | file -f - | grep ELF |  grep "dynamically linked" | cut -d':' -f1` 

#echo $OBJ_FILES
cd libstrip
./libstrip $OBJ_FILES
cd ..

cp libstrip/libuClibc-0.9.26.so $RAMFSDIR/lib/libc.so.0
cp $UCLIBCDIR/ld-uClibc-0.9.26.so $RAMFSDIR/lib/ld-uClibc.so.0

cp $UCLIBCDIR/libdl-0.9.26.so $RAMFSDIR/lib/libdl.so.0

if [ "$GW" = 1  -o "$GW_8M" = 1 ];then
	cp libstrip/libcrypt-0.9.26.so $RAMFSDIR/lib/libcrypt.so.0
	cp $UCLIBCDIR/libresolv-0.9.26.so $RAMFSDIR/lib/libresolv.so.0
	cp $UCLIBCDIR/libdl-0.9.26.so $RAMFSDIR/lib/libdl.so.0
fi

if [ "$GW_VPN" = 1 ];then
	#cp libstrip/libm-0.9.26.so $RAMFSDIR/lib/libm.so.0
	cp $UCLIBCDIR/libcrypt-0.9.26.so $RAMFSDIR/lib/libcrypt.so.0
	cp $UCLIBCDIR/libdl-0.9.26.so $RAMFSDIR/lib/libdl.so.0
	cp libstrip/libpthread-0.9.26.so $RAMFSDIR/lib/libpthread.so.0 
	cp $UCLIBCDIR/libresolv-0.9.26.so $RAMFSDIR/lib/libresolv.so.0
	cp $UCLIBCDIR/ld-uClibc-0.9.26.so $RAMFSDIR/lib/ld-uClibc.so.0
	cp  libstrip/libgmp.so.3 $RAMFSDIR/lib/libgmp.so.3

fi

#delete CVS related file
find $RAMFSDIR/. -name CVS | xargs -r rm -rf

sync;sync;sync;
if [ "$RO_FS" != 1  ];then
	rm -f ./ramdisk.gz ./ramdisk
	mkdir -p $RAMFSDIR $RAMDISK_TMP
	echo "============Create Ramdisk====================="
	echo "==>Making ramdisk size $RAMDISK_SIZE KBytes"

	# strip rootfs file , but not strip shared library
	NON_STRIPS=`find $RAMFSDIR -type f -print -exec file {} \; | grep "not stripped" | grep -v "\.so" | cut -d":" -f1`
	if [ "$NON_STRIPS" != "" ]; then
		mips-uclibc-strip $NON_STRIPS
	fi

	ROOTSIZE=`du -s $RAMFSDIR | cut -f1`
	if [ $ROOTSIZE -gt $RAMDISK_SIZE ];then
		echo "Error! :Your rootfs size $ROOTSIZE KBytes over ramdisk size"
		exit 1
	fi
	dd if=/dev/zero of=/dev/ram bs=1k count=$RAMDISK_SIZE
	mke2fs -c /dev/ram  $RAMDISK_SIZE || exit
	mount -t ext2 /dev/ram $MOUNTDIR || exit
	
	# copy to ramdisk mount
	cd $RAMFSDIR ; find * -print | tar cTf  - - |  (cd $MOUNTDIR && tar -xf -) || exit
	cd ..
	umount /dev/ram
	dd if=/dev/ram bs=1k count=$RAMDISK_SIZE of=./ramdisk

	if [ "$COMPRESS_RAMDISK" = "1" ]; then
		if [ "$BZIP2" = "1" ]; then
			bzip2 -9v -f ramdisk
			cp -f ramdisk.bz2 $KERNEL_SOURCE/$APPIMG_DIR/ramdisk.img
		else
			gzip -9v -f ramdisk
			cp -f ramdisk.gz $KERNEL_SOURCE/$APPIMG_DIR/ramdisk.img
		fi
	else
		cp -f ramdisk $KERNEL_SOURCE/$APPIMG_DIR/ramdisk.img
	fi
	# show ramdisk size
	AVAIL_SIZE=`expr $RAMDISK_SIZE - $ROOTSIZE`
	echo "==============================================="
	echo "Summary:"
	echo "==>Total size     = $RAMDISK_SIZE	KBytes"
	echo "==>Ramdisk size   = $ROOTSIZE	KBytes"
	echo "==>Available size = $AVAIL_SIZE		KBytes"
else
	echo "============Create Squashfs====================="
	 rm squashfs.o
	 #$MKCRAMFS $RAMFSDIR cramfs.o -r
	 $MKSQUASHFS $RAMFSDIR squashfs.o -be
	 $CVIMG root squashfs.o root.bin 100000 100000
	ROOTSIZE=`du -s $RAMFSDIR | cut -f1`
	IMGSIZE=`du -s squashfs.o |  cut -f1`
	echo "=============================================="
	echo "Summary:"
	echo "==>Squashfs disk size  = $ROOTSIZE	KBytes"
	echo "==>Squashfs image size = $IMGSIZE	KBytes"
fi
