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}?