1# $MirOS: src/distrib/baselive/Makefile,v 1.66 2014/01/04 20:24:56 tg Exp $ 2 3.include <bsd.own.mk> 4 5# common variables 6REALOBJDIR!= realpath ${.OBJDIR} 7TOPDIR?= ${.CURDIR}/.. 8 9DUALIVE?= No 10BATCH?= No 11GRML?= No 12 13.if ${GRML:L} != "no" 14BATCH= No 15.endif 16 17.if ${DUALIVE:L} == "no" 18STUFFDIR= ${BSDRELDIR}/rel 19.else 20STUFFDIR= ${DUALIVE}/i386 21.endif 22 23.MAIN: all 24 25KERNEL_PREP= print 'rootdev 6 0\nquit' | config -ef bsd.tmp 26.if exists(${REALOBJDIR}/../../sys/arch/i386/stand/liveboot/.) 27BOOT= ${REALOBJDIR}/../../sys/arch/i386/stand/liveboot/boot 28DO_LIVEBOOT= #defined 29.endif 30CDROM_OPTS+= bootimage=i386\;b_torito.ldr 31CDROM_OPTS+= no-emul-boot 32 33CHAINSECTOR?= 24 34 35# temporary mounts 36WRKDIR= ${REALOBJDIR}/tmpdata 37TMPMOUNT= ${REALOBJDIR}/tmpmnt 38VND?= svnd0 39VND_DEV= /dev/${VND}a 40VND_RDEV= /dev/r${VND}a 41VND_CRDEV= /dev/r${VND}c 42RAWLABEL?= -r 43 44RDSETROOT?= ${REALOBJDIR}/../common/elfrdsetroot 45 46IMAGE?= mrdev${OSrev}.fs 47IMAGESIZE?= 8192 48IMAGEOPTS?= minfree=0,optimization=space,bsize=4096,fsize=512,density=2048 49IMAGETYPE?= ipldisc 50IMAGE_PREP?= @: 51KERNEL_PREP?= @: 52 53BOOT?= ${WRKDIR}/v${OSrev}/i386/boot 54 55CDROM?= livecd${OSrev}.iso 56CDROM_OPTS+= applicationid=NetBSD_makefs 57CDROM_OPTS+= hide-rr-moved 58.if ${DUALIVE:L} != "no" 59CDROM_OPTS+= label=MirOS~v${OSrev}~BSD~DuaLive~CD 60.else 61CDROM_OPTS+= label=MirOS~v${OSrev}~BSD/i386~Live~CD 62.endif 63CDROM_OPTS+= no-trailing-padding 64CDROM_OPTS+= preparer=MirBSD_and_its_contributors 65CDROM_OPTS+= publisher=Copyright_\<c\>_2002=2014_The_MirOS_Project 66CDROM_OPTS+= rockridge 67.if ${DUALIVE:L} != "no" 68. if ${GRML:L} != "no" 69CDROM_OPTS+= volumeid=$$(uname -sl | tr -- '- \#' :_):Triforce 70. else 71CDROM_OPTS+= volumeid=$$(uname -sl | tr -- '- \#' :_):DuaLive 72. endif 73.else 74CDROM_OPTS+= volumeid=$$(uname -slm | tr -- '- \#' :_):BaseLive 75.endif 76#CDROM_OPTS+= v=1 77 78.if ${DUALIVE:L} != "no" 79LIVEBOOT_ARGS+= DUALIVE=Yes 80.endif 81.if ${GRML:L} != "no" 82LIVEBOOT_ARGS+= GRML=Yes 83.endif 84 85BOOTCFG_SRCS= ${TOPDIR}/common/boot.cfg.i386 86.if ${GRML:L} != "no" 87BOOTCFG_SRCS+= ${.CURDIR}/boot.cfg.grml 88.endif 89.if ${DUALIVE:L} != "no" 90BOOTCFG_SRCS+= ${.CURDIR}/boot.cfg.dual 91.endif 92BOOTCFG_SRCS+= ${.CURDIR}/boot.cfg.tail 93 94all install: 95 96do-cdrom: unpack addcontrib prepimg nukefiles makeimg 97 98it: do-cdrom 99 100unpack: 101 test ! -e ${TMPMOUNT} || (cd ${.CURDIR}; ${MAKE} unconfig) 102 ${SUDO} rm -rf ${WRKDIR} 103 mkdir -p ${WRKDIR}/v${OSrev}/i386 104 # ensure they are releatively upfront on the CD 105.if ${DUALIVE:L} != "no" 106 touch ${WRKDIR}/{b_i386,b_sparc}.ldr 107.else 108 touch ${WRKDIR}/b_i386.ldr 109.endif 110.if ${GRML:L} != "no" 111 mkdir -p ${WRKDIR}/boot/grml 112.endif 113 # needed for the installer of MirOS-current snapshots 114 ln -s v${OSrev} ${WRKDIR}/current 115 # unpack the dist sets 116.for _i in base dev etc gnu xbase xetc xfont xserv 117 cd ${WRKDIR} && ${SUDO} tar xzphf ${STUFFDIR}/${_i}${OSrev}.ngz 118.endfor 119 cd ${STUFFDIR} && pax -rw . ${WRKDIR}/v${OSrev}/i386/ 120.if ${DUALIVE:L} != "no" 121 cd ${DUALIVE} && pax -rw sparc ${WRKDIR}/v${OSrev}/ 122.endif 123 ${SUDO} chown -R 0:0 ${WRKDIR}/v${OSrev} 124 cp ${TOPDIR}/common/{00-README,01-3RDPTY} ${WRKDIR}/ 125 cat ${BOOTCFG_SRCS} | sudo dd of=${WRKDIR}/boot.cfg 126 ${SUDO} cp ${.CURDIR}/i386/boot.* ${WRKDIR}/ 127.if ${GRML:L} == "no" 128 ${SUDO} rm -f ${WRKDIR}/boot.9 129.endif 130 ${SUDO} mkdir -p ${WRKDIR}/boot/grub 131 ${SUDO} cp ${.CURDIR}/i386/loopback.* ${WRKDIR}/boot/grub/ 132 133${IMAGE}: 134 test ! -e ${TMPMOUNT} || (cd ${.CURDIR}; ${MAKE} unconfig) 135 ${SUDO} mkdir -p ${TMPMOUNT} 136 ${SUDO} chown 0:0 ${TMPMOUNT} 137 ${SUDO} cp ${WRKDIR}/dev/MAKEDEV ${TMPMOUNT}/ 138 cd ${TMPMOUNT} && ${SUDO} ${MKSH} MAKEDEV all 139 -${SUDO} dd if=/dev/arandom bs=512 count=4 of=${TMPMOUNT}/.rs 140 ${SUDO} makefs -s ${IMAGESIZE}b -o ${IMAGEOPTS} ${IMAGE} ${TMPMOUNT} 141 ${SUDO} dd if=/dev/arandom bs=512 count=1 of=$@ conv=notrunc 142 sync 143 ${SUDO} vnconfig -v -c ${VND} ${IMAGE} 144 ${SUDO} disklabel -w ${RAWLABEL} ${VND} ${IMAGETYPE} 145 ${SUDO} mount -r ${VND_DEV} ${TMPMOUNT} 146 ${IMAGE_PREP} 147 @echo "" 148 @df -i ${TMPMOUNT} 149 @echo "" 150 ${SUDO} umount ${TMPMOUNT} 151 ${SUDO} fsck -fy ${VND_RDEV} 152 ${SUDO} vnconfig -v -u ${VND} 153 ${SUDO} rm -rf ${TMPMOUNT} 154 155addcontrib: 156 @if [[ ! -s ${BSDSRCDIR}/contrib/code/jupp/jupprc ]]; then \ 157 print -u2 Aborted: your checkout is not complete; \ 158 exit 1; \ 159 fi 160 @if [[ ! -s ${BSDSRCDIR}/contrib/code/Snippets/tinyirc.c ]]; then \ 161 print -u2 Aborted: your checkout is not complete; \ 162 exit 1; \ 163 fi 164 mkdir -p tempdir 165 cd tempdir; CC=${CC:Q} CFLAGS=${CFLAGS:Q}\ ${COPTS:Q}\ -Ddefutf8 \ 166 ${MKSH} ${BSDSRCDIR}/contrib/code/jupp/configure --disable-termidx \ 167 --sysconfdir=/etc --disable-dependency-tracking --prefix=/usr && \ 168 make && ${SUDO} make install DESTDIR=${WRKDIR:Q} 169 cd tempdir; cp ${BSDSRCDIR}/contrib/code/Snippets/tinyirc.c . && \ 170 make -f tinyirc.c && ${SUDO} make -f tinyirc.c install \ 171 DESTDIR=${WRKDIR:Q} BINDIR=/usr/bin 172 ${SUDO} install -o 0 -g 0 -m 644 \ 173 ${BSDSRCDIR}/contrib/samples/dot.Xmodmap \ 174 ${WRKDIR}/etc/skel/.Xmodmap 175 176prepimg: 177 cd ${WRKDIR} && MACHINE=i386 \ 178 ${SUDO} ${MKSH} ${.CURDIR}/munge_it.sh 179 180bsd.gz: bsd ${IMAGE} 181 -rm -f bsd.tmp 182 gzip -d <bsd >bsd.tmp 183 ${KERNEL_PREP} 184 ${RDSETROOT} bsd.tmp <${IMAGE} 185 gzip -n9 <bsd.tmp >$@ 186 187.if ${DUALIVE:L} != "no" 188bsd: ${DUALIVE}/i386/bsd 189.else 190bsd: ${BSDOBJDIR}/distrib/generic/bsd 191.endif 192 cp -f $> $@ 193 194nukefiles: 195 cd ${WRKDIR} && ${SUDO} rm -rf etc/X11 usr/{local/lib/X11,releng} \ 196 usr/{,X11R6/}{doc,info,man} usr/X11R6/lib/X11/doc 197.if ${DEBUGLIBS:L} == "yes" 198 -for name in ${WRKDIR}/usr/{,X11R6/}lib/*@(.so.*|.a); do \ 199 print -n stripping $${name##*/} ...; \ 200 if [[ $$name = *.a ]]; then \ 201 for i in $${name%a}so*; do \ 202 if [[ -e $$i ]]; then \ 203 print deleted for $${i##*/}; \ 204 ${SUDO} rm -f $$name; \ 205 else \ 206 ${SUDO} strip --strip-unneeded \ 207 $$name && print; \ 208 fi; \ 209 break; \ 210 done; \ 211 else \ 212 ${SUDO} strip --strip-unneeded $$name && print; \ 213 fi; \ 214 done 215.endif 216 217makeimg: cdrom-prepare cdrom-generate 218 219cdrom-prepare: bsd.gz 220 ${SUDO} chown $$(id -u) ${WRKDIR} 221 chmod 755 ${WRKDIR} 222 ${SUDO} dd if=bsd.gz obs=2048 conv=osync of=${WRKDIR}/bsd 223.if ${DUALIVE:L} != "no" 224 ${SUDO} cp ${DUALIVE}/sparc/boot ${WRKDIR}/b_sparc.ldr 225 # fix path to default kernel file in second-stage boot loader 226 set -A dump -- $$(dd if=${WRKDIR}/b_sparc.ldr bs=4 count=64 | \ 227 hexdump -ve '1/1 "%02X"' | sed 's/\(........\)/ \1/g'); i=0; \ 228 while (( i < 64 )); do [[ $${dump[i++]} = 2035560? ]] && break; done; \ 229 if [[ $$i = 64 || $${dump[i-1]} != 20355601 ]]; then \ 230 print -u2 found invalid or no patch field version; exit 1; \ 231 fi; ofs=$$((#0x$${dump[i+1]})); \ 232 print -n v${OSrev}/sparc/bsd.rd\\0 | \ 233 ${SUDO} dd of=${WRKDIR}/b_sparc.ldr bs=1 seek=$$ofs conv=notrunc 234.endif 235.ifdef DO_LIVEBOOT 236 cd ${.CURDIR}/../../sys/arch/i386/stand/liveboot; \ 237 ${MAKE} ${LIVEBOOT_ARGS} cleandir && \ 238 ${MAKE} ${LIVEBOOT_ARGS} depend && \ 239 exec ${MAKE} ${LIVEBOOT_ARGS} 240.endif 241 cd ${WRKDIR}; \ 242 ${SUDO} cp ${BOOT} b_i386.ldr; \ 243 ${SUDO} rm -f CKSUM*; \ 244 if [[ -e v${OSrev}/i386/CKSUM ]]; then \ 245 cat v${OSrev}/i386/CKSUM >CKSUM~; \ 246 else \ 247 gzip -dc v${OSrev}/i386/CKSUM.gz >CKSUM~; \ 248 fi; \ 249 while IFS= read -r line; do \ 250 if [[ $$line = *" = "+([0-9a-fA-F]) ]]; then \ 251 two=$${line#+([A-Z0-9]) \(}; \ 252 else \ 253 two=$${line#+([0-9]) +([0-9]) }; \ 254 fi; \ 255 one=$${line%%$$two}; \ 256 print -r "$${one}v${OSrev}/i386/$$two"; \ 257 done <CKSUM~ >>CKSUM 258.if ${DUALIVE:L} != "no" 259 cd ${WRKDIR}; \ 260 if [[ -e v${OSrev}/sparc/CKSUM ]]; then \ 261 cat v${OSrev}/sparc/CKSUM >CKSUM~; \ 262 else \ 263 gzip -dc v${OSrev}/sparc/CKSUM.gz >CKSUM~; \ 264 fi; \ 265 while IFS= read -r line; do \ 266 if [[ $$line = *" = "+([0-9a-fA-F]) ]]; then \ 267 two=$${line#+([A-Z0-9]) \(}; \ 268 else \ 269 two=$${line#+([0-9]) +([0-9]) }; \ 270 fi; \ 271 one=$${line%%$$two}; \ 272 print -r "$${one}v${OSrev}/sparc/$$two"; \ 273 done <CKSUM~ >>CKSUM 274.endif 275 cd ${WRKDIR}; \ 276 cksum -a cksum -a rmd160 -a tiger 0* bsd b_* gzs* stand/* >>CKSUM 277 -${SUDO} rm -f ${CDROM}* ${WRKDIR}/CKSUM~ 278 279cdrom-generate: 280.if ${BATCH:L} != "yes" 281 @print WRKDIR is \"${WRKDIR:Q}\" 282 @print Build coordination: press RETURN to continue...; read dummy 283.endif 284 ${SUDO} chown $$(id -u) ${WRKDIR} 285 chmod 755 ${WRKDIR} 286 cd ${WRKDIR}; \ 287 [[ -e CKSUM && ! -e CKSUM.gz ]] || ${SUDO} gzip -d CKSUM; \ 288 sort -k3 |& exec 3>&p; exec 4<&p; \ 289 sort |& exec 5>&p; exec 6<&p; \ 290 while IFS= read -r line; do \ 291 if [[ $$line = *" = "+([0-9a-fA-F]) ]]; then \ 292 print -ru5 "$$line"; \ 293 else \ 294 print -ru3 "$$line"; \ 295 fi; \ 296 done <CKSUM; ${SUDO} rm -f CKSUM*; \ 297 exec 3>&-; exec 5>&-; \ 298 (cat <&4; cat <&6) | gzip -n9 >CKSUM.gz; \ 299 dd if=/dev/zero bs=256 count=5 >>CKSUM.gz; \ 300 flst=; for f in 0?-* NONFREE.TXT CKSUM.gz b_* gzsig* ?oot* ?sd* \ 301 boot/grub/*; do [[ -e $$f ]] && flst="$$flst $$f"; done; \ 302 ${SUDO} chown 0:0 . $$flst; \ 303 for f in $$flst .; do if [[ -d $$f ]]; then \ 304 ${SUDO} chmod 555 $$f; else ${SUDO} chmod 444 $$f; fi; \ 305 done; \ 306 ${SUDO} ${MKSH} ${.CURDIR}/mklocatedb.sh ${REALOBJDIR}/${IMAGE} 307 (gzip -d <${WRKDIR}/CKSUM.gz | fgrep -v stand/locate.database; \ 308 cd ${WRKDIR}; cksum -a cksum -a rmd160 -a tiger \ 309 stand/locate.database) >tempdir/CKSUM 310 cd ${WRKDIR}; \ 311 sort -k3 |& exec 3>&p; exec 4<&p; \ 312 sort |& exec 5>&p; exec 6<&p; \ 313 while IFS= read -r line; do \ 314 if [[ $$line = *" = "+([0-9a-fA-F]) ]]; then \ 315 print -ru5 "$$line"; \ 316 else \ 317 print -ru3 "$$line"; \ 318 fi; \ 319 done <${REALOBJDIR}/tempdir/CKSUM; \ 320 exec 3>&-; exec 5>&-; \ 321 ( (cat <&4; cat <&6) | gzip -n9; \ 322 dd if=/dev/zero bs=256 count=5 2>&- ) | \ 323 ${SUDO} dd of=CKSUM.gz 324 dd if=/dev/arandom bs=2048 count=1 of=b_torito.ldr 325 ${SUDO} makefs -t cd9660 -o "$$(print -r -- ${CDROM_OPTS} | \ 326 tr ' ~' ', ')" ${CDROM} ${WRKDIR} 327 ${SUDO} chown $$(id -u) ${CDROM} ${WRKDIR} 328 chmod 755 ${WRKDIR} 329 # pad the ISO with ]0;256K] NUL bytes, ie. for 330 # a geometry of 16 heads, 32 sectors per track 331 dd if=/dev/zero count=1 bs=$$((# (512 * 32 * 16) - \ 332 ($$(stat -f %z ${CDROM}) % (512 * 32 * 16)) )) 2>&- >>${CDROM} 333 getextent_cd9660 -f ${CDROM} b_i386.ldr | \ 334 ${MKSH} ${WRKDIR}/v${OSrev}/i386/bootxx.sh -B 11 | \ 335 dd of=${CDROM} conv=notrunc bs=2048 seek=$$(getextent_cd9660 \ 336 -f ${CDROM} -b '$$BootImage$$') 2>/dev/null 337.if ${DUALIVE:L} == "no" 338 getextent_cd9660 -f ${CDROM} b_i386.ldr | \ 339 ${MKSH} ${WRKDIR}/v${OSrev}/i386/bootxx.sh \ 340 -g $$((#$$(stat -f %z ${CDROM}) / (512 * 32 * 16))):16:32 \ 341 -A -M 4:0x96 -S 2 | \ 342 dd of=${CDROM} conv=notrunc bs=512 2>/dev/null 343.else 344 getextent_cd9660 -f ${CDROM} b_i386.ldr | \ 345 ${MKSH} ${WRKDIR}/v${OSrev}/i386/bootxx.sh -A -S 2 | \ 346 dd of=${CDROM} conv=notrunc bs=512 seek=${CHAINSECTOR} 2>/dev/null 347 getextent_cd9660 -f ${CDROM} b_sparc.ldr | \ 348 ${MKSH} ${WRKDIR}/v${OSrev}/sparc/bootxx.sh \ 349 -g $$((#$$(stat -f %z ${CDROM}) / (512 * 32 * 16))):16:32 \ 350 -0 ${CHAINSECTOR} -S 2 | \ 351 dd of=${CDROM} conv=notrunc 2>/dev/null 352.endif 353 354clean cleandir cleannobsd: cleanworkdir unconfig 355 -rm -f ${CDROM}* bsd{,.gz,.tmp} ${IMAGE} 356 -rm -rf tempdir 357 358cleanworkdir: 359 -test ! -e ${WRKDIR} || ${SUDO} rm -rf ${WRKDIR} 360 361tstmnt: 362 ${SUDO} mkdir -p ${TMPMOUNT} 363 ${SUDO} vnconfig svnd0 ${CDROM} 364 ${SUDO} mount_cd9660 /dev/svnd0a ${TMPMOUNT} 365 366tstumnt: unconfig 367 368unconfig: 369 -${SUDO} umount -f ${VND_DEV} 370 -${SUDO} vnconfig -u ${VND} 371 -${SUDO} rm -rf ${TMPMOUNT} 372 373.include <bsd.obj.mk> 374.include <bsd.subdir.mk> 375