xref: /netbsd-src/distrib/sparc/install.md (revision 67cf5ffde0914e50cb8ecd21335ff97aeff21d10)
1#	$NetBSD: install.md,v 1.26 2022/05/28 21:57:39 andvar 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#
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 xbase xcomp xfont xserver"
38
39if [ "$MODE" = upgrade ]; then
40	RELOCATED_FILES_13="${RELOCATED_FILES_13} /usr/sbin/installboot /usr/mdec/installboot"
41fi
42
43md_set_term() {
44	if [ ! -z "$TERM" ]; then
45		return
46	fi
47	echo -n "Specify terminal type [vt100]: "
48	getresp "vt100"
49	TERM="$resp"
50	export TERM
51}
52
53md_makerootwritable() {
54	# Was: do_mfs_mount "/tmp" "2048"
55	# /tmp is the mount point
56	# 2048 is the size in DEV_BIZE blocks
57
58	umount /tmp > /dev/null 2>&1
59	if ! mount_mfs -s 2048 swap /tmp ; then
60		cat << \__mfs_failed_1
61
62FATAL ERROR: Can't mount the memory filesystem.
63
64__mfs_failed_1
65		exit
66	fi
67
68	# Bleh.  Give mount_mfs a chance to DTRT.
69	sleep 2
70}
71
72md_get_diskdevs() {
73	# return available disk devices
74	mi_filter_dmesg | sed -n -e 's/^\(sd[0-9]\) .*/\1/p' -e 's/^\(x[dy][0-9]\) .*/\1/p' | sort -u
75}
76
77md_get_cddevs() {
78	# return available CDROM devices
79	mi_filter_dmesg | sed -n -e 's/^\(cd[0-9]\) .*/\1/p' | sort -u
80}
81
82md_get_ifdevs() {
83	# return available network devices
84	mi_filter_dmesg | sed -n -e 's/^\(le[0-9]\) .*/\1/p' -e 's/^\(ie[0-9]\) .*/\1/p' | sort -u
85}
86
87md_get_partition_range() {
88    # return range of valid partition letters
89    echo "[a-h]"
90}
91
92md_installboot() {
93	# $1 is the boot disk
94	echo "Installing boot block..."
95	cp -p /usr/mdec/boot /mnt/boot
96	/usr/sbin/installboot -v /dev/r${1}a /usr/mdec/bootxx /boot
97}
98
99md_native_fstype() {
100}
101
102md_native_fsopts() {
103}
104
105md_checkfordisklabel() {
106	# $1 is the disk to check
107	local rval
108	local cfdl
109
110	cfdl=$(disklabel $1 2>&1 > /dev/null | \
111	    sed -n -e '/no disk label/{s/.*/ndl/p;q;}; \
112		 /disk label corrupted/{s/.*/dlc/p;q;}; \
113		 $s/.*/no/p')
114	if [ x$cfdl = xndl ]; then
115		rval=1
116	elif [ x$cfdl = xdlc ]; then
117		rval=2
118	else
119		rval=0
120	fi
121
122	return $rval
123}
124
125md_prep_disklabel()
126{
127	local _disk
128
129	_disk=$1
130	md_checkfordisklabel $_disk
131	case $? in
132	0)
133		echo -n "Do you wish to edit the disklabel on $_disk? [y]"
134		;;
135	1)
136		echo "WARNING: Disk $_disk has no label"
137		echo -n "Do you want to create one with the disklabel editor? [y]"
138		;;
139	2)
140		echo "WARNING: Label on disk $_disk is corrupted"
141		echo -n "Do you want to try and repair the damage using the disklabel editor? [y]"
142		;;
143	esac
144
145	getresp "y"
146	case "$resp" in
147	y*|Y*) ;;
148	*)	return ;;
149	esac
150
151	# display example
152	cat << \__md_prep_disklabel_1
153
154Here is an example of what the partition information will look like once
155you have entered the disklabel editor. Disk partition sizes and offsets
156are in sector (most likely 512 bytes) units. Make sure these size/offset
157pairs are on cylinder boundaries (the number of sector per cylinder is
158given in the 'sectors/cylinder' entry, which is not shown here).
159
160Do not change any parameters except the partition layout and the label name.
161It's probably also wisest not to touch the '8 partitions:' line, even
162in case you have defined less than eight partitions.
163
164[Example]
1658 partitions:
166#        size   offset    fstype   [fsize bsize   cpg]
167  a:    50176        0    4.2BSD     1024  8192    16   # (Cyl.    0 - 111)
168  b:    64512    50176      swap                        # (Cyl.  112 - 255)
169  c:   640192        0   unknown                        # (Cyl.    0 - 1428)
170  d:   525504   114688    4.2BSD     1024  8192    16   # (Cyl.  256 - 1428)
171[End of example]
172
173__md_prep_disklabel_1
174	echo -n "Press [Enter] to continue "
175	getresp ""
176	disklabel -W ${_disk}
177	if [ -f /usr/bin/vi ]; then
178		disklabel -e ${_disk}
179	else
180		disklabel -i ${_disk}
181	fi
182}
183
184md_copy_kernel() {
185	if [ ! -f /mnt/netbsd ]; then
186		echo -n "WARNING: No kernel installed; "
187		if [ -f /netbsd ]; then
188			echo -n "copying miniroot kernel... "
189			cp -p /netbsd /mnt/netbsd
190			echo "done."
191		else
192			echo -n "install a kernel manually."
193		fi
194	fi
195}
196
197md_welcome_banner() {
198{
199	if [ "$MODE" = "install" ]; then
200		echo ""
201		echo "Welcome to the NetBSD/sparc ${VERSION} installation program."
202		cat << \__welcome_banner_1
203
204This program is designed to help you put NetBSD on your disk,
205in a simple and rational way.  You'll be asked several questions,
206and it would probably be useful to have your disk's hardware
207manual, the installation notes, and a calculator handy.
208__welcome_banner_1
209
210	else
211		echo ""
212		echo "Welcome to the NetBSD/sparc ${VERSION} upgrade program."
213		cat << \__welcome_banner_2
214
215This program is designed to help you upgrade your NetBSD system in a
216simple and rational way.
217
218As a reminder, installing the 'etc' binary set is NOT recommended.
219Once the rest of your system has been upgraded, you should manually
220merge any changes to files in the 'etc' set into those files which
221already exist on your system.
222__welcome_banner_2
223	fi
224
225cat << \__welcome_banner_3
226
227As with anything which modifies your disk's contents, this
228program can cause SIGNIFICANT data loss, and you are advised
229to make sure your data is backed up before beginning the
230installation process.
231
232Default answers are displayed in brackets after the questions.
233You can hit Control-C at any time to quit, but if you do so at a
234prompt, you may have to hit return.  Also, quitting in the middle of
235installation may leave your system in an inconsistent state.
236
237__welcome_banner_3
238} | more
239}
240
241md_not_going_to_install() {
242	cat << \__not_going_to_install_1
243
244OK, then.  Enter 'halt' at the prompt to halt the machine.  Once the
245machine has halted, power-cycle the system to load new boot code.
246
247__not_going_to_install_1
248}
249
250md_congrats() {
251	local what;
252	if [ "$MODE" = "install" ]; then
253		what="installed";
254	else
255		what="upgraded";
256	fi
257	cat << __congratulations_1
258
259CONGRATULATIONS!  You have successfully $what NetBSD!
260To boot the installed system, enter halt at the command prompt. Once the
261system has halted, reset the machine and boot from the disk.
262
263__congratulations_1
264}
265
266md_lib_is_aout() {
267	local r
268	test -h $1 && return 1
269	test -f $1 || return 1
270
271	[ "$(dd if=$1 bs=1 skip=1 count=3 2> /dev/null)" = "ELF" ] && return 1
272	return 0
273}
274
275
276md_mv_usr_lib() {
277	local root
278	root=$1
279	for f in $root/usr/lib/lib*.so.[0-9]*.[0-9]* ; do
280		md_lib_is_aout $f || continue
281		mv -f $f $root/emul/aout/usr/lib || return 1
282	done
283	return 0
284}
285
286md_x_shlib_set_14=" \
287	libICE.so.6.3 \
288	libPEX5.so.6.0 \
289	libSM.so.6.0 \
290	libX11.so.6.1 \
291	libXIE.so.6.0 \
292	libXaw.so.6.1 \
293	libXext.so.6.3 \
294	libXi.so.6.0 \
295	libXmu.so.6.0 \
296	libXp.so.6.2 \
297	libXt.so.6.0 \
298	libXtst.so.6.1 \
299	liboldX.so.6.0"
300
301md_mv_x_lib() {
302	local root xlibdir
303	root=$1
304	xlibdir=$2
305	for f in $md_x_shlib_set_14; do
306		md_lib_is_aout $root/$xlibdir/$f || continue
307		mv -f $root/$xlibdir/$f $root/emul/aout/$xlibdir || return 1
308	done
309	return 0
310}
311
312md_mv_aout_libs()
313{
314	local root xlibdir
315
316	root=/mnt	# XXX - should be global
317
318	if [ -d $root/emul/aout/. ]; then
319		echo "Using existing /emul/aout directory"
320	else
321		echo "Creating /emul/aout hierarchy"
322		mkdir -p $root/usr/aout || return 1
323
324		if [ ! -d $root/emul ]; then
325			mkdir $root/emul || return 1
326		fi
327
328		if [ -h $root/emul/aout ]; then
329			echo "Preserving existing symbolic link from /emul/aout"
330			mv -f $root/emul/aout $root/emul/aout.old || return 1
331		fi
332
333		ln -s ../usr/aout $root/emul/aout || return 1
334	fi
335
336	# Create /emul/aout/etc and /emul/aout/usr/lib
337	if [ ! -d $root/emul/aout/etc ]; then
338		mkdir $root/emul/aout/etc || return 1
339	fi
340	if [ ! -d $root/emul/aout/usr/lib ]; then
341		mkdir -p $root/emul/aout/usr/lib || return 1
342	fi
343
344	# Move ld.so.conf
345	if [ -f $root/etc/ld.so.conf ]; then
346		mv -f $root/etc/ld.so.conf $root/emul/aout/etc || return 1
347	fi
348
349	# Finally, move the aout shared libraries from /usr/lib
350	md_mv_usr_lib $root || return 1
351
352	# If X11 is installed, move the those libraries as well
353	xlibdir="/usr/X11R7/lib"
354	if [ -d $root/$xlibdir/. ]; then
355		mkdir -p $root/emul/aout/$xlibdir || return 1
356		md_mv_x_lib $root $xlibdir || return 1
357	fi
358
359	echo "a.out emulation environment setup completed."
360}
361
362md_prepare_upgrade()
363{
364cat << 'EOF'
365This release uses the ELF binary object format. Existing (a.out) binaries
366can still be used on your system after it has been upgraded, provided
367that the shared libraries needed by those binaries are made available
368in the filesystem hierarchy rooted at /emul/aout.
369
370This upgrade procedure will now establish this hierarchy by moving all
371shared libraries in a.out format found in /usr/lib to /emul/aout/usr/lib.
372It will also move the X11 shared libraries in a.out format from previous
373NetBSD/sparc X11 installation sets, if they are installed.
374
375EOF
376	md_mv_aout_libs || {
377		echo "Failed to setup a.out emulation environment"
378		return 1
379	}
380	return 0
381}
382
383# Flag to notify upgrade.sh of the existence of md_prepare_upgrade()
384md_upgrade_prep_needed=1
385