Annotation of elwix/build_rootfs.sh, revision 1.2.4.8

1.1       misho       1: #!/bin/sh
                      2: #
                      3: # ELWIX build script for rootfs firmware
                      4: #
                      5: # (C) AITNET ltd - Sofia/Bulgaria <office@aitnet.org>
                      6: #    by Michael Pounov <misho@elwix.org>
                      7: #
1.2.4.8 ! misho       8: # $Id: build_rootfs.sh,v 1.2.4.7 2012/02/22 16:25:44 misho Exp $
1.1       misho       9: #
                     10: 
                     11: [ -r ./config/rc.elwix ] && . ./config/rc.elwix
                     12: if [ X"${ELWIX_IS_CONFIGURED}" != X"YES" ]; then
                     13:        echo
                     14:        echo "ELWIX project is not configured !?!"
                     15:        echo
                     16:        exit 1
                     17: fi
                     18: 
                     19: if [ ! -d ${BSDSRC} ]; then
                     20:        echo
                     21:        echo "ELWIX project is not configured - missing BSD sources !?!"
                     22:        echo
                     23:        exit 1
                     24: fi
                     25: 
                     26: if [ "${USER}" != "root" ]; then
                     27:        echo
                     28:        echo "ELWIX project is not configured - RootFS must build under root !?!"
                     29:        echo
                     30:        exit 1
                     31: fi
                     32: 
                     33: NEWKERN="${REL}/kernel"
                     34: 
                     35: clean_elwix()
                     36: {
                     37:        echo "+++ Clean csh from ELWIX World ..."
1.2.4.6   misho      38: #      rm -rf ${BSDOBJ}/usr/src/bin/csh/*
                     39:        rm -rf $BSDOBJ/elwix
1.1       misho      40: 
                     41:        echo "+++ Clean ELWIX RootFS firmware ..."
                     42:        rm -rf $MKDIR
                     43:        mkdir $MKDIR
                     44: 
                     45:        echo "+++ Clean RootFS directory ..."
1.2.4.7   misho      46:        chflags -R noschg $ROOTFS
1.1       misho      47:        rm -rf $ROOTFS
                     48:        mkdir $ROOTFS
                     49: 
                     50:        echo "+++ Clean Release directory ..."
                     51:        rm -rf $REL/$ROOTFS_IMG ${NEWKERN}*
                     52: }
                     53: 
                     54: prepare_elwix()
                     55: {
                     56:        echo "+++ Prepair ELWIX RootFS firmware ..."
                     57:        cd $MKDIR
                     58:        cat >$MKH <<_EOF
                     59: # Auto-generated Makefile include for crungegen
                     60: # !!! Dont edit by hand !!!
                     61: #
1.2.4.6   misho      62: 
                     63: #CRUNCH_SUPPRESS_LINK_-sh= 1
                     64: #CRUNCH_SUPPRESS_LINK_-csh= 1
                     65: #CRUNCH_SUPPRESS_LINK_-tcsh= 1
                     66: 
1.1       misho      67: LIBS += -L${WORLD}/lib -L${WORLD}/usr/lib
                     68: _EOF
                     69:        cat >$ROOTFS_CONF <<_EOF
1.2.4.6   misho      70: srcdirs ${BSDSRC}/tools/tools ${BSDSRC}/tools/tools/ath
                     71: srcdirs ${BSDSRC}/release/picobsd/tinyware
1.1       misho      72: srcdirs ${BSDSRC}/bin ${BSDSRC}/sbin ${BSDSRC}/libexec ${BSDSRC}/cddl/sbin ${BSDSRC}/sbin/ggate
1.2.4.4   misho      73: srcdirs ${BSDSRC}/usr.bin ${BSDSRC}/usr.sbin ${BSDSRC}/usr.sbin/wpa
1.2.4.6   misho      74: srcdirs ${BSDSRC}/secure/usr.bin ${BSDSRC}/secure/usr.sbin ${BSDSRC}/secure/libexec
1.2.4.4   misho      75: 
1.2.4.6   misho      76: buildopts -DNO_PAM -DNO_KERBEROS WITHOUT_PAM_SUPPORT=yes WITHOUT_KERBEROS_SUPPORT=yes WITHOUT_KERBEROS=yes
                     77: buildopts TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} MAKEOBJDIRPREFIX=${BSDOBJ}/elwix
