Module Name:    src
Committed By:   nonaka
Date:           Tue Jan 24 11:16:50 UTC 2017

Modified Files:
        src/distrib/amd64: Makefile
Added Files:
        src/distrib/amd64/uefi-installimage: Makefile Makefile.bootimage
            Makefile.installimage boot.cfg.in etc.rc etc.ttys install.sh
            spec.inst

Log Message:
make amd64 EFI install image

XXX merge to installimage?


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/distrib/amd64/Makefile
cvs rdiff -u -r0 -r1.1 src/distrib/amd64/uefi-installimage/Makefile \
    src/distrib/amd64/uefi-installimage/Makefile.bootimage \
    src/distrib/amd64/uefi-installimage/Makefile.installimage \
    src/distrib/amd64/uefi-installimage/boot.cfg.in \
    src/distrib/amd64/uefi-installimage/etc.rc \
    src/distrib/amd64/uefi-installimage/etc.ttys \
    src/distrib/amd64/uefi-installimage/install.sh \
    src/distrib/amd64/uefi-installimage/spec.inst

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/amd64/Makefile
diff -u src/distrib/amd64/Makefile:1.11 src/distrib/amd64/Makefile:1.12
--- src/distrib/amd64/Makefile:1.11	Thu Jun 30 12:56:27 2016
+++ src/distrib/amd64/Makefile	Tue Jan 24 11:16:50 2017
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.11 2016/06/30 12:56:27 pgoyette Exp $
+#	$NetBSD: Makefile,v 1.12 2017/01/24 11:16:50 nonaka Exp $
 
 .include <bsd.own.mk>
 
@@ -16,6 +16,7 @@ SUBDIR+=	.WAIT
 SUBDIR+=	cdroms
 SUBDIR+=	liveimage
 SUBDIR+=	installimage
+SUBDIR+=	uefi-installimage
 TARGETS+=	release 
 
 iso_image:
@@ -26,5 +27,6 @@ live_image:
 
 install_image:
 	${MAKEDIRTARGET} installimage install_image
+	${MAKEDIRTARGET} uefi-installimage install_image
 
 .include <bsd.subdir.mk>

Added files:

