summaryrefslogtreecommitdiff
path: root/source/a/pkgtools/scripts/setup.80.make-bootdisk
diff options
context:
space:
mode:
authorPatrick J Volkerding <volkerdi@slackware.com>2016-06-30 20:26:57 +0000
committerEric Hameleers <alien@slackware.com>2018-05-31 23:31:18 +0200
commitd31c50870d0bee042ce660e445c9294a59a3a65b (patch)
tree6bfc0de3c95267b401b620c2c67859557dc60f97 /source/a/pkgtools/scripts/setup.80.make-bootdisk
parent76fc4757ac91ac7947a01fb7b53dddf9a78a01d1 (diff)
downloadcurrent-d31c50870d0bee042ce660e445c9294a59a3a65b.tar.gz
Slackware 14.2slackware-14.2
Thu Jun 30 20:26:57 UTC 2016 Slackware 14.2 x86_64 stable is released! The long development cycle (the Linux community has lately been living in "interesting times", as they say) is finally behind us, and we're proud to announce the release of Slackware 14.2. The new release brings many updates and modern tools, has switched from udev to eudev (no systemd), and adds well over a hundred new packages to the system. Thanks to the team, the upstream developers, the dedicated Slackware community, and everyone else who pitched in to help make this release a reality. The ISOs are off to be replicated, a 6 CD-ROM 32-bit set and a dual-sided 32-bit/64-bit x86/x86_64 DVD. Please consider supporting the Slackware project by picking up a copy from store.slackware.com. We're taking pre-orders now, and offer a discount if you sign up for a subscription. Have fun! :-)
Diffstat (limited to 'source/a/pkgtools/scripts/setup.80.make-bootdisk')
-rw-r--r--source/a/pkgtools/scripts/setup.80.make-bootdisk98
1 files changed, 67 insertions, 31 deletions
diff --git a/source/a/pkgtools/scripts/setup.80.make-bootdisk b/source/a/pkgtools/scripts/setup.80.make-bootdisk
index a5d44235..1f0202a5 100644
--- a/source/a/pkgtools/scripts/setup.80.make-bootdisk
+++ b/source/a/pkgtools/scripts/setup.80.make-bootdisk
@@ -5,13 +5,12 @@ if [ -r /usr/lib/setup/setup ]; then
else
RDIR=/dev/null
fi
-NDIR=/dev/null
TMP=/var/log/setup/tmp
if [ ! -d $TMP ]; then
mkdir -p $TMP
fi
-if [ -z "$T_PX" ]; then
+if [ -z "$1" ]; then
T_PX=/
else
T_PX="$1"
@@ -22,6 +21,16 @@ else
ROOT_DEVICE="$2"
fi
+if [ -r $T_PX/usr/share/syslinux/mbr.bin ]; then
+ MBR_BIN=$T_PX/usr/share/syslinux/mbr.bin
+elif [ -r /usr/share/syslinux/mbr.bin ]; then
+ MBR_BIN=/usr/share/syslinux/mbr.bin
+else
+ dialog --title "ERROR: USB BOOT STICK NOT CREATED" --msgbox \
+ "Master Boot Record file mbr.bin not found. This script requires that the syslinux package is installed." 6 60
+ exit
+fi
+
while [ 0 ]; do # the bootdisk menu loop
# Run "rescan-scsi-bus -l" to get an up to date overview of devices:
/sbin/rescan-scsi-bus -l 1>$RDIR 2>$RDIR
@@ -38,7 +47,7 @@ while [ 0 ]; do # the bootdisk menu loop
fi
dialog --title "MAKE USB FLASH BOOT" --default-item "$DEFAULTITEM" --menu \
"If your computer supports booting from a USB device, it is recommended that you make \
-a USB boot stick for your system at this time. It will boot your computer straight \
+a USB boot stick for your system at this time. It will boot your computer straight \
into the root filesystem on $ROOT_DEVICE. \n\
\n\
Please insert a USB flash memory stick and then press ENTER to create a boot stick. \n\
@@ -89,31 +98,56 @@ otherwise select 'No'." 12 70
dialog --title "CREATING USB BOOT STICK" --infobox "Creating SYSLINUX bootdisk for \
$ROOT_DEVICE on /dev/$STICK." 3 64
- # Determine max size of the filesystem (in KB) we want to create:
- USBSIZE=$(( $(cat /sys/block/$STICK/size) / 2048))
- if [ $USBSIZE -lt 512 ]; then DOSSIZE=$(($USBSIZE*1024))
- else DOSSIZE=$((512*1024))
- fi
- # Hack from Pat. If we're wasting a whole stick, who cares if the partition is
- # extra-small, as long as the kernel fits? Also, FAT12 is the least problematic.
- DOSSIZE=15861
+ # Create a 16M partition with FAT16. This should be large enough for any kernel (for now).
+ PARTSIZE="+16384K"
+ # Zero out master boot record and then initialize it with one bootable dos partition
+ dd if=/dev/zero of=/dev/$STICK bs=512 count=1 1> $RDIR 2> $RDIR
+ echo "PARTSIZE=$PARTSIZE" 1> $RDIR
+ fdisk /dev/$STICK << EOF 1> $RDIR 2> $RDIR
+n
+p
+1
+2048
+$PARTSIZE
+t 1
+6
+a
+w
+EOF
if [ -x /sbin/mkdosfs ]; then
- /sbin/mkdosfs -I -n USBSLACK -F 12 /dev/$STICK $DOSSIZE 1> /dev/null 2> /dev/null
+ /sbin/mkdosfs -I -n USBSLACK -F 16 /dev/${STICK}1 1> $RDIR 2> $RDIR
+ else
+ chroot $T_PX /sbin/mkdosfs -I -n USBSLACK -F 16 /dev/${STICK}1 1> $RDIR 2> $RDIR
+ fi
+ sync
+ # install syslinux
+ if which syslinux-nomtools 1> $RDIR 2> $RDIR ; then
+ syslinux-nomtools -i -s /dev/${STICK}1 1> $RDIR 2> $RDIR
+ elif which strace 1> $RDIR 2> $RDIR ; then
+ # There is a race condition between udev >= 214 and mtools which causes
+ # the regular version of syslinux to fail when installing to USB, but
+ # strace changes the timing just enough that it usually works:
+ strace syslinux -i -s /dev/${STICK}1 1> $RDIR 2> $RDIR
else
- chroot $T_PX /sbin/mkdosfs -I -n USBSLACK -F 12 /dev/$STICK $DOSSIZE 1> /dev/null 2> /dev/null
+ # This might work when the issues with mtools and udev are addressed,
+ # or if syslinux is eventually able to work around them.
+ syslinux -i -s /dev/${STICK}1 1> $RDIR 2> $RDIR
fi
+ # make the device bootable:
+ echo "dd if=$MBR_BIN of=/dev/$STICK" 1> $RDIR 2> $RDIR
+ dd if=$MBR_BIN of=/dev/$STICK 1> $RDIR 2> $RDIR
+ sync
+ # mount the device and write some configuration files
if [ ! -d $TMP/bootdisk ]; then
- mkdir $TMP/bootdisk
+ mkdir $TMP/bootdisk 2> $RDIR
fi
- mount -t vfat /dev/$STICK $TMP/bootdisk 1> /dev/null 2> /dev/null
- if [ -r $T_PX/vmlinuz ]; then
- cp $T_PX/vmlinuz $TMP/bootdisk/vmlinuz
- elif [ -r $T_PX/boot/vmlinuz ]; then
- cp $T_PX/boot/vmlinuz $TMP/bootdisk/vmlinuz
+ mount -t vfat /dev/${STICK}1 $TMP/bootdisk 1> $RDIR 2> $RDIR
+ if [ -r $T_PX/boot/vmlinuz ]; then
+ cp $T_PX/boot/vmlinuz $TMP/bootdisk/vmlinuz 1> $RDIR 2> $RDIR
+ elif [ -r $T_PX/vmlinuz ]; then
+ cp $T_PX/vmlinuz $TMP/bootdisk/vmlinuz 1> $RDIR 2> $RDIR
fi
- # We don't need the isolinux bootloader with syslinux do we?
- #cp $T_PX/usr/share/syslinux/isolinux.bin $TMP/bootdisk/
- cat << EOF > $TMP/bootdisk/message.txt
+ cat << EOF > $TMP/bootdisk/message.txt 2> $RDIR
Welcome to the 09Slackware07 Linux custom USB boot stick!
@@ -131,7 +165,7 @@ kernel parameters you might need depending on your hardware, and which
drivers are included in your kernel.
EOF
- cat << EOF > $TMP/bootdisk/syslinux.cfg
+ cat << EOF > $TMP/bootdisk/syslinux.cfg 2> $RDIR
default vmlinuz root=$ROOT_DEVICE vga=normal ro
prompt 1
timeout 6000
@@ -147,7 +181,7 @@ label mount
kernel vmlinuz
append root=$ROOT_DEVICE vga=normal ro
EOF
- cat << EOF > $TMP/bootdisk/f1.txt
+ cat << EOF > $TMP/bootdisk/f1.txt 2> $RDIR
STANDARD MODES:
To make the kernel prompt for standard video modes use: vga=ask
@@ -169,9 +203,9 @@ EOF
EOF
if [ "$(uname -m)" == "x86_64" ]; then # also install an EFI bootloader
- mkdir -p $TMP/bootdisk/EFI/BOOT 1> /dev/null 2> /dev/null
- cp $T_PX/boot/elilo-x86_64.efi $TMP/bootdisk/EFI/BOOT/BOOTX64.EFI 1> /dev/null 2> /dev/null
- cat << EOF > $TMP/bootdisk/EFI/BOOT/message.txt 2> /dev/null
+ mkdir -p $TMP/bootdisk/EFI/BOOT 1> $RDIR 2> $RDIR
+ cp $T_PX/boot/elilo-x86_64.efi $TMP/bootdisk/EFI/BOOT/BOOTX64.EFI 1> $RDIR 2> $RDIR
+ cat << EOF > $TMP/bootdisk/EFI/BOOT/message.txt 2> $RDIR
Welcome to the Slackware Linux custom USB boot stick!
@@ -190,7 +224,7 @@ drivers are included in your kernel.
Hit ENTER to boot:
EOF
- cat << EOF > $TMP/bootdisk/EFI/BOOT/elilo.conf 2> /dev/null
+ cat << EOF > $TMP/bootdisk/EFI/BOOT/elilo.conf 2> $RDIR
chooser=simple
message=message.txt
delay=300
@@ -202,10 +236,12 @@ image=/vmlinuz
append="root=$ROOT_DEVICE vga=normal ro"
EOF
fi # end EFI installation
- umount /dev/$STICK
+ sync
+ umount /dev/${STICK}1
rm -r $TMP/bootdisk
- # Make the device bootable:
- syslinux -s /dev/$STICK 1> /dev/null 2> /dev/null
+ # Sometimes the nomtools version of syslinux will leave the volume mounted,
+ # so umount again:
+ umount /dev/${STICK}1 2> $RDIR
if [ "$T_PX" = "/" ]; then
dialog --title "USB BOOT STICK CREATED" --msgbox \
"The USB boot stick has been successfully created on device /dev/$STICK." 6 60