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