diff options
author | Patrick J Volkerding <volkerdi@slackware.com> | 2016-06-30 20:26:57 +0000 |
---|---|---|
committer | Eric Hameleers <alien@slackware.com> | 2018-05-31 23:31:18 +0200 |
commit | d31c50870d0bee042ce660e445c9294a59a3a65b (patch) | |
tree | 6bfc0de3c95267b401b620c2c67859557dc60f97 /source/a/pkgtools/scripts/setup.80.make-bootdisk | |
parent | 76fc4757ac91ac7947a01fb7b53dddf9a78a01d1 (diff) | |
download | current-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-bootdisk | 98 |
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 |