xref: /netbsd-src/distrib/amiga/miniroot/install.md (revision 5dd36a3bc8bf2a9dec29ceb6349550414570c447)
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