summaryrefslogtreecommitdiff
path: root/distrib/powerpc/ramdisk/install.sh
diff options
context:
space:
mode:
Diffstat (limited to 'distrib/powerpc/ramdisk/install.sh')
-rw-r--r--distrib/powerpc/ramdisk/install.sh578
1 files changed, 578 insertions, 0 deletions
diff --git a/distrib/powerpc/ramdisk/install.sh b/distrib/powerpc/ramdisk/install.sh
new file mode 100644
index 00000000000..f918fe5b198
--- /dev/null
+++ b/distrib/powerpc/ramdisk/install.sh
@@ -0,0 +1,578 @@
+#!/bin/sh
+# $OpenBSD: install.sh,v 1.1 1998/05/29 04:34:20 rahnds Exp $
+# $NetBSD: install.sh,v 1.5.2.8 1996/08/27 18:15:05 gwr Exp $
+#
+# Copyright (c) 1997,1998 Todd Miller, Theo de Raadt
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by Todd Miller and
+# Theo de Raadt
+# 4. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Copyright (c) 1996 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Jason R. Thorpe.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by the NetBSD
+# Foundation, Inc. and its contributors.
+# 4. Neither the name of The NetBSD Foundation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+# OpenBSD installation script.
+# In a perfect world, this would be a nice C program, with a reasonable
+# user interface.
+
+FILESYSTEMS="/tmp/filesystems" # used thoughout
+FQDN="" # domain name
+
+trap "umount /tmp > /dev/null 2>&1" 0
+
+MODE="install"
+
+# include machine-dependent functions
+# The following functions must be provided:
+# md_copy_kernel() - copy a kernel to the installed disk
+# md_get_diskdevs() - return available disk devices
+# md_get_cddevs() - return available CD-ROM devices
+# md_get_ifdevs() - return available network interfaces
+# md_get_partition_range() - return range of valid partition letters
+# md_installboot() - install boot-blocks on disk
+# md_labeldisk() - put label on a disk
+# md_prep_disklabel() - label the root disk
+# md_welcome_banner() - display friendly message
+# md_not_going_to_install() - display friendly message
+# md_congrats() - display friendly message
+# md_native_fstype() - native filesystem type for disk installs
+# md_native_fsopts() - native filesystem options for disk installs
+# md_makerootwritable() - make root writable (at least /tmp)
+# md_machine_arch() - get machine architecture
+
+# include machine dependent subroutines
+. install.md
+
+# include common subroutines
+. install.sub
+
+# which sets?
+THESETS="$ALLSETS $MDSETS"
+
+if [ "`df /`" = "`df /mnt`" ]; then
+ # Good {morning,afternoon,evening,night}.
+ echo ==================================================
+ md_welcome_banner
+ echo -n "Proceed with installation? [n] "
+else
+ echo "You seem to be trying to restart an interrupted installation!"
+ echo ""
+ echo "You can try to skip the disk preparation steps and continue,"
+ echo "otherwise you should reboot the miniroot and start over..."
+ echo -n "Skip disk initialization? [n] "
+fi
+getresp "n"
+case "$resp" in
+ y*|Y*)
+ echo ""
+ echo "Cool! Let's get to it..."
+ ;;
+ *)
+ md_not_going_to_install
+ exit
+ ;;
+esac
+
+# XXX Work around vnode aliasing bug (thanks for the tip, Chris...)
+ls -l /dev > /dev/null 2>&1
+
+# Deal with terminal issues
+md_set_term
+
+# Get timezone info
+get_timezone
+
+# Make sure we can write files (at least in /tmp)
+# This might make an MFS mount on /tmp, or it may
+# just re-mount the root with read-write enabled.
+if [ "`df /`" = "`df /tmp`" ]; then
+ md_makerootwritable
+fi
+
+# Get the machine architecture (must be done after md_makerootwritable)
+ARCH=`md_machine_arch`
+
+if [ "`df /`" = "`df /mnt`" ]; then
+ # Install the shadowed disktab file; lets us write to it for temporary
+ # purposes without mounting the miniroot read-write.
+ if [ -f /etc/disktab.shadow ]; then
+ cp /etc/disktab.shadow /tmp/disktab.shadow
+ fi
+
+ while : ; do
+ if [ "X${ROOTDISK}" = "X" ]; then
+ while [ "X${ROOTDISK}" = "X" ]; do
+ getrootdisk
+ done
+ DISK=$ROOTDISK
+ else
+ DISK=""
+ while [ "X${DISK}" = "X" ]; do
+ getanotherdisk
+ done
+ if [ "${DISK}" = "done" ]; then
+ break
+ fi
+ fi
+
+ # Deal with disklabels, including editing the root disklabel
+ # and labeling additional disks. This is machine-dependent since
+ # some platforms may not be able to provide this functionality.
+ md_prep_disklabel ${DISK}
+
+ # Assume partition 'a' of $ROOTDISK is for the root filesystem.
+ # Loop and get the rest.
+ # XXX ASSUMES THAT THE USER DOESN'T PROVIDE BOGUS INPUT.
+ cat << __get_filesystems_1
+
+You will now have the opportunity to enter filesystem information for ${DISK}.
+You will be prompted for the mount point (full path, including the prepending
+'/' character) for each BSD partition on ${DISK}. Enter "none" to skip a
+partition or "done" when you are finished.
+__get_filesystems_1
+
+ if [ "${DISK}" = "${ROOTDISK}" ]; then
+ echo
+ echo "The following partitions will be used for the root filesystem and swap:"
+ echo " ${ROOTDISK}a /"
+ echo " ${ROOTDISK}b swap"
+
+ echo "${ROOTDISK}a /" > ${FILESYSTEMS}
+ fi
+
+ # XXX - allow the user to name mount points on disks other than ROOTDISK
+ # also allow a way to enter non-BSD partitions (but don't newfs!)
+ # Get the list of BSD partitions and store sizes
+ _npartitions=0
+ for _p in `disklabel ${DISK} 2>&1 | grep '^ *[a-p]:.*BSD' | sed 's/^ *\([a-p]\): *\([0-9][0-9]*\) .*/\1\2/'`; do
+ _pp=`firstchar ${_p}`
+ if [ "${DISK}" = "${ROOTDISK}" -a "$_pp" = "a" ]; then
+ continue
+ fi
+ _ps=`echo ${_p} | sed 's/^.//'`
+ _partitions[${_npartitions}]=${_pp}
+ _psizes[${_npartitions}]=${_ps}
+ _npartitions=$(( ${_npartitions} + 1 ))
+ done
+
+ # Now prompt the user for the mount points. Loop until "done"
+ echo ""
+ _i=0
+ resp="X"
+ while [ $_npartitions -gt 0 -a X${resp} != X"done" ]; do
+ _pp=${_partitions[${_i}]}
+ _ps=$(( ${_psizes[${_i}]} / 2 ))
+ _mp=${_mount_points[${_i}]}
+
+ # Get the mount point from the user
+ while : ; do
+ echo -n "Mount point for ${DISK}${_pp} (size=${_ps}k) [$_mp, RET, none, or done]? "
+ getresp "$_mp"
+ case "X${resp}" in
+ X/*) _mount_points[${_i}]=$resp
+ break ;;
+ Xdone|X)
+ break ;;
+ Xnone) _mount_points[${_i}]=
+ break;;
+ *) echo "mount point must be an absolute path!";;
+ esac
+ done
+ _i=$(( ${_i} + 1 ))
+ if [ $_i -ge $_npartitions ]; then
+ _i=0
+ fi
+ done
+
+ # Now write it out
+ _i=0
+ while test $_i -lt $_npartitions; do
+ if [ -n "${_mount_points[${_i}]}" ]; then
+ echo "${DISK}${_partitions[${_i}]} ${_mount_points[${_i}]}" >> ${FILESYSTEMS}
+ _mount_points[${_i}]=""
+ fi
+ _i=$(( ${_i} + 1 ))
+ done
+ done
+
+ echo ""
+ echo "You have configured the following devices and mount points:"
+ echo ""
+ cat ${FILESYSTEMS}
+ echo ""
+ echo "Filesystems will now be created on these devices."
+ echo "If you made any mistakes, you may edit this now."
+ echo -n "Edit using ${EDITOR}? [n] "
+ getresp "n"
+ case "$resp" in
+ y*|Y*)
+ ${EDITOR} ${FILESYSTEMS}
+ ;;
+ *)
+ ;;
+ esac
+ echo
+ echo "============================================================"
+ echo "The next step will overwrite any existing data on:"
+ (
+ echo -n " "
+ while read _device_name _junk; do
+ echo -n "${_device_name} "
+ done
+ echo ""
+ ) < ${FILESYSTEMS}
+ echo ""
+
+ echo -n "Are you really sure that you're ready to proceed? [n] "
+ getresp "n"
+ case "$resp" in
+ y*|Y*)
+ ;;
+ *)
+ echo "ok, try again later..."
+ exit
+ ;;
+ esac
+
+ # Loop though the file, place filesystems on each device.
+ echo "Creating filesystems..."
+ (
+ while read _device_name _junk; do
+ newfs /dev/r${_device_name}
+ done
+ ) < ${FILESYSTEMS}
+else
+ # Get the root device
+ ROOTDISK=`df /mnt | sed -e '/^\//!d' -e 's/\/dev\/\([^ ]*\)[a-p] .*/\1/'`
+ while [ "X${ROOTDISK}" = "X" ]; do
+ getrootdisk
+ done
+fi
+
+# Get network configuration information, and store it for placement in the
+# root filesystem later.
+cat << \__network_config_1
+
+You will now be given the opportunity to configure the network. This will be
+useful if you need to transfer the installation sets via FTP, HTTP, or NFS.
+Even if you choose not to transfer installation sets that way, this information
+will be preserved and copied into the new root filesystem.
+
+__network_config_1
+echo -n "Configure the network? [y] "
+getresp "y"
+case "$resp" in
+ y*|Y*)
+ resp="" # force at least one iteration
+ _nam=""
+ if [ -f /tmp/myname ]; then
+ _nam=`cat /tmp/myname`
+ fi
+ while [ "X${resp}" = X"" ]; do
+ echo -n "Enter system hostname (short form): [$_nam] "
+ getresp "$_nam"
+ done
+ hostname $resp
+ echo $resp > /tmp/myname
+
+ resp="" # force at least one iteration
+ if [ -f /tmp/resolv.conf ]; then
+ FQDN=`grep '^domain ' /tmp/resolv.conf | \
+ sed -e 's/^domain //'`
+ fi
+ while [ "X${resp}" = X"" ]; do
+ echo -n "Enter DNS domain name: [$FQDN] "
+ getresp "$FQDN"
+ done
+ FQDN=$resp
+
+ configurenetwork
+
+ resp="none"
+ if [ -f /tmp/mygate ]; then
+ resp=`cat /tmp/mygate`
+ fi
+ echo -n "Enter IP address of default route: [$resp] "
+ getresp "$resp"
+ if [ "X${resp}" != X"none" ]; then
+ route delete default > /dev/null 2>&1
+ if route add default $resp > /dev/null ; then
+ echo $resp > /tmp/mygate
+ fi
+ fi
+
+ resp="none"
+ if [ -f /tmp/resolv.conf ]; then
+ resp=`grep '^nameserver ' /tmp/resolv.conf | \
+ sed -e 's/^nameserver //'`
+ fi
+ echo -n "Enter IP address of primary nameserver: [$resp] "
+ getresp "$resp"
+ if [ "X${resp}" != X"none" ]; then
+ echo "domain $FQDN" > /tmp/resolv.conf
+ echo "nameserver $resp" >> /tmp/resolv.conf
+ echo "search $FQDN" >> /tmp/resolv.conf
+ echo "lookup file bind" >> /tmp/resolv.conf
+
+ echo -n "Would you like to use the nameserver now? [y] "
+ getresp "y"
+ case "$resp" in
+ y*|Y*)
+ cp /tmp/resolv.conf \
+ /tmp/resolv.conf.shadow
+ ;;
+
+ *)
+ ;;
+ esac
+ fi
+
+ if [ ! -f /tmp/resolv.conf.shadow ]; then
+ echo ""
+ echo "The host table is as follows:"
+ echo ""
+ cat /tmp/hosts
+ cat << __hosts_table_1
+
+You may want to edit the host table in the event that you are doing an
+NFS installation or an FTP installation without a name server and want
+to refer to the server by name rather than by its numeric ip address.
+__hosts_table_1
+ echo -n "Would you like to edit the host table with ${EDITOR}? [n] "
+ getresp "n"
+ case "$resp" in
+ y*|Y*)
+ ${EDITOR} /tmp/hosts
+ ;;
+
+ *)
+ ;;
+ esac
+ fi
+
+ cat << \__network_config_2
+
+You will now be given the opportunity to escape to the command shell to do
+any additional network configuration you may need. This may include adding
+additional routes, if needed. In addition, you might take this opportunity
+to redo the default route in the event that it failed above.
+__network_config_2
+ echo -n "Escape to shell? [n] "
+ getresp "n"
+ case "$resp" in
+ y*|Y*)
+ echo "Type 'exit' to return to install."
+ sh
+ ;;
+
+ *)
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+esac
+
+if [ "`df /`" = "`df /mnt`" ]; then
+ # Now that the network has been configured, it is safe to configure the
+ # fstab.
+ (
+ while read _dev _mp; do
+ if [ "$_mp" = "/" ]; then
+ echo /dev/$_dev $_mp ffs rw 1 1
+ else
+ echo /dev/$_dev $_mp ffs rw 1 2
+ fi
+ done
+ ) < ${FILESYSTEMS} > /tmp/fstab
+
+# XXX We no longer do the following. It is not neccessary. It can be done
+# XXX after the install is complete.
+#
+# echo "The fstab is configured as follows:"
+# echo ""
+# cat /tmp/fstab
+# cat << \__fstab_config_1
+#
+#You may wish to edit the fstab. You may also wish to take this opportunity to
+#place NFS mounts in the fstab (this would be especially useful if you plan to
+#keep '/usr' on an NFS server.
+#__fstab_config_1
+# echo -n "Edit the fstab with ${EDITOR}? [n] "
+# getresp "n"
+# case "$resp" in
+# y*|Y*)
+# ${EDITOR} /tmp/fstab
+# ;;
+#
+# *)
+# ;;
+# esac
+#
+# echo ""
+
+ munge_fstab /tmp/fstab /tmp/fstab.shadow
+ mount_fs /tmp/fstab.shadow
+fi
+
+mount | while read line; do
+ set -- $line
+ if [ "$2" = "/" -a "$3" = "nfs" ]; then
+ echo "You appear to be running diskless."
+ echo -n "Are the install sets on one of your currently mounted filesystems? [n] "
+ getresp "n"
+ case "$resp" in
+ y*|Y*)
+ get_localdir
+ ;;
+ *)
+ ;;
+ esac
+ fi
+done
+
+resp="" # force one iteration
+echo
+echo 'Please enter the initial password that the root acount will have.'
+while [ "X${resp}" = X"" ]; do
+ echo -n "Password (will not echo): "
+ stty -echo
+ getresp "${_password}"
+ stty echo
+ echo ""
+ _password=$resp
+
+ echo -n "Password (again): "
+ stty -echo
+ getresp "${_password}"
+ stty echo
+ echo ""
+ if [ "${_password}" != "${resp}" ]; then
+ echo "Passwords do not match, try again."
+ resp=""
+ fi
+done
+
+install_sets $THESETS
+
+# Copy in configuration information and make devices in target root.
+
+if [ ! -d /mnt/etc -o ! -d /mnt/usr/share/zoneinfo -o ! -d /mnt/dev ]; then
+ echo "Something needed to complete the installation seems"
+ echo "to be missing, did you forget to extract a required set?"
+ echo ""
+ echo "Please review the installation notes and try again..."
+ echo ""
+ echo "You *may* be able to correct the problem and type 'install'"
+ echo "without having to extract all of the distribution sets again."
+ exit
+fi
+
+cd /tmp
+for file in fstab hostname.* hosts myname mygate resolv.conf; do
+ if [ -f $file ]; then
+ echo -n "Copying $file..."
+ cp $file /mnt/etc/$file
+ echo "done."
+ fi
+done
+
+# If no zoneinfo on the installfs, give them a second chance
+if [ ! -e /usr/share/zoneinfo ]; then
+ get_timezone
+fi
+if [ ! -e /mnt/usr/share/zoneinfo ]; then
+ echo "Cannot install timezone link..."
+else
+ echo -n "Installing timezone link..."
+ rm -f /mnt/etc/localtime
+ ln -s /usr/share/zoneinfo/$TZ /mnt/etc/localtime
+ echo "done."
+fi
+
+
+md_copy_kernel
+
+md_installboot ${ROOTDISK}
+
+if [ ! -x /mnt/dev/MAKEDEV ]; then
+ echo "No /dev/MAKEDEV installed, something is wrong here..."
+ exit
+fi
+
+echo -n "Making all devices..."
+#pid=`twiddle`
+cd /mnt/dev
+sh MAKEDEV all
+#kill $pid
+echo "done."
+cd /
+
+_encr=`echo ${_password} | /mnt/usr/bin/encrypt -b 7`
+echo "1,s@^root::@root:${_encr}:@
+w
+q" | ed /mnt/etc/master.passwd 2> /dev/null
+/mnt/usr/sbin/pwd_mkdb -p -d /mnt/etc /etc/master.passwd
+
+unmount_fs /tmp/fstab.shadow
+
+# Pat on the back.
+md_congrats
+
+# ALL DONE!
+exit 0