#!/bin/sh # # ELWIX build script for rootfs firmware # # (C) AITNET ltd - Sofia/Bulgaria # by Michael Pounov # # $Id: build_rootfs.sh,v 1.2.4.8 2012/05/28 23:19:05 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/tcsh 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"