1 1.35 andvar # $NetBSD: install.md,v 1.35 2022/05/28 21:57:39 andvar Exp $ 2 1.1 is # 3 1.1 is # 4 1.25 is # Copyright (c) 1996,2006 The NetBSD Foundation, Inc. 5 1.1 is # All rights reserved. 6 1.1 is # 7 1.1 is # This code is derived from software contributed to The NetBSD Foundation 8 1.1 is # by Jason R. Thorpe. 9 1.1 is # 10 1.1 is # Redistribution and use in source and binary forms, with or without 11 1.1 is # modification, are permitted provided that the following conditions 12 1.1 is # are met: 13 1.1 is # 1. Redistributions of source code must retain the above copyright 14 1.1 is # notice, this list of conditions and the following disclaimer. 15 1.1 is # 2. Redistributions in binary form must reproduce the above copyright 16 1.1 is # notice, this list of conditions and the following disclaimer in the 17 1.1 is # documentation and/or other materials provided with the distribution. 18 1.1 is # 19 1.1 is # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 1.1 is # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 1.1 is # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 1.3 jtc # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 1.3 jtc # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 1.1 is # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 1.1 is # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 1.1 is # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 1.1 is # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 1.1 is # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 1.1 is # POSSIBILITY OF SUCH DAMAGE. 30 1.1 is # 31 1.1 is 32 1.1 is # 33 1.1 is # machine dependent section of installation/upgrade script. 34 1.1 is # 35 1.1 is 36 1.1 is # Machine-dependent install sets 37 1.24 mhitch MDSETS="kern-GENERIC xbase xcomp xetc xfont xserver" 38 1.1 is 39 1.1 is md_set_term() { 40 1.1 is if [ ! -z "$TERM" ]; then 41 1.1 is return 42 1.1 is fi 43 1.1 is echo -n "Specify terminal type [vt220]: " 44 1.1 is getresp "vt220" 45 1.1 is TERM="$resp" 46 1.1 is export TERM 47 1.1 is } 48 1.1 is 49 1.1 is md_makerootwritable() { 50 1.1 is # Mount root rw for convenience of the tester ;-) 51 1.21 is if ! cp /dev/null /tmp/.root_writable >/dev/null 2>&1; then 52 1.30 christos mi_mount_kernfs 53 1.15 is mount -t ffs -u /kern/rootdev / > /dev/null 2>&1 54 1.1 is fi 55 1.1 is } 56 1.1 is 57 1.1 is md_get_diskdevs() { 58 1.1 is # return available disk devices 59 1.30 christos mi_mount_kernfs 60 1.30 christos mi_filter_msgbuf | sed -ne '/^[sw]d[0-9] /s/ .*//p' 61 1.1 is } 62 1.1 is 63 1.1 is md_get_cddevs() { 64 1.1 is # return available CDROM devices 65 1.30 christos mi_mount_kernfs 66 1.30 christos mi_filter_msgbuf | sed -ne '/^cd[0-9] /s/ .*//p' 67 1.1 is } 68 1.1 is 69 1.1 is md_get_partition_range() { 70 1.1 is # return an expression describing the valid partition id's 71 1.1 is echo '[a-p]' 72 1.1 is } 73 1.1 is 74 1.1 is md_installboot() { 75 1.22 mhitch if [ -x /mnt/usr/sbin/installboot ]; then 76 1.1 is echo -n "Should a boot block be installed? [y] " 77 1.1 is getresp "y" 78 1.1 is case "$resp" in 79 1.1 is y*|Y*) 80 1.28 mlelstv echo -n "Boot command? [netbsd -ASn2] " 81 1.28 mlelstv getresp "netbsd -ASn2" 82 1.1 is echo "Installing boot block..." 83 1.32 rin chroot /mnt /usr/sbin/installboot -o command="$resp" /dev/r${1}a /usr/mdec/bootxx_ffsv1 84 1.18 mhitch cp -p /mnt/usr/mdec/boot.amiga /mnt/ 85 1.1 is ;; 86 1.1 is *) 87 1.13 is echo "No bootblock installed." 88 1.1 is ;; 89 1.1 is esac 90 1.1 is elif [ "$MODE" = "install" ]; then 91 1.1 is cat << \__md_installboot_1 92 1.1 is There is no installboot program found on the installed filesystems. No boot 93 1.1 is programs are installed. 94 1.1 is __md_installboot_1 95 1.1 is else 96 1.1 is cat << \__md_installboot_2 97 1.1 is There is no installboot program found on the upgraded filesystems. No boot 98 1.1 is programs are installed. 99 1.1 is __md_installboot_2 100 1.1 is fi 101 1.1 is } 102 1.1 is 103 1.1 is md_native_fstype() { 104 1.1 is echo "ados" 105 1.1 is } 106 1.1 is 107 1.1 is md_native_fsopts() { 108 1.6 veego echo "ro" 109 1.1 is } 110 1.1 is 111 1.1 is md_prep_disklabel() { 112 1.25 is } 113 1.25 is 114 1.25 is md_view_labels_possible=1 115 1.25 is md_view_labels() { 116 1.29 christos _DKDEVS=$(md_get_diskdevs) 117 1.9 is echo "If you like, you can now examine the labels of your disks." 118 1.9 is echo "" 119 1.9 is echo -n "Available are "${_DKDEVS}". Look at which? [skip this step] " 120 1.11 is getresp "done" 121 1.29 christos while [ "${resp:-done}" != "done" ]; do 122 1.9 is echo "" 123 1.9 is disklabel ${resp} 124 1.9 is echo "" 125 1.9 is echo -n "Available are "${_DKDEVS}". Look at which? [done] " 126 1.11 is getresp "done" 127 1.9 is done 128 1.10 is cat << \__prep_disklabel_1 129 1.10 is 130 1.10 is As a reminder: the 'c' partition is assigned to the whole disk and can't 131 1.10 is normally be used for a any file system! 132 1.10 is 133 1.10 is __prep_disklabel_1 134 1.1 is } 135 1.1 is 136 1.1 is md_labeldisk() { 137 1.1 is } 138 1.1 is 139 1.1 is md_welcome_banner() { 140 1.1 is if [ "$MODE" = "install" ]; then 141 1.1 is echo "" 142 1.31 tsutsui echo "Welcome to the NetBSD/${MACHINE} ${RELEASE} installation program." 143 1.1 is cat << \__welcome_banner_1 144 1.1 is 145 1.1 is This program is designed to help you put NetBSD on your disk, 146 1.1 is in a simple and rational way. You'll be asked several questions, 147 1.1 is and it would probably be useful to have your disk's hardware 148 1.1 is manual, the installation notes, and a calculator handy. 149 1.1 is __welcome_banner_1 150 1.1 is 151 1.1 is else 152 1.1 is echo "" 153 1.31 tsutsui echo "Welcome to the NetBSD/${MACHINE} ${RELEASE} upgrade program." 154 1.1 is cat << \__welcome_banner_2 155 1.1 is 156 1.1 is This program is designed to help you upgrade your NetBSD system in a 157 1.1 is simple and rational way. 158 1.1 is 159 1.29 christos As a reminder, installing the 'etc' binary set is NOT recommended. 160 1.1 is Once the rest of your system has been upgraded, you should manually 161 1.29 christos merge any changes to files in the 'etc' set into those files which 162 1.1 is already exist on your system. 163 1.1 is __welcome_banner_2 164 1.1 is fi 165 1.1 is 166 1.1 is cat << \__welcome_banner_3 167 1.1 is 168 1.1 is As with anything which modifies your disk's contents, this 169 1.1 is program can cause SIGNIFICANT data loss, and you are advised 170 1.1 is to make sure your data is backed up before beginning the 171 1.1 is installation process. 172 1.1 is 173 1.1 is Default answers are displayed in brackets after the questions. 174 1.1 is You can hit Control-C at any time to quit, but if you do so at a 175 1.1 is prompt, you may have to hit return. Also, quitting in the middle of 176 1.1 is installation may leave your system in an inconsistent state. 177 1.1 is 178 1.1 is __welcome_banner_3 179 1.1 is } 180 1.1 is 181 1.1 is md_not_going_to_install() { 182 1.1 is cat << \__not_going_to_install_1 183 1.1 is 184 1.29 christos OK, then. Enter 'halt' at the prompt to halt the machine. Once the 185 1.1 is machine has halted, power-cycle the system to load new boot code. 186 1.1 is 187 1.1 is Note: If you wish to have another try. Just type '^D' at the prompt. After 188 1.1 is a moment, the installer will restart itself. 189 1.1 is 190 1.1 is __not_going_to_install_1 191 1.1 is } 192 1.1 is 193 1.1 is md_congrats() { 194 1.1 is local what; 195 1.1 is if [ "$MODE" = "install" ]; then 196 1.1 is what="installed"; 197 1.1 is else 198 1.1 is what="upgraded"; 199 1.1 is fi 200 1.1 is cat << __congratulations_1 201 1.1 is 202 1.1 is CONGRATULATIONS! You have successfully $what NetBSD! 203 1.1 is To boot the installed system, enter halt at the command prompt. Once the 204 1.1 is system has halted, reset the machine and boot from the disk. 205 1.1 is 206 1.1 is Note: If you wish to have another try. Just type '^D' at the prompt. After 207 1.1 is a moment, the installer will restart itself. 208 1.1 is 209 1.1 is __congratulations_1 210 1.1 is } 211 1.1 is 212 1.1 is md_copy_kernel() { 213 1.1 is # This is largely a copy of install_disk and install_from_mounted_fs() 214 1.1 is # with some special frobbing. 215 1.1 is 216 1.1 is local _directory 217 1.1 is local _sets 218 1.1 is local _filename 219 1.1 is local _f 220 1.7 is 221 1.7 is if [ "$MODE" = "install" ]; then 222 1.7 is echo -n "Adding keymap initialization to rc.local..." 223 1.7 is echo /usr/sbin/loadkmap ${__keymap__} >> /mnt/etc/rc.local 224 1.7 is echo "done." 225 1.7 is fi 226 1.1 is 227 1.1 is if [ -e /netbsd ]; then 228 1.14 is if [ -e /mnt/netbsd ]; then 229 1.14 is echo "On the installation filesystem there is this kernel: " 230 1.14 is ls -l /netbsd 231 1.14 is echo "The already installed kernel is: " 232 1.14 is ls -l /mnt/netbsd 233 1.14 is echo "Do you want to replace the already installed kernel by the kernel" 234 1.14 is echo -n "on the installation filesystem? (y/n) [n] " 235 1.14 is resp="n" 236 1.14 is getresp "" 237 1.29 christos if [ "${resp}" != "y" ] && [ "${resp}" != "Y" ]; then 238 1.14 is return 239 1.14 is fi 240 1.14 is fi 241 1.14 is 242 1.1 is echo -n "Copying kernel..." 243 1.1 is cp -p /netbsd /mnt/netbsd 244 1.1 is echo "done." 245 1.1 is return 246 1.1 is fi 247 1.1 is 248 1.1 is cat << \__md_copy_kernel_1 249 1.1 is Your installation set did not include a netbsd kernel on the installation 250 1.1 is filesystem. You are now given the opportunity install it from either the 251 1.1 is kernel-floppy from the distribution or another location on one of your disks. 252 1.1 is 253 1.1 is The following disk devices are installed on your system; please select 254 1.1 is the disk device containing the partition with the netbsd kernel: 255 1.1 is __md_copy_kernel_1 256 1.1 is 257 1.29 christos _DKDEVS=$(md_get_diskdevs) 258 1.1 is echo "$_DKDEVS" 259 1.1 is echo "fd0" 260 1.1 is echo "" 261 1.1 is _DKDEVS="$_DKDEVS fd0" # Might be on the kernel floppy! 262 1.1 is echo -n "Which is the disk with the kernel? [abort] " 263 1.1 is 264 1.1 is if mount_a_disk ; then 265 1.1 is return # couldn't mount the disk 266 1.1 is fi 267 1.1 is 268 1.1 is # Get the directory where the file lives 269 1.1 is resp="" # force one iteration 270 1.29 christos while [ -z "${resp}" ]; do 271 1.1 is echo "Enter the directory relative to the mount point that" 272 1.1 is echo -n "contains the file. [${_directory}] " 273 1.1 is getresp "${_directory}" 274 1.1 is done 275 1.1 is _directory=$resp 276 1.1 is 277 1.29 christos _sets=$(cd /mnt2/$_directory; ls netbsd* 2> /dev/null) 278 1.1 is if [ -z "$_sets" ]; then 279 1.1 is echo "There are no NetBSD kernels available in \"$1\"" 280 1.1 is umount -f /mnt2 > /dev/null 2>&1 281 1.1 is return 282 1.1 is fi 283 1.1 is while : ; do 284 1.1 is echo "The following kernels are available:" 285 1.1 is echo "" 286 1.1 is 287 1.1 is for _f in $_sets ; do 288 1.1 is echo " $_f" 289 1.1 is done 290 1.1 is echo "" 291 1.1 is set -- $_sets 292 1.1 is echo -n "File name [$1]? " 293 1.1 is getresp "$1" 294 1.1 is _f=$resp 295 1.1 is _filename="/mnt2/$_directory/$_f" 296 1.1 is 297 1.1 is # Ensure file exists 298 1.1 is if [ ! -f $_filename ]; then 299 1.1 is echo "File $_filename does not exist. Check to make" 300 1.1 is echo "sure you entered the information properly." 301 1.1 is echo -n "Do you want to retry [y]? " 302 1.1 is getresp "y" 303 1.1 is if [ "$resp" = "n" ]; then 304 1.1 is break 305 1.1 is fi 306 1.1 is continue 307 1.1 is fi 308 1.1 is 309 1.1 is # Copy the kernel 310 1.1 is cp $_filename /mnt 311 1.1 is break 312 1.1 is done 313 1.1 is umount -f /mnt2 > /dev/null 2>&1 314 1.1 is } 315 1.19 mhitch 316 1.19 mhitch md_lib_is_aout() { 317 1.19 mhitch local r 318 1.19 mhitch test -h $1 && return 1 319 1.19 mhitch test -f $1 || return 1 320 1.19 mhitch 321 1.29 christos [ "$(dd if=$1 bs=1 skip=1 count=3 2> /dev/null)" = "ELF" ] && return 1 322 1.19 mhitch return 0 323 1.19 mhitch } 324 1.19 mhitch 325 1.19 mhitch 326 1.19 mhitch md_mv_usr_lib() { 327 1.19 mhitch local root 328 1.19 mhitch root=$1 329 1.19 mhitch for f in $root/usr/lib/lib*.so.[0-9]*.[0-9]* ; do 330 1.19 mhitch md_lib_is_aout $f || continue 331 1.19 mhitch mv -f $f $root/emul/aout/usr/lib || return 1 332 1.19 mhitch done 333 1.19 mhitch return 0 334 1.19 mhitch } 335 1.19 mhitch 336 1.19 mhitch md_x_shlib_set_14=" \ 337 1.19 mhitch libICE.so.6.3 \ 338 1.19 mhitch libPEX5.so.6.0 \ 339 1.19 mhitch libSM.so.6.0 \ 340 1.19 mhitch libX11.so.6.1 \ 341 1.19 mhitch libXIE.so.6.0 \ 342 1.19 mhitch libXaw.so.6.1 \ 343 1.19 mhitch libXext.so.6.3 \ 344 1.19 mhitch libXi.so.6.0 \ 345 1.19 mhitch libXmu.so.6.0 \ 346 1.19 mhitch libXp.so.6.2 \ 347 1.19 mhitch libXt.so.6.0 \ 348 1.19 mhitch libXtst.so.6.1 \ 349 1.19 mhitch liboldX.so.6.0" 350 1.19 mhitch 351 1.19 mhitch md_mv_x_lib() { 352 1.19 mhitch local root xlibdir 353 1.19 mhitch root=$1 354 1.19 mhitch xlibdir=$2 355 1.19 mhitch for f in $md_x_shlib_set_14; do 356 1.19 mhitch md_lib_is_aout $root/$xlibdir/$f || continue 357 1.19 mhitch mv -f $root/$xlibdir/$f $root/emul/aout/$xlibdir || return 1 358 1.19 mhitch done 359 1.19 mhitch return 0 360 1.19 mhitch } 361 1.19 mhitch 362 1.19 mhitch md_mv_aout_libs() 363 1.19 mhitch { 364 1.19 mhitch local root xlibdir 365 1.19 mhitch 366 1.19 mhitch root=/mnt # XXX - should be global 367 1.19 mhitch 368 1.19 mhitch if [ -d $root/emul/aout/. ]; then 369 1.19 mhitch echo "Using existing /emul/aout directory" 370 1.19 mhitch else 371 1.35 andvar echo "Creating /emul/aout hierarchy" 372 1.19 mhitch mkdir -p $root/usr/aout || return 1 373 1.19 mhitch 374 1.19 mhitch if [ ! -d $root/emul ]; then 375 1.19 mhitch mkdir $root/emul || return 1 376 1.19 mhitch fi 377 1.19 mhitch 378 1.19 mhitch if [ -h $root/emul/aout ]; then 379 1.19 mhitch echo "Preserving existing symbolic link from /emul/aout" 380 1.19 mhitch mv -f $root/emul/aout $root/emul/aout.old || return 1 381 1.19 mhitch fi 382 1.19 mhitch 383 1.19 mhitch ln -s ../usr/aout $root/emul/aout || return 1 384 1.19 mhitch fi 385 1.19 mhitch 386 1.19 mhitch # Create /emul/aout/etc and /emul/aout/usr/lib 387 1.19 mhitch if [ ! -d $root/emul/aout/etc ]; then 388 1.19 mhitch mkdir $root/emul/aout/etc || return 1 389 1.19 mhitch fi 390 1.19 mhitch if [ ! -d $root/emul/aout/usr/lib ]; then 391 1.19 mhitch mkdir -p $root/emul/aout/usr/lib || return 1 392 1.19 mhitch fi 393 1.19 mhitch 394 1.19 mhitch # Move ld.so.conf 395 1.19 mhitch if [ -f $root/etc/ld.so.conf ]; then 396 1.19 mhitch mv -f $root/etc/ld.so.conf $root/emul/aout/etc || return 1 397 1.19 mhitch fi 398 1.19 mhitch 399 1.19 mhitch # Finally, move the aout shared libraries from /usr/lib 400 1.19 mhitch md_mv_usr_lib $root || return 1 401 1.19 mhitch 402 1.19 mhitch # If X11 is installed, move the those libraries as well 403 1.34 abs xlibdir="/usr/X11R7/lib" 404 1.19 mhitch if [ -d $root/$xlibdir/. ]; then 405 1.19 mhitch mkdir -p $root/emul/aout/$xlibdir || return 1 406 1.19 mhitch md_mv_x_lib $root $xlibdir || return 1 407 1.19 mhitch fi 408 1.19 mhitch 409 1.19 mhitch echo "a.out emulation environment setup completed." 410 1.19 mhitch } 411 1.19 mhitch 412 1.19 mhitch md_prepare_upgrade() 413 1.19 mhitch { 414 1.19 mhitch cat << 'EOF' 415 1.19 mhitch This release uses the ELF binary object format. Existing (a.out) binaries 416 1.19 mhitch can still be used on your system after it has been upgraded, provided 417 1.19 mhitch that the shared libraries needed by those binaries are made available 418 1.19 mhitch in the filesystem hierarchy rooted at /emul/aout. 419 1.19 mhitch 420 1.19 mhitch This upgrade procedure will now establish this hierarchy by moving all 421 1.19 mhitch shared libraries in a.out format found in /usr/lib to /emul/aout/usr/lib. 422 1.19 mhitch It will also move the X11 shared libraries in a.out format from previous 423 1.22 mhitch NetBSD/amiga X11 installation sets, if they are installed. 424 1.19 mhitch 425 1.19 mhitch EOF 426 1.19 mhitch md_mv_aout_libs || { 427 1.19 mhitch echo "Failed to setup a.out emulation environment" 428 1.19 mhitch return 1 429 1.19 mhitch } 430 1.19 mhitch return 0 431 1.19 mhitch } 432 1.19 mhitch 433 1.19 mhitch # Flag to notify upgrade.sh of the existence of md_prepare_upgrade() 434 1.19 mhitch md_upgrade_prep_needed=1 435