1.1       misho      78: _EOF
                     79:        cat $CFGDIR/$ROOTFS_CONF >>$ROOTFS_CONF
                     80: 
1.2.4.6   misho      81:        . ${CENV}
                     82:        install -d ${BSDOBJ}/elwix
                     83:        crunchgen -f -o -p ${BSDOBJ}/elwix -h $MKDIR/$MKH -m $MKF -c elwix.c -e elwix $ROOTFS_CONF
1.1       misho      84:        cd -
                     85: }
                     86: 
                     87: build_elwix()
                     88: {
                     89:        echo "+++ Build ELWIX RootFS firmware ..."
                     90:        cd $MKDIR
1.2.4.6   misho      91:        . ${CENV}
                     92:        MAKEOBJDIRPREFIX=${BSDOBJ}/elwix
1.1       misho      93:        make -f $MKF clean
                     94:        make -f $MKF
1.2.4.6   misho      95:        if [ $? -ne 0 ]; then
                     96:                exit 1
                     97:        fi
1.1       misho      98:        cd -
                     99: }
                    100: 
                    101: build_rootdir()
                    102: {
                    103:        echo "+++ Build RootFS directory ..."
                    104:        cd $ROOTFS
                    105: 
                    106:        install -d bin;
                    107:        install -d dev;
                    108:        install -d elwix;
                    109:        install -d elwix/etc;
1.2.4.6   misho     110:        install -d libexec;
1.1       misho     111:        install -d mnt;
                    112:        install -d -m 0555 proc;
                    113:        install -d sbin;
                    114:        install -d system;
                    115:        install -d -m 1777 tmp;
                    116:        install -d usr;
1.2.4.5   misho     117:        install -d usr/bin;
                    118:        install -d usr/lib;
                    119:        install -d usr/libexec;
                    120:        install -d usr/sbin;
1.1       misho     121:        install -d var;
                    122: 
                    123:        ln -fs /usr/lib lib;
                    124: 
                    125:        ln -fs /elwix/etc etc;
                    126:        ln -fs /elwix/exports exports;
                    127:        ln -fs /elwix/home home;
                    128:        ln -fs /elwix/root root;
                    129:        ln -fs /elwix/tftpboot tftpboot;
                    130: 
                    131:        cd -
                    132: }
                    133: 
                    134: install_rootfs()
                    135: {
                    136:        BIN="${ROOTFS}/bin"
                    137:        SBIN="${ROOTFS}/sbin"
1.2.4.5   misho     138:        UBIN="${ROOTFS}/usr/bin"
                    139:        LIBEXEC="${ROOTFS}/usr/libexec"
1.1       misho     140:        ETC="${ROOTFS}/elwix/etc"
                    141: 
1.2.4.6   misho     142:        PRG="/sbin/elwix"
                    143:        LNPRG="${SBIN}/elwix"
                    144: 
1.1       misho     145:        echo "+++ Install ELWIX into RootFS directory ..."
                    146:        install $MKDIR/elwix $SBIN
                    147: 
                    148:        InstallList ${ELWIX_ROOTFS} ${WORLD} ${ROOTFS}
                    149: 
1.2       misho     150:        InstallDir ${ROOTFS_ETC} $ETC
1.1       misho     151: 
1.2.4.2   misho     152: #      ln -s /usr/sbin/nologin $SBIN
1.1       misho     153: 
1.2.4.6   misho     154:        ln $LNPRG $BIN/csh
                    155:        ln $LNPRG $BIN/tcsh
                    156: 
                    157:        ln $LNPRG $BIN/test
                    158:        ln $LNPRG $BIN/\[
                    159:        ln $LNPRG $BIN/cat
                    160:        ln $LNPRG $BIN/chflags
                    161:        ln $LNPRG $BIN/chio
                    162:        ln $LNPRG $BIN/chmod
                    163:        ln $LNPRG $BIN/cp
                    164:        ln $LNPRG $BIN/date
                    165:        ln $LNPRG $BIN/dd
                    166:        ln $LNPRG $BIN/df
                    167:        ln $LNPRG $BIN/domainname
                    168:        ln $LNPRG $BIN/echo
                    169:        ln $LNPRG $BIN/expr
                    170:        ln $LNPRG $BIN/hostname
                    171:        ln $LNPRG $BIN/kenv
                    172:        ln $LNPRG $BIN/kill
                    173:        ln $LNPRG $BIN/ln
                    174:        ln $LNPRG $BIN/link
                    175:        ln $LNPRG $BIN/ls
                    176:        ln $LNPRG $BIN/mkdir
                    177:        ln $LNPRG $BIN/mv
                    178:        ln $LNPRG $BIN/pax
                    179:        ln $LNPRG $BIN/pkill
                    180:        ln $LNPRG $BIN/pgrep
                    181:        ln $LNPRG $BIN/sh
                    182:        ln $LNPRG $BIN/-sh
                    183:        ln $LNPRG $BIN/ps
                    184:        ln $LNPRG $BIN/pwait
                    185:        ln $LNPRG $BIN/pwd
                    186:        ln $LNPRG $BIN/realpath
                    187:        ln $LNPRG $BIN/rm
                    188:        ln $LNPRG $BIN/unlink
                    189:        ln $LNPRG $BIN/rmdir
                    190:        ln $LNPRG $BIN/sleep
                    191:        ln $LNPRG $BIN/stty
                    192:        ln $LNPRG $BIN/sync
                    193:        ln $LNPRG $BIN/uuidgen
                    194: 
                    195:        ln $LNPRG $BIN/true
                    196:        ln $LNPRG $BIN/false
                    197:        ln $LNPRG $BIN/basename
                    198:        ln $LNPRG $BIN/tail
                    199:        ln $LNPRG $BIN/nc
                    200:        ln $LNPRG $BIN/w
                    201:        ln $LNPRG $BIN/head
                    202:        ln $LNPRG $BIN/uname
                    203:        ln $LNPRG $BIN/tset
                    204:        ln $LNPRG $BIN/vmstat
                    205:        ln $LNPRG $BIN/systat
                    206:        ln $LNPRG $BIN/tput
                    207:        ln $LNPRG $BIN/grep
                    208:        ln $LNPRG $BIN/awk
                    209:        ln $LNPRG $BIN/less
                    210:        ln $LNPRG $BIN/gzip
                    211:        ln $LNPRG $BIN/cap_mkdb
                    212:        ln $LNPRG $BIN/sed
                    213:        ln $LNPRG $BIN/vi
                    214:        ln $LNPRG $BIN/du
                    215:        ln $LNPRG $BIN/getopt
                    216:        ln $LNPRG $BIN/logger
                    217:        ln $LNPRG $BIN/nice
                    218:        ln $LNPRG $BIN/nohup
                    219:        ln $LNPRG $BIN/seq
                    220:        ln $LNPRG $BIN/sockstat
                    221:        ln $LNPRG $BIN/stat
                    222:        ln $LNPRG $BIN/tee
                    223:        ln $LNPRG $BIN/tftp
                    224:        ln $LNPRG $BIN/touch
                    225:        ln $LNPRG $BIN/wc
                    226:        ln $LNPRG $BIN/xargs
                    227:        ln $LNPRG $BIN/printenv
                    228:        ln $LNPRG $BIN/egrep
                    229:        ln $LNPRG $BIN/fgrep
                    230:        ln $LNPRG $BIN/tar
                    231:        ln $LNPRG $BIN/cpio
                    232:        ln $LNPRG $BIN/nawk
                    233:        ln $LNPRG $BIN/gunzip
                    234:        ln $LNPRG $BIN/gzcat
                    235:        ln $LNPRG $BIN/zcat
                    236:        ln $LNPRG $BIN/more
                    237:        ln $LNPRG $BIN/reset
                    238:        ln $LNPRG $BIN/readlink
                    239:        ln $LNPRG $BIN/uptime
                    240:        ln $LNPRG $BIN/bzip2
                    241:        ln $LNPRG $BIN/bunzip2
                    242:        ln $LNPRG $BIN/bzcat
                    243: 
                    244:        ln $LNPRG $SBIN/atacontrol
                    245:        ln $LNPRG $SBIN/bsdlabel
                    246:        ln $LNPRG $SBIN/disklabel
                    247:        ln $LNPRG $SBIN/camcontrol
                    248:        ln $LNPRG $SBIN/comcontrol
                    249:        ln $LNPRG $SBIN/conscontrol
                    250:        ln $LNPRG $SBIN/devfs
                    251:        ln $LNPRG $SBIN/dhclient
                    252:        ln $LNPRG $SBIN/dmesg
                    253:        ln $LNPRG $SBIN/dump
                    254:        ln $LNPRG $SBIN/rdump
                    255:        ln $LNPRG $SBIN/dumpon
                    256:        ln $LNPRG $SBIN/fdisk
                    257:        ln $LNPRG $SBIN/fsck
                    258:        ln $LNPRG $SBIN/fsck_ffs
                    259:        ln $LNPRG $SBIN/fsck_ufs
                    260:        ln $LNPRG $SBIN/fsck_4.2bsd
                    261:        ln $LNPRG $SBIN/fsck_msdosfs
                    262:        ln $LNPRG $SBIN/-geom
                    263:        ln $LNPRG $SBIN/glabel
                    264:        ln $LNPRG $SBIN/gpart
                    265:        ln $LNPRG $SBIN/growfs
                    266:        ln $LNPRG $SBIN/hastctl
                    267:        ln $LNPRG $SBIN/hastd
                    268:        ln $LNPRG $SBIN/ifconfig
                    269:        ln $LNPRG $SBIN/init
                    270:        ln $LNPRG $SBIN/ipfw
                    271:        ln $LNPRG $SBIN/iscontrol
                    272:        ln $LNPRG $SBIN/kldconfig
                    273:        ln $LNPRG $SBIN/kldload
                    274:        ln $LNPRG $SBIN/kldstat
                    275:        ln $LNPRG $SBIN/kldunload
                    276:        ln $LNPRG $SBIN/ldconfig
                    277:        ln $LNPRG $SBIN/md5
                    278:        ln $LNPRG $SBIN/sha1
                    279:        ln $LNPRG $SBIN/sha256
                    280:        ln $LNPRG $SBIN/rmd160
                    281:        ln $LNPRG $SBIN/mdconfig
                    282:        ln $LNPRG $SBIN/mdmfs
                    283:        ln $LNPRG $SBIN/mount_mfs
                    284:        ln $LNPRG $SBIN/mknod
                    285:        ln $LNPRG $SBIN/mksnap_ffs
                    286:        ln $LNPRG $SBIN/mount
                    287:        ln $LNPRG $SBIN/mount_cd9660
                    288:        ln $LNPRG $SBIN/mount_msdosfs
                    289:        ln $LNPRG $SBIN/mount_nfs
                    290:        ln $LNPRG $SBIN/mount_ntfs
                    291:        ln $LNPRG $SBIN/mount_nullfs
                    292:        ln $LNPRG $SBIN/mount_udf
                    293:        ln $LNPRG $SBIN/mount_unionfs
                    294:        ln $LNPRG $SBIN/newfs
                    295:        ln $LNPRG $SBIN/newfs_msdos
                    296:        ln $LNPRG $SBIN/nfsiod
                    297:        ln $LNPRG $SBIN/nos-tun
                    298:        ln $LNPRG $SBIN/pfctl
                    299:        ln $LNPRG $SBIN/pflogd
                    300:        ln $LNPRG $SBIN/quotacheck
                    301:        ln $LNPRG $SBIN/reboot
                    302:        ln $LNPRG $SBIN/halt
                    303:        ln $LNPRG $SBIN/fastboot
                    304:        ln $LNPRG $SBIN/fasthalt
                    305:        ln $LNPRG $SBIN/recoverdisk
                    306:        ln $LNPRG $SBIN/restore
                    307:        ln $LNPRG $SBIN/rrestore
                    308:        ln $LNPRG $SBIN/route
                    309:        ln $LNPRG $SBIN/rtsol
                    310:        ln $LNPRG $SBIN/shutdown
                    311:        ln $LNPRG $SBIN/savecore
                    312:        ln $LNPRG $SBIN/swapon
                    313:        ln $LNPRG $SBIN/swapoff
                    314:        ln $LNPRG $SBIN/swapctl
                    315:        ln $LNPRG $SBIN/sysctl
                    316:        ln $LNPRG $SBIN/tunefs
                    317:        ln $LNPRG $SBIN/umount
                    318:        ln $LNPRG $SBIN/zfs
                    319:        ln $LNPRG $SBIN/zpool
                    320: 
                    321:        ln $LNPRG $SBIN/ping
                    322:        ln $LNPRG $SBIN/ping6
                    323:        ln $LNPRG $SBIN/traceroute
                    324:        ln $LNPRG $SBIN/traceroute6
                    325: 
                    326:        ln $LNPRG $SBIN/chown
                    327:        ln $LNPRG $SBIN/pwd_mkdb
                    328:        ln $LNPRG $SBIN/arp
                    329:        ln $LNPRG $SBIN/gpioctl
                    330:        ln $LNPRG $SBIN/hostapd
                    331:        ln $LNPRG $SBIN/hostapd_cli
                    332:        ln $LNPRG $SBIN/wpa_supplicant
                    333:        ln $LNPRG $SBIN/wpa_cli
                    334:        ln $LNPRG $SBIN/wpa_passphrase
                    335:        ln $LNPRG $SBIN/wake
                    336:        ln $LNPRG $SBIN/watchdog
                    337:        ln $LNPRG $SBIN/watchdogd
                    338:        ln $LNPRG $SBIN/inetd
                    339:        ln $LNPRG $SBIN/wlandebug
                    340:        ln $LNPRG $SBIN/chroot
                    341:        ln $LNPRG $SBIN/i2c
                    342:        ln $LNPRG $SBIN/iostat
                    343:        ln $LNPRG $SBIN/jail
                    344:        ln $LNPRG $SBIN/jexec
                    345:        ln $LNPRG $SBIN/jls
                    346:        ln $LNPRG $SBIN/ndp
                    347:        ln $LNPRG $SBIN/newsyslog
                    348:        ln $LNPRG $SBIN/nologin
                    349:        ln $LNPRG $SBIN/pstat
                    350:        ln $LNPRG $SBIN/rtadvctl
                    351:        ln $LNPRG $SBIN/rtadvd
                    352:        ln $LNPRG $SBIN/rtsold
                    353:        ln $LNPRG $SBIN/syslogd
                    354:        ln $LNPRG $SBIN/setfib
                    355:        ln $LNPRG $SBIN/swapinfo
                    356:        ln $LNPRG $SBIN/chgrp
                    357: 
                    358:        ln $LNPRG $UBIN/login
                    359:        ln $LNPRG $UBIN/passwd
1.2.4.2   misho     360: 
1.2.4.6   misho     361:        ln $LNPRG $LIBEXEC/getty
                    362:        ln $LNPRG $LIBEXEC/tftpd
1.2.4.3   misho     363: 
1.2.4.8 ! misho     364:        strip -s $LNPRG
        !           365: 
1.1       misho     366:        chown -hR root:wheel $ROOTFS
1.2.4.1   misho     367: 
                    368:        echo "+++ ELWIX clean CVS tags ..."
                    369:        CleanCVS $ETC
                    370:        CleanCVS $ETC/etc
1.1       misho     371: }
                    372: 
                    373: build_image()
                    374: {
                    375:        echo "+++ Build ELWIX RootFS image ..."
                    376:        makefs -s ${ROOTFS_SIZE} -o minfree=0 $REL/$ROOTFS_IMG $ROOTFS
                    377: }
                    378: 
                    379: install_image()
                    380: {
                    381:        echo "+++ Install ELWIX RootFS Image into kernel ..."
                    382:        START=`strings -td $KERNEL | grep "MFS Filesystem" | cut -d ' ' -f 1 | head -1`
                    383:        STOP=`strings -td $KERNEL | grep "MFS Filesystem" | cut -d ' ' -f 1 | tail -1`
                    384:        STOP=$(($STOP + 1))
                    385: 
                    386:        head -c $START $KERNEL >$NEWKERN
                    387:        cat $REL/$ROOTFS_IMG >>$NEWKERN
                    388:        tail -c +$STOP $KERNEL >>$NEWKERN
                    389: 
                    390:        cd $REL
                    391:        gzip -9 kernel
                    392:        cd -
                    393: }
                    394: 
                    395: ### main()
                    396: if SnitVer ${WORLD}/elwix.ver; then
                    397:        clean_elwix
                    398:        prepare_elwix
                    399:        build_elwix
                    400: 
                    401:        build_rootdir
                    402:        install_rootfs
                    403: 
1.2.4.4   misho     404:        build_image && install_image
1.1       misho     405: else
                    406:        echo "Skipped ELWIX RootFS build ..."
                    407: fi
                    408: 
                    409: echo "+++ Complete build ELWIX RootFS"

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