File:  [ELWIX - Embedded LightWeight unIX -] / elwix / build_rootfs.sh
Revision 1.2.4.9: download - view: text, annotated - select for diffs - revision graph
Tue Jun 5 13:41:39 2012 UTC (11 years, 11 months ago) by misho
Branches: elwix1_6
Diff to: branchpoint 1.2: preferred, colored
update scripts

#!/bin/sh
#
# ELWIX build script for rootfs firmware
#
# (C) AITNET ltd - Sofia/Bulgaria <office@aitnet.org>
#    by Michael Pounov <misho@elwix.org>
#
# $Id: build_rootfs.sh,v 1.2.4.9 2012/06/05 13:41:39 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 [ ! -d ${BSDSRC} ]; then
	echo
	echo "ELWIX project is not configured - missing BSD sources !?!"
	echo
	exit 1
fi

if [ "${USER}" != "root" ]; then
	echo
	echo "ELWIX project is not configured - RootFS must build under root !?!"
	echo
	exit 1
fi

NEWKERN="${REL}/kernel"

clean_elwix()
{
	echo "+++ Clean csh from ELWIX World ..."
#	rm -rf ${BSDOBJ}/usr/src/bin/csh/*
	rm -rf $BSDOBJ/elwix

	echo "+++ Clean ELWIX RootFS firmware ..."
	rm -rf $MKDIR
	mkdir $MKDIR

	echo "+++ Clean RootFS directory ..."
	chflags -R noschg $ROOTFS
	rm -rf $ROOTFS
	mkdir $ROOTFS

	echo "+++ Clean Release directory ..."
	rm -rf $REL/$ROOTFS_IMG ${NEWKERN}*
}

prepare_elwix()
{
	echo "+++ Prepair ELWIX RootFS firmware ..."
	cd $MKDIR
	cat >$MKH <<_EOF
# Auto-generated Makefile include for crungegen
# !!! Dont edit by hand !!!
#

#CRUNCH_SUPPRESS_LINK_-sh= 1
#CRUNCH_SUPPRESS_LINK_-csh= 1
#CRUNCH_SUPPRESS_LINK_-tcsh= 1

LIBS += -L${WORLD}/lib -L${WORLD}/usr/lib
_EOF
	cat >$ROOTFS_CONF <<_EOF
srcdirs ${BSDSRC}/tools/tools ${BSDSRC}/tools/tools/ath
srcdirs ${BSDSRC}/release/picobsd/tinyware
srcdirs ${BSDSRC}/bin ${BSDSRC}/sbin ${BSDSRC}/libexec ${BSDSRC}/cddl/sbin ${BSDSRC}/sbin/ggate
srcdirs ${BSDSRC}/usr.bin ${BSDSRC}/usr.sbin ${BSDSRC}/usr.sbin/wpa
srcdirs ${BSDSRC}/secure/usr.bin ${BSDSRC}/secure/usr.sbin ${BSDSRC}/secure/libexec

buildopts -DNO_PAM -DNO_KERBEROS WITHOUT_PAM_SUPPORT=yes WITHOUT_KERBEROS_SUPPORT=yes WITHOUT_KERBEROS=yes
buildopts TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} MAKEOBJDIRPREFIX=${BSDOBJ}/elwix
_EOF
	cat $CFGDIR/$ROOTFS_CONF >>$ROOTFS_CONF

	. ${CENV}
	install -d ${BSDOBJ}/elwix
	crunchgen -f -o -p ${BSDOBJ}/elwix -h $MKDIR/$MKH -m $MKF -c elwix.c -e elwix $ROOTFS_CONF
	cd -
}

build_elwix()
{
	echo "+++ Build ELWIX RootFS firmware ..."
	cd $MKDIR
	. ${CENV}
	MAKEOBJDIRPREFIX=${BSDOBJ}/elwix
	make -f $MKF clean
	make -f $MKF
	if [ $? -ne 0 ]; then
		exit 1
	fi
	cd -
}

