setup.sh: fix various issues

- fix the reinstallation (preserve-/home) option;
- remove support for just reinstalling the bootloader, as the main
  purpose of this option (allowing an upgrade from the old MINIX
  boot monitor to the NetBSD bootloader) is no longer needed and was
  already broken;
- do not try to copy over /etc/motd.install: it no longer exists.

This resolves issue 106.

Change-Id: Iad3805d86c4806d725f9b285c2d4378670790f78
This commit is contained in:
David van Moolenbroek 2016-02-26 19:41:21 +00:00
parent 26d958c71e
commit a617090dc0

View File

@ -8,8 +8,6 @@
# Dec 20, 1994 created (Kees J. Bot)
#
LOCALRC=/usr/etc/rc.local
MYLOCALRC=/mnt/etc/rc.local
ROOTMB=128
ROOTSECTS="`expr $ROOTMB '*' 1024 '*' 2`"
BOOTXXSECTS=32
@ -316,7 +314,7 @@ then echo "Note: you can't have /home with that size partition."
maxhome=0
fi
TMPMP=/m
TMPMP=/mnt
mkdir $TMPMP >/dev/null 2>&1
confirm=""
@ -332,15 +330,13 @@ echo " --- Step 4: Reinstall choice ------------------------------------------"
echo "You have selected an existing MINIX 3 partition."
echo "Type F for full installation (to overwrite entire partition)"
echo "Type R for a reinstallation (existing /home will not be affected)"
echo "Type B to reinstall/upgrade bootloader (no data affected)"
echo ""
echo -n "(F)ull, (R)einstall or (B)ootloader install? [R] "
echo -n "(F)ull or (R)einstall? [R] "
read conf
case "$conf" in
"") confirm="ok"; auto="r"; ;;
[Rr]*) confirm="ok"; auto="r"; ;;
[Ff]*) confirm="ok"; auto="" ;;
[Bb]*) confirm="ok"; bootreinstall="ok" ;;
esac
else echo ""
@ -351,188 +347,6 @@ echo " --- Step 4: Reinstall choice ------------------------------------------"
done
if [ "$bootreinstall" = "ok" ]
then
echo ""
echo " --- Step 5: Reinstall bootloader ----------------------------------"
echo ""
echo "WARNING: This procedure uses your current /usr to store your /."
echo "Once the procedure starts, it has to finish"
echo "to restore your / partition. Please make sure it is not interrupted."
echo ""
echo -n "It's recommended to run fsck before you continue, run? [Y/n] "
read ok
if [ "$ok" = "y" -o "$ok" = "Y" -o "$ok" = "" ]
then
fsck -t mfs -T mfs:-a "/dev/$root" >/dev/null
fsck -t mfs -T mfs:-a "/dev/$usr" >/dev/null
fi
# If there is no ELF stuff and not enough space after repartitioning,
# user will fall into trouble. So at first copy new stuff.
mount "/dev/$root" /mnt >/dev/null || exit
# grep, stat, etc in chroot
mount "/dev/$usr" /mnt/usr >/dev/null || exit
cp -pf /bin/update_bootcfg /mnt/bin/ && \
cp -pf /etc/boot.cfg.default /mnt/etc/ && \
cp -pf /usr/mdec/boot_monitor /mnt/ || exit
if [ ! -d /mnt/boot/minix_default -o ! -r /mnt/boot/minix_default/kernel ]
then
if [ -r /mnt/boot.cfg ]
then
echo ""
echo "There is no /boot/minix_default/, but /boot.cfg exists."
echo -n "Do you want to copy minix_default from CD? [Y/n] "
else
echo ""
echo -n "There is no /boot/minix_default/, do you want to copy it from CD? [Y/n] "
fi
read ok
if [ "$ok" = "y" -o "$ok" = "Y" -o "$ok" = "" ]
then
if [ -e /mnt/boot/minix_default ]
then
echo "Old /boot/minix_default moved to /boot/minix_default_old"
mv /mnt/boot/minix_default /mnt/boot/minix_default_old
fi
cp -rfp /boot/minix_default /mnt/boot/ || exit
fi
fi
echo " * Updating /boot.cfg"
chroot /mnt update_bootcfg
sync
# Get sizes and space availability while the file systems are still
# mounted. Otherwise we have to mount them again just for this.
required_root_space=`df -kP /dev/$root | awk '{print $3}' | tail -n 1`
free_root_space=`df -kP /dev/$root | awk '{print $4}' | tail -n 1`
free_usr_space=`df -kP /dev/$usr | awk '{print $4}' | tail -n 1`
umount /mnt/usr && umount /mnt || exit
# Check if enough space for new boot
bootspace=$((`devsize /dev/$primary`-`devsize /dev/$root`-`devsize /dev/$home`-`devsize /dev/$usr`)) >/dev/null
if [ $bootspace -lt $BOOTXXSECTS ]
then
echo ""
echo "Root partition size will be reduced by up to 16Kb to fit new bootloader."
echo "This is not a problem."
# round 16 => 20
if [ "$free_root_space" -le 20 ]
then
echo ""
echo "Not enough space on /dev/$root, you need at least 20Kb to use new bootloader!"
exit 1
fi
ROOTSECTS=`expr \`devsize /dev/$root\` - $BOOTXXSECTS + $bootspace`
if [ "$required_root_space" -gt "$free_usr_space" ]
then
echo ""
echo "You don't have enough free space on /dev/$usr to backup /dev/$root!"
echo "${free_usr_space}Kb available, ${required_root_space} required."
exit 1
fi
mkdir /mnt/root && mkdir /mnt/usr || exit
echo "Re-mounting your current / and /usr"
mount "/dev/$root" /mnt/root || exit
mount "/dev/$usr" /mnt/usr || exit
mkdir /mnt/usr/tmp/root_backup || exit
echo " * Copying / contents"
cp -rfp /mnt/root/* /mnt/usr/tmp/root_backup
if [ $? -ne 0 ]
then
echo ""
echo "Failed to backup root partition, aborting!"
rm -rf /mnt/usr/tmp/root_backup
# umount shouldn't fail here, but if it will, next
# "rm -rf" will serve for user's pleasure.
umount /mnt/usr >/dev/null || exit
umount /mnt/root >/dev/null || exit
rm -rf /mnt/root /mnt/usr
exit 1
fi
echo " * Copying done"
umount /mnt/root
umount /mnt/usr
add_subpart=""
minix_subparts=`echo -n "" | fdisk /dev/$primary | grep "MINIX" | wc -l`
if [ "$minix_subparts" -gt 3 ]
then
echo ""
echo "You have additional subpartition except /, /usr and /home."
echo "Partition type will be set to MINIX (81), you can change it later using part."
echo -n "Do you want to continue? [Y/n] "
read ok
[ "$ok" = "n" -o "$ok" = "N" ] && exit
add_subpart="81:exist"
fi
echo " * Repartitioning"
partition /dev/$primary $BOOTXXSECTS 81:${ROOTSECTS}* 81:exist 81:exist $add_subpart || exit
echo " * mkfs on new /"
mkfs.mfs "/dev/$root" || exit
if [ $? -ne 0 ]
then
echo "Failed to repartition /dev/$primary"
rmdir /mnt/root
rmdir /mnt/usr
exit 1
fi
mount "/dev/$usr" /mnt/usr || exit
mount "/dev/$root" /mnt/root || exit
echo " * Filling new / filesystem"
mv /mnt/usr/tmp/root_backup/* /mnt/root/ || exit
if [ $? -ne 0 ]
then
echo "Failed to copy old root data! It is in /tmp/root_backup/"
fi
rmdir /mnt/usr/tmp/root_backup/
umount /mnt/root
umount /mnt/usr
fi
check_mbr
installboot_nbsd -f /dev/$primary /usr/mdec/bootxx_minixfs3 >/dev/null || exit 1
if [ $? -ne 0 ]
then
echo "Warning: failed to remove /tmp/root_backup!"
fi
echo "New boot installed successfully! You can reboot now."
exit
fi
rmdir $TMPMP
nohome="0"
@ -720,8 +534,6 @@ if [ "$nohome" = 0 ]; then
chgrp $(stat -f %g /home) /mnt/home
fi
cp /mnt/etc/motd.install /mnt/etc/motd
# CD remnants that aren't for the installed system
rm /mnt/etc/issue /mnt/CD /mnt/.* 2>/dev/null
echo >/mnt/etc/fstab "/dev/$root / mfs rw 0 1