#!/bin/sh #(c) Copyright Barry Kauler 2006 www.puppylinux.com NEWVER="`cat /etc/puppyversion`" #mount > /etc/mtab #v2.10 remove. KERNVER="`uname -r`" #USBINFO="`lspci -i /usr/share/pci-usb-pcmcia.ids`" #v2.10 . /etc/rc.d/PUPSTATE fsfunc() #f.s. type param passed in { FSTYPE="$1" [ "$FSTYPE" = "Ext2" ] && FSTYPE="ext2" [ "$FSTYPE" = "ReiserFS" ] && FSTYPE="reiserfs" [ "$FSTYPE" = "Ext3" ] && FSTYPE="ext3" [ "$FSTYPE" = "FAT16" ] && FSTYPE="vfat" [ "$FSTYPE" = "FAT32" ] && FSTYPE="vfat" [ "$FSTYPE" = "NTFS" ] && FSTYPE="ntfs" [ "$FSTYPE" = "ISO9660" ] && FSTYPE="iso9660" } ispupfunc() #fstype partition { PUPSFS="" PUPVEROLD=0 [ ! $2 ] && return 0 mkdir /mnt/$2 2> /dev/null #cannot test for /dev/$2 as mount reports ntfs device is /dev/fuse... #v2.12 latest ntfs-3g driver works with mount properly, so special handling #no longer necessary, but still here... ISPUPMNTPT="`mount | grep "/dev/$2" | tr -s " " | cut -f 3 -d " "`" #v2.02... #[ "$ISPUPMNTPT" = "" ] && ISPUPMNTPT="`ps -e | grep -o ntfs\-3g.* | grep "/dev/$2" | sed -e 's/[^a-zA-Z0-9/._\-]/ /g' | tr -s ' ' | tr ' ' "\n" | grep '^/mnt/'`" [ "$ISPUPMNTPT" = "" ] && ISPUPMNTPT="`ps -e | grep -o 'ntfs\-3g.*' | grep "/dev/$2" | tr '\t' ' ' | tr -s ' ' | tr ' ' '\n' | grep '^/mnt/'`" if [ "$ISPUPMNTPT" = "" ];then ISPUPMNTPT="/mnt/$2" mount -t $1 /dev/$2 /mnt/$2 fi if [ $? -eq 0 ];then ISFILE="`ls -1 $ISPUPMNTPT/pup_[0-9][0-9][0-9].sfs | head -n 1`" [ ! "$ISFILE" = "" ] && PUPVEROLD=`basename $ISFILE | cut -f 2 -d '_' | cut -f 1 -d '.'` if [ -f $ISPUPMNTPT/etc/puppyversion ];then PUPVEROLD=`cat $ISPUPMNTPT/etc/puppyversion` #there is a bug in prev installer, put 0 into puppyversion... PREVVER=`expr $NEWVER \- 1` [ $PUPVEROLD -eq 0 ] && PUPVEROLD=$PREVVER fi [ -f $ISPUPMNTPT/usr_cram.fs ] && PUPVEROLD=108 umount /dev/$2 fi return $PUPVEROLD } gpartedfixusbfunc() { #params: $DESTPART $DESTFS GPDRV="`echo -n "$1" | sed -e 's/[0-9]//g'`" gparted /dev/$GPDRV & sleep 2 gxmessage -bg '#ba55d3' -center -title "Puppy Universal Installer" "GParted is a partition manager, available in Puppy2, though a 'barebones' release of Puppy2 may not have it, in which case you have to use the PupGet package manager to install it. If it is installed, GParted is a very simple tool for deleting, creating and resizing partitions. If you have a USB Flash 'key' drive that you have installed Puppy to but it will not boot, it may be that the partition(s) is confusing the PC's BIOS or Syslinux. Personally, I was able to fix such a USB drive by wiping the existing partition and then create it again using GParted. The steps to do this are very simple: when GParted is running, 1. delete all partitions on the USB device. 2. Create a new primary FAT16 partition, to fill the entire drive. 3. Click the 'Apply' button to write changes to the USB drive. 4. Set the 'boot' configuration flag (right-click on partition, choose 'manage flags'). If GParted is installed, it is now running and you can do the above. Quiting GParted will return you to the Puppy Universal Installer..." & MSGID=$! while [ 1 ];do [ "`pidof gparted | tr "\n" '|'`" = "|" ] && break sleep 1 done [ ! "`which gparted`" = "" ] && kill $MSGID 2>/dev/null } fixusbfunc() { #params: $DESTPART $DESTFS echo '#!/bin/sh DESTPART="$1" #partition being installed to DESTFS="$2" #filesystem of destination partition echo "This little section of the Puppy Universal Installer is currently only" echo "for fixing USB Flash or CF-card-in-IDE-adaptor, after you have gone thru" echo "all the steps but it still will not boot." echo echo "You are trying to install to $DESTPART, but it is not booting..." echo "Well, I am assuming that the BIOS in your PC is able to boot from USB." echo "-- for CF-IDE the drive looks like an ordinary hard drive, so that should" echo " be okay for any BIOS." echo echo "This is the first release of this script, and it is a bit limited..." echo "and only handles a partition with a msdos/vfat filesystem." if [ "$DESTFS" = "vfat" ];then echo "...which is okay, $DESTPART does have a $DESTFS filesystem." echo " But, we will now wipe it and recreate it." else echo "...currently $DESTPART has a $DESTFS filesystem." echo " This script is not yet designed for that, so cannot continue." echo echo -n "Press ENTER key to exit: " read nogo exit fi echo echo "Please be sure that you are wiping the right partition!!!" echo "Everything in $DESTPART is going to be wiped. If you do not want that," echo "press any letter on the keyboard then ENTER key, or" echo -n "Press ENTER key only to continue script: " read querygo echo echo "Recreating msdos filesystem on $DESTPART..." mkdosfs /dev/$DESTPART sync echo "Fixing the Master Boot Record (MBR)..." DESTDRV="`echo -n "$DESTPART" | cut -b 1-3`" dd if=/usr/lib/syslinux/mbrfat.bin of=/dev/$DESTDRV sync echo "...done" echo echo "Okay, we can now go back to the main part of the Puppy Universal" echo "Installer and install Puppy to the $DESTPART partition." echo -n "Press ENTER key to continue: " read yesgo ' > /tmp/fixusb.sh chmod 755 /tmp/fixusb.sh rxvt -bg "pink" -title "Puppy Universal Installer" -geometry 80x25 -e /tmp/fixusb.sh } unmountcdfunc() { if [ ! "$CDDRIVE" = "" ];then if [ ! "`mount | grep "/dev/$CDDRIVE"`" = "" ];then rox -D "`mount | grep "/dev/$CDDRIVE" | tr -s " " | cut -f 3 -d " "`" #do not kill any processes sync umount /dev/$CDDRIVE 2> /dev/null #mount > /etc/mtab #v2.10 remove. [ "`mount | grep "/dev/$CDDRIVE"`" = "" ] && eject /dev/$CDDRIVE fi fi } PMEDIA="`Xdialog --left --title "Puppy Universal Installer" --no-tags --stdout --menubox "Welcome to the Puppy Universal Installer!\nIf you wish to install Puppy to a removable media, such\nas a USB Flash or hard drive, CD/DVD disc, floppy disk,\nZip disk, LS-120 disk, please insert it right now,\nbefore proceeding.\n\nINSERT MEDIA NOW\nThen, choose the media that you want to install Puppy to:" 0 0 8 usbflash "USB Flash drive" usbhd "USB hard drive" usb2ideflash "USB CF Flash drive, later move CF to IDE adaptor" ideflash "IDE Flash drive (CF card in IDE adaptor)" idehd "IDE (ATA) internal hard drive" idezip "Internal (IDE) ZIP or LS120 drive" satahd "SATA internal hard drive" scsihd "SCSI internal hard drive"`" [ ! $? -eq 0 ] && exit [ "$PMEDIA" = "" ] && exit FINALPMEDIA="$PMEDIA" if [ "$PMEDIA" = "usb2ideflash" ];then PMEDIA="usbflash" FINALPMEDIA="ideflash" fi case $PMEDIA in usbflash) if [ "`lsmod | grep --extended-regexp '^usb\-storage|^usb_storage'`" = "" ];then echo "Loading usb-storage module (needs several seconds)..." USBDELAY=6 [ "`lsmod | grep '^ehci\-hcd'`" = "" ] && USBDELAY=26 modprobe usb-storage & sleep $USBDELAY fi #find usb drives... #USBDRIVES="`cat /proc/partitions | grep "sd[a-z]$" | tr -s " " | cut -f 5 -d " "`" PROBEDISK="`probedisk 2> /tmp/probediskerr.txt`" USBDRIVES="`echo "$PROBEDISK" | grep 'Direct\-Access' | cut -f 3 -d '/' | cut -f 1 -d '|' | tr "\n" " "`" SELECTIONS="" for ONEUSB in $USBDRIVES do USBINFO="`echo "$PROBEDISK" | grep "/dev/$ONEUSB" | head -n 1 | cut -f 3 -d '|' | tr '$' " " | tr -s " " | sed -e 's/ $//g'`" USBSIZE="`disktype /dev/$ONEUSB | grep "Block device" | cut -f 2 -d ',' | tr -s " " | cut -f 1-4 -d " "`" SELECTIONS="${SELECTIONS} $ONEUSB \"${USBINFO}, ${USBSIZE}\"" done ;; usbhd) #TODO gxmessage "Not yet implemented" exit ;; ideflash) #find ide hard drives... PROBEDISK="`probedisk 2> /tmp/probediskerr.txt`" HDDRIVES="`echo "$PROBEDISK" | grep '|disk|' | grep '/dev/hd' | cut -f 3 -d '/' | cut -f 1 -d '|' | tr "\n" " "`" SELECTIONS="" for ONEHD in $HDDRIVES do HDINFO="`echo "$PROBEDISK" | grep "/dev/$ONEHD" | head -n 1 | cut -f 3 -d '|' | tr '$' " " | tr -s " " | sed -e 's/ $//g'`" HDSIZE="`disktype /dev/$ONEHD | grep "Block device" | cut -f 2 -d ',' | tr -s " " | cut -f 1-4 -d " "`" SELECTIONS="${SELECTIONS} $ONEHD \"${HDINFO}, ${HDSIZE}\"" done ;; idehd) #find ide hard drives... PROBEDISK="`probedisk 2> /tmp/probediskerr.txt`" HDDRIVES="`echo "$PROBEDISK" | grep '|disk|' | grep '/dev/hd' | cut -f 3 -d '/' | cut -f 1 -d '|' | tr "\n" " "`" SELECTIONS="" for ONEHD in $HDDRIVES do HDINFO="`echo "$PROBEDISK" | grep "/dev/$ONEHD" | head -n 1 | cut -f 3 -d '|' | tr '$' " " | tr -s " " | sed -e 's/ $//g'`" HDSIZE="`disktype /dev/$ONEHD | grep "Block device" | cut -f 2 -d ',' | tr -s " " | cut -f 1-4 -d " "`" SELECTIONS="${SELECTIONS} $ONEHD \"${HDINFO}, ${HDSIZE}\"" done ;; idecd) #find ide cd drives... PROBEDISK="`probedisk 2> /tmp/probediskerr.txt`" HDDRIVES="`echo "$PROBEDISK" | grep '|cdrom|' | grep '/dev/hd' | cut -f 3 -d '/' | cut -f 1 -d '|' | tr "\n" " "`" SELECTIONS="" for ONEHD in $HDDRIVES do HDINFO="`echo "$PROBEDISK" | grep "/dev/$ONEHD" | head -n 1 | cut -f 3 -d '|' | tr '$' " " | tr -s " " | sed -e 's/ $//g'`" HDSIZE="`disktype /dev/$ONEHD | grep "Block device" | cut -f 2 -d ',' | tr -s " " | cut -f 1-4 -d " "`" SELECTIONS="${SELECTIONS} $ONEHD \"${HDINFO}, ${HDSIZE}\"" done Xdialog --left --title "Puppy Universal Installer" --ok-label "QUIT" --msgbox "Your computer has these IDE (ATAPI) CD/DVD drives:\n$SELECTIONS \n\nHowever, you cannot install Puppy to a CD/DVD in the same way as a\nhard drive, USB Flash drive or Zip drive, as the CD/DVD is not\ndirectly writable. For the CD/DVD, you need to do what is called\n'remastering' and Puppy has a program for this, called 'Remaster\nPuppy live-CD', found in the Setup menu. This program enables\nyou to create your own custom live-CD/DVD.\nNote, you will need a new blank CD-R or DVD-R (not +R).\n\nClick button to quit..." 0 0 exit ;; idezip) PROBEDISK="`probedisk 2> /tmp/probediskerr.txt`" HDDRIVES="`echo "$PROBEDISK" | grep '|floppy|' | grep '/dev/hd' | cut -f 3 -d '/' | cut -f 1 -d '|' | tr "\n" " "`" SELECTIONS="" for ONEHD in $HDDRIVES do HDINFO="`echo "$PROBEDISK" | grep "/dev/$ONEHD" | head -n 1 | cut -f 3 -d '|' | tr '$' " " | tr -s " " | sed -e 's/ $//g'`" HDSIZE="`disktype /dev/$ONEHD | grep "Block device" | cut -f 2 -d ',' | tr -s " " | cut -f 1-4 -d " "`" SELECTIONS="${SELECTIONS} $ONEHD \"${HDINFO}, ${HDSIZE}\"" done ;; satahd) #v2.10 #at bootup, init script creates SATADRIVES='' in /etc/rc.d/PUPSTATE... PROBEDISK="`probedisk 2> /tmp/probediskerr.txt`" for ONEHD in $SATADRIVES do HDINFO="`echo "$PROBEDISK" | grep "/dev/$ONEHD" | head -n 1 | cut -f 3 -d '|' | tr '$' " " | tr -s " " | sed -e 's/ $//g'`" HDSIZE="`disktype /dev/$ONEHD | grep "Block device" | cut -f 2 -d ',' | tr -s " " | cut -f 1-4 -d " "`" SELECTIONS="${SELECTIONS} $ONEHD \"${HDINFO}, ${HDSIZE}\"" done ;; *) gxmessage "Not yet implemented" exit ;; esac echo "$SELECTIONS" #v2.11 if [ "$SELECTIONS" = "" ];then Xdialog --left --title "Puppy Universal Installer" --ok-label "QUIT" --msgbox "Nothing to choose. If a plugin device, did you plug it in?" 0 0 exit fi echo '#!/bin/sh' > /tmp/dlg1 echo -n 'Xdialog --title "Puppy Universal Installer" --no-cancel --stdout --menubox "Choose which drive to install to:" 0 0 4' >> /tmp/dlg1 echo -n "$SELECTIONS" >> /tmp/dlg1 echo ' > /tmp/retval' >> /tmp/dlg1 echo 'exit $?' >> /tmp/dlg1 chmod 755 /tmp/dlg1 while [ 1 ];do #BIG LOOP /tmp/dlg1 [ ! $? -eq 0 ] && exit DRVSEL="`cat /tmp/retval`" [ "$DRVSEL" = "" ] && exit echo "$DRVSEL" DRVINFO="`disktype /dev/$DRVSEL`" SUPERFS="`echo "$DRVINFO" | grep "file system" | grep "^[a-zA-Z]" | tr -s " " | cut -f 1 -d " "`" DRVSIZE="`echo "$DRVINFO" | grep "Block device" | cut -f 2 -d ',' | tr -s " " | cut -f 1-4 -d " "`" DRVSIZM="`echo "$DRVSIZE" | cut -f 3 -d " "`" if [ ! "`echo "$DRVSIZE" | grep "GiB"`" = "" ];then DRVSIZM="`dc $DRVSIZM 1000 \* p`" fi IDRVSIZM="`echo -n "$DRVSIZM" | cut -f 1 -d '.'`" #truncate to integer. DRVMSG="" PUPINST="" if [ "$SUPERFS" ];then fsfunc $SUPERFS #returns FSTYPE ispupfunc $FSTYPE $DRVSEL #returns PUPVEROLD [ ! $? -eq 0 ] && PUPINST=", Puppy version $PUPVEROLD installed" DRVMSG="${DRVSEL}: ${FSTYPE}, ${DRVSIZE}${PUPINST} " else #has mbr and partitions... echo -n "" > /tmp/pidrvmsg.txt echo "$DRVINFO" | while read ONELINE do xPARTNUM="`echo "$ONELINE" | grep '^Partition ' | tr -s " " | cut -f 1 -d ':' | cut -f 2 -d " "`" [ ! "$xPARTNUM" = "" ] && PARTNUM="$xPARTNUM" [ ! "$xPARTNUM" = "" ] && PARTSIZE="`echo "$ONELINE" | cut -f 2 -d ':' | tr -s " " | cut -f 2-3 -d " "`" PARTITIONFS="`echo "$ONELINE" | grep "file system" | cut -f 1 -d " "`" if [ "$PARTITIONFS" ];then fsfunc $PARTITIONFS #sets FSTYPE. #find out if partition has puppy, or has pup_xxx.sfs file... ispupfunc $FSTYPE ${DRVSEL}${PARTNUM} #returns PUPVEROLD [ ! $? -eq 0 ] && PUPINST=", Puppy version $PUPVEROLD installed" # DRVMSG="${DRVMSG}${DRVSEL}${PARTNUM}: ${FSTYPE}, size ${PARTSIZE}${PUPINST} #" echo "${DRVSEL}${PARTNUM}: ${FSTYPE}, size ${PARTSIZE}${PUPINST}" >> /tmp/pidrvmsg.txt fi done DRVMSG="`cat /tmp/pidrvmsg.txt`" # NUMPARTS=`echo "$DRVINFO" | grep "file system" | grep "^ " | wc -l | tr -s " " | cut -f 2 -d " "` # TRYPARTS="`echo "$DRVINFO" | grep 'Partition ' | cut -f 1 -d ':' | sed -e 's/Partition//g' | tr -s " " | cut -f 2 -d " " | tr "\n" " "`" # for PARTNUM in $TRYPARTS # do # PARTITIONFS="`echo "$DRVINFO" | grep "file system" | grep "^ " | head -n $PARTNUM | tail -n 1 | tr -s " " | cut -f 2 -d " "`" # if [ "$PARTITIONFS" ];then # PARTSIZE="`echo "$DRVINFO" | grep "Partition ${PARTNUM}:" | tr -s " " | cut -f 3-4 -d " "`" # fsfunc $PARTITIONFS #sets FSTYPE. # #find out if partition has puppy, or has pup_xxx.sfs file... # ispupfunc $FSTYPE ${DRVSEL}${PARTNUM} #returns PUPVEROLD # [ ! $? -eq 0 ] && PUPINST=", Puppy version $PUPVEROLD installed" # DRVMSG="${DRVMSG}${DRVSEL}${PARTNUM}: ${FSTYPE}, size ${PARTSIZE}${PUPINST} #" # fi # done fi echo "$DRVMSG" DLGTXT="" CHOICES="`echo "$DRVMSG" | grep ':' | cut -f 1 -d ':' | tr "\n" " "`" for ONECHOICE in $CHOICES do DLGTXT="$DLGTXT " done DLGEXT="" if [ "`echo "$DRVMSG" | cut -f 1 -d ':' | grep "[a-zA-Z]$"`" = "" ];then #ask if want superfloppy install... DLGEXT=" " else DLGEXT=" " fi DLG2=" Puppy Universal Installer $DLGTXT $DLGEXT " RETTXT="`echo "$DLG2" | gtkdialog2 --stdin`" [ ! "`echo "$RETTXT" | grep 'abort'`" = "" ] && exit [ "`echo "$RETTXT" | grep 'EXIT:GOBACK'`" = "" ] && break done #BIG LOOP #when arrive here, have #RETTXT="EXIT:sda1", DRVMSG="sda1: vfat, size 122.1 MiB, Puppy version 108 installed" (has all parts fnd) #sanity check... #SANITYPART="`echo -n "$DRVMSG" | cut -f 1 -d ':'`" SANITYPART="`echo -n "$RETTXT" | grep 'EXIT' | cut -f 2 -d ':' | cut -f 2 -d '_'`" SANITYMNTPT="`mount | grep "/dev/$SANITYPART" | tr -s " " | cut -f 3 -d " "`" #v2.02 cannot use mount for ntfs-3g driver... #[ "$SANITYMNTPT" = "" ] && SANITYMNTPT="`ps -e | grep -o ntfs\-3g.* | grep "/dev/$SANITYPART" | sed -e 's/[^a-zA-Z0-9/._\-]/ /g' | tr -s ' ' | tr ' ' "\n" | grep '^/mnt/'`" [ "$SANITYMNTPT" = "" ] && SANITYMNTPT="`ps -e | grep -o 'ntfs\-3g.*' | grep "/dev/$SANITYPART" | tr '\t' ' ' | tr -s ' ' | tr ' ' "\n" | grep '^/mnt/'`" if [ ! "$SANITYMNTPT" = "" ];then SANITYMSG1="$SANITYPART currently mounted, need to unmount it!!!" SANITYMSG2="$SANITYPART currently mounted read-write." SANITYMSG3="$SANITYPART does not have pup_save.3fs file in it." #SANITYMNTPT="`mount | grep "/dev/$SANITYPART" | tr -s " " | cut -f 3 -d " "`" SANITYRORW="`mount | grep "/$SANITYPART" | tr -s " " | cut -f 6 -d " "`" [ ! "`echo -n "$SANITYMNTPT" | grep "/initrd/"`" = "" ] && SANITYMSG1="$SANITYPART cannot be unmounted!" [ "$SANITYRORW" = "(ro)" ] && SANITYMSG2="$SANITYPART is mounted read-only!" [ -f $SANITYMNTPT/pup_save.3fs ] && SANITYMSG3="$SANITYPART has personal file pup_save.3fs in it!" Xdialog --left --title "Puppy universal installer: SANITY CHECK" --ok-label "CONTINUE" --cancel-label "QUIT" --yesno "A partition sanity check before continuing:\n$SANITYMSG1 \n$SANITYMSG2 \n$SANITYMSG3 \n\nIf the above report is that the partition is mounted, you need to unmount it\nright now, but if report is it cannot be unmounted, then there may be install\ndifficulties -- certainly, in the case of install to hard drive you will only\nbe able to do an \"option1\" install (explained further on).\nIf the partition has pup_save.3fs in it, that is the reason it cannot be\nunmounted -- it is currently in use by Puppy. If booting Puppy from live-CD,\nif pup_save.3fs does not exist then Puppy will run totally in RAM, which will\nsolve the problem -- but you should not delete or rename pup_save.3fs right\nnow as it is in use. Instead, boot some other OS then rename the file, then\nboot Puppy live-CD.\n\nBottom-line, unmount the partition now, if you can, otherwise CONTINUE script\nwith the restricted install choice, or QUIT script now and try to fix the\nproblem of the partition getting mounted..." 0 0 [ ! $? -eq 0 ] && exit fi if [ ! "`echo "$RETTXT" | grep 'EXIT:REFORMAT'`" = "" ];then #RETTXT will have "EXIT:REFORMAT_sda" or "EXIT:REFORMAT_sda1", depending whether #we want to format in superfloppy mode or with a MBR and a partition... DESTPART="`echo "$RETTXT" | grep 'EXIT:REFORMAT' | cut -f 2 -d ':' | cut -f 2 -d '_'`" if [ "`echo "$DESTPART" | grep "[0-9]$"`" = "" ];then #want superfloppy... DLG3=" Puppy Universal Installer " RETTXT="`echo "$DLG3" | gtkdialog2 --stdin`" [ ! "`echo "$RETTXT" | grep 'abort'`" = "" ] && exit DESTFS="`echo "$RETTXT" | grep 'EXIT:' | cut -f 2 -d ':'`" echo '#!/bin/sh' > /tmp/formatsuper.sh echo -e "echo -n \"SANITY CHECK: formatting /dev/${DRVSEL}, ENTER to continue or CTRL-C to quit: \"" >> /tmp/formatsuper.sh echo 'read mooo' >> /tmp/formatsuper.sh #echo 'echo "Zeroising the entire drive..."' >> /tmp/formatsuper.sh #echo 'echo "(please be very patient, this could take awhile)"' >> /tmp/formatsuper.sh ##echo "dd if=/dev/zero bs=1024 | $BAR -of /dev/$DRVSEL -s ${IDRVSIZM}m" >> /tmp/formatsuper.sh #echo "dd if=/dev/zero of=/dev/$DRVSEL" >> /tmp/formatsuper.sh #no, will just zeroise the mbr section... echo "dd if=/dev/zero of=/dev/$DRVSEL bs=512 count=1" >> /tmp/formatsuper.sh echo 'sync' >> /tmp/formatsuper.sh if [ "$DESTFS" = "ext3" ];then echo 'echo "Creating an ext3 filesystem on the drive..."' >> /tmp/formatsuper.sh echo -e "echo \"y\" | mke2fs -j -m 0 /dev/$DRVSEL" >> /tmp/formatsuper.sh else #vfat echo 'echo "Creating a vfat filesystem on the drive..."' >> /tmp/formatsuper.sh echo "mkdosfs -I /dev/$DRVSEL" >> /tmp/formatsuper.sh fi echo 'sync' >> /tmp/formatsuper.sh echo 'echo -n "Press ENTER key to continue: "' >> /tmp/formatsuper.sh echo 'read moo' >> /tmp/formatsuper.sh chmod 755 /tmp/formatsuper.sh rxvt -bg "orange" -title "Puppy Universal Installer" -geometry 80x10 -e /tmp/formatsuper.sh DESTSIZM="$DRVSIZM" IDESTSIZM="$IDRVSIZM" DESTVER="" #previous version, n.a. else #want to partition with partition 1... DLG3=" Puppy Universal Installer " RETTXT="`echo "$DLG3" | gtkdialog2 --stdin`" DESTFS="`echo "$RETTXT" | grep 'EXIT:' | cut -f 2 -d ':'`" echo '#!/bin/sh' > /tmp/formatmbr.sh echo -e "echo -n \"SANITY CHECK: formatting /dev/${DRVSEL}, ENTER to continue or CTRL-C to quit: \"" >> /tmp/formatmbr.sh echo 'read mooo' >> /tmp/formatmbr.sh #echo 'echo "Zeroising the entire drive..."' >> /tmp/formatmbr.sh #echo 'echo "(please be very patient, this could take awhile)"' >> /tmp/formatmbr.sh ##echo "dd if=/dev/zero bs=1024 | $BAR -of /dev/$DRVSEL -s ${IDRVSIZM}m" >> /tmp/formatmbr.sh #echo "dd if=/dev/zero of=/dev/$DRVSEL" >> /tmp/formatmbr.sh #no, just do the mbr... echo 'echo "Creating the MBR (Master Boot Record)..."' >> /tmp/formatmbr.sh echo "dd if=/usr/lib/syslinux/mbr.bin of=/dev/$DRVSEL bs=512 count=1" >> /tmp/formatmbr.sh echo 'sync' >> /tmp/formatmbr.sh #create a bootable partition... echo 'echo "Creating a partition..."' >> /tmp/formatmbr.sh echo 'echo "n' >> /tmp/formatmbr.sh echo 'p' >> /tmp/formatmbr.sh echo '1' >> /tmp/formatmbr.sh echo >> /tmp/formatmbr.sh echo >> /tmp/formatmbr.sh #make partition bootable... echo 'a' >> /tmp/formatmbr.sh echo '1' >> /tmp/formatmbr.sh #write and exit... echo -n 'w"' >> /tmp/formatmbr.sh echo " | fdisk /dev/$DRVSEL" >> /tmp/formatmbr.sh echo 'echo "Copying MBR..."' >> /tmp/formatmbr.sh echo "dd if=/usr/lib/syslinux/mbr.bin of=/dev/$DRVSEL bs=512 count=1" >> /tmp/formatmbr.sh echo 'sync' >> /tmp/formatmbr.sh echo -e "echo \"Creating a FAT filesystem in /dev/${DRVSEL}1...\"" >> /tmp/formatmbr.sh echo "mkdosfs /dev/${DRVSEL}1" >> /tmp/formatmbr.sh #...this auto creates most appropriate fat f.s., so really should run fdisk set f.s. id now. echo 'sync' >> /tmp/formatmbr.sh echo 'echo -n "Press ENTER key to continue: "' >> /tmp/formatmbr.sh echo 'read moo' >> /tmp/formatmbr.sh chmod 755 /tmp/formatmbr.sh rxvt -bg "orange" -title "Puppy Universal Installer" -geometry 80x10 -e /tmp/formatmbr.sh REALFS="`disktype /dev/${DRVSEL}1 | grep "file system" | cut -f 1 -d " "`" FSID="c" #FAT32(LBA) [ "$REALFS" = "FAT16" ] && FSID="6" [ "$REALFS" = "FAT32" ] && FSID="b" #f.s. id for partition... 6=FAT16 e=FAT16(LBA) c=FAT32(LBA) 83=Linux 4=FAT16<32M echo "t $FSID w" | fdisk /dev/$DRVSEL fi else DESTPART="`echo "$RETTXT" | grep 'EXIT:' | cut -f 2 -d ':'`" DESTFS="`echo "$DRVMSG" | grep "$DESTPART" | cut -f 1 -d ',' | tr -s " " | cut -f 2 -d " "`" DESTSIZE="`echo "$DRVMSG" | grep "$DESTPART" | tr -s " " | cut -f 4-5 -d " "`" DESTSIZM="`echo -n "$DESTSIZE" | cut -f 1 -d " "`" if [ ! "`echo "$DESTSIZE" | grep "GiB"`" = "" ];then DESTSIZM="`dc $DESTSIZM 1000 \* p`" fi IDESTSIZM="`echo -n "$DESTSIZM" | cut -f 1 -d '.'`" #truncate to integer. DESTVER="`echo "$DRVMSG" | grep "$DESTPART" | tr -s " " | grep "installed" | cut -f 8 -d " "`" fi if [ "`echo "$DESTPART" | grep "[0-9]$"`" = "" ];then #superfloppy DLG4=" Puppy Universal Installer " RETTXT="`echo "$DLG4" | gtkdialog2 --stdin`" else DLG4=" Puppy Universal Installer " RETTXT="`echo "$DLG4" | gtkdialog2 --stdin`" fi [ ! $? -eq 0 ] && exit [ "`echo "$RETTXT" | grep 'OK'`" = "" ] && exit #get latest Puppy files.... SRCPATH="" CDDRIVE="" rm -f /tmp/srcpath.txt mount | tr -s " " | cut -f 3 -d " " | while read ONEDIR do INCYES=0 [ -f $ONEDIR/pup_$NEWVER.sfs ] && INCYES=`expr $INCYES + 1` [ -f $ONEDIR/vmlinuz ] && INCYES=`expr $INCYES + 1` [ -f $ONEDIR/initrd.gz ] && INCYES=`expr $INCYES + 1` if [ $INCYES -eq 3 ];then echo -n "$ONEDIR" > /tmp/srcpath.txt break fi done [ -f /tmp/srcpath.txt ] && SRCPATH="`cat /tmp/srcpath.txt`" if [ "$SRCPATH" = "" ];then Xdialog --left --buttons-style text --title "Puppy universal installer" --ok-label "CD" --cancel-label "DIRECTORY" --yesno "Puppy consists of three files:\nvmlinuz The Linux kernel\ninitrd.gz The initial ramdisk.\npup_$NEWVER.sfs This has all the Puppy files.\nIf you booted Puppy from a live-CD, those three files will be on it.\nOtherwise, they are in the .iso file and can be extracted -- in that\ncase, you will need to select the directory where you have extracted\nthem to.\nPlease do NOT use a path with any spaces!!!\n\n\nWhere are the Puppy files?..." 0 0 RETVAL=$? if [ $RETVAL -eq 0 ];then #CD CDDRIVE="`readlink /dev/cdrom`" CDDRIVE="`basename $CDDRIVE`" CDDRVINFO="`probedisk | grep "/dev/$CDDRIVE" | cut -f 3 -d '|'`" Xdialog --left --title "Puppy universal installer" --msgbox "Please insert the Puppy live-CD (if not already) into the drive.\nNote, in case your PC has two CD/DVD drives, Puppy is expecting\nthe live-CD to be inserted into $CDDRIVE, which is described as:\n $CDDRVINFO \n\nAfter inserting live-CD, click OK button..." 0 0 mkdir /mnt/$CDDRIVE 2> /dev/null mount -t iso9660 /dev/$CDDRIVE /mnt/$CDDRIVE if [ -f /mnt/$CDDRIVE/initrd.gz ];then SRCPATH="/mnt/$CDDRIVE" else Xdialog --left --title "Puppy universal installer: ERROR" --msgbox "Sorry, Puppy is not on the CD.\nPlease mount the CD using one of the mount programs\n(see File Managers menu) then click OK button..." 0 0 RETVAL=1 fi fi if [ ! $RETVAL -eq 0 ];then #DIRECTORY SRCFPATH="`Xdialog --left --backtitle "Please find the latest Puppy files\nvmlinuz, initrd.gz and pup_$NEWVER.sfs,\nTHEN HIGHLIGHT ANY ONE OF THEM\nand click the OK button" --title "Puppy universal installer" --stdout --no-buttons --no-cancel --fselect "*" 0 0`" [ ! $? -eq 0 ] && exit SRCPATH="`dirname $SRCFPATH`" fi fi #sanity check... if [ ! -f $SRCPATH/pup_$NEWVER.sfs ];then Xdialog --left --title "Puppy universal installer: ERROR" --msgbox "Oh dear, a \"sanity check\" has failed.\nThis file: $SRCPATH/pup_$NEWVER.sfs\ndoes not exist.\nThe above is supposed to be path-to-where-puppy-files-are/pup_xxx.sfs\nwhere \"xxx\" is the latest version number.\nClick OK button to quit..." 0 0 exit fi #find out if puppy already on dest... ispupfunc $DESTFS $DESTPART #...sets PUPVEROLD. #now to do the actual install... case $FINALPMEDIA in usbflash|usbhd|ideflash|idezip) #removable media, install with syslinux/extlinux #26mar06 JustGreg fix mbr... if [ ! "`echo "$DESTPART" | grep '[0-9]$'`" = "" ];then #superfloppy mode has no mbr. DESTDRV="`echo -n "$DESTPART" | cut -b 1-3`" dd if=/dev/$DESTDRV of=/tmp/mbr446.bin bs=446 count=1 sync if [ "`hexdump -x /tmp/mbr446.bin | tr -s " " | cut -f 2-9 -d " " | grep '[1-9a-zA-Z]'`" = "" ];then MBRCHOICE="`Xdialog --left --title "Puppy Universal Installer" --no-cancel --stdout --menubox "The bootstrap loader code is missing from the MBR (Master Boot Record),\nmeaning that the USB drive will not boot. Please choose one of the\nfollowing to fix this. Personally, I have had success with mbr.bin." 0 0 4 sys-nopart.mbr "Bootstrap loader code, created by JustGreg" mbr.bin "From the Syslinux package" mbrfat.bin "From the makebootfat package" spb2_mbr.bin "From spblinux, created by Christian Ostheimer" `" else MBRCHOICE="`Xdialog --left --title "Puppy Universal Installer" --no-cancel --stdout --menubox "The MBR (Master Boot Record) in the USB drive is probably okay as-is, so choose\nthe first option. However, if you cannot get the drive to boot, and you are\nsure that the BIOS settings are not to blame and the PC is capable of booting\nfrom USB, then try one of these alternative MBRs.\nNote, if you choose to change the MBR, the old first 446 bytes (the\nbootstrap loader part) of the MBR will be backed up to /tmp/oldmbr.bin\nNote, you can install these MBRs directly, without running this\nInstaller program again: they are located in /usr/lib/syslinux,\nand you can use the dd program to copy them.\nExample: dd if=spb2_mbr.bin of=/dev/${DESTDRV}\nNote, personally I have had success with mbr.bin." 0 0 5 default "DO NOTHING, leave current MBR alone" sys-nopart.mbr "Bootstrap loader code, created by JustGreg" mbr.bin "From the Syslinux package" mbrfat.bin "From the makebootfat package" spb2_mbr.bin "From spblinux, created by Christian Ostheimer" `" fi rm /tmp/mbr446.bin if [ ! "$MBRCHOICE" = "" ];then if [ ! "$MBRCHOICE" = "default" ];then dd if=/dev/$DESTDRV of=/tmp/oldmbr.bin bs=446 count=1 sync dd if=/usr/lib/syslinux/$MBRCHOICE of=/dev/$DESTDRV sync fi fi fi case $DESTFS in vfat) if [ ! "`echo "$DESTPART" | grep '[0-9]$'`" = "" ];then PARTCHOICE="`Xdialog --left --title "Puppy Universal Installer" --no-cancel --stdout --menubox "Please just accept the default here, 'JUST KEEP GOING'.\nPLEASE MAKE SURE TOP ENTRY HIGHLIGHTED THEN CLICK OK BUTTON\n\nHowever, if you have tried this Puppy Universal Installer\nbut Puppy will not boot, you can try one of the other choices here.\n\nPersonally, I have had success with using GParted to wipe and\nrecreate the partition..." 0 0 4 default "JUST KEEP GOING" GParted "Wipe and recreate USB/IDE-CF partition using GParted" syslinux "Make USB or IDE-CF msdos/vfat partition bootable"`" [ "$PARTCHOICE" = "syslinux" ] && fixusbfunc $DESTPART $DESTFS [ "$PARTCHOICE" = "GParted" ] && gpartedfixusbfunc $DESTPART $DESTFS fi #params passed in: $DESTPART "$SRCPATH" $FINALPMEDIA echo '#!/bin/sh DESTPART="$1" SRCPATH="$2" FINALPMEDIA="$3" echo "ABSOLUTE FINAL SANITY CHECK!" echo "You are about to install Puppy to /dev/$DESTPART, with boot parameter" echo "PMEDIA=$FINALPMEDIA. The files vmlinuz, initrd.gz, pup_xxx.sfs, syslinux.cfg" echo "will be written to /dev/$DESTPART and Syslinux will be used to make it bootable." echo echo -n "Press ENTER key to continue, CTRL-C to abort: " read goforit echo "Making $DESTPART bootable..." syslinux /dev/$DESTPART sync #remove old puppy1 files... mount -t vfat /dev/$DESTPART /mnt/data if [ -f /mnt/data/pup100 ];then echo "Whoa, $DESTPART has pup100 file on it. This has to be erased." echo "Press ENTER key only to continue, else any other letter then" echo -n "press ENTER to abort installation of Puppy: " read isnogo if [ ! "$isnogo" = "" ];then sync umount /dev/$DESTPART exit fi rm -f /mnt/data/pup100 fi rm -f /mnt/data/image.gz 2> /dev/null rm -f /mnt/data/usr_cram.fs 2> /dev/null rm -f /mnt/data/pup_*.sfs #v2.11 rm -f /mnt/data/devx_*.sfs #v2.11 sync echo "Copying vmlinuz..." cp -f $SRCPATH/vmlinuz /mnt/data/ sync echo "Creating syslinux.cfg..." if [ "$FINALPMEDIA" = "ideflash" ];then echo "default vmlinuz root=/dev/ram0 initrd=initrd.gz ide=nodma PMEDIA=$FINALPMEDIA" > /mnt/data/syslinux.cfg else echo "default vmlinuz root=/dev/ram0 initrd=initrd.gz PMEDIA=$FINALPMEDIA" > /mnt/data/syslinux.cfg fi sync echo "Creating marker file for wakepup boot floppy..." [ "$FINALPMEDIA" = "usbflash" ] && touch /mnt/data/USBFLASH [ "$FINALPMEDIA" = "ideflash" ] && touch /mnt/data/IDEFLASH [ "$FINALPMEDIA" = "usbhd" ] && touch /mnt/data/USBHD [ "$FINALPMEDIA" = "idezip" ] && touch /mnt/data/IDEZIP sync echo "Copying initrd.gz..." cp -f $SRCPATH/initrd.gz /mnt/data/ sync echo "Copying .sfs files..." cp -f $SRCPATH/*.sfs /mnt/data/ sync umount /mnt/data echo -n "Finished, press ENTER key to continue: " read moo ' > /tmp/installpup.sh chmod 755 /tmp/installpup.sh rxvt -bg "orange" -title "Puppy Universal Installer" -geometry 80x10 -e /tmp/installpup.sh $DESTPART $SRCPATH $FINALPMEDIA ;; ext3) #params passed in: $DESTPART "$SRCPATH" $FINALPMEDIA echo '#!/bin/sh DESTPART="$1" SRCPATH="$2" FINALPMEDIA="$3" echo "ABSOLUTE FINAL SANITY CHECK!" echo "You are about to install Puppy to /dev/$DESTPART, with boot parameter" echo "PMEDIA=$FINALPMEDIA. The files vmlinuz, initrd.gz, pup_xxx.sfs, extlinux.conf" echo "will be written to /dev/$DESTPART and Extlinux will be used to make it bootable." echo echo -n "Press ENTER key to continue, CTRL-C to abort: " read goforit mount -t ext3 /dev/$DESTPART /mnt/data echo "Making $DESTPART bootable..." #extlinux -z /mnt/data #v2.11 if [ ! "`echo "$DESTPART" | grep '[0-9]$'`" = "" ];then extlinux /mnt/data #i think only use -z for superfloppy. else extlinux -z /mnt/data fi sync rm -f /mnt/data/pup_*.sfs #v2.11 rm -f /mnt/data/devx_*.sfs #v2.11 sync echo "Copying vmlinuz..." cp -f $SRCPATH/vmlinuz /mnt/data/ sync echo "Creating extlinux.conf..." if [ "$FINALPMEDIA" = "ideflash" ];then echo "default vmlinuz root=/dev/ram0 initrd=initrd.gz ide=nodma PMEDIA=$FINALPMEDIA" > /mnt/data/extlinux.conf else echo "default vmlinuz root=/dev/ram0 initrd=initrd.gz PMEDIA=$FINALPMEDIA" > /mnt/data/extlinux.conf fi sync #note do not create wakepup marker file as it only boots msdsos/vfat. echo "Copying initrd.gz..." cp -f $SRCPATH/initrd.gz /mnt/data/ sync echo "Copying .sfs files..." cp -f $SRCPATH/*.sfs /mnt/data/ sync umount /mnt/data echo -n "Finished, press ENTER key to continue: " read moo ' > /tmp/installpup.sh chmod 755 /tmp/installpup.sh rxvt -bg "orange" -title "Puppy Universal Installer" -geometry 80x10 -e /tmp/installpup.sh $DESTPART $SRCPATH $FINALPMEDIA ;; *) gxmessage "Your $DESTPART has a $DESTFS filesystem. Currently only install to external vfat (FAT16/32) or ext3 filesystems is supported. Click OK to quit..." exit ;; esac ;; scsihd|idehd|satahd) #internal media, boot with boot-disk or grub. #arrive here with DESTPART & DESTFS where installing to, PMEDIA boot param FINALPMEDIA, #SRCPATH where to get vmlinuz, initrd, pup_xxx.sfs, PUPVEROLD is old puppy version in #format 200 (without dots) =0 if no prior installed puppy, #NEWVER is new puppy version, DESTSIZM is size of dest partition in Mb (real number), DESTMNTPT="`mount | grep "/dev/$DESTPART" | tr -s " " | cut -f 3 -d " "`" #v2.02 ntfs-3g needs this... #[ "$DESTMNTPT" = "" ] && DESTMNTPT="`ps -e | grep -o ntfs\-3g.* | grep "/dev/$DESTPART" | sed -e 's/[^a-zA-Z0-9/._\-]/ /g' | tr -s ' ' | tr ' ' "\n" | grep '^/mnt/'`" [ "$DESTMNTPT" = "" ] && DESTMNTPT="`ps -e | grep -o 'ntfs\-3g.*' | grep "/dev/$DESTPART" | tr '\t' ' ' | tr -s ' ' | tr ' ' "\n" | grep '^/mnt/'`" if [ "$DESTMNTPT" = "" ];then mkdir /mnt/$DESTPART 2> /dev/null mount -t $DESTFS /dev/$DESTPART /mnt/$DESTPART DESTMNTPT="/mnt/$DESTPART" fi #choose option1 or option2 install... #option1: files vmlinuz, initrd.gz, pup_xxx.sfs, to dest partition. #option2: file vmlinuz to partition, contents of pup_xxx.sfs to partition. if [ $PUPVEROLD -eq 0 ];then PREVPUPMSG="It appears that this is a new installation." else PREVPUPMSG="There appears to be an existing installation of Puppy, version $PUPVEROLD, and you may choose to upgrade or totally replace." fi INSTOPTION="1" if [ ! "$DESTFS" = "vfat" ];then Xdialog --left --buttons-style text --title "Puppy Universal Installer" --ok-label "NORMAL" --cancel-label "COEXIST" --yesno "You have chosen to install to /dev/$DESTPART, which appears to be an internal\nhard drive ($FINALPMEDIA).\n$PREVPUPMSG \n\nYou have two ways to install Puppy to the partition, either by what we call\n\"option1\", which means copy the files vmlinuz, initrd.gz, and pup_$NEWVER.sfs to the\npartition, leaving the previous contents of the partition untouched (good\nchoice if there is already another distro installed in the partition -- Puppy\ncan coexist with it, not interfere with it at all.\n\nOr, choose \"option2\" which is a \"normal\" Linux installation, requiring usage\nof the entire partition by Puppy. This choice is recommended by developers\n(anyone who wants to compile or develop/test applications for Puppy).\nIn fact, option2 is the recommended option for everyone, if the $DESTPART\npartition is available for Puppy to take over.\n\nNote, for option2 you can create either or both floppy/usb boot disk and/or\nh.d. Grub bootloader, but option1 only offers a floppy boot disk boot method.\nTHE OPTION1 BOOT DISK WILL ONLY BOOT PUPPY IN A FAT PARTITION!!!\n(see www.murga.org/~puppy/viewtopic.php?t=9699 for HOWTO boot from NTFS)\n\nDo you want to install Puppy like a normal Linux distro (option2)?\n\nClick NORMAL button for normal Linux install (option2)...\nClick COEXIST button for coexist type of install (option1)...\nClick window close box to quit..." 0 0 RET_VAL=$? [ $RET_VAL -eq 255 ] && exit [ $RET_VAL -eq 0 ] && INSTOPTION="2" fi #INSTOPTION, install puppy to DESTPART... if [ "$INSTOPTION" = "1" ];then Xdialog --title "Puppy Universal Installer" --msgbox "Please wait, copying files to $DESTPART..." 0 0 & XPID=$! cp -f $SRCPATH/vmlinuz $DESTMNTPT/ sync cp -f $SRCPATH/initrd.gz $DESTMNTPT/ sync cp -f $SRCPATH/*_$NEWVER.sfs $DESTMNTPT/ sync touch $DESTMNTPT/$FINALPMEDIA #needed by WakePup sync kill $XPID umount /dev/$DESTPART if [ ! "`echo -n "$DESTFS" | grep --extended-regexp 'msdos|vfat'`" = "" ];then # Xdialog --left --title "Puppy Universal Installer" --ok-label "CREATE_BOOT_DISK" --cancel-label "NO_BOOT_DISK" --yesno " #A floppy disk can be used to boot Puppy.\nPLEASE INSERT THE FLOPPY DISK RIGHT NOW.\n(anything on the floppy disk will be wiped)\nBE SURE THAT THE FLOPPY DISK IS NOT CURRENTLY MOUNTED." 0 0 # if [ $? -eq 0 ];then # echo '#!/bin/sh # SRCPATH="$1" # FINALPMEDIA="$2" # DESTPART="$3" # while [ 1 ];do # BOOTPART="" # [ ! "`disktype /dev/fd0 | grep "file system"`" = "" ] && BOOTPART="fd0" # if [ ! "$BOOTPART" = "" ];then # echo "Creating $BOOTPART boot disk..." # echo "Writing /lib/fdos2pup.img disk image..." # gunzip -c /lib/fdos2pup.img.gz | dd of=/dev/fd0 # sync # echo "Creating config.sys on floppy drive..." # echo "SHELL=a:tiny.exe c:\vmlinuz c:\initrd.gz root=/dev/ram0 PMEDIA=$FINALPMEDIA" > /tmp/config.sys # echo # echo "PLEASE NOTE, Puppy now uses 2.6 kernel, which does not fit on a floppy." # echo "PLEASE NOTE, this is the content of config.sys:" # cat /tmp/config.sys # echo # echo "It should be okay as it is, however Puppy cannot guess the drive-letters" # echo "that Windows/DOS assigns to partitions. You can see above that initrd.gz and" # echo "vmlinuz are expected to be in the C: partition, which is normally equivalent" # echo "to hda1 in Linux notation. You have chosen to install to $DESTPART, and if this" # echo "is something other than hda1 then you have to figure out a suitable drive" # echo "letter -- a wild guess is it may be the D: partition -- in such a case," # echo "you will have to edit config.sys." # echo "(Note, if choose to edit config.sys here, an editor will pop up, and you" # echo " will have to exit from it before this installer program can continue)" # echo "Press ENTER key only to accept config.sys as-is," # echo -n "or any letter key then ENTER to edit config.sys: " # read nonono # if [ ! "$nonono" = "" ];then # gtk-shell -t "Editing file config.sys" -ef "/tmp/config.sys" # fi # sync # echo "Copying config.sys to floppy..." # mcopy -o /tmp/config.sys a: ## echo "Copying vmlinuz to floppy drive..." ## mcopy $SRCPATH/vmlinuz a: # #cp -f $SRCPATH/vmlinuz $DESTMNTPT/ # sync # rm -f /tmp/config.sys # echo "...done" # echo # echo "If any errors writing to boot disk, or you want to make another boot" # echo "disk, insert it RIGHT NOW, then press any letter key then ENTER key," # echo -n "or press ENTER key only when done: " # read moodoo # [ "$moodoo" = "" ] && break # else # echo -n "Please insert floppy disk now, then press ENTER key: " # read moodoo # fi # done #' > /tmp/installpup.sh # chmod 755 /tmp/installpup.sh # rxvt -bg "orange" -title "Puppy Universal Installer" -geometry 80x17 -e /tmp/installpup.sh $SRCPATH $FINALPMEDIA $DESTPART Xdialog --left --title "Puppy Universal Installer" --ok-label "CREATE_BOOT_DISK" --cancel-label "NO_BOOT_DISK" --yesno "A floppy disk can be used to boot Puppy.\nCurrently we are offering WakePup2, a generic boot floppy\nthat scans the PC and finds where Puppy is installed." 0 0 if [ $? -eq 0 ];then /usr/sbin/wakepup2 fi else Xdialog --left --title "Puppy Universal Installer" --msgbox "NOTICE: As you have installed to a partition with a $DESTFS filesystem,\nwhich is non-FAT, you cannot create a boot floppy disk. The only option\nleft is to manually setup your Grub or Lilo or other boot system. Note,\nthere are other boot floppy systems that can boot a non-FAT partition.\nNote, partition $DESTPART has the files vmlinuz, initrd.gz and\npup_$NEWVER.sfs on it, where vmlinuz is the kernel and initrd.gz is the\ninitial ramdisk. You should provide the boot parameter 'PMEDIA=idehd' if\n$DESTPART is an ide drive." 0 0 fi #finished. could put up a final dlg here, then quit script. Xdialog --title "Puppy Universal Installer" --msgbox "Okay, all done!" 0 0 else #h.d. install option2 #upgrade, ask if want delete partition... if [ ! $PUPVEROLD -eq 0 ];then Xdialog --left --buttons-style text --title "Puppy Universal Installer" --ok-label "UPGRADE" --cancel-label "WIPE" --yesno "There is already a version of Puppy installed in $DESTPART.\nDo you want to upgrade, or totally wipe the partition?\n\nFINAL SANITY CHECK: ARE YOU SURE $DESTPART IS THE RIGHT PARTITION?\n(note, $DESTPART is currently mounted on $DESTMNTPT -- okay?)\n\nSelect UPGRADE button to upgrade...\nSelect WIPE button to wipe partition...\nClick window Close box to quit..." 0 0 RET_VAL=$? if [ $RET_VAL -eq 255 ];then rox -D "$DESTMNTPT" sync umount $DESTMNTPT 2>/dev/null exit fi if [ $RET_VAL -eq 1 ];then #no Xdialog --title "Puppy Universal Installer" --no-buttons --infobox "Please wait, wiping all files in $DESTPART..." 0 0 50000 & XPID=$! sleep 3 rm -rf $DESTMNTPT/* sync kill $XPID fi fi Xdialog --title "Puppy Universal Installer" --no-buttons --infobox "Please wait, copying Puppy files to $DESTPART..." 0 0 120000 & XPID=$! sleep 1 #loop-device mount pup_xxx.sfs in DESTPART, copy contents of pup_xxx.sfs to DESTPART... losetup-FULL /dev/loop2 $SRCPATH/pup_$NEWVER.sfs mkdir $DESTMNTPT/srcmntpt mount -r -t squashfs /dev/loop2 $DESTMNTPT/srcmntpt cp -a -u --remove-destination $DESTMNTPT/srcmntpt/bin $DESTMNTPT/ cp -a -u --remove-destination $DESTMNTPT/srcmntpt/dev $DESTMNTPT/ cp -a -u --remove-destination $DESTMNTPT/srcmntpt/etc $DESTMNTPT/ cp -a -u --remove-destination $DESTMNTPT/srcmntpt/lib $DESTMNTPT/ cp -a -u --remove-destination $DESTMNTPT/srcmntpt/mnt $DESTMNTPT/ cp -a -u --remove-destination $DESTMNTPT/srcmntpt/proc $DESTMNTPT/ cp -a -u --remove-destination $DESTMNTPT/srcmntpt/root $DESTMNTPT/ cp -a -u --remove-destination $DESTMNTPT/srcmntpt/sbin $DESTMNTPT/ cp -a -u --remove-destination $DESTMNTPT/srcmntpt/tmp $DESTMNTPT/ cp -a -u --remove-destination $DESTMNTPT/srcmntpt/usr $DESTMNTPT/ cp -a -u --remove-destination $DESTMNTPT/srcmntpt/var $DESTMNTPT/ [ -d $DESTMNTPT/srcmntpt/opt ] && cp -a -u --remove-destination $DESTMNTPT/srcmntpt/opt $DESTMNTPT/ #v2.11 #v2.12 external modules file... [ -f $SRCPATH/zdrv_$NEWVER.sfs ] && cp -af $SRCPATH/zdrv_$NEWVER.sfs $DESTMNTPT/ [ -f /zdrv_$NEWVER.sfs ] && cp -af /zdrv_$NEWVER.sfs $DESTMNTPT/ #v2.12 also copy the 'fetched' kernel modules... #no, as a fetched module may also have firmware and that would have to #be copied also... #cp -a -f /lib/modules/$KERNVER/* $DESTMNTPT/lib/modules/$KERNVER/ #v2.12 not really necessary, but copy this too... #no, as fetched modules are commented-out by modprobe script... #[ -f /lib/modules/firmware.dep.$KERNVER ] && cp -a -f /lib/modules/firmware.dep.$NEWVER $DESTMNTPT/lib/modules/firmware.dep.$KERNVER #but, do copy this... if [ -d /lib/modules/$KERNVER/initrd ];then mkdir -p $DESTMNTPT/lib/modules/$KERNVER/initrd cp -af /lib/modules/$KERNVER/initrd/* $DESTMNTPT/lib/modules/$KERNVER/initrd/ depmod -b $DESTMNTPT fi mkdir $DESTMNTPT/sys 2>/dev/null sync kill $XPID #fix space optimisation links into initrd... #TODO #chroot to DESTPART, set /etc/puppyversion back to PUPVEROLD, run rc.update Xdialog --title "Puppy Universal Installer" --no-buttons --infobox "Please wait, executing rc.update script..." 0 0 60000 & XPID=$! sleep 2 echo -n "$PUPVEROLD" > $DESTMNTPT/etc/puppyversion #set it back to what it was. #chroot $DESTMNTPT -c /etc/rc.d/rc.update option2hdinstall #busybox chroot does not have -c ... chroot $DESTMNTPT /etc/rc.d/rc.update option2hdinstall #(need to tell rc.update where src files are, as passed param) sync mv -f $DESTMNTPT/etc/fstab $DESTMNTPT/etc/fstab.bak echo "/dev/$DESTPART / $DESTFS defaults 0 1" > $DESTMNTPT/etc/fstab echo "none /proc proc defaults 0 0" >> $DESTMNTPT/etc/fstab echo "none /sys sysfs defaults 0 0" >> $DESTMNTPT/etc/fstab echo "none /dev/pts devpts gid=2,mode=620 0 0" >> $DESTMNTPT/etc/fstab echo "/dev/fd0 /mnt/floppy auto noauto,rw 0 0" >> $DESTMNTPT/etc/fstab #echo "/dev/cdrom /mnt/cdrom iso9660 noauto,ro 0 0" >> $DESTMNTPT/etc/fstab sync kill $XPID umount $DESTMNTPT/srcmntpt rmdir $DESTMNTPT/srcmntpt fi #make bootable... #usb/floppy boot disk, or grub. while [ "$INSTOPTION" = "2" ];do #TODO needs work, as could have usb hd, that cannot unplug and do not want it to be turned # into a boot disk!... Xdialog --left --buttons-style text --title "Puppy Universal Installer" --ok-label "Boot from USB" --cancel-label "Install GRUB" --yesno "If all went well, Puppy has been installed to $DESTPART.\n\ But, now we have the sometimes-difficult part, how to make Puppy bootable.\n\ You can do one, or both, of these:\n\ \n\ Boot disk: Use a floppy disk or USB pen drive to boot Puppy.\n\ GRUB: Install GRUB in the hard drive.\n\ \n\ If you already have GRUB installed in the hard drive, you can choose the\n\ GRUB option here and reinstall it with Puppy added to the boot menu.\n\ \n\ Click 'Boot from USB' if you want to sacrifice a usb Flash pen drive as a\n\ 'boot disk'. This Universal Installer script will return to this dialog\n\ window after creating the USB 'boot disk'.\n\ Note, you would probably only choose this if your PC does not have a floppy\n\ drive and you do not want to install GRUB to the hard drive.\n\ \n\ Click 'Install GRUB' to install the GRUB boot manager. You will be given the\n\ opportunity to create a floppy 'boot disk' as well as install GRUB to the\n\ hard drive.\n\ \n\ FOR USB BOOT DISK CHOICE, PLEASE INSERT IT RIGHT NOW BEFORE PROCEEDING!\n\ (any files in it will be deleted)\n\ IT MUST ALSO BE UNMOUNTED -- BE SURE BEFORE PROCEEDING" 0 0 if [ $? -eq 0 ];then #BOOT DISK BOOTPART="" [ ! "`disktype /dev/sda | grep "file system" | grep "^FAT"`" = "" ] && BOOTPART="sda" [ ! "`disktype /dev/sda1 | grep "file system" | grep "^FAT"`" = "" ] && BOOTPART="sda1" [ ! "`disktype /dev/sdb | grep "file system" | grep "^FAT"`" = "" ] && BOOTPART="sdb" [ ! "`disktype /dev/sdb1 | grep "file system" | grep "^FAT"`" = "" ] && BOOTPART="sdb1" [ ! "`disktype /dev/sdc | grep "file system" | grep "^FAT"`" = "" ] && BOOTPART="sdc" [ ! "`disktype /dev/sdc1 | grep "file system" | grep "^FAT"`" = "" ] && BOOTPART="sdc1" # [ ! "`disktype /dev/fd0 | grep "file system" | grep "^FAT"`" = "" ] && BOOTPART="fd0" if [ ! "$BOOTPART" = "" ];then Xdialog --left --title "Puppy Universal Installer" --yesno "Please confirm that you want to make '$BOOTPART' into a boot disk for Puppy.\nNote, be extremely careful here if you have a USB hard drive or SATA hard\ndrive, as these have the same 'sd' device notation as a removable Flash pen\ndrive. If Puppy has mis-identified the device, then answer 'No' here...\n\nClick 'Yes' button if correct device..." 0 0 [ ! $? -eq 0 ] && continue fi if [ ! "$BOOTPART" = "" ];then cp -af $SRCPATH/vmlinuz /mnt/$DESTPART/ sync Xdialog --title "Puppy Universal Installer" --msgbox "Creating $BOOTPART boot disk..." 0 0 & XPID=$! #passed params $BOOTPART $DESTPART $SRCPATH $FINALPMEDIA echo '#!/bin/sh BOOTPART="$1" DESTPART="$2" SRCPATH="$3" FINALPMEDIA="$4" echo "Making the /dev/$BOOTPART bootable using Syslinux..." syslinux /dev/$BOOTPART mkdir /tmp/bootdiskmntpt 2> /dev/null mount -t msdos /dev/$BOOTPART /tmp/bootdiskmntpt rm -rf /tmp/bootdiskmntpt/* echo "Creating syslinux.cfg on /dev/$BOOTPART..." echo "default vmlinuz root=/dev/$DESTPART PMEDIA=$FINALPMEDIA" > /tmp/bootdiskmntpt/syslinux.cfg echo "Writing the Linux kernel, vmlinuz, to /dev/$BOOTPART..." cp -f $SRCPATH/vmlinuz /tmp/bootdiskmntpt/ sync umount /dev/$BOOTPART rmdir /tmp/bootdiskmntpt sync echo -n "Done. Press ENTER key: " read allisdone ' > /tmp/installpup.sh chmod 755 /tmp/installpup.sh rxvt -bg "orange" -title "Puppy Universal Installer" -geometry 80x10 -e /tmp/installpup.sh $BOOTPART $DESTPART $SRCPATH $FINALPMEDIA kill $XPID fi else #Grub mkdir -p /mnt/$DESTPART/boot/grub cp -af $SRCPATH/vmlinuz /mnt/$DESTPART/boot/ sync umount /mnt/$DESTPART Xdialog --left --title "Puppy Universal Installer" --msgbox "The \"grubconfig\" script is about to be executed.\nJust accept the defaults. The very first question will ask if you\nwant to do a simple installation, and you accept that option, which\nis the default. The only place where I suggest you deviate from the\ndefault, is when it asks where to install Grub, choose \"MBR\"." 0 0 unmountcdfunc while [ 1 ];do grubconfig /dev/$DESTPART #...if choose to create a boot floppy, writes 'no' to /tmp/loopbrk.txt. Xdialog --title "Universal Installer" --yesno "If you have already run grubconfig to create a boot floppy or installed\n\ to h.d., click 'Yes' button to rerun grubconfig script to either create\n\ another boot floppy or install or reinstall GRUB to the hard drive.\n\ If choose 'Yes', just accept all the defaults as before.\n\ \n\ Click 'Yes' to rerun grubconfig...\n\ Click 'No' if installation finished..." 0 0 [ ! $? -eq 0 ] && break done rm -f /tmp/loopbrk.txt exit fi Xdialog --title "Puppy Universal Installer" --yesno "Do you want to go back and create another boot disk or Grub boot?..." 0 0 [ ! $? -eq 0 ] && break done umount /mnt/$DESTPART 2> /dev/null ;; idecd|scsicd|usbcd) gxmessage "not yet implemented" #TO DO ;; esac unmountcdfunc ###END###