#!/bin/sh # # ELWIX build script for rootfs firmware # # (C) AITNET ltd - Sofia/Bulgaria # by Michael Pounov # # $Id: build_rootfs.sh,v 1.4 2013/01/28 01:47:34 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 elwix binary from ELWIX World ..." 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 !!! # 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 -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; install -d var/sys; 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 -s $PRG $BIN/test ln -s $PRG $BIN/\[ ln -s $PRG $BIN/cat ln -s $PRG $BIN/chflags ln -s $PRG $BIN/chio ln -s $PRG $BIN/chmod ln -s $PRG $BIN/cp ln -s $PRG $BIN/date ln -s $PRG $BIN/dd ln -s $PRG $BIN/df ln -s $PRG $BIN/domainname ln -s $PRG $BIN/echo ln -s $PRG $BIN/expr ln -s $PRG $BIN/hostname ln -s $PRG $BIN/kenv ln -s $PRG $BIN/kill ln -s $PRG $BIN/ln ln -s $PRG $BIN/link ln -s $PRG $BIN/ls ln -s $PRG $BIN/mkdir ln -s $PRG $BIN/mv ln -s $PRG $BIN/pax ln -s $PRG $BIN/pkill ln -s $PRG $BIN/pgrep ln -s $PRG $BIN/sh ln -s $PRG $BIN/-sh ln -s $PRG $BIN/ps ln -s $PRG $BIN/pwait ln -s $PRG $BIN/pwd ln -s $PRG $BIN/realpath ln -s $PRG $BIN/rm ln -s $PRG $BIN/unlink ln -s $PRG $BIN/rmdir ln -s $PRG $BIN/sleep ln -s $PRG $BIN/stty ln -s $PRG $BIN/sync ln -s $PRG $BIN/uuidgen ln -s $PRG $BIN/true ln -s $PRG $BIN/false ln -s $PRG $BIN/basename ln -s $PRG $BIN/tail ln -s $PRG $BIN/nc ln -s $PRG $BIN/w ln -s $PRG $BIN/head ln -s $PRG $BIN/uname ln -s $PRG $BIN/tset ln -s $PRG $BIN/vmstat ln -s $PRG $BIN/systat ln -s $PRG $BIN/tput ln -s $PRG $BIN/grep ln -s $PRG $BIN/awk ln -s $PRG $BIN/less ln -s $PRG $BIN/gzip ln -s $PRG $BIN/cap_mkdb ln -s $PRG $BIN/sed ln -s $PRG $BIN/vi ln -s $PRG $BIN/du ln -s $PRG $BIN/getopt ln -s $PRG $BIN/logger ln -s $PRG $BIN/nice ln -s $PRG $BIN/nohup ln -s $PRG $BIN/seq ln -s $PRG $BIN/sockstat ln -s $PRG $BIN/stat ln -s $PRG $BIN/tee ln -s $PRG $BIN/tftp ln -s $PRG $BIN/touch ln -s $PRG $BIN/wc ln -s $PRG $BIN/xargs ln -s $PRG $BIN/printenv ln -s $PRG $BIN/egrep ln -s $PRG $BIN/fgrep ln -s $PRG $BIN/tar ln -s $PRG $BIN/cpio ln -s $PRG $BIN/nawk ln -s $PRG $BIN/gunzip ln -s $PRG $BIN/gzcat ln -s $PRG $BIN/zcat ln -s $PRG $BIN/more ln -s $PRG $BIN/reset ln -s $PRG $BIN/readlink ln -s $PRG $BIN/uptime ln -s $PRG $BIN/bzip2 ln -s $PRG $BIN/bunzip2 ln -s $PRG $BIN/bzcat ln -s $PRG $SBIN/bsdlabel ln -s $PRG $SBIN/disklabel ln -s $PRG $SBIN/camcontrol ln -s $PRG $SBIN/comcontrol ln -s $PRG $SBIN/conscontrol ln -s $PRG $SBIN/devfs ln -s $PRG $SBIN/dhclient ln -s $PRG $SBIN/dmesg ln -s $PRG $SBIN/dump ln -s $PRG $SBIN/rdump ln -s $PRG $SBIN/dumpon ln -s $PRG $SBIN/fdisk ln -s $PRG $SBIN/fsck ln -s $PRG $SBIN/fsck_ffs ln -s $PRG $SBIN/fsck_ufs ln -s $PRG $SBIN/fsck_4.2bsd ln -s $PRG $SBIN/fsck_msdosfs ln -s $PRG $SBIN/etherswitchcfg ln -s $PRG $SBIN/-geom ln -s $PRG $SBIN/glabel ln -s $PRG $SBIN/gpart ln -s $PRG $SBIN/graid ln -s $PRG $SBIN/growfs ln -s $PRG $SBIN/hastctl ln -s $PRG $SBIN/hastd ln -s $PRG $SBIN/ifconfig ln -s $PRG $SBIN/init ln -s $PRG $SBIN/ipfw ln -s $PRG $SBIN/iscontrol ln -s $PRG $SBIN/kldconfig ln -s $PRG $SBIN/kldload ln -s $PRG $SBIN/kldstat ln -s $PRG $SBIN/kldunload ln -s $PRG $SBIN/ldconfig ln -s $PRG $SBIN/md5 ln -s $PRG $SBIN/sha1 ln -s $PRG $SBIN/sha256 ln -s $PRG $SBIN/rmd160 ln -s $PRG $SBIN/mdconfig ln -s $PRG $SBIN/mdmfs ln -s $PRG $SBIN/mount_mfs ln -s $PRG $SBIN/mknod ln -s $PRG $SBIN/mksnap_ffs ln -s $PRG $SBIN/mount ln -s $PRG $SBIN/mount_cd9660 ln -s $PRG $SBIN/mount_msdosfs ln -s $PRG $SBIN/mount_nfs # ln -s $PRG $SBIN/mount_ntfs ln -s $PRG $SBIN/mount_nullfs ln -s $PRG $SBIN/mount_udf ln -s $PRG $SBIN/mount_unionfs ln -s $PRG $SBIN/newfs ln -s $PRG $SBIN/newfs_msdos ln -s $PRG $SBIN/nfsiod ln -s $PRG $SBIN/nos-tun ln -s $PRG $SBIN/nvmecontrol ln -s $PRG $SBIN/pfctl ln -s $PRG $SBIN/pflogd ln -s $PRG $SBIN/quotacheck ln -s $PRG $SBIN/reboot ln -s $PRG $SBIN/halt ln -s $PRG $SBIN/fastboot ln -s $PRG $SBIN/fasthalt ln -s $PRG $SBIN/recoverdisk ln -s $PRG $SBIN/restore ln -s $PRG $SBIN/rrestore ln -s $PRG $SBIN/route ln -s $PRG $SBIN/rtsol ln -s $PRG $SBIN/shutdown ln -s $PRG $SBIN/savecore ln -s $PRG $SBIN/swapon ln -s $PRG $SBIN/swapoff ln -s $PRG $SBIN/swapctl ln -s $PRG $SBIN/sysctl ln -s $PRG $SBIN/tunefs ln -s $PRG $SBIN/umount ln -s $PRG $SBIN/zfs ln -s $PRG $SBIN/zpool ln -s $PRG $SBIN/ping ln -s $PRG $SBIN/ping6 ln -s $PRG $SBIN/traceroute ln -s $PRG $SBIN/traceroute6 ln -s $PRG $SBIN/chown ln -s $PRG $SBIN/pwd_mkdb ln -s $PRG $SBIN/arp ln -s $PRG $SBIN/gpioctl ln -s $PRG $SBIN/hostapd ln -s $PRG $SBIN/hostapd_cli ln -s $PRG $SBIN/wpa_supplicant ln -s $PRG $SBIN/wpa_cli ln -s $PRG $SBIN/wpa_passphrase ln -s $PRG $SBIN/wake ln -s $PRG $SBIN/watchdog ln -s $PRG $SBIN/watchdogd ln -s $PRG $SBIN/inetd ln -s $PRG $SBIN/wlandebug ln -s $PRG $SBIN/chroot ln -s $PRG $SBIN/i2c ln -s $PRG $SBIN/iostat ln -s $PRG $SBIN/jail ln -s $PRG $SBIN/jexec ln -s $PRG $SBIN/jls ln -s $PRG $SBIN/ndp ln -s $PRG $SBIN/newsyslog ln -s $PRG $SBIN/nologin ln -s $PRG $SBIN/pstat ln -s $PRG $SBIN/rtadvctl ln -s $PRG $SBIN/rtadvd ln -s $PRG $SBIN/rtsold ln -s $PRG $SBIN/syslogd ln -s $PRG $SBIN/setfib ln -s $PRG $SBIN/swapinfo ln -s $PRG $SBIN/chgrp ln -s $PRG $UBIN/login ln -s $PRG $UBIN/passwd ln -s $PRG $LIBEXEC/getty ln -s $PRG $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"