Home | History | Annotate | Line # | Download | only in miniroot
install.md revision 1.13
      1 #	$NetBSD: install.md,v 1.13 2000/10/24 19:43:23 is Exp $
      2 #
      3 #
      4 # Copyright (c) 1996 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 # 3. All advertising materials mentioning features or use of this software
     19 #    must display the following acknowledgement:
     20 #        This product includes software developed by the NetBSD
     21 #        Foundation, Inc. and its contributors.
     22 # 4. Neither the name of The NetBSD Foundation nor the names of its
     23 #    contributors may be used to endorse or promote products derived
     24 #    from this software without specific prior written permission.
     25 #
     26 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     27 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     28 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     29 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     30 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     31 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     32 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     33 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     34 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     35 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     36 # POSSIBILITY OF SUCH DAMAGE.
     37 #
     38 
     39 #
     40 # machine dependent section of installation/upgrade script.
     41 #
     42 
     43 # Machine-dependent install sets
     44 MDSETS="kern xbase xcomp xcontrib xfont xserver"
     45 
     46 md_set_term() {
     47 	if [ ! -z "$TERM" ]; then
     48 		return
     49 	fi
     50 	echo -n "Specify terminal type [vt220]: "
     51 	getresp "vt220"
     52 	TERM="$resp"
     53 	export TERM
     54 }
     55 
     56 __mount_kernfs() {
     57 	#
     58 	# Force kern_fs to be mounted
     59 	#
     60 	if [ ! -d /kern -o ! -e /kern/msgbuf ]; then
     61 		mkdir /kern > /dev/null 2>&1
     62 		/sbin/mount_kernfs /kern /kern >/dev/null 2>&1
     63 	fi
     64 }
     65 
     66 md_makerootwritable() {
     67 	# Mount root rw for convenience of the tester ;-)
     68 	if [ ! -e /tmp/.root_writable ]; then
     69 		__mount_kernfs
     70 		# XXX: Use /kern/rootdev instead?
     71 		mount -u /kern/rootdev / > /dev/null 2>&1
     72 		cp /dev/null /tmp/.root_writable
     73 	fi
     74 }
     75 
     76 md_get_diskdevs() {
     77 	# return available disk devices
     78 	__mount_kernfs
     79 	sed -n -e '/^[sw]d[0-9] /s/ .*//p' \
     80 		< /kern/msgbuf | sort -u
     81 }
     82 
     83 md_get_cddevs() {
     84 	# return available CDROM devices
     85 	__mount_kernfs
     86 	sed -n -e '/^cd[0-9] /s/ .*//p' \
     87 		< /kern/msgbuf | sort -u
     88 }
     89 
     90 md_get_partition_range() {
     91 	# return an expression describing the valid partition id's
     92 	echo '[a-p]'
     93 }
     94 
     95 md_installboot() {
     96 	if [ -x /mnt/usr/mdec/installboot ]; then
     97 		echo -n "Should a boot block be installed? [y] "
     98 		getresp "y"
     99 		case "$resp" in
    100 			y*|Y*)
    101 				echo "Installing boot block..."
    102 				chroot /mnt /usr/mdec/installboot /usr/mdec/xxboot /dev/r${1}a
    103 				;;
    104 			*)
    105 				echo "No bootblock installed."
    106 				;;
    107 		esac
    108 	elif [ "$MODE" = "install" ]; then
    109 		cat << \__md_installboot_1
    110 There is no installboot program found on the installed filesystems. No boot
    111 programs are installed.
    112 __md_installboot_1
    113 	else
    114 		cat << \__md_installboot_2
    115 There is no installboot program found on the upgraded filesystems. No boot
    116 programs are installed.
    117 __md_installboot_2
    118 	fi
    119 }
    120 
    121 md_native_fstype() {
    122 	echo "ados"
    123 }
    124 
    125 md_native_fsopts() {
    126 	echo "ro"
    127 }
    128 
    129 md_prep_disklabel() {
    130 	_DKDEVS=`md_get_diskdevs`
    131 	echo "If you like, you can now examine the labels of your disks."
    132 	echo ""
    133 	echo -n "Available are "${_DKDEVS}". Look at which? [skip this step] "
    134 	getresp	"done"
    135 	while [ "X$resp" != "Xdone" ]; do
    136 		echo ""
    137 		disklabel ${resp}
    138 		echo ""
    139 		echo -n "Available are "${_DKDEVS}". Look at which? [done] "
    140 		getresp	"done"
    141 	done
    142 	cat << \__prep_disklabel_1
    143 
    144 As a reminder: the 'c' partition is assigned to the whole disk and can't
    145 normally be used for a any file system!
    146 
    147 __prep_disklabel_1
    148 }
    149 
    150 md_labeldisk() {
    151 }
    152 
    153 md_welcome_banner() {
    154 	if [ "$MODE" = "install" ]; then
    155 		echo ""
    156 		echo "Welcome to the NetBSD/amiga ${VERSION} installation program."
    157 		cat << \__welcome_banner_1
    158 
    159 This program is designed to help you put NetBSD on your disk,
    160 in a simple and rational way.  You'll be asked several questions,
    161 and it would probably be useful to have your disk's hardware
    162 manual, the installation notes, and a calculator handy.
    163 __welcome_banner_1
    164 
    165 	else
    166 		echo ""
    167 		echo "Welcome to the NetBSD/amiga ${VERSION} upgrade program."
    168 		cat << \__welcome_banner_2
    169 
    170 This program is designed to help you upgrade your NetBSD system in a
    171 simple and rational way.
    172 
    173 As a reminder, installing the `etc' binary set is NOT recommended.
    174 Once the rest of your system has been upgraded, you should manually
    175 merge any changes to files in the `etc' set into those files which
    176 already exist on your system.
    177 __welcome_banner_2
    178 	fi
    179 
    180 cat << \__welcome_banner_3
    181 
    182 As with anything which modifies your disk's contents, this
    183 program can cause SIGNIFICANT data loss, and you are advised
    184 to make sure your data is backed up before beginning the
    185 installation process.
    186 
    187 Default answers are displayed in brackets after the questions.
    188 You can hit Control-C at any time to quit, but if you do so at a
    189 prompt, you may have to hit return.  Also, quitting in the middle of
    190 installation may leave your system in an inconsistent state.
    191 
    192 __welcome_banner_3
    193 }
    194 
    195 md_not_going_to_install() {
    196 	cat << \__not_going_to_install_1
    197 
    198 OK, then.  Enter `halt' at the prompt to halt the machine.  Once the
    199 machine has halted, power-cycle the system to load new boot code.
    200 
    201 Note: If you wish to have another try. Just type '^D' at the prompt. After
    202       a moment, the installer will restart itself.
    203 
    204 __not_going_to_install_1
    205 }
    206 
    207 md_congrats() {
    208 	local what;
    209 	if [ "$MODE" = "install" ]; then
    210 		what="installed";
    211 	else
    212 		what="upgraded";
    213 	fi
    214 	cat << __congratulations_1
    215 
    216 CONGRATULATIONS!  You have successfully $what NetBSD!
    217 To boot the installed system, enter halt at the command prompt. Once the
    218 system has halted, reset the machine and boot from the disk.
    219 
    220 Note: If you wish to have another try. Just type '^D' at the prompt. After
    221       a moment, the installer will restart itself.
    222 
    223 __congratulations_1
    224 }
    225 
    226 md_copy_kernel() {
    227 	# This is largely a copy of install_disk and install_from_mounted_fs()
    228 	# with some special frobbing.
    229 
    230 	local _directory
    231 	local _sets
    232 	local _filename
    233 	local _f
    234 
    235 	if [ "$MODE" = "install" ]; then
    236 		echo -n "Adding keymap initialization to rc.local..."
    237 		echo /usr/sbin/loadkmap ${__keymap__} >> /mnt/etc/rc.local
    238 		echo "done."
    239 	fi
    240 
    241 	if [ -e /netbsd ]; then
    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 [ "X${resp}" = X"" ]; 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