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