Initial commit
This commit is contained in:
154
slax/boot/bootinst.sh
Normal file
154
slax/boot/bootinst.sh
Normal file
@@ -0,0 +1,154 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# This script will setup booting from disk (USB or harddrive)
|
||||
#
|
||||
# If you see this file in a text editor instead of getting it executed,
|
||||
# then it is missing executable permissions (chmod). You can try to set
|
||||
# exec permissions for this file by using: chmod a+x bootinst.sh
|
||||
# Alternatively, you may try to run bootinst.bat file instead
|
||||
#
|
||||
# Scrolling down will reveal the actual code of this script.
|
||||
#
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# if we're running this from X, re-run the script in konsole or xterm
|
||||
if [ "$DISPLAY" != "" ]; then
|
||||
if [ "$1" != "--rex" -a "$2" != "--rex" ]; then
|
||||
konsole --nofork -e /bin/sh $0 --rex 2>/dev/null || xterm -e /bin/sh $0 --rex 2>/dev/null || /bin/sh $0 --rex 2>/dev/null
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
# make sure I am root
|
||||
if [ "$UID" != "0" -a "$UID" != "" ]; then
|
||||
echo ""
|
||||
echo "You are not root. You must run bootinst script as root."
|
||||
echo "The bootinst script needs direct access to your boot device."
|
||||
echo "Use sudo or kdesudo or similar wrapper to execute this."
|
||||
read junk
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# change working directory to dir from which we are started
|
||||
CWD="$(pwd)"
|
||||
BOOT="$(dirname "$0")"
|
||||
BOOT="$(realpath "$BOOT" 2>/dev/null || echo $BOOT)"
|
||||
cd "$BOOT"
|
||||
|
||||
# find out device and mountpoint
|
||||
PART="$(df . | tail -n 1 | tr -s " " | cut -d " " -f 1)"
|
||||
DEV="$(echo "$PART" | sed -r "s:[0-9]+\$::" | sed -r "s:([0-9])[a-z]+\$:\\1:i")" #"
|
||||
|
||||
# check if disk is already bootable. Mostly for Windows discovery
|
||||
if [ "$(fdisk -l "$DEV" | fgrep "$DEV" | fgrep "*")" != "" ]; then
|
||||
echo ""
|
||||
echo "Partition $PART seems to be located on a physical disk,"
|
||||
echo "which is already bootable. If you continue, your drive $DEV"
|
||||
echo "will boot only Slax by default."
|
||||
echo "Press [Enter] to continue, or [Ctrl+C] to abort..."
|
||||
read junk
|
||||
fi
|
||||
|
||||
ARCH=$(uname -m)
|
||||
if [ "$ARCH" = "x86_64" ]; then ARCH=64; else ARCH=32; fi
|
||||
EXTLINUX=extlinux.x$ARCH
|
||||
|
||||
if [ ! -x ./$EXTLINUX ]; then
|
||||
# extlinux is not executable. There are two possible reasons:
|
||||
# either the fs is mounted with noexec, or file perms are wrong.
|
||||
# Try to fix both, no fail on error yet
|
||||
mount -o remount,exec $DEV
|
||||
chmod a+x ./$EXTLINUX
|
||||
fi
|
||||
|
||||
if [ ! -x ./$EXTLINUX ]; then
|
||||
# extlinux is still not executable. As a last try, copy it to .exe
|
||||
# because the partition may be mounted with showexec option, from which
|
||||
# we probably can't escape by remount
|
||||
cp -f ./$EXTLINUX ./extlinux.exe
|
||||
EXTLINUX=extlinux.exe
|
||||
fi
|
||||
|
||||
# install syslinux bootloader
|
||||
echo "* attempting to install bootloader to $BOOT..."
|
||||
|
||||
./"$EXTLINUX" --install "$BOOT"
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error installing boot loader."
|
||||
echo "Read the errors above and press enter to exit..."
|
||||
read junk
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$DEV" != "$PART" ]; then
|
||||
# Setup MBR on the first block
|
||||
echo "* setup MBR on $DEV"
|
||||
dd bs=440 count=1 conv=notrunc if="$BOOT/mbr.bin" of="$DEV" 2>/dev/null
|
||||
|
||||
# Toggle bootable flags
|
||||
echo "* set bootable flag for $PART"
|
||||
PART="$(echo "$PART" | sed -r "s:.*[^0-9]::")"
|
||||
(
|
||||
fdisk -l "$DEV" | fgrep "*" | fgrep "$DEV" | cut -d " " -f 1 \
|
||||
| sed -r "s:.*[^0-9]::" | xargs -I '{}' echo -ne "a\n{}\n"
|
||||
echo a
|
||||
echo $PART
|
||||
echo w
|
||||
) | fdisk $DEV >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
echo "Boot installation finished."
|
||||
echo "Press Enter..."
|
||||
read junk
|
||||
cd "$CWD"
|
||||
Reference in New Issue
Block a user