common revision 289959
1# $FreeBSD: stable/10/tools/tools/nanobsd/gateworks/common 289959 2015-10-25 22:41:26Z ngie $ 2 3NANO_CFGDIR=${NANO_CFGDIR:-${NANO_SRC}/${NANO_TOOLS}/gateworks/cfg} 4test -d ${NANO_CFGDIR} || NANO_CFGDIR=/var/empty 5NANO_PMAKE="make" # NB: disable -j 3 6 7NANO_ARCH=armeb 8TARGET_CPUTYPE=xscale; export TARGET_CPUTYPE # XXX 9 10NANO_CUSTOMIZE="cust_allow_ssh_root" 11 12clean_usr_local() 13{ 14 LOCAL_DIR=${NANO_WORLDDIR}/usr/local 15 pprint 2 "Clean and create world directory (${LOCAL_DIR})" 16 if rm -rf ${LOCAL_DIR}/ > /dev/null 2>&1 ; then 17 true 18 else 19 chflags -R noschg ${LOCAL_DIR}/ 20 rm -rf ${LOCAL_DIR}/ 21 fi 22 for f in bin etc lib libdata libexec sbin share; do 23 mkdir -p ${LOCAL_DIR}/$f 24 done 25} 26NANO_CUSTOMIZE="$NANO_CUSTOMIZE clean_usr_local" 27 28cust_install_machine_files() 29{ 30 echo "cd ${NANO_TOOLS}/gateworks/Files" 31 cd ${NANO_TOOLS}/gateworks/Files 32 find . -print | grep -Ev '/(CVS|\.svn)' | cpio -dumpv ${NANO_WORLDDIR} 33} 34NANO_CUSTOMIZE="$NANO_CUSTOMIZE cust_install_files cust_install_machine_files" 35 36buildenv() 37{ 38 cd ${NANO_SRC} 39 env TARGET_ARCH=${NANO_ARCH} __MAKE_CONF=${NANO_MAKE_CONF_BUILD} \ 40 DESTDIR=${NANO_WORLDDIR} make buildenv 41} 42 43net80211_tools() 44{ 45 for f in wlanstats wlanwds wlanwatch; do 46 echo "(cd tools/tools/net80211/$f; make $1)"; 47 done | buildenv 48} 49net80211_clean_tools() 50{ 51 net80211_tools "clean" 52} 53net80211_build_tools() 54{ 55 net80211_tools "" 56} 57net80211_install_tools() 58{ 59 net80211_tools "install" 60} 61NANO_CUSTOMIZE="$NANO_CUSTOMIZE net80211_clean_tools" 62NANO_CUSTOMIZE="$NANO_CUSTOMIZE net80211_build_tools" 63NANO_CUSTOMIZE="$NANO_CUSTOMIZE net80211_install_tools" 64 65ath_clean_tools() 66{ 67 echo "cd tools/tools/ath; make clean" | buildenv 68} 69ath_build_tools() 70{ 71 echo "cd tools/tools/ath; make" | buildenv 72} 73ath_install_tools() 74{ 75 echo "cd tools/tools/ath; make install" | buildenv 76} 77NANO_CUSTOMIZE="$NANO_CUSTOMIZE ath_clean_tools" 78NANO_CUSTOMIZE="$NANO_CUSTOMIZE ath_build_tools" 79NANO_CUSTOMIZE="$NANO_CUSTOMIZE ath_install_tools" 80 81npe_clean_tools() 82{ 83 echo "cd tools/tools/npe; make clean" | buildenv 84} 85npe_build_tools() 86{ 87 echo "cd tools/tools/npe; make" | buildenv 88} 89npe_install_tools() 90{ 91 echo "cd tools/tools/npe; make install" | buildenv 92} 93NANO_CUSTOMIZE="$NANO_CUSTOMIZE npe_clean_tools" 94NANO_CUSTOMIZE="$NANO_CUSTOMIZE npe_build_tools" 95NANO_CUSTOMIZE="$NANO_CUSTOMIZE npe_install_tools" 96 97NANO_MAKEFS="makefs -B big \ 98 -o bsize=4096,fsize=512,density=8192,optimization=space" 99export NANO_MAKEFS 100 101# NB: leave c++ enabled so devd can be built 102CONF_BUILD=" 103WITHOUT_ACCT=true 104WITHOUT_ACPI=true 105WITHOUT_APM=true 106WITHOUT_ATM=true 107WITHOUT_AUDIT=true 108WITHOUT_BIND_DNSSEC=true 109WITHOUT_BIND_ETC=true 110WITHOUT_BIND_LIBS_LWRES=true 111WITHOUT_BLUETOOTH=true 112WITHOUT_BSNMP=true 113WITHOUT_CALENDAR=true 114WITHOUT_CDDL=true 115WITHOUT_CTM=true 116WITHOUT_DICT=true 117WITHOUT_EXAMPLES=true 118WITHOUT_FLOPPY=true 119WITHOUT_FORTRAN=true 120WITHOUT_GAMES=true 121WITHOUT_GCOV=true 122WITHOUT_GPIB=true 123WITHOUT_GROFF=true 124WITHOUT_HTML=true 125WITHOUT_INET6=true 126WITHOUT_INFO=true 127WITHOUT_IPFILTER=true 128WITHOUT_KERBEROS=true 129WITHOUT_LOCALES=true 130WITHOUT_LPR=true 131WITHOUT_MAN=true 132WITHOUT_MAIL=true 133WITHOUT_MAILWRAPPER=true 134WITHOUT_NETCAT=true 135WITHOUT_NIS=true 136WITHOUT_NLS=true 137WITHOUT_NS_CACHING=true 138WITHOUT_OBJC=true 139WITHOUT_PMC=true 140WITHOUT_PORTSNAP=true 141WITHOUT_PROFILE=true 142WITHOUT_QUOTAS=true 143WITHOUT_RCMDS=true 144WITHOUT_RCS=true 145WITHOUT_RESCUE=true 146WITHOUT_SENDMAIL=true 147WITHOUT_SHAREDOCS=true 148WITHOUT_SSP=true 149WITHOUT_SYSCONS=true 150WITHOUT_TCSH=true 151WITHOUT_TFTPD=true 152WITHOUT_ZFS=true 153" 154CONF_INSTALL="$CONF_BUILD 155WITHOUT_TOOLCHAIN=true 156WITHOUT_INSTALLLIB=true 157INSTALL_NODEBUG=true 158" 159 160# NB: override to force / on s1 instead of s1a 161setup_nanobsd_etc() 162{ 163 pprint 2 "configure nanobsd /etc" 164 165 ( 166 cd ${NANO_WORLDDIR} 167 168 # create diskless marker file 169 touch etc/diskless 170 171 # Make root filesystem R/O by default 172 echo "root_rw_mount=NO" >> etc/defaults/rc.conf 173 174 # save config file for scripts 175 echo "NANO_DRIVE=${NANO_DRIVE}" > etc/nanobsd.conf 176 177 echo "/dev/${NANO_DRIVE}s1 / ufs ro 1 1" > etc/fstab 178 echo "/dev/${NANO_DRIVE}s3 /cfg ufs rw,noauto 2 2" >> etc/fstab 179 mkdir -p cfg 180 ) 181} 182 183create_arm_diskimage() 184{ 185 pprint 2 "build diskimage" 186 pprint 3 "log: ${MAKEOBJDIRPREFIX}/_.di" 187 188 ( 189 echo "NANO_MEDIASIZE: $NANO_MEDIASIZE" 190 echo "NANO_IMAGES: $NANO_IMAGES" 191 echo "NANO_SECTS: $NANO_SECTS" 192 echo "NANO_HEADS: $NANO_HEADS" 193 echo "NANO_CODESIZE: $NANO_CODESIZE" 194 echo "NANO_CONFSIZE: $NANO_CONFSIZE" 195 echo "NANO_DATASIZE: $NANO_DATASIZE" 196 197 echo $NANO_MEDIASIZE $NANO_IMAGES \ 198 $NANO_SECTS $NANO_HEADS \ 199 $NANO_CODESIZE $NANO_CONFSIZE $NANO_DATASIZE | 200 awk ' 201 { 202 printf "# %s\n", $0 203 204 # size of cylinder in sectors 205 cs = $3 * $4 206 207 # number of full cylinders on media 208 cyl = int ($1 / cs) 209 210 # output fdisk geometry spec, truncate cyls to 1023 211 if (cyl <= 1023) 212 print "g c" cyl " h" $4 " s" $3 213 else 214 print "g c" 1023 " h" $4 " s" $3 215 216 if ($7 > 0) { 217 # size of data partition in full cylinders 218 dsl = int (($7 + cs - 1) / cs) 219 } else { 220 dsl = 0; 221 } 222 223 # size of config partition in full cylinders 224 csl = int (($6 + cs - 1) / cs) 225 226 if ($5 == 0) { 227 # size of image partition(s) in full cylinders 228 isl = int ((cyl - dsl - csl) / $2) 229 } else { 230 isl = int (($5 + cs - 1) / cs) 231 } 232 233 # First image partition start at second track 234 print "p 1 165 " $3, isl * cs - $3 235 c = isl * cs; 236 237 # Second image partition (if any) also starts offset one 238 # track to keep them identical. 239 if ($2 > 1) { 240 print "p 2 165 " $3 + c, isl * cs - $3 241 c += isl * cs; 242 } 243 244 # Config partition starts at cylinder boundary. 245 print "p 3 165 " c, csl * cs 246 c += csl * cs 247 248 # Data partition (if any) starts at cylinder boundary. 249 if ($7 > 0) { 250 print "p 4 165 " c, dsl * cs 251 } else if ($7 < 0 && $1 > c) { 252 print "p 4 165 " c, $1 - c 253 } else if ($1 < c) { 254 print "Disk space overcommitted by", \ 255 c - $1, "sectors" > "/dev/stderr" 256 exit 2 257 } 258 259 # Force slice 1 to be marked active. This is necessary 260 # for booting the image from a USB device to work. 261 print "a 1" 262 } 263 ' > ${MAKEOBJDIRPREFIX}/_.fdisk 264 265 IMG=${NANO_DISKIMGDIR}/${NANO_IMGNAME} 266 BS=${NANO_SECTS}b 267 268 if [ "${NANO_MD_BACKING}" = "swap" ] ; then 269 MD=`mdconfig -a -t swap -s ${NANO_MEDIASIZE} -x ${NANO_SECTS} \ 270 -y ${NANO_HEADS}` 271 else 272 echo ""; echo "Creating md backing file ${IMG} ..." 273 _c=`expr ${NANO_MEDIASIZE} / ${NANO_SECTS}` 274 pprint 2 "dd if=/dev/zero of=${IMG} bs=${BS} count=${_c}" 275 dd if=/dev/zero of=${IMG} bs=${BS} count=${_c} 276 pprint 2 "mdconfig -a -t vnode -f ${IMG} -x ${NANO_SECTS} -y ${NANO_HEADS}" 277 MD=`mdconfig -a -t vnode -f ${IMG} -x ${NANO_SECTS} \ 278 -y ${NANO_HEADS}` 279 fi 280 281 trap "mdconfig -d -u $MD" 1 2 15 EXIT 282 283 echo ""; echo "Write partition table ..." 284 FDISK=${MAKEOBJDIRPREFIX}/_.fdisk 285 pprint 2 "fdisk -i -f ${FDISK} ${MD}" 286 fdisk -i -f ${FDISK} ${MD} 287 pprint 2 "fdisk ${MD}" 288 fdisk ${MD} 289 290 # Create first image 291 IMG1=${NANO_DISKIMGDIR}/_.disk.image1 292 echo ""; echo "Create first image ${IMG1} ..." 293 SIZE=`awk '/^p 1/ { print $5 "b" }' ${FDISK}` 294 pprint 2 "${NANO_MAKEFS} -s ${SIZE} ${IMG1} ${NANO_WORLDDIR}" 295 ${NANO_MAKEFS} -s ${SIZE} ${IMG1} ${NANO_WORLDDIR} 296 pprint 2 "dd if=${IMG1} of=/dev/${MD}s1 bs=${BS}" 297 dd if=${IMG1} of=/dev/${MD}s1 bs=${BS} 298 299 if [ $NANO_IMAGES -gt 1 -a $NANO_INIT_IMG2 -gt 0 ] ; then 300 IMG2=${NANO_DISKIMGDIR}/_.disk.image2 301 echo ""; echo "Create second image ${IMG2}..." 302 for f in ${NANO_WORLDDIR}/etc/fstab ${NANO_WORLDDIR}/conf/base/etc/fstab 303 do 304 sed -i "" "s/${NANO_DRIVE}s1/${NANO_DRIVE}s2/g" $f 305 done 306 307 SIZE=`awk '/^p 2/ { print $5 "b" }' ${FDISK}` 308 pprint 2 "${NANO_MAKEFS} -s ${SIZE} ${IMG2} ${NANO_WORLDDIR}" 309 ${NANO_MAKEFS} -s ${SIZE} ${IMG2} ${NANO_WORLDDIR} 310 pprint 2 "dd if=${IMG2} of=/dev/${MD}s2 bs=${BS}" 311 dd if=${IMG2} of=/dev/${MD}s2 bs=${BS} 312 fi 313 314 # Create Config slice 315 CFG=${NANO_DISKIMGDIR}/_.disk.cfg 316 echo ""; echo "Creating config partition ${CFG}..." 317 SIZE=`awk '/^p 3/ { print $5 "b" }' ${FDISK}` 318 # XXX: fill from where ? 319 pprint 2 "${NANO_MAKEFS} -s ${SIZE} ${CFG} ${NANO_CFGDIR}" 320 ${NANO_MAKEFS} -s ${SIZE} ${CFG} ${NANO_CFGDIR} 321 pprint 2 "dd if=${CFG} of=/dev/${MD}s3 bs=${BS}" 322 dd if=${CFG} of=/dev/${MD}s3 bs=${BS} 323 pprint 2 "rm ${CFG}" 324 rm ${CFG}; CFG= # NB: disable printing below 325 326 # Create Data slice, if any. 327 if [ $NANO_DATASIZE -gt 0 ] ; then 328 DATA=${NANO_DISKIMGDIR}/_.disk.data 329 echo ""; echo "Creating data partition ${DATA}..." 330 SIZE=`awk '/^p 4/ { print $5 "b" }' ${FDISK}` 331 # XXX: fill from where ? 332 pprint 2 "${NANO_MAKEFS} -s ${SIZE} ${DATA} /var/empty" 333 ${NANO_MAKEFS} -s ${SIZE} ${DATA} /var/empty 334 pprint 2 "dd if=${DATA} of=/dev/${MD}s4 bs=${BS}" 335 dd if=${DATA} of=/dev/${MD}s4 bs=${BS} 336 pprint 2 "rm ${DATA}" 337 rm ${DATA}; DATA= # NB: disable printing below 338 fi 339 340 if [ "${NANO_MD_BACKING}" = "swap" ] ; then 341 echo "Writing out _.disk.full..." 342 dd if=/dev/${MD} of=${IMG} bs=${BS} 343 fi 344 345 echo "" 346 echo "Completed images in:" 347 echo "" 348 echo "Full disk: ${IMG}" 349 echo "Primary partition: ${IMG1}" 350 test "${IMG2}" && echo "2ndary partition: ${IMG2}" 351 test "${CFG}" && echo "/cfg partition: ${CFG}" 352 test "${DATA}" && echo "/data partition: ${DATA}" 353 echo "" 354 echo "Use dd if=<file> of=/dev/<somewhere> bs=${BS} to transfer an" 355 echo "image to bootable media /dev/<somewhere>." 356 ) > ${MAKEOBJDIRPREFIX}/_.di 2>&1 357} 358