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