1
0
Files
irix-657m-src/eoe/cmd/initpkg/mrcleanrc.sh
2022-09-29 17:59:04 +03:00

277 lines
6.2 KiB
Bash
Executable File

#! /bin/sh
#Tag 0x00000f00
#ident "$Revision $"
. mrprofrc
# miniroot script - clean disks for clean installs.
#
# This script is invoked from miniroot inst when the
# user invokes "admin mkfs" with no arguments to mkfs.
#
# It umounts all the users file systems, cleans (mkfs)
# partitions 0 and (if present) 6 of the boot device,
# and remounts just these partitions as root and (if
# there was a partition 6) usr.
#
# Whatever was there before, such as other mounts, logical
# volumes, user data, inst history, ... is lost.
cat <<-!!
** Clean Disks Procedure **
If you agree to it, this procedure will clean your disks,
removing all data from the root and (if present) the user
file systems.
Boot device partitions zero (0) and, if present, six (6)
will be erased (using mkfs). This will destroy all data on
them. These partitions will then be remounted under /root
and (if present) /root/usr.
If you have data on these file systems you want to save,
answer "no" below, and backup the data before cleaning
your disks.
Any other file systems or logical volumes will be unmounted
and forgotten about until you choose to reconfigure and
remount them.
!!
while : asking if really want to clean disks
do
echo '\n\tAre you sure you want to clean your disks ?'
echo '\t\t { (y)es, (n)o, (sh)ell, (h)elp }: \c'
read line
case "$line" in
[yY]*)
break
;;
[nN]*)
echo
echo Disks not cleaned. Returning to inst.
echo
exit
;;
sh|SH|shell|SHELL)
( echo set prompt="'miniroot> '" > /.prompt ) 2>/dev/null
csh
echo
continue 1
;;
shroot|SHROOT)
chroot /root /bin/csh
echo
continue 1
;;
[hH]*)
cat <<-\!!
yes - Will clean your disks.
New file systems will be made on partitions zero (0) and,
if present, six (6). This will destroy all data on them.
These partitions will be remounted under /root and /root/usr.
If you have data on these file systems you want to save,
answer "no" here, and backup the data before proceeding
with a clean install.
Any other file systems or logical volumes will be unmounted
and forgotten about until you choose to reconfigure them.
no - Will not touch your disks, and return to the inst menus.
sh - Invokes a subshell (csh) in the miniroot, as root.
help - show this message
!!
continue 1
;;
*)
cat <<-\!!
To clean your disks, type "yes" and press ENTER.
To resume installing software, type "no" and press ENTER.
Type "help" for additional explanation.
!!
continue 1
;;
esac
done # asking if really want to clean disks
# Use same do_mkfs() function for both root and usr partitions.
do_mkfs()
{
device=$1
bsize=$2
fsstat $device >&- 2>&-
case $? in
0|1) # 0: The file system is not mounted and appears okay
# 1: File system is not mounted and is dirty (needs fsck)
echo
echo WARNING: There appears to be a valid file system on $device already.
echo Making a new file system will destroy all existing data on it.
;;
2) # fsstat says file system is mounted (still? - darn!)
echo
echo ERROR: Unmount of $device failed.
echo Disks not cleaned. Returning to inst.
echo
exit
;;
3) # fsstat didnt find any file system - cool
;;
esac
while : asking to mkfs device
do
echo
echo Make new file system on $device? '\c'
read line
case "$line" in
yes|YES)
echo '\n'Doing: mkfs -b size=$bsize $device
mkfs -b size=$bsize $device
return
;;
no|NO)
echo
echo Skipping mkfs of $device.
echo Disks not cleaned. Returning to inst.
echo
mrmountrc mntlocal
exit
;;
sh|SH)
( echo set prompt="'miniroot> '" > /.prompt ) 2>/dev/null
csh
echo
continue 1
;;
shroot|SHROOT)
chroot /root /bin/csh
echo
continue 1
;;
[hH]*)
cat <<-!!
yes - Will cause mkfs to be run on partition:
$device
Any data on this partition will be lost.
If there might be useful data here, you
should back it up before consenting to this
mkfs.
no - Will leave $device unchanged.
sh - Invokes a subshell (using C Shell csh), in the
miniroot, as root. This permits the use of available
IRIX utilities to administer your system. You can
also type "shroot" to chroot csh below /root.
help - show this message
!!
continue 1
;;
*)
echo Please answer \"yes\" or \"no\".
continue 1
;;
esac
done # asking to mkfs device
} # end of do_mkfs() function
#######################################################################
umount -k /root/hw >/dev/null 2>&1
umount -k -T efs,xfs -b / >/dev/null 2>&1
root=`devnm / | sed 's/. .*/0/'` # Jam '0' on end of swap device
usr=`devnm / | sed 's/. .*/6/'` # Jam '6' on end of swap device
## mkfs and mount root partition
if prtvtoc -s -h $root |
awk '$1 == 6 && ( $2 == "efs" || $2 == "xfs" || $2 == "xlv" )' |
grep . > /dev/null
then
root_bsize=512
haveusr=1
else
root_bsize=4096
haveusr=0
fi
do_mkfs $root $root_bsize root
test -d /root || mkdir /root > /dev/null 2>&1
mount -c $root /root || {
echo
echo ERROR: Mount of $root on /root failed.
echo Returning to inst.
echo
exit
}
mount -p > /etc/fstab.Sav
cp /etc/fstab.Sav /etc/fstab
mkdir /root/etc /root/usr
echo "/dev/root / xfs rw,raw=/dev/rroot 0 0" > /root/etc/fstab
## mount hwgraph
mkdir /root/hw
/etc/mnthwgfs /root/hw
## mkfs and mount usr partition (if present)
if [ $haveusr = 1 ]
then
# There is a partition 6, mkfs it and mount as usr file system.
do_mkfs $usr 4096
mount -c $usr /root/usr || {
echo
echo ERROR: Mount of $usr on /root/usr failed.
echo Returning to inst.
echo
exit
}
echo "/dev/usr /usr xfs rw,raw=/dev/rusr 0 0" >> /root/etc/fstab
echo "$usr /root/usr xfs rw 0 0" >> /etc/fstab
mkdir /root/usr/var
ln -s usr/var /root/var
else
mkdir /root/var
fi
# show user what's mounted
echo "\nMounting file systems:\n"
mount -p | awk '
$3 == "efs" || $3 == "xfs" { printf " %-23s on %s\n", $1, $2; }
'
echo
echo
# restart syslogd
/etc/mrlogrc start