Skip to content

Instantly share code, notes, and snippets.

@blacklion
Created April 28, 2019 21:44

Revisions

  1. blacklion created this gist Apr 28, 2019.
    347 changes: 347 additions & 0 deletions gateway.nanobsd
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,347 @@
    #! /bin/sh
    NANO_NAME=gateway-j3160

    NANO_SRC=/data/src
    NANO_OBJ=/usr/obj/nanobsd/gateway.v3

    NANO_ROOT_DIR=/usr/home/lev/nanobsd
    NANO_CONFROOT=${NANO_ROOT_DIR}/gateway.v3
    NANO_TOOLS=${NANO_ROOT_DIR}/scripts

    NANO_PACKAGE_DIR=${NANO_CONFROOT}/Pkg
    NANO_FILESDIR=${NANO_CONFROOT}/Files
    NANO_KERNEL=${NANO_CONFROOT}/J3160

    NANO_DISKIMGDIR=/data/nanobsd
    NANO_IMGNAME="${NANO_NAME}"

    # Parallel make
    NANO_PMAKE="make -j4"

    # Images
    NANO_INIT_IMG2=0

    # Code size 512MB
    NANO_CODESIZE=1060232

    # 8MB
    NANO_CONFSIZE=16384

    # Data slice for named & dhcpd - 6.2Gb to minimize code section
    #NANO_DATASIZE=14065664
    #NANO_DATASIZE=5677056
    #NANO_DATASIZE=27934098
    #NANO_DATADIR=${NANO_CONFROOT}/Data
    NANO_DATASIZE=0

    NANO_RAM_ETCSIZE=20480
    NANO_RAM_TMPVARSIZE=524288

    # glabel support
    NANO_LABEL=gw

    # Buildworld
    CONF_BUILD=''

    # Modules
    NANO_MODULES=

    # Packages to remove after full installation
    #PACKAGES_TO_REMOVE="python2 python27 libffi indexinfo"
    PACKAGES_TO_REMOVE=

    # Special instruction to "install"

    # Installworld
    CONF_INSTALL='
    WITHOUT_INSTALLLIB=yes
    WITHOUT_MAKE=yes
    WITHOUT_TOOLCHAIN=yes
    WITHOUT_INCLUDES=yes
    '

    CONF_WORLD='
    BOOT_COMCONSOLE_SPEED=115200
    BOOT_BOOT0_COMCONSOLE_SPEED=0
    BOOT_BOOT0_RESET_TERM=yes
    MODULES_OVERRIDE=
    WITHOUT_CROSS_COMPILER=yes
    WITHOUT_BINUTILS_BOOTSTRAP=yes
    WITHOUT_BINUTILS=yes
    WITHOUT_CLANG_BOOTSTRAP=yes
    WITHOUT_CLANG=yes
    WITHOUT_CLANG_EXTRAS=yes
    WITHOUT_ELFTOOLCHAIN_BOOTSTRAP=yes
    WITHOUT_ELFTOOLCHAIN=yes
    WITHOUT_ELFTOOLCHAIN_TOOLS=yes
    WITHOUT_GCC_BOOTSTRAP=yes
    WITHOUT_GCC=yes
    WITHOUT_LLD_BOOTSTRAP=yes
    WITHOUT_LLD=yes
    XCC=/usr/bin/cc
    XCXX=/usr/bin/c++
    XCPP=/usr/bin/cpp
    XAS=/usr/bin/as
    XAR=/usr/bin/ar
    XLD=/usr/bin/ld
    XNM=/usr/bin/nm
    XOBJDUMP=/usr/bin/objdump
    XRANLIB=/usr/bin/ranlib
    XSTRINGS=/usr/bin/strings
    XSTRIPBIN=/usr/bin/strip
    COMPILER_TYPE=clang
    WITH_FAST_DEPEND=yes
    MALLOC_PRODUCTION=yes
    WITH_BSD_GREP=yes
    WITHOUT_ACCT=yes
    WITHOUT_ACPI=yes
    WITHOUT_AMD=yes
    WITHOUT_APM=yes
    WITHOUT_ATM=yes
    WITHOUT_AUDIT=yes
    WITHOUT_AUTHPF=yes
    WITHOUT_AUTOFS=yes
    WITHOUT_BHYVE=yes
    WITHOUT_BLACKLIST=yes
    WITHOUT_BLACKLIST_SUPPORT=yes
    WITHOUT_BIND_DNSSEC=yes
    WITHOUT_BOOTPARAMD=yes
    WITHOUT_BOOTPD=yes
    WITHOUT_BSD_CPIO=yes
    WITHOUT_BSDINSTALL=yes
    WITHOUT_BZIP2=yes
    WITHOUT_BZIP2_SUPPORT=yes
    WITHOUT_CALENDAR=yes
    WITHOUT_CAPSICUM=yes
    WITHOUT_CASPER=yes
    WITHOUT_CCD=yes
    WITHOUT_CDDL=yes
    WITHOUT_CTM=yes
    WITHOUT_CUSE=yes
    WITHOUT_CXGBETOOL=yes
    WITHOUT_DEBUG_FILES=yes
    WITHOUT_DICT=yes
    WITHOUT_EXAMPLES=yes
    WITHOUT_FDT=yes
    WITHOUT_FILE=yes
    WITHOUT_FINGER=yes
    WITHOUT_FLOPPY=yes
    WITHOUT_FREEBSD_UPDATE=yes
    WITHOUT_GAMES=yes
    WITHOUT_GCOV=yes
    WITHOUT_GNUCXX=yes
    WITHOUT_GNU_GREP=yes
    WITHOUT_GNU_GREP_COMPAT=yes
    WITHOUT_GDB=yes
    WITHOUT_GPIO=yes
    WITHOUT_GPL_DTC=yes
    WITHOUT_GROFF=yes
    WITHOUT_GSSAPI=yes
    WITHOUT_HAST=yes
    WITHOUT_HTML=yes
    WITHOUT_HYPERV=yes
    WITHOUT_INETD=yes
    WITHOUT_INFO=yes
    WITHOUT_IPFILTER=yes
    WITHOUT_ISCSI=yes
    WITHOUT_JAIL=yes
    WITHOUT_KERBEROS=yes
    WITHOUT_KERBEROS_SUPPORT=yes
    WITHOUT_KERNEL_SYMBOLS=yes
    WITHOUT_LEGACY_CONSOLE=yes
    WITHOUT_LIB32=yes
    WITHOUT_LLDB=yes
    WITHOUT_LOCALES=yes
    WITHOUT_LOCATE=yes
    WITHOUT_LPR=yes
    WITHOUT_MAN=yes
    WITHOUT_MANDOCDB=yes
    WITHOUT_MAN_UTILS=yes
    WITHOUT_NDIS=yes
    WITHOUT_NIS=yes
    WITHOUT_NLS=yes
    WITHOUT_NLS_CATALOGS=yes
    WITHOUT_NS_CACHING=yes
    WITHOUT_PC_SYSINSTALL=yes
    WITHOUT_PF=yes
    WITHOUT_PORTSNAP=yes
    WITHOUT_PPP=yes
    WITHOUT_PROFILE=yes
    WITHOUT_QUOTAS=yes
    WITHOUT_RADIUS_SUPPORT=yes
    WITHOUT_RCMDS=yes
    WITHOUT_RESCUE=yes
    WITHOUT_RBOOTD=yes
    WITHOUT_ROUTED=yes
    WITHOUT_SENDMAIL=yes
    WITHOUT_SHAREDOCS=yes
    WITHOUT_SVNLITE=yes
    WITHOUT_SYSCONS=yes
    WITHOUT_TALK=yes
    WITHOUT_TCP_WRAPPERS=yes
    WITHOUT_TELNET=yes
    WITHOUT_TESTS=yes
    WITHOUT_TESTS_SUPPORT=yes
    WITHOUT_TFTP=yes
    WITHOUT_TIMED=yes
    WITHOUT_UNBOUND=yes
    WITHOUT_USB_GADGET_EXAMPLES=yes
    WITHOUT_VI=yes
    WITHOUT_VT=yes
    WITHOUT_ZFS=yes
    '

    #
    NANO_BOOT0CFG="-o packet -s 1 -m 3 -t 18"
    NANO_BOOTLOADER="boot/boot0sio"
    # BOOT
    NANO_BOOT2CFG="-DhS115200"

    # Media
    NANO_HEADS=255
    NANO_SECTS=63
    NANO_MEDIASIZE=30031250

    # Additional FSes
    NANO_ADD_FS="unifi home"

    NANO_ADD_FS_unifi_DEV="/dev/ufs/unifi"
    NANO_ADD_FS_unifi_MNT="/usr/local/share/java/unifi"
    NANO_ADD_FS_unifi_TYP="ufs"
    NANO_ADD_FS_unifi_OPT="rw,union"
    NANO_ADD_FS_unifi_CHK="3"

    NANO_ADD_FS_home_DEV="192.168.134.2:/home"
    NANO_ADD_FS_home_MNT="/usr/home"
    NANO_ADD_FS_home_TYP="nfs"
    NANO_ADD_FS_home_OPT="nfsv4,rw,late,soft,intr,bg,wsize=65536,rsize=65536,tcp"

    # Totally new
    cust_remove_samples() (
    pprint 2 "remove samples from /usr/local/etc"
    (
    cd ${NANO_WORLDDIR}
    find usr/local/etc -name '*sample' -delete
    find usr/local/etc -name '*dist' -delete
    find usr/local/etc -name '*example' -delete
    rm usr/local/etc/nsd/nsd.conf
    )
    )

    cust_remove_pkgdb() (
    pprint 2 "remove package database to save space"
    (
    cd ${NANO_WORLDDIR}
    rm -rf var/db/pkg/*
    )
    )

    cust_remove_sys_leftovers() (
    pprint 2 "remove system's files which is not needed"
    (
    cd ${NANO_WORLDDIR}
    rm -rf usr/include/*
    rm -rf usr/lib/debug
    find usr/lib/ -name \*.a -delete
    )
    )

    cust_remove_unneeded_packages() (
    if [ -z "${PACKAGES_TO_REMOVE}" ] ; then return 0 ; fi
    pprint 2 "remove packages which is not needed"
    chroot ${NANO_WORLDDIR} sh -c "pkg delete -f -y ${PACKAGES_TO_REMOVE}"
    )

    cust_remove_packages_leftovers() (
    pprint 2 "remove packages' files which is not needed"
    (
    cd ${NANO_WORLDDIR}
    find usr/local/lib/ -name \*.a -delete
    rm -rf usr/local/man/*
    rm -rf usr/local/include/*
    rm -rf usr/local/lib/python2.7
    rm -rf usr/local/share/doc
    rm -rf usr/local/share/examples
    rm -rf usr/local/share/python2.7
    rm -rf usr/local/share/licenses
    rm -rf usr/local/share/aclocal
    rm -rf usr/local/share/zsh
    rm -rf usr/local/bin/mongo
    rm -rf usr/local/bin/mongoperf
    rm -rf usr/local/bin/mongos
    )
    )

    cust_additionalfs () (
    pprint 2 "configure nanobsd /etc/fstab: add additional FSes"
    (
    cd ${NANO_WORLDDIR}
    for fs in ${NANO_ADD_FS} ; do
    eval dev=\$NANO_ADD_FS_${fs}_DEV
    eval mnt=\$NANO_ADD_FS_${fs}_MNT
    eval typ=\$NANO_ADD_FS_${fs}_TYP
    eval opt=\$NANO_ADD_FS_${fs}_OPT
    eval frq=\$NANO_ADD_FS_${fs}_FRQ
    eval chk=\$NANO_ADD_FS_${fs}_CHK
    if [ -z "${dev}" ] ; then
    echo "Device for additional fs '${fs}' unknown" 1>&2
    exit 1
    fi
    if [ -z "${mnt}" ] ; then
    echo "Mountpoint for additional fs '${fs}' unknown" 1>&2
    exit 1
    fi
    typ=${typ:=ufs}
    opt=${opt:=ro}
    frq=${frq:=0}
    chk=${chk:=0}
    if [ ! -d ./${mnt} ] ; then
    mkdir -p ./${mnt} ; touch ./${mnt}/.keepthis
    fi
    printf "%s\t%s\t%s\t%s\t%s\t%s\n" $dev $mnt $typ $opt $frq $chk >> etc/fstab
    done
    )
    )

    cust_etcdb () (
    pprint 2 "Call pwd_mkdb & cap_mkdb"
    (
    cd ${NANO_WORLDDIR}
    pwd_mkdb -p -d etc etc/master.passwd
    cap_mkdb etc/login.conf
    )
    )

    #######################################################################
    # Install the stuff under ./Files

    cust_install_files_my () (
    cd ${NANO_FILESDIR}
    find . -print | grep -Ev '/(CVS|\.svn|.mtree)' | cpio -dumpv ${NANO_WORLDDIR}
    find . -type f -name .mtree -print | while read fn ; do
    dir=`dirname ${fn}`
    mtree -Ueq -f ${fn} -p ${NANO_WORLDDIR}/${dir}
    done
    )

    customize_cmd cust_comconsole
    customize_cmd cust_pkgng
    customize_cmd cust_remove_unneeded_packages
    customize_cmd cust_remove_samples
    customize_cmd cust_remove_pkgdb
    customize_cmd cust_remove_sys_leftovers
    customize_cmd cust_remove_packages_leftovers
    customize_cmd cust_install_files_my
    customize_cmd cust_additionalfs
    customize_cmd cust_etcdb