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