1264656Simp# $FreeBSD$ 2264656Simp 3264656Simp#- 4264656Simp# Copyright (c) 2014 Warner Losh. All Rights Reserved. 5264656Simp# Copyright (c) 2010 iXsystems, Inc., All rights reserved. 6264656Simp# 7264656Simp# Redistribution and use in source and binary forms, with or without 8264656Simp# modification, are permitted provided that the following conditions 9264656Simp# are met: 10264656Simp# 1. Redistributions of source code must retain the above copyright 11264656Simp# notice, this list of conditions and the following disclaimer. 12264656Simp# 2. Redistributions in binary form must reproduce the above copyright 13264656Simp# notice, this list of conditions and the following disclaimer in the 14264656Simp# documentation and/or other materials provided with the distribution. 15264656Simp# 16264656Simp# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17264656Simp# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18264656Simp# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19264656Simp# ARE DISCLAIMED. IN NO EVENT SHALL iXsystems, Inc OR CONTRIBUTORS BE LIABLE 20264656Simp# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21264656Simp# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22264656Simp# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23264656Simp# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24264656Simp# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25264656Simp# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26264656Simp# SUCH DAMAGE. 27264656Simp# 28264656Simp# 29264656Simp# This file is heavily derived from both Sam Leffler's Avilia config, 30264656Simp# as well as the BSDRP project's config file. Neither of these have 31264656Simp# an explicit copyright/license statement, but are implicitly BSDL. This 32264656Simp# example has been taken from the FreeNAS project (an early version) and 33264656Simp# simplified to meet the needs of the example. 34264656Simp# 35264656Simp 36265166Simp# NB: You want the other file 37264656Simp 38265166SimpNANO_PMAKE="make -j $(sysctl -n hw.ncpu)" 39265166Simp 40264656SimpNANO_CFG_BASE=$(pwd) 41264656SimpNANO_CFG_BASE=${NANO_CFG_BASE%/dhcpd} 42264656SimpNANO_SRC=$(pwd) 43264656SimpNANO_SRC=${NANO_SRC%/tools/tools/nanobsd/dhcpd} 44264656SimpNANO_OBJ=${NANO_SRC}/../dhcpd/obj 45264656Simp# Where cust_pkg() finds packages to install 46264656Simp#XXX: Is this the right place? 47265166Simp#NANO_PORTS=$(realpath ${NANO_SRC}/../ports) 48265166SimpNANO_PORTS=/usr/ports 49264656SimpNANO_PACKAGE_DIR=${NANO_SRC}/${NANO_TOOLS}/Pkg 50264656SimpNANO_DATADIR=${NANO_OBJ}/_.data 51264656SimpNANO_DATASIZE=40960 52264656SimpNANO_INIT_IMG2=0 53264656Simpunset MAKEOBJDIRPREFIX 54264656Simp 55264656Simp# this to go into nanobsd.sh 56264656SimpNANO_PORTS=${NANO_PORTS:-/usr/ports} 57264656Simp 58264656Simpcustomize_cmd cust_allow_ssh_root 59264656Simp 60264656Simpadd_etc_make_conf() 61264656Simp{ 62264656Simp touch ${NANO_WORLDDIR}/etc/make.conf 63264656Simp} 64264656Simpcustomize_cmd add_etc_make_conf 65264656Simp 66264656Simpclean_usr_local() 67264656Simp{ 68264656Simp LOCAL_DIR=${NANO_WORLDDIR}/usr/local 69264656Simp pprint 2 "Clean and create world directory (${LOCAL_DIR})" 70264656Simp if rm -rf ${LOCAL_DIR}/ > /dev/null 2>&1 ; then 71264656Simp true 72264656Simp else 73264656Simp chflags -R noschg ${LOCAL_DIR}/ 74264656Simp rm -rf ${LOCAL_DIR}/ 75264656Simp fi 76264656Simp for f in bin etc lib libdata libexec sbin share; do 77264656Simp mkdir -p ${LOCAL_DIR}/$f 78264656Simp done 79264656Simp} 80264656Simpcustomize_cmd clean_usr_local 81264656Simp 82264656Simpcust_install_machine_files() 83264656Simp{ 84264656Simp echo "cd ${NANO_CFG_BASE}/Files" 85264656Simp cd ${NANO_CFG_BASE}/Files 86264656Simp find . -print | grep -Ev '/(CVS|\.svn)' | cpio -dumpv ${NANO_WORLDDIR} 87264656Simp} 88264656Simpcustomize_cmd cust_install_files 89264656Simpcustomize_cmd cust_install_machine_files 90264656Simp 91264656Simpbuildenv() 92264656Simp{ 93264656Simp cd ${NANO_SRC} 94264656Simp env __MAKE_CONF=${NANO_MAKE_CONF_BUILD} DESTDIR=${NANO_WORLDDIR} make buildenv 95264656Simp} 96264656Simp 97264656SimpNANO_MAKEFS="makefs -B big \ 98264656Simp -o bsize=4096,fsize=512,density=8192,optimization=space" 99264656Simpexport NANO_MAKEFS 100264656Simp 101264656Simp# NB: leave c++ enabled so devd can be built 102264656SimpCONF_BUILD=" 103264656SimpWITHOUT_ACPI=true 104264656SimpWITHOUT_ATM=true 105264656SimpWITHOUT_AUDIT=true 106264656SimpWITHOUT_BIND_DNSSEC=true 107264656SimpWITHOUT_BIND_ETC=true 108264656SimpWITHOUT_BIND_LIBS_LWRES=true 109264656SimpWITHOUT_BLUETOOTH=true 110264656SimpWITHOUT_CALENDAR=true 111264656SimpWITHOUT_CVS=true 112264656SimpWITHOUT_DICT=true 113264656SimpWITHOUT_EXAMPLES=true 114264656SimpWITHOUT_FORTRAN=true 115264656SimpWITHOUT_GAMES=true 116264656SimpWITHOUT_GCOV=true 117264656SimpWITHOUT_GPIB=true 118264656SimpWITHOUT_HTML=true 119264656SimpWITHOUT_I4B=true 120264656SimpWITHOUT_IPFILTER=true 121264656SimpWITHOUT_IPX=true 122264656SimpWITHOUT_LIBKSE=true 123264656SimpWITHOUT_LOCALES=true 124264656SimpWITHOUT_LPR=true 125264656SimpWITHOUT_MAN=true 126264656SimpWITHOUT_NETCAT=true 127264656SimpWITHOUT_NIS=true 128264656SimpWITHOUT_NLS=true 129264656SimpWITHOUT_NS_CACHING=true 130264656SimpWITHOUT_OBJC=true 131264656SimpWITHOUT_PROFILE=true 132264656SimpWITHOUT_RCMDS=true 133264656SimpWITHOUT_SENDMAIL=true 134264656SimpWITHOUT_SHAREDOCS=true 135264656SimpWITHOUT_SYSCONS=true 136264656SimpWITHOUT_LIB32=true 137264656Simp" 138264656SimpCONF_INSTALL="$CONF_BUILD 139264656SimpINSTALL_NODEBUG=t 140264656SimpNOPORTDOCS=t 141264656SimpNO_INSTALL_MANPAGES=t 142264656Simp" 143264656Simp# The following would help... 144264656Simp# WITHOUT_TOOLCHAIN=true can't build ports 145264656Simp# WITHOUT_INSTALLLIB=true libgcc.a 146264656Simp# 147264656Simp# from the build 148264656Simp# WITHOUT_INFO=true makeinfo 149264656Simp# WITHOUT_RCS=true 150264656SimpPKG_ONLY_MAKE_CONF=" 151264656SimpWITHOUT_TOOLCHAIN=true 152264656SimpWITHOUT_INSTALLLIB=true 153264656SimpWITHOUT_INFO=true 154264656SimpWITHOUT_RCS=true 155264656Simp" 156264656Simp 157264656SimpNANO_PACKAGE_ONLY=1 158264656Simp 159264656Simp# install a package from a pre-built binary 160264656Simpdo_add_pkg () 161264656Simp{ 162264656Simp # Need to create ${NANO_OBJ}/ports in this add_pkg_${port} function 163264656Simp set -x 164264656Simp mkdir -p ${NANO_OBJ}/ports/distfiles 165264656Simp mkdir -p ${NANO_OBJ}/ports/packages 166264656Simp mkdir -p ${NANO_WORLDDIR}/usr/ports/packages 167264656Simp mkdir -p ${NANO_WORLDDIR}/usr/ports/distfiles 168264656Simp mount -t nullfs -o noatime ${NANO_OBJ}/ports/packages \ 169264656Simp ${NANO_WORLDDIR}/usr/ports/packages 170264656Simp mount -t nullfs -o noatime ${NANO_OBJ}/ports/distfiles \ 171264656Simp ${NANO_WORLDDIR}/usr/ports/distfiles 172265166Simp CR env ASSUME_ALWAYS_YES=YES SIGNATURE_TYPE=none /usr/sbin/pkg add /usr/ports/packages/All/$1.txz 173264656Simp umount ${NANO_WORLDDIR}/usr/ports/distfiles 174264656Simp umount ${NANO_WORLDDIR}/usr/ports/packages 175264656Simp rmdir ${NANO_WORLDDIR}/usr/ports/packages 176264656Simp rmdir ${NANO_WORLDDIR}/usr/ports/distfiles 177264656Simp rmdir ${NANO_WORLDDIR}/usr/ports 178264656Simp set +x 179264656Simp} 180264656Simp 181264656Simp# Build a port (with the side effect of creating a package) 182264656Simpdo_add_port () 183264656Simp{ 184264656Simp local port_path 185264656Simp port_path=$1 186264656Simp shift 187264656Simp set -x 188264656Simp # Need to create ${NANO_OBJ}/ports in this add_port_${port} function 189264656Simp mkdir -p ${NANO_OBJ}/ports/distfiles 190264656Simp mkdir -p ${NANO_OBJ}/ports/packages 191264656Simp mkdir -p ${NANO_PORTS}/packages 192264656Simp mkdir -p ${NANO_PORTS}/distfiles 193264656Simp mkdir -p ${NANO_WORLDDIR}/usr/src 194264656Simp mkdir -p ${NANO_WORLDDIR}/usr/ports 195264656Simp mount -t nullfs -o noatime ${NANO_SRC} ${NANO_WORLDDIR}/usr/src 196264656Simp mount -t nullfs -o noatime ${NANO_PORTS} ${NANO_WORLDDIR}/usr/ports 197264656Simp mount -t nullfs -o noatime ${NANO_OBJ}/ports/packages \ 198264656Simp ${NANO_WORLDDIR}/usr/ports/packages 199264656Simp mount -t nullfs -o noatime ${NANO_OBJ}/ports/distfiles \ 200264656Simp ${NANO_WORLDDIR}/usr/ports/distfiles 201264656Simp mkdir -p ${NANO_WORLDDIR}/dev 202264656Simp mount -t devfs devfs ${NANO_WORLDDIR}/dev 203264656Simp mkdir -p ${NANO_WORLDDIR}/usr/workdir 204264656Simp cp /etc/resolv.conf ${NANO_WORLDDIR}/etc/resolv.conf 205265166Simp # OK, a little inefficient, but likely not enough to worry about. 206265166Simp CR ldconfig /lib /usr/lib /usr/local/lib 207265166Simp CR ldconfig -R 208265166Simp CR ldconfig -r 209264656Simp# Improvement: Don't know why package-recursive don't works here 210264656Simp CR "env UNAME_p=${NANO_ARCH} TARGET=${NANO_ARCH} \ 211265166Simp TARGET_ARCH=${NANO_ARCH} PORTSDIR=${NANO_PORTS} make \ 212264656Simp __MAKE_CONF=${NANO_MAKE_CONF_BUILD} \ 213264656Simp WRKDIRPREFIX=/usr/workdir -C /usr/ports/$port_path \ 214265166Simp package-recursive BATCH=yes $* clean FORCE_PKG_REGISTER=t" 215264656Simp rm ${NANO_WORLDDIR}/etc/resolv.conf 216264656Simp rm -rf ${NANO_WORLDDIR}/usr/obj 217264656Simp rm -rf ${NANO_WORLDDIR}/usr/workdir 218264656Simp umount ${NANO_WORLDDIR}/dev 219264656Simp umount ${NANO_WORLDDIR}/usr/ports/packages 220264656Simp umount ${NANO_WORLDDIR}/usr/ports/distfiles 221264656Simp umount ${NANO_WORLDDIR}/usr/ports 222264656Simp umount ${NANO_WORLDDIR}/usr/src 223264656Simp set +x 224264656Simp} 225264656Simp 226264656Simp# Need to check if this function works with cross-compiling architecture!!!! 227264656Simp# Recursive complex fonction: Generate one function for each ports 228264656Simpadd_port () { 229264656Simp local port_path=$1 230264656Simp local port=`echo $1 | sed -e 's/\//_/'` 231264656Simp shift 232299826Spfg # Check if package already exist 233264656Simp # Need to: 234264656Simp # 1. check ARCH of this package! 235264656Simp # 2. Add a trap 236264656Simp cd ${NANO_PORTS}/${port_path} 237265166Simp PKG_NAME=`env PORTSDIR=${NANO_PORTS} make __MAKE_CONF=${NANO_MAKE_CONF_BUILD} package-name` 238265166Simp if [ -f ${NANO_OBJ}/ports/packages/All/${PKG_NAME}.txz ]; then 239264656Simp # Pkg file found: Generate add_pkg_NAME function 240264656Simp eval " 241264656Simp add_pkg_${port} () { 242264656Simp do_add_pkg ${PKG_NAME} 243264656Simp } 244264656Simp customize_cmd add_pkg_${port} 245264656Simp " 246264656Simp else 247264656Simp # No pkg file: Generate add_port_NAME function 248264656Simp eval " 249264656Simp add_port_${port} () { 250264656Simp do_add_port ${port_path} $* 251264656Simp } 252264656Simp customize_cmd add_port_${port} 253264656Simp " 254264656Simp NANO_PACKAGE_ONLY=0 255264656Simp fi 256264656Simp} 257264656Simp 258264656Simpdie() 259264656Simp{ 260264656Simp echo "$*" 261264656Simp exit 1 262264656Simp} 263264656Simp 264265166Simp# Automatically include the packaging port here so it is always first so it 265265166Simp# builds the port and adds the package so we can add other packages. 266265166Simpadd_port ports-mgmt/pkg 267265166Simp 268264656Simprp=$(realpath ${NANO_OBJ}/) 269264656Simp__a=`mount | grep ${rp} | awk '{print length($3), $3;}' | sort -rn | awk '{$1=""; print;}'` 270264656Simpif [ -n "$__a" ]; then 271264656Simp echo "unmounting $__a" 272264656Simp umount $__a 273264656Simpfi 274264656Simp 275264656SimpNANO_BOOTLOADER="boot/boot0" 276