#!/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.10 2012/06/05 14:09:46 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/-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"
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>