build_rootdir()
{
	echo "+++ Build RootFS directory ..."
	cd $ROOTFS

	install -d bin;
	install -d dev;
	install -d elwix;
	install -d elwix/etc;
	install -d libexec;
	install -d mnt;
	install -d -m 0555 proc;
	install -d sbin;
	install -d system;
	install -d -m 1777 tmp;
	install -d usr;
	install -d usr/bin;
	install -d usr/lib;
	install -d usr/libexec;
	install -d usr/sbin;
	install -d var;

	ln -fs /usr/lib lib;

	ln -fs /elwix/etc etc;
	ln -fs /elwix/exports exports;
	ln -fs /elwix/home home;
	ln -fs /elwix/root root;
	ln -fs /elwix/tftpboot tftpboot;

	cd -
}

install_rootfs()
{
	BIN="${ROOTFS}/bin"
	SBIN="${ROOTFS}/sbin"
	UBIN="${ROOTFS}/usr/bin"
	LIBEXEC="${ROOTFS}/usr/libexec"
	ETC="${ROOTFS}/elwix/etc"

	PRG="/sbin/elwix"
	LNPRG="${SBIN}/elwix"

	echo "+++ Install ELWIX into RootFS directory ..."
	install $MKDIR/elwix $SBIN

	InstallList ${ELWIX_ROOTFS} ${WORLD} ${ROOTFS}

	InstallDir ${ROOTFS_ETC} $ETC

#	ln -s /usr/sbin/nologin $SBIN

	ln $LNPRG $BIN/csh

	ln $LNPRG $BIN/test
	ln $LNPRG $BIN/\[
	ln $LNPRG $BIN/cat
	ln $LNPRG $BIN/chflags
	ln $LNPRG $BIN/chio
	ln $LNPRG $BIN/chmod
	ln $LNPRG $BIN/cp
	ln $LNPRG $BIN/date
	ln $LNPRG $BIN/dd
	ln $LNPRG $BIN/df
	ln $LNPRG $BIN/domainname
	ln $LNPRG $BIN/echo
	ln $LNPRG $BIN/expr
	ln $LNPRG $BIN/hostname
	ln $LNPRG $BIN/kenv
	ln $LNPRG $BIN/kill
	ln $LNPRG $BIN/ln
	ln $LNPRG $BIN/link
	ln $LNPRG $BIN/ls
	ln $LNPRG $BIN/mkdir
	ln $LNPRG $BIN/mv
	ln $LNPRG $BIN/pax
	ln $LNPRG $BIN/pkill
	ln $LNPRG $BIN/pgrep
	ln $LNPRG $BIN/sh
	ln $LNPRG $BIN/-sh
	ln $LNPRG $BIN/ps
	ln $LNPRG $BIN/pwait
	ln $LNPRG $BIN/pwd
	ln $LNPRG $BIN/realpath
	ln $LNPRG $BIN/rm
	ln $LNPRG $BIN/unlink
	ln $LNPRG $BIN/rmdir
	ln $LNPRG $BIN/sleep
	ln $LNPRG $BIN/stty
	ln $LNPRG $BIN/sync
	ln $LNPRG $BIN/uuidgen

	ln $LNPRG $BIN/true
	ln $LNPRG $BIN/false
	ln $LNPRG $BIN/basename
	ln $LNPRG $BIN/tail
	ln $LNPRG $BIN/nc
	ln $LNPRG $BIN/w
	ln $LNPRG $BIN/head
	ln $LNPRG $BIN/uname
	ln $LNPRG $BIN/tset
	ln $LNPRG $BIN/vmstat
	ln $LNPRG $BIN/systat
	ln $LNPRG $BIN/tput
	ln $LNPRG $BIN/grep
	ln $LNPRG $BIN/awk
	ln $LNPRG $BIN/less
	ln $LNPRG $BIN/gzip
	ln $LNPRG $BIN/cap_mkdb
	ln $LNPRG $BIN/sed
	ln $LNPRG $BIN/vi
	ln $LNPRG $BIN/du
	ln $LNPRG $BIN/getopt
	ln $LNPRG $BIN/logger
	ln $LNPRG $BIN/nice
	ln $LNPRG $BIN/nohup
	ln $LNPRG $BIN/seq
	ln $LNPRG $BIN/sockstat
	ln $LNPRG $BIN/stat
	ln $LNPRG $BIN/tee
	ln $LNPRG $BIN/tftp
	ln $LNPRG $BIN/touch
	ln $LNPRG $BIN/wc
	ln $LNPRG $BIN/xargs
	ln $LNPRG $BIN/printenv
	ln $LNPRG $BIN/egrep
	ln $LNPRG $BIN/fgrep
	ln $LNPRG $BIN/tar
	ln $LNPRG $BIN/cpio
	ln $LNPRG $BIN/nawk
	ln $LNPRG $BIN/gunzip
	ln $LNPRG $BIN/gzcat
	ln $LNPRG $BIN/zcat
	ln $LNPRG $BIN/more
	ln $LNPRG $BIN/reset
	ln $LNPRG $BIN/readlink
	ln $LNPRG $BIN/uptime
	ln $LNPRG $BIN/bzip2
	ln $LNPRG $BIN/bunzip2
	ln $LNPRG $BIN/bzcat

	ln $LNPRG $SBIN/atacontrol
	ln $LNPRG $SBIN/bsdlabel
	ln $LNPRG $SBIN/disklabel
	ln $LNPRG $SBIN/camcontrol
	ln $LNPRG $SBIN/comcontrol
	ln $LNPRG $SBIN/conscontrol
	ln $LNPRG $SBIN/devfs
	ln $LNPRG $SBIN/dhclient
	ln $LNPRG $SBIN/dmesg
	ln $LNPRG $SBIN/dump
	ln $LNPRG $SBIN/rdump
	ln $LNPRG $SBIN/dumpon
	ln $LNPRG $SBIN/fdisk
	ln $LNPRG $SBIN/fsck
	ln $LNPRG $SBIN/fsck_ffs
	ln $LNPRG $SBIN/fsck_ufs
	ln $LNPRG $SBIN/fsck_4.2bsd
	ln $LNPRG $SBIN/fsck_msdosfs
	ln $LNPRG $SBIN/-geom
	ln $LNPRG $SBIN/glabel
	ln $LNPRG $SBIN/gpart
	ln $LNPRG $SBIN/growfs
	ln $LNPRG $SBIN/hastctl
	ln $LNPRG $SBIN/hastd
	ln $LNPRG $SBIN/ifconfig
	ln $LNPRG $SBIN/init
	ln $LNPRG $SBIN/ipfw
	ln $LNPRG $SBIN/iscontrol
	ln $LNPRG $SBIN/kldconfig
	ln $LNPRG $SBIN/kldload
	ln $LNPRG $SBIN/kldstat
	ln $LNPRG $SBIN/kldunload
	ln $LNPRG $SBIN/ldconfig
	ln $LNPRG $SBIN/md5
	ln $LNPRG $SBIN/sha1
	ln $LNPRG $SBIN/sha256
	ln $LNPRG $SBIN/rmd160
	ln $LNPRG $SBIN/mdconfig
	ln $LNPRG $SBIN/mdmfs
	ln $LNPRG $SBIN/mount_mfs
	ln $LNPRG $SBIN/mknod
	ln $LNPRG $SBIN/mksnap_ffs
	ln $LNPRG $SBIN/mount
	ln $LNPRG $SBIN/mount_cd9660
	ln $LNPRG $SBIN/mount_msdosfs
	ln $LNPRG $SBIN/mount_nfs
	ln $LNPRG $SBIN/mount_ntfs
	ln $LNPRG $SBIN/mount_nullfs
	ln $LNPRG $SBIN/mount_udf
	ln $LNPRG $SBIN/mount_unionfs
	ln $LNPRG $SBIN/newfs
	ln $LNPRG $SBIN/newfs_msdos
	ln $LNPRG $SBIN/nfsiod
	ln $LNPRG $SBIN/nos-tun
	ln $LNPRG $SBIN/pfctl
	ln $LNPRG $SBIN/pflogd
	ln $LNPRG $SBIN/quotacheck
	ln $LNPRG $SBIN/reboot
	ln $LNPRG $SBIN/halt
	ln $LNPRG $SBIN/fastboot
	ln $LNPRG $SBIN/fasthalt
	ln $LNPRG $SBIN/recoverdisk
	ln $LNPRG $SBIN/restore
	ln $LNPRG $SBIN/rrestore
	ln $LNPRG $SBIN/route
	ln $LNPRG $SBIN/rtsol
	ln $LNPRG $SBIN/shutdown
	ln $LNPRG $SBIN/savecore
	ln $LNPRG $SBIN/swapon
	ln $LNPRG $SBIN/swapoff
	ln $LNPRG $SBIN/swapctl
	ln $LNPRG $SBIN/sysctl
	ln $LNPRG $SBIN/tunefs
	ln $LNPRG $SBIN/umount
	ln $LNPRG $SBIN/zfs
	ln $LNPRG $SBIN/zpool

	ln $LNPRG $SBIN/ping
	ln $LNPRG $SBIN/ping6
	ln $LNPRG $SBIN/traceroute
	ln $LNPRG $SBIN/traceroute6

	ln $LNPRG $SBIN/chown
	ln $LNPRG $SBIN/pwd_mkdb
	ln $LNPRG $SBIN/arp
	ln $LNPRG $SBIN/gpioctl
	ln $LNPRG $SBIN/hostapd
	ln $LNPRG $SBIN/hostapd_cli
	ln $LNPRG $SBIN/wpa_supplicant
	ln $LNPRG $SBIN/wpa_cli
	ln $LNPRG $SBIN/wpa_passphrase
	ln $LNPRG $SBIN/wake
	ln $LNPRG $SBIN/watchdog
	ln $LNPRG $SBIN/watchdogd
	ln $LNPRG $SBIN/inetd
	ln $LNPRG $SBIN/wlandebug
	ln $LNPRG $SBIN/chroot
	ln $LNPRG $SBIN/i2c
	ln $LNPRG $SBIN/iostat
	ln $LNPRG $SBIN/jail
	ln $LNPRG $SBIN/jexec
	ln $LNPRG $SBIN/jls
	ln $LNPRG $SBIN/ndp
	ln $LNPRG $SBIN/newsyslog
	ln $LNPRG $SBIN/nologin
	ln $LNPRG $SBIN/pstat
	ln $LNPRG $SBIN/rtadvctl
	ln $LNPRG $SBIN/rtadvd
	ln $LNPRG $SBIN/rtsold
	ln $LNPRG $SBIN/syslogd
	ln $LNPRG $SBIN/setfib
	ln $LNPRG $SBIN/swapinfo
	ln $LNPRG $SBIN/chgrp

	ln $LNPRG $UBIN/login
	ln $LNPRG $UBIN/passwd

	ln $LNPRG $LIBEXEC/getty
	ln $LNPRG $LIBEXEC/tftpd

	strip -s $LNPRG

	chown -hR root:wheel $ROOTFS

	echo "+++ ELWIX clean CVS tags ..."
	CleanCVS $ETC
	CleanCVS $ETC/etc
}

build_image()
{
	echo "+++ Build ELWIX RootFS image ..."
	makefs -s ${ROOTFS_SIZE} -o minfree=0 $REL/$ROOTFS_IMG $ROOTFS
}

install_image()
{
	echo "+++ Install ELWIX RootFS Image into kernel ..."
	START=`strings -td $KERNEL | grep "MFS Filesystem" | cut -d ' ' -f 1 | head -1`
	STOP=`strings -td $KERNEL | grep "MFS Filesystem" | cut -d ' ' -f 1 | tail -1`
	STOP=$(($STOP + 1))

	head -c $START $KERNEL >$NEWKERN
	cat $REL/$ROOTFS_IMG >>$NEWKERN
	tail -c +$STOP $KERNEL >>$NEWKERN

	cd $REL
	gzip -9 kernel
	cd -
}

### main()
if SnitVer ${WORLD}/elwix.ver; then
	clean_elwix
	prepare_elwix
	build_elwix

	build_rootdir
	install_rootfs

	build_image && install_image
else
	echo "Skipped ELWIX RootFS build ..."
fi

echo "+++ Complete build ELWIX RootFS"

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