Index: src/distrib/amd64/uefi-installimage/Makefile
diff -u /dev/null src/distrib/amd64/uefi-installimage/Makefile:1.1
--- /dev/null	Tue Jan 24 11:16:50 2017
+++ src/distrib/amd64/uefi-installimage/Makefile	Tue Jan 24 11:16:50 2017
@@ -0,0 +1,44 @@
+#	$NetBSD: Makefile,v 1.1 2017/01/24 11:16:50 nonaka Exp $
+
+.include <bsd.own.mk>
+
+INSTIMGBASE=	NetBSD-${DISTRIBVER}-amd64-uefi-install	# gives ${IMGBASE}.img
+
+BOOTDISK=	dk1			# unused (use GUID)
+INSTIMAGEMB?=	1280			# for all installation binaries
+
+PRIMARY_BOOT=		bootxx_ffsv1
+SECONDARY_BOOT=		boot
+SECONDARY_BOOT_ARG=	# unnecessary
+EFIBOOT=		${WORKDIR}/usr/mdec/bootx64.efi
+EFIBOOT+=		${WORKDIR}/usr/mdec/bootia32.efi
+#EFIBOOT=		${.OBJDIR}/../../../sys/arch/i386/stand/efiboot/bootx64/bootx64.efi
+#EFIBOOT+=		${.OBJDIR}/../../../sys/arch/i386/stand/efiboot/bootia32/bootia32.efi
+
+USE_MBR=		yes
+USE_GPT=		yes
+
+CLEANFILES+=	boot.cfg
+
+prepare_md_post:
+	${TOOL_SED}							\
+	    -e "s/@@MACHINE@@/${MACHINE}/"				\
+	    -e "s/@@VERSION@@/${DISTRIBVER}/"				\
+	    < ${.CURDIR}/boot.cfg.in > boot.cfg
+
+DISTRIBDIR!= cd ${.CURDIR}/../.. ; pwd
+SYSINSTDIR!= cd ${.CURDIR}/../../../usr.sbin/sysinst/arch/${MACHINE} && ${PRINTOBJDIR}
+
+SPEC_EXTRA=		${.CURDIR}/spec.inst
+IMGFILE_EXTRA=								\
+	${.CURDIR}/etc.ttys		etc/ttys			\
+	${.CURDIR}/etc.rc		etc/rc				\
+	${.CURDIR}/install.sh		.				\
+	${.OBJDIR}/boot.cfg		.				\
+	${SYSINSTDIR}/sysinstmsgs.de	.				\
+	${SYSINSTDIR}/sysinstmsgs.es	.				\
+	${SYSINSTDIR}/sysinstmsgs.fr	.				\
+	${SYSINSTDIR}/sysinstmsgs.pl	.				\
+	${SYSINSTDIR}/sysinst		.
+
+.include "${.CURDIR}/Makefile.installimage"
Index: src/distrib/amd64/uefi-installimage/Makefile.bootimage
diff -u /dev/null src/distrib/amd64/uefi-installimage/Makefile.bootimage:1.1
--- /dev/null	Tue Jan 24 11:16:50 2017
+++ src/distrib/amd64/uefi-installimage/Makefile.bootimage	Tue Jan 24 11:16:50 2017
@@ -0,0 +1,499 @@
+#	$NetBSD: Makefile.bootimage,v 1.1 2017/01/24 11:16:50 nonaka Exp $
+#
+# Copyright (c) 2009, 2010, 2011 Izumi Tsutsui.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#
+# Makefile to create a bootable FS image for USB flash or emulators
+#
+
+#
+# Required variables:
+#	RELEASEDIR
+#		Should be defined in nbmake-${MACHINE}
+#	IMGBASE
+#		Basename of the image
+#
+# Optional variables:
+#	BOOTDISK
+#		device name of target bootable disk specified in /etc/fstab
+#		(default: sd0)
+#	USE_MBR
+#		set yes if target disk image requires MBR partition
+#		(default: no)
+#	USE_GPT
+#		set yes if target disk image requires GPT partition
+#		(default: no)
+#	MBR_BOOTCODE
+#		optional MBR bootcode which should be installed by fdisk(8)
+#		(default: empty)
+#		- specified MBR_BOOTCODE must exist in ${DESTDIR}/usr/mdec
+#		- if MBR_BOOTCODE is not specified,
+#		  MBR_DEFAULT_BOOTCODE (default: mbr) will be used
+#		  if the target ${MACHINE} has the one in /usr/mdec
+#	USE_SUNLABEL
+#		set yes if target disk image requires Sun's label
+#		(default: no)
+#	INSTALLBOOT_AFTER_DISKLABEL (untested)
+#		set yes if the target ${MACHINE} requires disklabel
+#		to run installboot(8), like hp300
+#		(default: empty)
+#	IMAGEMB
+#		target image size in MB
+#		(default: 2048)
+#	SWAPMB
+#		swap size in target image in MB
+#		(default: 128)
+#	EFIMB
+#		EFI partition size in target image in MB
+#		(default: 128)
+#	KERN_SET
+#		kernel set name which should be extracted into image
+#		(default: kern-GENERIC)
+#	SETS
+#		binary sets that should be extracted into image
+#		(default: modules base etc comp games man misc tests text
+#			  xbase xcomp xetc xfont xserver)
+#	SETS_DIR
+#		directory path where binary sets are stored
+#		(default: ${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/sets)
+#	IMGFILE_EXTRA
+#		list of additional files to be copied into images,
+#		containing one or more tuples of the form:
+#			FILE	TARGETPATH
+#		for installation image etc.
+#		(default: empty)
+#	IMGDIR_EXTRA
+#		list of additional directories to be copied into images,
+#		containing one or more tuples of the form:
+#			DIR	TARGETPATH
+#		for installation image etc.
+#		(default: empty)
+#		XXX: currently permissions in IMGDIR_EXTRA are not handled
+#	IMGDIR_EXCLUDE
+#		pax(1) options to exclude files which should not copied
+#		into TARGETPATH in IMGDIR_EXTRA
+#		(default: empty)
+#	FSTAB_IN
+#		template file of /etc/fstab
+#		(default: ${DISTRIBDIR}/common/bootimage/fstab.in)
+#	SPEC_IN
+#		default files of spec file for makefs(8)
+#		(default: ${DISTRIBDIR}/common/bootimage/spec.in)
+#	SPEC_EXTRA
+#		additional files of spec file for makefs(8)
+#		(default: empty)
+#	IMGMAKEFSOPTIONS
+#		options passed to makefs(8) to create root file system
+#		(default: -o bsize=16384,fsize=2048,density=8192)
+#	INSTALLBOOTOPTIONS
+#		options passed to installboot(8), e.g., -o console=com0
+#		(default: empty)
+#	PRIMARY_BOOT
+#		primary boot loader that should be installed into
+#		the target image via installboot(8)
+#		(default: empty)
+#	SECONDARY_BOOT
+#		secondary bootloader that should be put into the target image
+#		(default: empty)
+#	SECONDARY_BOOT_ARG
+#		extra arguments that should be passed to installboot(8)
+#		to specify the secondary bootloader
+#		(default: empty)
+#	DISKPROTO_IN
+#		template file of disklabel -R
+#		(default: ${DISTRIBDIR}/common/bootimage/diskproto.in
+#		       or ${DISTRIBDIR}/common/bootimage/diskproto.mbr.in)
+#	OMIT_SWAPIMG
+#		no need to put swap partition into image (for USB stick)
+#		(default: no)
+#	EFIBOOT
+#		EFI bootloader
+#		(default: empty)
+#
+
+.include <bsd.own.mk> 		#
+.include <bsd.endian.mk>	# for TARGET_ENDIANNESS
+
+.include "${NETBSDSRCDIR}/distrib/common/Makefile.distrib"
+
+.if ${MKREPRO:Uno} == "yes"
+TIMESTAMP=-T ${NETBSDSRCDIR}/sys/sys/param.h
+.endif
+
+.if empty(IMGBASE)
+.BEGIN:
+	@echo "Error: IMGBASE is not set"
+	@false
+.endif
+
+# should be defined elsewhere? 
+CAT?=		cat
+CHMOD?=		chmod
+CP?=		cp
+DD?=		dd
+MKDIR?=		mkdir -p
+RM?=		rm
+
+#
+# common definitions for image
+#
+BOOTDISK?=	sd0
+USE_MBR?=	no
+USE_GPT?=	no
+USE_SUNLABEL?=	no
+INSTALLBOOT_AFTER_DISKLABEL?=	no
+
+#
+# size parameters for image
+#
+IMAGEMB?=	2048		# 2048MB
+SWAPMB?=	128		# 128MB
+EFIMB?=		128		# 128MB
+
+# XXX: SWAPMB could be zero and expr(1) returns exit status 1 in that case
+IMAGESECTORS!=	expr ${IMAGEMB} \* 1024 \* 1024 / 512
+SWAPSECTORS!=	expr ${SWAPMB} \* 1024 \* 1024 / 512 || true
+EFISECTORS!=	expr ${EFIMB} \* 1024 \* 1024 / 512 || true
+
+.if ${USE_MBR} == "no" && ${USE_GPT} == "no"
+LABELSECTORS?=	0
+.else
+#LABELSECTORS?=	63	# historical
+#LABELSECTORS?=	32	# 16KB aligned
+LABELSECTORS?=	2048	# 1MB aligned for modern flash devices
+.endif
+
+FSSECTORS!=	expr ${IMAGESECTORS} - ${SWAPSECTORS} - ${LABELSECTORS}
+FSSIZE!=	expr ${FSSECTORS} \* 512
+
+# parameters for disklabel and MBR
+HEADS=		64
+SECTORS=	32
+CYLINDERS!=	expr ${IMAGESECTORS} / \( ${HEADS} \* ${SECTORS} \)
+SECPERCYLINDERS!= expr ${HEADS} \* ${SECTORS}
+MBRHEADS=	255
+MBRSECTORS=	63
+MBRCYLINDERS!=	expr ${IMAGESECTORS} / \( ${MBRHEADS} \* ${MBRSECTORS} \)
+MBRNETBSD=	169
+
+BSDPARTSECTORS!= expr ${IMAGESECTORS} - ${LABELSECTORS}
+FSOFFSET=	${LABELSECTORS}
+SWAPOFFSET!=	expr ${LABELSECTORS} + ${FSSECTORS}
+
+# parameters for sunlabel
+FSCYLINDERS!=	expr ${FSSECTORS} / \( ${HEADS} \* ${SECTORS} \)
+SWAPCYLINDERS!=	expr ${SWAPSECTORS} / \( ${HEADS} \* ${SECTORS} \) || true
+
+.if ${USE_GPT} != "no"
+# 2048 for Secondary GPT header and entries
+FSSECTORS!=	expr ${IMAGESECTORS} - ${SWAPSECTORS} - ${LABELSECTORS} \
+		    - ${EFISECTORS} - 2048
+FSSIZE!=	expr ${FSSECTORS} \* 512
+
+BSDPARTSECTORS!= expr ${IMAGESECTORS} - ${LABELSECTORS} - ${EFISECTORS} - 2048
+FSOFFSET!=	expr ${LABELSECTORS} + ${EFISECTORS}
+SWAPOFFSET!=	expr ${LABELSECTORS} + ${FSSECTORS} + ${EFISECTORS}
+
+BOOTDISK_UUID=`${TOOL_GPT} ${WORKMBR} show -i 2 | awk '/^GUID/ {print $$2}'`
+SWAPDISK_UUID=`${TOOL_GPT} ${WORKMBR} show -i 3 | awk '/^GUID/ {print $$2}'`
+.endif
+
+#
+# definitions to create root fs
+#
+SETS_DEFAULT=	modules base etc comp games man misc tests text
+.if ${MKX11} != "no"
+SETS_DEFAULT+=	xbase xcomp xetc xfont xserver
+.endif
+
+KERN_SET?=	kern-GENERIC
+SETS?=		${SETS_DEFAULT}
+IMG_SETS=	${KERN_SET} ${SETS}
+SETS_DIR?=	${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/sets
+
+FSTAB_IN?=	${DISTRIBDIR}/common/bootimage/fstab.in
+SPEC_IN?=	${DISTRIBDIR}/common/bootimage/spec.in
+
+IMGMAKEFSOPTIONS?=	-o bsize=16384,fsize=2048,density=8192
+
+WORKDIR?=       work
+WORKSPEC?=      work.spec
+WORKFSTAB?=	work.fstab
+WORKRCCONF?=	work.rc.conf
+WORKFS?=        work.rootfs
+TARGETFS?=      imgroot.fs
+
+CLEANFILES+=	${WORKSPEC} ${WORKFSTAB} ${WORKRCCONF} ${WORKFS}
+CLEANFILES+=	${TARGETFS}
+
+#
+# create root file system for the image
+#
+${TARGETFS}: prepare_md_post pre-targetfs
+	@if [ ! -d ${RELEASEDIR}/${RELEASEMACHINEDIR} ]; then 		\
+		echo "Missing ${RELEASEDIR}/${RELEASEMACHINEDIR}, aborting"; \
+		false; 							\
+	fi;
+	@${MKDIR} ${WORKDIR}
+.for set in ${IMG_SETS}
+	@if [ ! -f ${SETS_DIR}/${set}.tgz ]; then 			\
+		echo "Missing ${SETS_DIR}/${set}.tgz, aborting";	\
+		false; 							\
+	fi
+	@echo Extracting ${set}.tgz ...
+	@(cd ${WORKDIR}; ${TOOL_PAX} -rnz -f ${SETS_DIR}/${set}.tgz .)
+.endfor
+.if defined(SECONDARY_BOOT)
+	@echo Copying secondary boot...
+	${CP} -f ${WORKDIR}/usr/mdec/${SECONDARY_BOOT} ${WORKDIR}
+.endif
+	@echo Preparing /etc/fstab ...
+.if ${USE_GPT} != "no"
+.if ${OMIT_SWAPIMG} == "no"
+	${TOOL_SED}							\
+	    -e "s/\/dev\/@@BOOTDISK@@a/NAME=${BOOTDISK_UUID}/"		\
+	    -e "s/\/dev\/@@BOOTDISK@@b/NAME=${SWAPDISK_UUID}/"		\
+	    < ${FSTAB_IN} > ${WORKFSTAB}
+.else
+	${TOOL_SED}							\
+	    -e "s/\/dev\/@@BOOTDISK@@a/NAME=${BOOTDISK_UUID}/"		\
+	    -e "/@@BOOTDISK@@b/d"					\
+	    < ${FSTAB_IN} > ${WORKFSTAB}
+.endif
+.else	# USE_GPT == "no"
+.if ${OMIT_SWAPIMG} == "no"
+	${TOOL_SED} "s/@@BOOTDISK@@/${BOOTDISK}/" < ${FSTAB_IN} > ${WORKFSTAB}
+.else
+	${TOOL_SED}							\
+	    -e "s/@@BOOTDISK@@/${BOOTDISK}/"				\
+	    -e "/@@BOOTDISK@@b/d"					\
+	    < ${FSTAB_IN} > ${WORKFSTAB}
+.endif
+.endif	# USE_GPT != "no"
+	${CP} ${WORKFSTAB} ${WORKDIR}/etc/fstab
+	@echo Setting rc_configured=YES in /etc/rc.conf ...
+	${TOOL_SED} "s/rc_configured=NO/rc_configured=YES/"		\
+	    < ${WORKDIR}/etc/rc.conf > ${WORKRCCONF}
+	${CP} ${WORKRCCONF} ${WORKDIR}/etc/rc.conf
+.if defined(IMGDIR_EXTRA)
+	@echo Copying extra dirs...
+.for _SRCDIR _TARGET in ${IMGDIR_EXTRA}
+	@if [ ! -d ${_SRCDIR} ]; then 					\
+		echo "${_SRCDIR} is not directory, aborting";		\
+		false; 							\
+	fi
+	${MKDIR} ${WORKDIR}/${_TARGET}
+	(cd ${_SRCDIR} ;						\
+	    ${TOOL_PAX} -rw -pe	-v					\
+	    ${IMGDIR_EXCLUDE}						\
+	    . ${.OBJDIR}/${WORKDIR}/${_TARGET} )
+.endfor
+.endif
+.if defined(IMGFILE_EXTRA)
+	@echo Copying extra files...
+.for _SRC _TARGET in ${IMGFILE_EXTRA}
+	@if [ ! -f ${_SRC} ]; then 					\
+		echo "${_SRC} in IMGFILE_EXTRA not found, aborting";	\
+		false; 							\
+	fi
+	@if [ -f ${_SRC} ]; then 					\
+		echo ${CP} ${_SRC} ${WORKDIR}/${_TARGET};		\
+		${CP} ${_SRC} ${WORKDIR}/${_TARGET};			\
+	fi
+.endfor
+.endif
+	@echo Preparing spec files for makefs...
+	${RM} -f ${WORKSPEC}
+	cat ${WORKDIR}/etc/mtree/* |					\
+	    ${TOOL_SED} -e 's/ size=[0-9]*//' > ${WORKSPEC}
+	${HOST_SH} ${WORKDIR}/dev/MAKEDEV -s all ipty |			\
+	    ${TOOL_SED} -e '/^\. type=dir/d' -e 's,^\.,./dev,' >> ${WORKSPEC}
+	cat ${SPEC_IN} >> ${WORKSPEC}
+.if defined(SECONDARY_BOOT)
+	echo "./${SECONDARY_BOOT} type=file uname=root gname=wheel mode=0444" \
+	    >> ${WORKSPEC}
+.endif
+.if defined(SPEC_EXTRA)
+	cat ${SPEC_EXTRA} >> ${WORKSPEC}
+.endif
+	@echo Creating rootfs...
+	# XXX /var/spool/ftp/hidden is unreadable
+	${CHMOD} +r ${WORKDIR}/var/spool/ftp/hidden
+	${TOOL_MAKEFS} -M ${FSSIZE} -m ${FSSIZE}			\
+	    -B ${TARGET_ENDIANNESS}					\
+	    -F ${WORKSPEC} -N ${WORKDIR}/etc				\
+	    ${TIMESTAMP}						\
+	    ${IMGMAKEFSOPTIONS}						\
+	    ${WORKFS} ${WORKDIR}
+.if !empty(PRIMARY_BOOT) && ${INSTALLBOOT_AFTER_DISKLABEL} == "no"
+	${TOOL_INSTALLBOOT} -v -m ${MACHINE} ${INSTALLBOOTOPTIONS} ${WORKFS} \
+	    ${WORKDIR}/usr/mdec/${PRIMARY_BOOT} ${SECONDARY_BOOT_ARG}
+.endif
+	@echo done.
+	mv ${WORKFS} ${.TARGET}
+
+#
+# definitions to create image
+#
+.if ${USE_MBR} != "no"
+DISKPROTO_IN?=	${DISTRIBDIR}/common/bootimage/diskproto.mbr.in
+.else
+DISKPROTO_IN?=	${DISTRIBDIR}/common/bootimage/diskproto.in
+.endif
+
+MBR_DEFAULT_BOOTCODE?=	mbr
+
+OMIT_SWAPIMG?=	no
+
+WORKMBR?=	work.mbr
+WORKSWAP?=	work.swap
+WORKEFI?=	work.efi
+WORKGPT?=	work.gpt
+WORKLABEL?=	work.diskproto
+WORKIMG?=	work.img
+EFIWORKDIR?=	work.efidir
+
+CLEANFILES+=	${WORKMBR} ${WORKSWAP} ${WORKEFI} ${WORKGPT}
+CLEANFILES+=	${WORKLABEL}.tmp ${WORKLABEL}
+CLEANFILES+=	${WORKIMG} ${IMGBASE}.img
+
+${WORKLABEL}:
+	${TOOL_SED}							\
+	    -e "s/@@SECTORS@@/${SECTORS}/"				\
+	    -e "s/@@HEADS@@/${HEADS}/"					\
+	    -e "s/@@SECPERCYLINDERS@@/${SECPERCYLINDERS}/"		\
+	    -e "s/@@CYLINDERS@@/${CYLINDERS}/"				\
+	    -e "s/@@IMAGESECTORS@@/${IMAGESECTORS}/"			\
+	    -e "s/@@FSSECTORS@@/${FSSECTORS}/"				\
+	    -e "s/@@FSOFFSET@@/${FSOFFSET}/"				\
+	    -e "s/@@SWAPSECTORS@@/${SWAPSECTORS}/"			\
+	    -e "s/@@SWAPOFFSET@@/${SWAPOFFSET}/"			\
+	    -e "s/@@BSDPARTSECTORS@@/${BSDPARTSECTORS}/"		\
+	    < ${DISKPROTO_IN} > ${WORKLABEL}.tmp
+	mv ${WORKLABEL}.tmp ${WORKLABEL}
+
+pre-targetfs:
+.if ${USE_GPT} != "no"
+	@echo creating GPT header and partition entries...
+	${RM} -f ${WORKMBR}
+	${DD} if=/dev/zero of=${WORKMBR} seek=$$((${IMAGESECTORS} - 1)) count=1
+	${TOOL_GPT} ${WORKMBR} create
+	${TOOL_GPT} ${WORKMBR} add -a 1m -s ${EFISECTORS} -t efi -l "EFI system"
+	${TOOL_GPT} ${WORKMBR} add -a 1m -s ${FSSECTORS} -t ffs
+.if ${OMIT_SWAPIMG} == "no"
+	${TOOL_GPT} ${WORKMBR} add -a 1m -s ${SWAPSECTORS} -t swap
+.endif
+
+${IMGBASE}.img:	${TARGETFS}
+	@echo create EFI system partition...
+	@${MKDIR} ${EFIWORKDIR}/EFI/boot
+.if !empty(EFIBOOT)
+.for f in ${EFIBOOT}
+	${CP} -f ${f} ${EFIWORKDIR}/EFI/boot/`basename ${f}`
+.endfor
+.endif
+	${RM} -f ${WORKEFI}
+	${TOOL_MAKEFS} -M ${EFIMB}m -m ${EFIMB}m			\
+	    -B ${TARGET_ENDIANNESS}					\
+	    ${TIMESTAMP}						\
+	    -t msdos -o F=32,c=1					\
+	    ${WORKEFI} ${EFIWORKDIR}
+	@echo create GPT image...
+	${DD} if=${WORKMBR} of=${WORKGPT} skip=$$((${IMAGESECTORS} - 2048)) \
+	    count=2048
+	${DD} if=${WORKMBR} count=${LABELSECTORS} |			\
+	    ${CAT} - ${WORKEFI} ${TARGETFS} ${WORKGPT} > ${WORKIMG}
+	${TOOL_GPT} ${WORKIMG} biosboot -i 2				\
+	    -c ${.OBJDIR}/${WORKDIR}/usr/mdec/gptmbr.bin
+	${TOOL_GPT} ${WORKIMG} set -a bootme -i 2
+.else	# USE_GPT == "no"
+${IMGBASE}.img:	${TARGETFS} ${WORKLABEL}
+.if ${USE_MBR} != "no"
+	@echo creating MBR labels...
+	${DD} if=/dev/zero of=${WORKMBR} seek=$$((${IMAGESECTORS} - 1)) count=1
+	${TOOL_FDISK} -f -i -u \
+	    -b ${MBRCYLINDERS}/${MBRHEADS}/${MBRSECTORS}		\
+	    -0 -a -s ${MBRNETBSD}/${FSOFFSET}/${BSDPARTSECTORS}		\
+	    -F ${WORKMBR}
+.if empty(MBR_BOOTCODE)
+	@if [ -f ${WORKDIR}/usr/mdec/${MBR_DEFAULT_BOOTCODE} ]; then 	\
+		echo ${TOOL_FDISK} -f					\
+		    -i -c ${WORKDIR}/usr/mdec/${MBR_DEFAULT_BOOTCODE}	\
+		    -F ${WORKMBR};					\
+		${TOOL_FDISK} -f					\
+		    -i -c ${WORKDIR}/usr/mdec/${MBR_DEFAULT_BOOTCODE}	\
+		    -F ${WORKMBR};					\
+	fi
+.else
+	@if [ ! -f ${WORKDIR}/usr/mdec/${MBR_BOOTCODE} ]; then 		\
+		echo "${MBR_BOOTCODE} is not found in DESTDIR/usr/mdec, aborting"; \
+		false; 							\
+	fi
+	${TOOL_FDISK} -f -i -c ${WORKDIR}/usr/mdec/${MBR_BOOTCODE}	\
+	    -F ${WORKMBR}
+.endif
+	${DD} if=${WORKMBR} count=${LABELSECTORS} |			\
+	    ${CAT} - ${TARGETFS} > ${WORKIMG}
+.else	# USE_MBR == "no"
+	${CP} ${TARGETFS} ${WORKIMG}
+.endif	# USE_MBR != "no"
+.endif	# USE_GPT != "no"
+.if ${OMIT_SWAPIMG} == "no"
+	${DD} if=/dev/zero of=${WORKSWAP} seek=$$((${SWAPSECTORS} - 1)) count=1
+	${CAT} ${WORKSWAP} >> ${WORKIMG}
+.endif
+.if ${USE_SUNLABEL} != "no"
+	@echo Creating sun disklabel...
+	printf 'V ncyl %d\nV nhead %d\nV nsect %d\na %d %d/0/0\nb %d %d/0/0\nW\n' \
+	    ${CYLINDERS} ${HEADS} ${SECTORS} \
+	    ${FSOFFSET} ${FSCYLINDERS} ${FSCYLINDERS} ${SWAPCYLINDERS} | \
+	    ${TOOL_SUNLABEL} -nq ${WORKIMG}
+.endif
+.if ${USE_GPT} == "no"
+	${TOOL_DISKLABEL} -R -F ${WORKIMG} ${WORKLABEL}
+.if !empty(PRIMARY_BOOT) && ${INSTALLBOOT_AFTER_DISKLABEL} != "no"
+	${TOOL_INSTALLBOOT} -v -m ${MACHINE} ${INSTALLBOOTOPTIONS} ${WORKIMG} \
+	    ${WORKDIR}/usr/mdec/${PRIMARY_BOOT}
+.endif
+.endif
+	mv ${WORKIMG} ${.TARGET}
+
+
+CLEANFILES+=	${IMGBASE}.img.gz ${IMGBASE}.img.gz.tmp
+
+${IMGBASE}.img.gz:	${IMGBASE}.img
+	${TOOL_GZIP_N} -9c ${IMGBASE}.img > ${.TARGET}.tmp
+	mv ${.TARGET}.tmp ${.TARGET}
+
+clean:
+	@if [ -d ${WORKDIR}/var/spool/ftp/hidden ]; then 		\
+		${CHMOD} +r ${WORKDIR}/var/spool/ftp/hidden;		\
+	fi	# XXX
+	${RM} -fr ${WORKDIR}
+	${RM} -fr ${EFIWORKDIR}
+
+prepare_md_post: .PHONY
+image_md_post: .PHONY
+image_md_pre: .PHONY
+
+.include <bsd.prog.mk>
Index: src/distrib/amd64/uefi-installimage/Makefile.installimage
diff -u /dev/null src/distrib/amd64/uefi-installimage/Makefile.installimage:1.1
--- /dev/null	Tue Jan 24 11:16:50 2017
+++ src/distrib/amd64/uefi-installimage/Makefile.installimage	Tue Jan 24 11:16:50 2017
@@ -0,0 +1,70 @@
+#	$NetBSD: Makefile.installimage,v 1.1 2017/01/24 11:16:50 nonaka Exp $
+#
+# Common Makefile to create a bootable installation image for USB flash etc.
+#
+
+#
+# Required variables:
+#	INSTIMGBASE
+#		Basename of the liveimage
+#
+# Optional variables:
+#	INSTIMAGEMB
+#		target image size in MB
+#		(if empty default IMAGEMB in Makefile.bootimage is used)
+#
+# See Makefile.bootimage for other variables.
+#
+
+.if !target(check_INSTIMGBASE)
+check_INSTIMGBASE: .PHONY .NOTMAIN
+.if !defined(INSTIMGBASE)
+	@echo "Error: INSTIMGBASE is not set"
+	@false
+.else
+	@true
+.endif
+.endif
+
+.if defined(INSTIMAGEMB)
+IMAGEMB=	${INSTIMAGEMB}
+.endif
+SWAPMB=		0			# no swap
+OMIT_SWAPIMG=	yes			# nothing to write
+
+KERN_SET?=	kern-GENERIC
+SETS?=		modules base etc
+
+FSTAB_IN?=	${NETBSDSRCDIR}/distrib/common/bootimage/fstab.install.in
+
+.if ${USE_MBR} != "no"
+DISKPROTO_IN?=	${NETBSDSRCDIR}/distrib/common/bootimage/diskproto.noswap.mbr.in
+.else
+DISKPROTO_IN?=	${NETBSDSRCDIR}/distrib/common/bootimage/diskproto.noswap.in
+.endif
+
+# XXX: no permission info for makefs(8)
+IMGDIR_EXTRA=	${RELEASEDIR}/${RELEASEMACHINEDIR}	${RELEASEMACHINEDIR}
+IMGDIR_EXCLUDE= 	-s ',./installation/cdrom.*,,gp'
+IMGDIR_EXCLUDE+=	-s ',./installation/liveimage.*,,gp'
+IMGDIR_EXCLUDE+=	-s ',./installation/installimage.*,,gp'
+
+IMGBASE=        ${INSTIMGBASE}
+
+.include "${.CURDIR}/Makefile.bootimage"
+
+# INSTIMG_RELEASEDIR specifies where to install ${INSTIMGBASE}.img.gz.
+# This should be passed from etc/Makefile or etc/etc.${MACHINE}/Makefile.inc
+# but also set default here for manual builds.
+INSTIMG_RELEASEDIR?=	${RELEASEMACHINEDIR}/installation/installimage
+
+# should be defined elsewhere? 
+MKDIR?=		mkdir -p
+
+install_image: check_INSTIMGBASE check_RELEASEDIR ${IMGBASE}.img.gz
+	${MKDIR} ${INSTIMG_RELEASEDIR}
+	${RELEASE_INSTALL} ${IMGBASE}.img.gz ${INSTIMG_RELEASEDIR}
+	# note ${MAKESUM} will be calculated in src/etc/Makefile
+
+release:
+
Index: src/distrib/amd64/uefi-installimage/boot.cfg.in
diff -u /dev/null src/distrib/amd64/uefi-installimage/boot.cfg.in:1.1
--- /dev/null	Tue Jan 24 11:16:50 2017
+++ src/distrib/amd64/uefi-installimage/boot.cfg.in	Tue Jan 24 11:16:50 2017
@@ -0,0 +1,12 @@
+banner=Welcome to the NetBSD/@@MACHINE@@ @@VERSION@@ installation image
+banner================================================================================
+banner=
+banner=ACPI (Advanced Configuration and Power Interface) should work on all modern
+banner=and legacy hardware.  However if you do encounter a problem while booting,
+banner=try disabling it and report a bug at http://www.NetBSD.org/.
+menu=Install NetBSD:boot netbsd
+menu=Install NetBSD (no ACPI):boot netbsd -2
+menu=Install NetBSD (no ACPI, no SMP):boot netbsd -12
+menu=Drop to boot prompt:prompt
+timeout=30
+clear=1
Index: src/distrib/amd64/uefi-installimage/etc.rc
diff -u /dev/null src/distrib/amd64/uefi-installimage/etc.rc:1.1
--- /dev/null	Tue Jan 24 11:16:50 2017
+++ src/distrib/amd64/uefi-installimage/etc.rc	Tue Jan 24 11:16:50 2017
@@ -0,0 +1,52 @@
+# $NetBSD: etc.rc,v 1.1 2017/01/24 11:16:50 nonaka Exp $
+#
+# Copyright (c) 1997 Perry E. Metzger
+# Copyright (c) 1994 Christopher G. Demetriou
+# All rights reserved.
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#          This product includes software developed for the
+#          NetBSD Project.  See http://www.NetBSD.org/ for
+#          information about NetBSD.
+# 4. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+# 
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# 
+# <<Id: LICENSE,v 1.2 2000/06/14 15:57:33 cgd Exp>>
+
+PATH=/sbin:/bin:/usr/bin:/usr/sbin:/
+export PATH
+
+# hack to get around bugs in kernfs's rootdev/rrootdev lookup.
+ls -l /dev/* > /dev/null 2>&1
+
+mount -u /
+mount -t tmpfs tmpfs /tmp
+
+# create a gettytab to autologin and run sysinst
+echo "# Autostart sysinst" > /tmp/gettytab
+echo -n "sysinst:al=root:lo=/install.sh:im=:sp#" >> /tmp/gettytab
+stty speed >> /tmp/gettytab
+cp /tmp/gettytab /etc
+
+# done, move on to multiuser mode
+exit 0
Index: src/distrib/amd64/uefi-installimage/etc.ttys
diff -u /dev/null src/distrib/amd64/uefi-installimage/etc.ttys:1.1
--- /dev/null	Tue Jan 24 11:16:50 2017
+++ src/distrib/amd64/uefi-installimage/etc.ttys	Tue Jan 24 11:16:50 2017
@@ -0,0 +1,7 @@
+# $NetBSD: etc.ttys,v 1.1 2017/01/24 11:16:50 nonaka Exp $
+#
+# re-launch the sysinst wrapper script on console
+#
+# name	getty				type	status		comments
+#
+console	"/usr/libexec/getty sysinst"	wsvt25	on secure
Index: src/distrib/amd64/uefi-installimage/install.sh
diff -u /dev/null src/distrib/amd64/uefi-installimage/install.sh:1.1
--- /dev/null	Tue Jan 24 11:16:50 2017
+++ src/distrib/amd64/uefi-installimage/install.sh	Tue Jan 24 11:16:50 2017
@@ -0,0 +1,115 @@
+#! /bin/sh -m
+# $NetBSD: install.sh,v 1.1 2017/01/24 11:16:50 nonaka Exp $
+#
+# -
+#  Copyright (c) 2010 The NetBSD Foundation, Inc.
+#  All rights reserved.
+# 
+#  This code is derived from software contributed to The NetBSD Foundation
+#  by Martin Husemann <mar...@netbsd.org>.
+# 
+#  Redistribution and use in source and binary forms, with or without
+#  modification, are permitted provided that the following conditions
+#  are met:
+#  1. Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+#  2. Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+# 
+#  THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+#  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+#  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+#  PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+#  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+#  POSSIBILITY OF SUCH DAMAGE.
+
+
+# setup basic environment
+PATH=/sbin:/bin:/usr/bin:/usr/sbin:/
+export PATH
+
+termfile=/tmp/sysinst.term
+
+# Check if we are on a framebuffer or on serial console and default
+# the terminal type accordingly.
+# There is no /var/db/dev.cdb, so sysctl might not map the devicename properly;
+# ttyE0 is 90,0 -> 0x5a00
+case $(sysctl -nx kern.consdev) in
+ 002f000000000000)
+    TERM=wsvt25
+    ;;
+ *)
+    if [ -r ${termfile} ]; then
+	. ${termfile}
+    else
+	TERM=vt220
+    fi
+    ;;
+esac
+
+export TERM
+HOME=/
+export HOME
+BLOCKSIZE=1k
+export BLOCKSIZE
+EDITOR=ed
+export EDITOR
+SHELL=/bin/sh
+export SHELL
+
+umask 022
+
+stty newcrt werase ^W intr ^C kill ^U erase ^?
+if [ $TERM != "wsvt25" ]; then
+	cat << "EOM"
+
+
+You are using a serial console, we do not know your terminal emulation.
+Please select one, typical values are:
+
+	vt100
+	ansi
+	xterm
+
+EOM
+	echo -n "Terminal type (just hit ENTER for '$TERM'): "
+	read ans
+	if [ -n "$ans" ];then
+	    TERM=$ans
+	fi
+fi
+
+# run the installation or upgrade script.
+cd /
+cmd=./sysinst
+
+while [ -n "${cmd}" ]
+do
+	${cmd}
+	if [ $? = 4 ]; then
+		echo "Oops, something went wrong - we will try again"
+		exit
+	else
+		if [ -n "$(jobs)" ]; then
+			tput clear
+			echo "You have stopped sysinst, return to it by" \
+				"typing 'exit' or ^D."
+			${SHELL} -i
+			cmd="fg"
+		else
+			cmd=""
+		fi
+	fi
+done
+
+# remember terminal type, now that we know it for sure
+echo "TERM=${TERM}" > ${termfile}
+echo
+echo "To return to the installer, quit this shell by typing 'exit' or ^D."
+exec ${SHELL}
Index: src/distrib/amd64/uefi-installimage/spec.inst
diff -u /dev/null src/distrib/amd64/uefi-installimage/spec.inst:1.1
--- /dev/null	Tue Jan 24 11:16:50 2017
+++ src/distrib/amd64/uefi-installimage/spec.inst	Tue Jan 24 11:16:50 2017
@@ -0,0 +1,15 @@
+# $NetBSD: spec.inst,v 1.1 2017/01/24 11:16:50 nonaka Exp $
+./mnt2			type=dir mode=0755 uname=root gname=wheel
+./targetroot		type=dir mode=0755 uname=root gname=wheel
+
+./install.sh		type=file mode=0755 uname=root gname=wheel
+./sysinst		type=file mode=0755 uname=root gname=wheel
+./sysinstmsgs.de	type=file mode=0444 uname=root gname=wheel
+./sysinstmsgs.es	type=file mode=0444 uname=root gname=wheel
+./sysinstmsgs.fr	type=file mode=0444 uname=root gname=wheel
+./sysinstmsgs.pl	type=file mode=0444 uname=root gname=wheel
+
+# for sysinst "install from local directory" default
+./release		type=link mode=0755 uname=root gname=wheel link=.
+
+# XXX what to do for files in ${RELEASEMACHINEDIR}?

Reply via email to