xref: /openbsd-src/distrib/amd64/common/install.md (revision c10f63ba96f890ce7ce3d41cb55f23bd30c228b3)
1*c10f63baSkn#	$OpenBSD: install.md,v 1.62 2023/10/11 17:53:52 kn Exp $
2ca1c023bSderaadt#
3ca1c023bSderaadt# Copyright (c) 1996 The NetBSD Foundation, Inc.
4ca1c023bSderaadt# All rights reserved.
5ca1c023bSderaadt#
6ca1c023bSderaadt# This code is derived from software contributed to The NetBSD Foundation
7ca1c023bSderaadt# by Jason R. Thorpe.
8ca1c023bSderaadt#
9ca1c023bSderaadt# Redistribution and use in source and binary forms, with or without
10ca1c023bSderaadt# modification, are permitted provided that the following conditions
11ca1c023bSderaadt# are met:
12ca1c023bSderaadt# 1. Redistributions of source code must retain the above copyright
13ca1c023bSderaadt#    notice, this list of conditions and the following disclaimer.
14ca1c023bSderaadt# 2. Redistributions in binary form must reproduce the above copyright
15ca1c023bSderaadt#    notice, this list of conditions and the following disclaimer in the
16ca1c023bSderaadt#    documentation and/or other materials provided with the distribution.
17ca1c023bSderaadt#
18ca1c023bSderaadt# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19ca1c023bSderaadt# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20ca1c023bSderaadt# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21ca1c023bSderaadt# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
22ca1c023bSderaadt# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23ca1c023bSderaadt# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24ca1c023bSderaadt# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25ca1c023bSderaadt# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26ca1c023bSderaadt# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27ca1c023bSderaadt# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28ca1c023bSderaadt# POSSIBILITY OF SUCH DAMAGE.
29ca1c023bSderaadt#
30ca1c023bSderaadt#
31ca1c023bSderaadt# machine dependent section of installation/upgrade script.
32ca1c023bSderaadt#
33ca1c023bSderaadt
3435ea5efcSknMDBOOTSR=y
35ca1c023bSderaadtMDXAPERTURE=2
3642a968d4SderaadtMDXDM=y
37a121e3cfSkrwNCPU=$(sysctl -n hw.ncpufound)
38a121e3cfSkrw
399d05dedeSkrwif dmesg | grep -q 'efifb0 at mainbus0'; then
409d05dedeSkrw	MDEFI=y
419d05dedeSkrwfi
429d05dedeSkrw
43ca1c023bSderaadtmd_installboot() {
441962e11dSjsing	if ! installboot -r /mnt ${1}; then
4501872a59Skrw		echo "\nFailed to install bootblocks."
4601872a59Skrw		echo "You will not be able to boot OpenBSD from ${1}."
4701872a59Skrw		exit
4801872a59Skrw	fi
49ca1c023bSderaadt}
50ca1c023bSderaadt
51ca1c023bSderaadtmd_prep_fdisk() {
523242a736Sderaadt	local _disk=$1 _q _d
53ca1c023bSderaadt
543242a736Sderaadt	while :; do
553242a736Sderaadt		_d=whole
56f819ad63Skrw		_q="Use (W)hole disk MBR, whole disk (G)PT"
579d05dedeSkrw
58f819ad63Skrw		[[ $MDEFI == y ]] && _d=gpt
599d05dedeSkrw
60a653a82bSpirofti		if disk_has $_disk mbr || disk_has $_disk gpt; then
61a653a82bSpirofti			fdisk $_disk
62a653a82bSpirofti			if disk_has $_disk mbr openbsd ||
63a653a82bSpirofti				disk_has $_disk gpt openbsd; then
64c4ecd003Srpe				_q="$_q, (O)penBSD area"
65f819ad63Skrw				_d=OpenBSD
66a653a82bSpirofti			fi
6751379504Sderaadt		else
68f819ad63Skrw			echo "No valid MBR or GPT."
6951379504Sderaadt		fi
70f819ad63Skrw
71f819ad63Skrw		ask "$_q or (E)dit?" "$_d"
723242a736Sderaadt		case $resp in
738aff7defSrpe		[wW]*)
743242a736Sderaadt			echo -n "Setting OpenBSD MBR partition to whole $_disk..."
7542c647d8Skrw			fdisk -iy $_disk >/dev/null
76ca1c023bSderaadt			echo "done."
773242a736Sderaadt			return ;;
788aff7defSrpe		[gG]*)
79f819ad63Skrw			if [[ $MDEFI != y ]]; then
8038386b36Skn				ask_yn "An EFI/GPT disk may not boot. Proceed?" || continue
81ab83c509Srpe			fi
829d05dedeSkrw
839d05dedeSkrw			echo -n "Setting OpenBSD GPT partition to whole $_disk..."
845d8425daSderaadt			fdisk -gy -b 532480 $_disk >/dev/null
859d05dedeSkrw			echo "done."
869d05dedeSkrw			return ;;
878aff7defSrpe		[eE]*)
88c4ecd003Srpe			if disk_has $_disk gpt; then
89f819ad63Skrw				# Manually configure the GPT.
90f819ad63Skrw				cat <<__EOT
91f819ad63Skrw
92f819ad63SkrwYou will now create two GPT partitions. The first must have an id
93f819ad63Skrwof 'EF' and be large enough to contain the OpenBSD boot programs,
945d8425daSderaadtat least 532480 blocks. The second must have an id of 'A6' and will
95f819ad63Skrwcontain your OpenBSD data. Neither may overlap other partitions.
96f819ad63SkrwInside the fdisk command, the 'manual' command describes the fdisk
97f819ad63Skrwcommands in detail.
98f819ad63Skrw
99f819ad63Skrw$(fdisk $_disk)
100f819ad63Skrw__EOT
101f819ad63Skrw				fdisk -e $_disk
102c4ecd003Srpe
103c4ecd003Srpe				if ! disk_has $_disk gpt openbsd; then
104f819ad63Skrw					echo -n "No OpenBSD partition in GPT,"
105c4ecd003Srpe				elif ! disk_has $_disk gpt efisys; then
106f819ad63Skrw					echo -n "No EFI Sys partition in GPT,"
107f819ad63Skrw				else
108f819ad63Skrw					return
109f819ad63Skrw				fi
110f819ad63Skrw			else
111ca1c023bSderaadt				# Manually configure the MBR.
112ca1c023bSderaadt				cat <<__EOT
113ca1c023bSderaadt
114ca1c023bSderaadtYou will now create a single MBR partition to contain your OpenBSD data. This
115ca1c023bSderaadtpartition must have an id of 'A6'; must *NOT* overlap other partitions; and
1163242a736Sderaadtmust be marked as the only active partition.  Inside the fdisk command, the
1173242a736Sderaadt'manual' command describes all the fdisk commands in detail.
118ca1c023bSderaadt
119f819ad63Skrw$(fdisk $_disk)
120ca1c023bSderaadt__EOT
121f819ad63Skrw				fdisk -e $_disk
122c4ecd003Srpe				disk_has $_disk mbr openbsd && return
123f819ad63Skrw				echo -n "No OpenBSD partition in MBR,"
124f819ad63Skrw			fi
125f819ad63Skrw			echo " try again." ;;
1268aff7defSrpe		[oO]*)
12763997496Skrw			[[ $_d == OpenBSD ]] || continue
1282505deccSkn			# Is this a boot disk?
129*c10f63baSkn			if [[ $_disk == $ROOTDISK ]] &&
1302505deccSkn			    disk_has $_disk gpt && ! disk_has $_disk gpt efisys; then
131f819ad63Skrw				echo "No EFI Sys partition in GPT, try again."
13225bc7771Srpe				$AUTO && exit 1
133f819ad63Skrw				continue
134f819ad63Skrw			fi
135f819ad63Skrw			return ;;
1363242a736Sderaadt		esac
1373242a736Sderaadt	done
138ca1c023bSderaadt}
139ca1c023bSderaadt
140ca1c023bSderaadtmd_prep_disklabel() {
14132efaffdSrpe	local _disk=$1 _f=/tmp/i/fstab.$1
142ca1c023bSderaadt
143ca1c023bSderaadt	md_prep_fdisk $_disk
144ca1c023bSderaadt
1456b7e7e25Srpe	disklabel_autolayout $_disk $_f || return
1466b7e7e25Srpe	[[ -s $_f ]] && return
147da20dc83Skrw
148c375c99cSkrw	# Edit disklabel manually.
149c375c99cSkrw	# Abandon all hope, ye who enter here.
150f53dd365Srpe	disklabel -F $_f -E $_disk
151ca1c023bSderaadt}
152ca1c023bSderaadt
153ca1c023bSderaadtmd_congrats() {
154ca1c023bSderaadt}
15513acab54Skrw
15613acab54Skrwmd_consoleinfo() {
15713acab54Skrw	local _u _d=com
15813acab54Skrw
15913acab54Skrw	for _u in $(scan_dmesg "/^$_d\([0-9]\) .*/s//\1/p"); do
16013acab54Skrw		if [[ $_d$_u == $CONSOLE || -z $CONSOLE ]]; then
16113acab54Skrw			CDEV=$_d$_u
16213acab54Skrw			CPROM=com$_u
16313acab54Skrw			CTTY=tty0$_u
16413acab54Skrw			return
16513acab54Skrw		fi
16613acab54Skrw	done
16713acab54Skrw}
168