#!/bin/sh
#(c) Copyright Barry Kauler 2006 www.puppylinux.com
#2007 Lesser GPL licence v2 (http://www.fsf.org/licensing/licenses/lgpl.html)
# BK july 2007:
#/usr/sbin/puppyinstaller-217 is heavily modified by Dougal (based on
# puppyinstaller from v2.14). Was used in 216 and 217.
#/usr/sbin/puppyinstaller-bk is the v2.14 one with minimal mods. for 2.17.1+
#aug 2007 updated for 2.20: 'root=/dev/ram0' removed as using initramfs.
#v3.94 BK dec 2007: no longer any hd* drives.
#v3.95 BK jan 2008: handle Classmate laptop.
#v3.96 BK jan 2008: improvements for full hd install, warning about drive nums.
#v3.97 BK jan 2008: jump to puppyinstaller_old for kernels supporting hd*. --REMOVED.
#v3.97 BK feb 2008: fully support /dev/hd* notation for ide drives.
#v3.97 BK feb 2008: fix mbr recognition error in flash pen drive.

##v3.97
#if [ -e /proc/ide ];then
# xmessage "Note, Puppy is using an older kernel that supports /dev/hd*
#drive naming for IDE drives. The old Universal Installer
#script will be run, which lacks some features."
# exec puppyinstaller_old
#fi


NEWVER="`cat /etc/puppyversion`"
#mount > /etc/mtab   #v2.10 remove.
KERNVER="`uname -r`"

#v2.10
. /etc/rc.d/PUPSTATE
#v3.97 [ "$ATADRIVES" = "" ] && ATADRIVES="$SATADRIVES"

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 "パピーユニバーサルインストーラ" "GPartedはパーティションマネージャです。パピーで利用できますが、
BareBoneのリリース版には含まれていないかも知れません。その場合はPupGet
パッケージマネージャでインストールします。GPartedはパーティションの削除、
作成及びサイズの変更をする簡単なツールです。

USBフラッシュドライブにパピーをインストールしたけれど起動できない場合は
USBフラッシュドライブのパーティションがパソコンのBIOSかSyslinuxに混乱を
きたしているかも知れません。個人的にはGPartedを利用してUSBドライブの
パーティションを全て削除し、新しいパーティションを作成する事で問題を解決しました。
この方法は非常に簡単です。GPartedを実行して、
　１、USBドライブの全てのパーティションを削除します。
　２、ドライブ全体に新しいFAT16のプライマリーパーティションを作成します。
　３、「Apply」ボタンをクリックして変更をUSBドライブに書き込みます。
　４、「boot」設定フラグを設定します（パーティション上でマウスを
　　　右クリックして「manage flags」を選択します）。
 
 GPartedをインストールして実行すれば上記の事ができます。
 GPartedを終了するとパピーユニバーサルインストーラに戻ります..." &
 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 "パピーユニバーサルインストーラ" -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
}

HELPPUI='ユニバーサルインストーラ使用上の注意

Classmate、eeePC、同じような小型ノートパソコン：
まず最初に、ターゲットPCでパピーを起動する必要があります。1つの方法は、まずUSBフラッシュ
ペンドライブにパピーをインストールします。そして小型ノートパソコンで起動する、あるいは
外付けUSB-CD/DVDドライブから起動します（ClassmateのBIOSはどちらも設定が簡単です）。
そして、もう一度このユニバーサルインストーラを実行して、適切なインストールメディアを
選んで下さい -- 例えば、Classmateなら内蔵USB uDiskOnChipフラッシュドライブ。
注意：既存のOSバックアップを取りたいならば、手動でしなければなりません。Classmateの場合
これはペンドライブでおよそ1GBの空き容量が必要です。しかしClassmate BIOSは512MBより
大きい容量のUSBペンドライブからは起動しません。
-- 私は非常に厄介な方法でこれを回避しました。最初に512MBのドライブから起動します。
次に2GBのペンドライブを接続してマウントします。そして次のコマンドを使います：
# dd if=/dev/sdb | gzip - > /mnt/sdc1/backup-classmate-sdb.img.gz
ここでsdbは内蔵ドライブ全体で、sdc1はマウントした2GBのペンドライブパーティションです。
'

PMEDIA="`Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --no-tags --stdout --help "${HELPPUI}" --menubox "パピーユニバーサルインストーラヘようこそ！\nパピーを取外し可能メディアにインストールするには（例えば\nUSBフラッシュ或いはハードディスク、フロッピーディスク、Zipディスク、\nLS-120ディスクなど）続ける前に、今すぐメディアを挿入して下さい。\n\n======= 今すぐメディアを挿入して下さい ======\nそしてパピーをインストールするメディアを選択して下さい:" 0 0 10 usbflash "USBフラッシュドライブ" usbhd "USBハードディスク" usb2ataflash "USB CF フラッシュドライブ、あとでCFをIDE/SATA内蔵アダプタへ移動します" iusbflash "内蔵USBフラッシュドライブ（例えば、uDiskOnChip）" ataflash "内蔵IDE/SATAフラッシュドライブ（例えば、IDEアダプタのCFカード）" atazip "内蔵ZIPあるいはLS120ドライブ" atahd "内蔵ハードディスク（IDEあるいはSATA）" scsihd "古い本当のSCSIハードディスク" cd "CDドライブ"`"
[ ! $? -eq 0 ] && exit
[ "$PMEDIA" = "" ] && exit

TAGPMEDIA="$PMEDIA" #remember the tag chosen above.
[ "$TAGPMEDIA" = "iusbflash" ] && PMEDIA="usbflash"
FINALPMEDIA="$PMEDIA"
if [ "$PMEDIA" = "usb2ataflash" ];then
 PMEDIA="usbflash"
 FINALPMEDIA="ataflash"
fi

##v3.97 support /dev/hd*...
#if [ -e /proc/ide ];then
# case $FINALPMEDIA in
# ata*)
#  if [ "$SATADRIVES" = "" ];then #see /etc/rc.d/PUPSTATE.
#   SUBST_ATA="ide"
#  else
#   SUBST_ATA="sata"
#   #if [ "`probedisk | grep '^/dev/hd'`" != "" ];then
#    Xdialog --wmclass "gtkdialog2" --left --title "Puppy universal installer: IDE or SATA" --ok-label "IDE" --cancel-label "SATA" --yesno "Do you want to install to a IDE or SATA drive?
#Note, any computer manufactured before 2006 is unlikely to have a SATA
#drive. SATA is a new internal fast drive interface. Physically, you
#can tell the difference by the cable between motherboard and drive:
#IDE: broad flat cable  SATA: very narrow flat cable.
#
#NOte2, if you are installing to a USB or other pluggable media that
#will later be moved to an internal IDE or SATA socket, then you have
#to answer here according to what the final interface will be." 0 0
#    [ $? -eq 0 ] && SUBST_ATA="ide"
#   #fi
#  fi
#  substPATTERN="s/^ata/${SUBST_ATA}/"
#  PMEDIA="`echo -n "$PMEDIA" | sed -e "$substPATTERN"`"
#  FINALPMEDIA="`echo -n "$FINALPMEDIA" | sed -e "$substPATTERN"`"
#  ;;
# esac
#fi

PROBEDISK="`probedisk 2> /tmp/probediskerr.txt`"
case $PMEDIA in
 usbflash)
  USBDRIVES="`echo "$PROBEDISK" | grep 'Direct\-Access' | cut -f 3 -d '/' | cut -f 1 -d '|' | tr "\n" " "`"
  SELECTIONS=""
  for ONEUSB in $USBDRIVES
  do
   [ "$ATADRIVES" != "" ] && [ "`echo "$ATADRIVES" | grep "$ONEUSB"`" != "" ] && continue #v3.94 eliminate ide/sata drives. v3.97
   [ "$SATADRIVES" != "" ] && [ "`echo "$SATADRIVES" | grep "$ONEUSB"`" != "" ] && continue #v3.97 for old kernel.
   [ "$TAGPMEDIA" = "usbflash" ] && [ "`cat /sys/block/$ONEUSB/removable`" != "1" ] && continue
   [ "$TAGPMEDIA" = "iusbflash" ] && [ "`cat /sys/block/$ONEUSB/removable`" != "0" ] && continue
   USBINFO="`echo "$PROBEDISK" | grep "/dev/$ONEUSB" | head -n 1 | cut -f 3 -d '|' | tr '$' " " | 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)
  USBDRIVES="`echo "$PROBEDISK" | grep 'Direct\-Access' | cut -f 3 -d '/' | cut -f 1 -d '|' | tr "\n" " "`"
  SELECTIONS=""
  for ONEUSB in $USBDRIVES
  do
   [ "$ATADRIVES" != "" ] && [ "`echo "$ATADRIVES" | grep "$ONEUSB"`" != "" ] && continue #v3.94 eliminate ide/sata drives. v3.97
   [ "$SATADRIVES" != "" ] && [ "`echo "$SATADRIVES" | grep "$ONEUSB"`" != "" ] && continue #v3.97 for old kernel.
   [ "`cat /sys/block/$ONEUSB/removable`" != "0" ] && continue
   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
  ;;
 cd) #v3.94 was idecd
  #find cd drives... v3.97...
  CDDRIVES="`echo "$PROBEDISK" | grep '|cdrom|' | cut -f 3 -d '/' | cut -f 1 -d '|' | tr "\n" " "`"
  SELECTIONS=""
  for ONEHD in $CDDRIVES
  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 --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --ok-label "終了" --msgbox "以下のCD/DVDドライブが見つかりました:\n$SELECTIONS \n\nしかしCD/DVDドライブは直接書き込みできないのでパピーをハードディスクや\nUSBフラッシュドライブ、ZIPドライブにインストールすると同じ方法では\nCD/DVDにインストールできません。CD/DVDには,\n「リマスタリング」と呼ばれる事をする必要があります。そしてパピーには\nセットアップメニューに「PuppyライブCDリマスタ」と言うプログラムがあります。\nこのプログラムで自分だけのカスタムライブCD/DVDを作る事ができます。\n注意、新しい空の（+Rでない）CD-RかDVD-Rが必要です。\n\n終了するにはボタンをクリックして下さい..." 0 0
  exit
  ;;
 atazip)
  HDDRIVES="`echo "$PROBEDISK" | grep '|floppy|' | 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
  ;;
 atahd|ataflash) #v3.94
  #at bootup, init script creates ATADRIVES='' in /etc/rc.d/PUPSTATE...
  HDDRIVES="$ATADRIVES"
  if [ -e /proc/ide ];then #v3.97 old kernel.
    IDEDRIVES="`echo "$PROBEDISK" | grep '|disk|' | grep '/dev/hd' | cut -f 3 -d '/' | cut -f 1 -d '|' | tr "\n" " "`"
    HDDRIVES="$IDEDRIVES $SATADRIVES"
  fi
  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
  ;;
 *)
  gxmessage "まだ実行していません"
  exit
  ;;
esac


echo "$SELECTIONS"
#v2.11
if [ "$SELECTIONS" = "" ];then
 Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --ok-label "終了" --msgbox "選択するものがありません。もしプラグインデバイスであれば差し込みましたか？" 0 0
 exit
fi

echo '#!/bin/sh' > /tmp/dlg1
echo -n 'Xdialog --wmclass "gtkdialog2" --title "パピーユニバーサルインストーラ" --no-cancel --stdout --menubox "どのドライブにインストールするか選択:" 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"

#v3.97 old kernel, distinguish between ide and sata...
if [ -e /proc/ide ];then
 substPATTERN='s/^ata/ide/'
 if [ "$SATADRIVES" != "" ];then
  [ "`echo "$SATADRIVES" | grep "$DRVSEL"`" != "" ] && substPATTERN='s/^ata/sata/'
 fi
 PMEDIA="`echo -n "$PMEDIA" | sed -e "$substPATTERN"`"
 FINALPMEDIA="`echo -n "$FINALPMEDIA" | sed -e "$substPATTERN"`"
fi

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.

##v3.95 offer to backup entire drive...
#if [ "$PMEDIA" = "usbflash" ];then
# uPATTERN="/dev/$DRVSEL"
# uDRVDESCR="`echo "$PROBEDISK" | grep "$uPATTERN" | cut -f 3 -d '|'`"
# dsDEST='/'
# [ "$PUP_HOME" != "" ] && dsDEST='/initrd'"${PUP_HOME}"
# dsPATTERN=' '"$dsDEST"'$'
# HOMEFREEM="`df -m | grep "$dsPATTERN" | tr -s ' ' | cut -f 4 -d ' '`"
# Xdialog --buttons-style "text" --wmclass "gtkdialog2" --left --title "Puppy Universal Installer" --ok-label "No backup" --cancel-label "Backup"  --yesno "You have chosen to install to ${DRVSEL}, which is a USB Flash drive, described as:
# ${uDRVDESCR}
#
#Before continuing with choosing the partition and doing the actual install, you may
#at this stage backup the entire drive. This may be useful if you are installing to
#the internal USB Flash drive of a Intel Classmate or Asus eeePC baby laptop and you
#want to save the existing operating system, and maybe reinstall it later.
#
#The total size of ${DRVSEL} is ${IDRVSIZM}MB and this will be backed up to a compressed
#file named 'installer-backup-${DRVSEL}.img.gz' which will be approximately half to
#2/3 of this size.
#The backup file will be created at '${dsDEST}' which has ${HOMEFREEM}MB free space
#on it. This free space must be at least 200KB bigger than the anticipated size of the
#compressed backup file, if not then do not attempt to backup.
#
#Note, if you choose to backup, there is no progress window. You should see the LED
#light on the Flash drive flickering to indicate action. It may take 3 or 4 minutes,
#and when completed this Installer program will continue with normal installation.
#
#Click 'No backup' to bypass backup (normal choice)...
#Click 'Backup' to backup a pre-existing installation...
#" 0 0
# if [ $? -eq 1 ];then
#  sync
#  dd if=/dev/$DRVSEL | gzip - > ${dsDEST}/installer-backup-${DRVSEL}.img.gz
#  sync
# fi
#fi

DRVMSG=""
PUPINST=""
if [ "$SUPERFS" ];then
 fsfunc $SUPERFS #returns FSTYPE
 ispupfunc $FSTYPE $DRVSEL #returns PUPVEROLD
 [ ! $? -eq 0 ] && PUPINST=", パピーバージョン $PUPVEROLD がインストールされています"
 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" || PUPINST="" #v3.01
#   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
   <hbox>
    <text><label>パピーを ${ONECHOICE}: にインストール</label></text>
    <button>
     <input file>/usr/local/lib/X11/mini-icons/mini-dog.xpm</input>
     <action>Exit:${ONECHOICE}</action>
    </button>
   </hbox>
"
done
if [ "$FINALPMEDIA" = "usbflash" ];then
 MSGex1="<text><label>重要: GPartedを使う時は、パーティション作成後に必ず「boot」フラグを設定して下さい（右クリック: Manage flags）。同様にUSBフラッシュドライブではFAT16ファイルシステムを選択すると（FAT32 より）起動しやすくなります。 -- ext2 あるいは ext3 パーティションでも動きます。</label></text>
<text><label>追加注意: Gpartedはドライブに「！」アイコンを付けた無効なパーティションを表示するかも知れません。 -- それを削除してからパーティションを再作成して下さい（そしてboot可にして下さい）。</label></text>"
else
 MSGex1="<text><label>重要: Partedを使う時は、パーティション作成後に必ず「boot」フラグを設定して下さい（右クリック: Manage flags）。</label></text>
<text><label>追加注意: Gpartedはドライブに「！」アイコンを付けた無効なパーティションを表示するかも知れません。 -- それを削除してからパーティションを再作成して下さい（そしてboot可にして下さい）。</label></text>"
fi
if [ "$DLGTXT" = "" ];then
 DLGTXT="<hbox>
 <text><label>ドライブ ${DRVSEL}にはパーティションがありません！ GPartedを実行してパーティションを作成する必要があります:</label></text>
    <button>
     <input file>/usr/local/lib/X11/mini-icons/mini-hdisk.xpm</input>
     <label>GParted</label>
     <action>Exit:RUNGPARTED</action>
    </button>
</hbox>
$MSGex1
<text><label>\" \"</label></text>
"
fi


DLGEXT=""
if [ "`echo "$DRVMSG" | cut -f 1 -d ':' | grep "[a-zA-Z]$"`" = "" ];then
 #ask if want superfloppy install...
 DLGEXT="
   <frame パーティションのファイルシステム>
    <hbox>
     <text><label>警告: 対象とする場所のファイルシステムに注意して下さい。希望のものですか？特に、ファイルシステムが「VFAT」または「NTFS」である場合、パーティションがパピー用に全て使えるならば、これらをLinux ext2またはext3 f.s.と入れ替えたいかも知れません。PCの内蔵ドライブにインストールするなら、ファイルシステムがLinux ext2またはext3である事が強く推奨されます。パピーはVFAT/NTFSにインストールできますが「pup_save」だけで「frugal（質素な）」インストールに限られます。NTFSは特に制限されています。遅くて、厳しい起動オプションがあるので、可能な限りそれを何とかしなければなりません。パーティションを調べて変更できるGPartedを実行するには、ボタンをクリックして下さい。</label></text>
     <vbox>
      <button>
       <input file>/usr/local/lib/X11/mini-icons/gparted.xpm</input>
       <action>Exit:RUNGPARTED</action>
      </button>
     </vbox>
    </hbox>
   </frame>
   <frame スーパーフロッピ>
   <hbox>
    <text><label>警告: ===通常は推奨しません=== パピーをスーパーフロッピモードでインストールしますか？これはMBRもパーティションもありません。...この場合、ドライブはパーティション番号なしで /dev/$DRVSEL としてアクセスされます。変なBIOSのPCからUSBフラッシュドライブを起動するには良い選択かも知れません。YESならボタンをクリックして下さい:</label></text>
    <vbox>
     <button>
      <input file>/usr/local/lib/X11/mini-icons/mini-dog.xpm</input>
      <action>Exit:REFORMAT_${DRVSEL}</action>
     </button>
    </vbox>
   </hbox>
   </frame>
"
else #drive is a superfloppy.
 DLGEXT="
   <frame スーパーフロッピ>
   <hbox>
    <text><label>ドライブは現在スーパーフロッピモードで、MBRもパーティションもありません。パーティション番号なしで /dev/$DRVSEL としてアクセスされています（変なBIOSのPCからUSBフラッシュドライブを起動するには良い選択かも知れません）。パピーをインストールできるようにドライブを /dev/${DRVSEL}1 と言うパーティションで作成しますか？ もし作成するならボタンをクリックして下さい:</label></text>
    <vbox>
     <button>
      <input file>/usr/local/lib/X11/mini-icons/mini-dog.xpm</input>
      <action>Exit:REFORMAT_${DRVSEL}1</action>
     </button>
    </vbox>
   </hbox>
   </frame>
"
fi

DLG2="
 <wtitle>パピーユニバーサルインストーラ</wtitle>
 <vbox>
  <text><label>以下が見つかった選択ドライブです:</label></text>
  <text><label>\"${DRVMSG}\"</label></text>
$DLGTXT
$DLGEXT
   <button>
    <label>戻って別のドライブを選択する</label>
    <action>Exit:GOBACK</action>
   </button>
 </vbox>
"

RETTXT="`echo "$DLG2" | gtkdialog2 --stdin`"

if [ "`echo "$RETTXT" | grep 'RUNGPARTED'`" != "" ];then
 Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --msgbox "OKボタンをクリックするとユニバーサルインストーラは終了しGpartedが実行されます。このように
ユニバーサルインストーラはパピーをインストールをするため、後で再実行しなければなりません。
このユニバーサルインストーラへの自動復帰は設定されていません。インストールする人はまず、
$｛DRVSEL｝のパーティションのどんな変更もLinuxカーネルによって認識される事に気をつけて下さい。
最近のカーネルではパーティションの変更がすぐに認識されないというおかしな事もあります。
USBドライブの場合、（アンマウント時に）接続プラグを抜き、改めて再接続してカーネルに
USBドライブの再スキャンを促す必要があるかも知れません。それは本当にアホです。
ともかく、どんな変更でも変更後はパピードライブマウンタ「Pmount」を起動してパーティションが
正しく認識されているか確かめます。もし正しく認識されていなければ、絶対最悪の場合、
カーネルに強制的にドライブを再スキャンさせるように再起動しなければなりません。
変更がきちんと認識されたらユニバーサルインストーラを再実行して下さい。

「NTFS」または「VFAT」に関しては、パーティションがWindowsまたはDOS上にあるならば、
もちろんこれらをext2またはext3に変えないで下さい！。USBフラッシュドライブの場合、通常
「FAT16」パーティションなのでＯＫです。しかし「pup_save」ファイルに保存が制限されます。
これはすばらしいです。そして特にドライブがWindows上でファイルの保存や変換ができるので
大部分の人はこれを選びます。しかし、フラッシュドライブはext2/3に変換できる上に起動もします。
しかも「pup_save」ファイルだけでなく全てのパーティションを保存先として使える事も利点です。
疑うなら「VFAT」にしておいて下さい。しかし、Syslinuxは「FAT32」での起動可能に問題が
あるので、パーティションが問題のない「FAT16」である事を確認して下さい。

警告: === ファイルシステムの変更はパーティションの全てを消去します！ ===

もう一つ。GPartedを実行してパーティションを右クリックすると
「Manage flags」のメニューオプションが表示されます。
「boot」フラグが設定されている事を確認して下さい -- 忘れないで下さい！" 0 0
 [ $? -ne 0 ] && exit
 exec gparted /dev/$DRVSEL
fi

[ ! "`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 --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ: 整合チェック" --ok-label "続ける" --cancel-label "終了" --yesno "パーティションの整合チェックをしてから続けます:\n$SANITYMSG1 \n$SANITYMSG2 \n$SANITYMSG3 \n\nもし上記の結果でパーティションがマウントされていれば、今アンマウントする必要があります。\nしかし結果がパーティションをアンマウントができないならインストールに難点があります。\n-- 
確かに、ハードディスクにインストールする場合\"option1\"のインストールしかできません\n(後ほど説明します)。\nもしパーティションに「pup_save.3fs」ファイルがあるとアンマウントができません\n -- パピーが現在このファイルを使用中だからです。\nもし「pup_save.3fs」なしでパピーをライブCDから起動すると（\"pfix-ram\"オプション）
\nパピーは完全にRAM中で実行されるので問題は解決します。\n--  しかしpup_save.3fsファイルは使用中なのですぐに削除したりリネームしてはいけません。\nそのかわり、他のOSで起動してファイルをリネームし、その後\nパピーライブCDを起動します。\n\n現実的には、可能ならば今すぐパーティションをアンマウントします。\nあるいは制限されたインストールの選択でスクリプトを「継続」して下さい。あるいは\n今すぐスクリプトを「終了」してパーティションのマウント問題の解決を試みて下さい..." 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="
 <wtitle>パピーユニバーサルインストーラ</wtitle>
 <vbox>
   <text><label>/dev/${DESTPART}をスーパーフロッピとしてフォーマットする選択をしました。ドライブに「vfat」或いは「ext3」ファイルシステムを作成する選択が必要です。「Ext3」はもっともフレキシブルな選択ですが（推奨）、Windowsから読めるようにするには「vfat」を選択して下さい。注：しかし、Windowsにもext2/3ドライブにアクセスするツールがあります。</label></text>
   <text><label>詳細説明：ext3を選択した場合、ドライブ全体が個人データのストレージとしてすぐに使えますが、vfatを選択した場合、ドライブの中にext3ファイルシステムのファイルを作成しなくてはなりません（pup_save.3fs）-- このファイルは全ての個人データを含みます。フォーマットを開始するには「FORMAT_ext3」か「FORMAT_vfat」ボタンを押して下さい...</label></text>
  <hbox>
   <button>
    <label>FORMAT_ext3</label>
    <action>Exit:ext3</action>
   </button>
   <button>
    <label>FORMAT_vfat</label>
    <action>Exit:vfat</action>
   </button>
  </hbox>
 </vbox>
"
  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="
 <wtitle>パピーユニバーサルインストーラ</wtitle>
 <vbox>
   <text><label>/dev/${DRVSEL}にMBR及びパーティションを付けてフォーマットする選択をしました。このパーティションにvfat或いはext3のファイルシステムを作成する選択が必要です。ext3はもっともフレキシブルな選択ですが（推奨）、Windowsからこのドライブを読めるようにするにはvfatを選択して下さい。注：Windowsからext2/3ドライブにアクセスするツールもあります。</label></text>
   <text><label>詳細説明: ext3を選択した場合、ドライブ全体が個人データのストレージとしてすぐに使えますが、vfatを選択した場合は、ドライブの中にext2ファイルシステムのファイルを作成しなければなりません（pup_save.2fs）。 -- このファイルには全ての個人データが含まれています。</label></text>
   <text><label>USBフラッシュドライブ: Windows互換性と古いBIOSの中にはFAT16 f.s.だけ見て起動するPCがあるので、vfat（FAT16）パーティションを作成する事が最も一般的です。</label></text>
   <text><label>\" \"</label></text>
   <text><label>この時点でユニバーサルインストーラから出てGPartedを実行しなければなりません。その後、もう一度ユニバーサルインストーラを実行して下さい。GPartedでは、何が最も重要かを忘れないで下さい -- パーティション作成後、右クリックして「Manage flags」を選択し、「boot」フラグを設定します。</label></text>
   <text><label>追加注意: Gpartedはドライブに「！」アイコンを付けた無効なパーティションを表示するかも知れません。 -- それを削除してからパーティションを再作成して下さい（そしてboot可にして下さい）。</label></text>
   <text><label>GPartedを実行するにはボタンをクリック...</label></text>
  <hbox>
   <button>
    <label>GPartedを実行</label>
    <action>Exit:gparted</action>
   </button>
   <button cancel>
   </button>
  </hbox>
 </vbox>
"
  RETTXT="`echo "$DLG3" | gtkdialog2 --stdin`"
  MYACTION="`echo "$RETTXT" | grep 'EXIT:' | cut -f 2 -d ':'`"
  [ "$MYACTION" = "gparted" ] && exec gparted /dev/$DRVSEL
  exit
  
 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="
 <wtitle>パピーユニバーサルインストーラ</wtitle>
 <vbox>
  <text><label>パピーをドライブ全体にインストールする選択をしました。これをスーパーフロッピモードと呼びます。このモードではMBR (Master Boot Record)もパーティションもありません。これはフラッシュメモリ（特にUSBフラッシュ）には良い選択です。何故ならパソコンのBIOSはフラッシュメモリからブートするのに問題を持っているからです。</label></text>
  <text><label>このターゲットドライブは${DESTPART}で${DESTFS}を持ち、${DESTSIZM}Mのサイズです。「OK」ボタンを押すとパピーをこのドライブにインストールします...</label></text>
  <hbox><button ok></button><button cancel></button></hbox>
 </vbox>
"
 RETTXT="`echo "$DLG4" | gtkdialog2 --stdin`"
else
 DLG4="
 <wtitle>パピーユニバーサルインストーラ</wtitle>
 <vbox>
  <text><label>パピーを/dev/${DESTPART}パーティションにインストールする選択をしました。このパーティションは${DESTFS}ファイルシステムを持ち、${DESTSIZM}Mのサイズです。</label></text>
  <text><label>「OK」ボタンを押すとパピーをインストールします（注：実際のインストールを始める前に１、２のダイアログウィンドウが現れます）...</label></text>
  <hbox><button ok></button><button cancel></button></hbox>
 </vbox>
"
 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` #v3.01
 [ -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 --wmclass "gtkdialog2" --left --buttons-style text --title "パピーユニバーサルインストーラ" --ok-label "CD" --cancel-label "DIRECTORY" --yesno "パピーは２個から４個のファイルでできています:\nvmlinuz      リナックスカーネル\ninitrd.gz    イニシャルRAMディスク\npup_$NEWVER.sfs  これには全てのパピーファイルが入っています（時々initrd.gzも）\n             （中にinitrd.gzが作られていればinitrd.gzだけが必要です）\nzdrv_$NEWVER.sfs 完全なカーネルドライバセットとファームウェア（オプション）\n             （いくつかのビルドはpup_$NEWVER.sfsにドライバの有益なサブセットを持っています）\nもしパピーをライブCDから起動しているなら、これらのファイルはその中に入っています。\nあるいは、それらのファイルは .isoファイルの中にあり展開する事ができます -- その場合、\nファイルを取り出して保存するディレクトリを選択しなくてはなりません。\n=== 空白を入れたパスは使わないで下さい！！！ ===\n\n\nパピーのファイルはどこですか？..." 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 --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --msgbox "（まだ準備してなかったら）パピーライブCDをドライブに入れて下さい。\n注意：PCに２つのCD/DVDドライブがある場合、パピーはライブCDが\n$CDDRIVEに挿入されていると期待します。これは次のように表示されます:\n $CDDRVINFO \n\nライブCDを挿入後「OK」ボタンをクリックして下さい..." 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 --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ: エラー" --msgbox "残念、パピーはCDにありません。\nマウントプログラムの１つを使ってCDをマウントして下さい\n（ファイルマネージャメニュー）そして「OK」ボタンをクリックして下さい..." 0 0
   RETVAL=1
  fi 
 fi
 if [ ! $RETVAL -eq 0 ];then #DIRECTORY
  SRCFPATH="`Xdialog --wmclass "gtkdialog2" --left --backtitle "最新のパピーファイルを見つけて下さい\nvmlinuz、initrd.gz と pup_$NEWVER.sfsです。\n=== その中のどれかをハイライトさせてから ===\n「OK」ボタンをクリックして下さい" --title "パピーユニバーサルインストーラ" --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 #v3.01
 Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ: エラー" --msgbox "やれやれ、\"整合性チェック\"は失敗しました。\nこのファイル: $SRCPATH/pup_$NEWVER.sfs\nは存在しません。\nこれはpath-to-where-puppy-files-are/pup_xxx.sfsでなければならないと推定されます。\nここで\"xxx\"は最新のバージョン番号です。\n「OK」ボタンをクリックして終了して下さい..." 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|ataflash|atazip) #removable media, install with syslinux/extlinux

  #26mar06 JustGreg fix mbr...
  if [ "`echo "$DESTPART" | grep '[0-9]$'`" != "" ];then #superfloppy mode has no mbr.
   #DESTPART is a partition (not superfloppy).
   DESTDRV="`echo -n "$DESTPART" | cut -b 1-3`"
   DESTNUM="`echo -n "$DESTPART" | cut -b 4-5`"
   dd if=/dev/$DESTDRV of=/tmp/mbr446.bin bs=446 count=1
   sync
   
   #v3.95
   ALPHADUMP="`hexdump -C /tmp/mbr446.bin | cut -f 2 -d '|' | tr '\n' ' ' | tr -d ' '`"
   #this will be =1 if mbr has 'GRUB' in it, else =0...
   FLAGGRUB="`echo "$ALPHADUMP" | grep 'GRUB' | wc -l`"
   
   #v3.97 have a case where normal bootable flash vfat pen drive has the
   #string 'GRUB.Geom.HardDisk.Read.Error' in the mbr...
   [ "$FLAGGRUB" = "1" ] && [ "`echo "$ALPHADUMP" | grep 'GRUB.Geom.HardDisk.Read.Error'`" != "" ] && FLAGGRUB="0"
   
   if [ "`hexdump -x /tmp/mbr446.bin | tr -s " " | cut -f 2-9 -d " " | grep '[1-9a-zA-Z]'`" = "" -o "$FLAGGRUB" = "1" ];then
    MBRCHOICE="`Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --no-cancel --stdout --menubox "ブートストラップローダコードは、MBR（Master Boot Record）からなくなっています。\nこれはUSBドライブから起動しないという事です。これを解決するために、\n次の中から１つ選んで下さい。個人的には、mbr.binで成功しました。" 0 0 4 sys-nopart.mbr "JustGreg氏作成のブートストラップローダコード" mbr.bin "Syslinuxパッケージから" mbrfat.bin "makebootfatパッケージから" spb2_mbr.bin "Christian Ostheimer氏作成のspblinuxから" `"
   else
    MBRCHOICE="`Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --no-cancel --stdout --menubox "USBドライブのMBR（マスタブートレコード）は多分現状のままでＯＫでしょう。\n最初のオプションを選んで下さい。しかし起動ドライブを得られず、\nBIOSの設定に自信がなく、PCがUSBから起動できると確信があるなら、\nこのMBRの中の1つを試して下さい。\n注意、MBRの変更を選択をすると、\nMBRの古い最初の446バイト（ブートストラップローダ部分）は/tmp/oldmbr.binにバックアップされます。\n注意、このインストーラプログラムを再び実行しなくても、直接これらのMBRを\nインストールする事ができます：\nMBRは/usr/lib/syslinuxにあり、それをコピーする「dd」プログラムが使えます。\n例：dd if=spb2_mbr.bin of=/dev/${DESTDRV}\n注意、個人的にはmbr.binで成功しました。" 0 0 5 default "=== 何もしない === 今のMBRだけを残す" sys-nopart.mbr "JustGreg氏作成のブートローダストラップコード" mbr.bin "Syslinuxパッケージから" mbrfat.bin "makebootfatパッケージから" spb2_mbr.bin "Christian Ostheimer氏作成のspblinuxから" `"
   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
   
   #check that partition has 'boot' flag set...
   QPATTERN="^Partition ${DESTNUM}:"
   if [ "`disktype /dev/$DESTDRV | grep "$QPATTERN" | grep 'bootable'`" = "" ];then
    Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --no-cancel --stdout --ok-label "GParted" --cancel-label "bypass" --yesno "ちょっとした問題。パーティション${DESTPART}に起動可能に必要な「boot」フラグが
設定されていないようです。すぐにGPartedボタンをクリックしてGPartedを実行する
必要があります。そしてパーティション上で右クリックして「Manage flags」を選択し
「boot」フラグを設定して下さい。
GParted終了後、このPuppyユニバーサルインストーラは続きます。

「GParted」をクリックしてGPartedを実行（推奨）...
「bypass」をクリックしてGPartedを無視..." 0 0
    [ $? -eq 0 ] && gparted /dev/$DESTDRV
   fi
  fi

  case $DESTFS in
   vfat)
     if [ ! "`echo "$DESTPART" | grep '[0-9]$'`" = "" ];then
      PARTCHOICE="`Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --no-cancel --stdout --menubox "ここはデフォルトのままにして下さい。=== 続行 ===\n=== 一番上のエントリが選択されている事を確認してからOKボタンをクリック ===\n\nこのパピーユニバーサルインストーラで試してもパピーが起動しない時は\nここで別の選択ができます。\n\n個人的には、Gpartedを使ってパーティションを消去して\n再度パーティションを作成する事で成功しました..." 0 0 4 default "続行" GParted "GpartedでUSB/IDE-CFパーティションを消去して再作成" syslinux "USBかIDE-CFのMSDOS/VFATパーティションをブート可にする"`"
      [ "$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 "(and maybe zdrv_xxx.sfs if it exists. pup_xxx.fs may be inside initrd.gz)"
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

#v3.95...
mount -t vfat /dev/$DESTPART /mnt/data
echo
echo "Do you want to wipe all files in /dev/$DESTPART? This is currently mounted"
echo "on /mnt/data so you can look at what is there before answering. You would"
echo "normally answer no if upgrading Puppy, or yes for a fresh install and"
echo "you want to get rid of old files that are just taking up space."
echo "Note, you can also manually prune files in /mnt/data then choose no here."
echo "Note, if you choose no here, this script will still do some basic deleting"
echo "of any files of an earlier Puppy installation (not the pup_save though!)."
echo
echo "No, press ENTER only to not wipe all files, or"
echo -n "Yes, any char then ENTER to wipe all files: "
read WIPEALL
if [ "$WIPEALL" != "" ];then
 echo
 echo "Deleting everything in /mnt/data..."
 rm -rf /mnt/data/*
else
 #well, minimum to get rid of...
 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
 rm -f /mnt/data/zdrv_*.sfs #v2.16
fi
sync
umount /mnt/data

echo
echo "Making $DESTPART bootable..."
syslinux  /dev/$DESTPART
sync

mount -t vfat /dev/$DESTPART /mnt/data
echo
echo "Copying vmlinuz..."
cp -f $SRCPATH/vmlinuz /mnt/data/
sync
echo "Creating syslinux.cfg..."
FNORAM="" #v3.95...
echo "Would you like syslinux.cfg to have pfix=noram boot parameter?"
echo "this will prevent pup_xxx.sfs file from being copyied into RAM, which speeds"
echo "bootup and frees up RAM space, but slows down application startup slightly."
echo "Probably good to answer yes here if PC has 256MB and no swap file/partition"
echo "in an internal hard drive. But, you can always edit syslinux.cfg later if"
echo "you want to try with or without loading to RAM."
echo "NOTE: you can answer no here if the PC has less than 256MB RAM, as Puppy"
echo "will automatically see insufficient RAM and not copy the .sfs file to RAM."
echo -n "ENTER key only for no, else any char then ENTER for yes: "
read FNORAM
[ "$FNORAM" != "" ] && FNORAM=" pfix=noram"
#v2.20 root=/dev/ram0 removed...
if [ "$FINALPMEDIA" = "ataflash" ];then
 echo "default vmlinuz initrd=initrd.gz ide=nodma pmedia=$FINALPMEDIA$FNORAM" > /mnt/data/syslinux.cfg
else
 echo "default vmlinuz initrd=initrd.gz pmedia=$FINALPMEDIA$FNORAM" > /mnt/data/syslinux.cfg
fi
sync
echo "Creating marker file for wakepup boot floppy..."
[ "$FINALPMEDIA" = "usbflash" ] && touch /mnt/data/USBFLASH
[ "$FINALPMEDIA" = "ataflash" ] && touch /mnt/data/IDEFLASH
[ "$FINALPMEDIA" = "usbhd" ] && touch /mnt/data/USBHD
[ "$FINALPMEDIA" = "atazip" ] && touch /mnt/data/IDEZIP
sync
echo "Copying initrd.gz..."
cp -f $SRCPATH/initrd.gz /mnt/data/
sync
echo "Copying .sfs files..."
cp -f $SRCPATH/pup_*.sfs /mnt/data/ 2>/dev/null
sync
cp -f $SRCPATH/zdrv_*.sfs /mnt/data/ 2>/dev/null
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
    ;;
   ext2|ext3)
    #params passed in: $DESTPART "$SRCPATH" $FINALPMEDIA
    echo '#!/bin/sh
DESTPART="$1"
SRCPATH="$2"
FINALPMEDIA="$3"
DESTFS="$4"
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 "(and maybe zdrv_xxx.sfs if it exists. pup_xxx.fs may be inside initrd.gz)"
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 $DESTFS /dev/$DESTPART /mnt/data
if [ ! $? -eq 0 ];then #v3.95
 dpPATTERN="^/dev/$DESTPART "
 if [ "`mount | grep "$dpPATTERN"`" = "" ];then
  echo
  echo "/dev/$DESTPART failed to mount on /mnt/data ...nothing else mounted on"
  echo "/mnt/data? One known case for this failure is when installing to the"
  echo "internal Flash drive of a Intel Classmate laptop. Well, you can attempt"
  echo "to fix this problem by creating a new $DESTFS filesystem in $DESTPART (which"
  echo "will of course wipe anything previously there -- which will not matter"
  echo "if you have already backed up the previous operating system)."
  echo "Press ENTER only to abort installation, or"
  echo "press any char then ENTER to create a new f.s. then proceed with install: "
  read NEWFS
  [ "$NEWFS" = "" ] && exit
  DFPARAM=""
  [ "$DESTFS" = "ext3" ] && DFPARAM="-j"
  echo "y" | mke2fs $DFPARAM -m 0 /dev/$DESTPART
  sync
  mount -t $DESTFS /dev/$DESTPART /mnt/data
  if [ ! $? -eq 0 ];then
   echo -n "Sorry, still cannot mount $DESTPART partition. Press ENTER to quit: "
   read NOWQUIT
   exit
  fi
 fi
fi
echo
echo "Do you want to wipe all files in /dev/$DESTPART? This is currently mounted"
echo "on /mnt/data so you can look at what is there before answering. You would"
echo "normally answer no if upgrading Puppy, or yes for a fresh install and"
echo "you want to get rid of old files that are just taking up space."
echo "Note, you can also manually prune files in /mnt/data then choose no here."
echo "Note, if you choose no here, this script will still do some basic deleting"
echo "of any files of an earlier Puppy installation (not the pup_save though!)."
echo
echo "No, press ENTER only to not wipe all files, or"
echo -n "Yes, any char then ENTER to wipe all files: "
read WIPEALL
if [ "$WIPEALL" != "" ];then
 echo
 echo "Deleting everything in /mnt/data..."
 rm -rf /mnt/data/*
else
 #well, minimum to get rid of...
 rm -f /mnt/data/pup_*.sfs #v2.11
 rm -f /mnt/data/devx_*.sfs #v2.11
 rm -f /mnt/data/zdrv_*.sfs #v2.16
fi
sync
echo
echo "Making $DESTPART bootable..."
if [ ! "`echo "$DESTPART" | grep '[0-9]$'`" = "" ];then
 extlinux /mnt/data #i think only use -z for superfloppy.
else
 extlinux -z /mnt/data
fi
sync
echo "Copying vmlinuz..."
cp -f $SRCPATH/vmlinuz /mnt/data/
sync
echo "Creating extlinux.conf..."
FNORAM="" #v3.95...
echo "Would you like extlinux.conf to have pfix=noram boot parameter?"
echo "this will prevent pup_xxx.sfs file from being copyied into RAM, which speeds"
echo "bootup and frees up RAM space, but slows down application startup slightly."
echo "Probably good to answer yes here if PC has 256MB and no swap file/partition"
echo "in an internal hard drive. But, you can always edit extlinux.conf later if"
echo "you want to try with or without loading to RAM."
echo "NOTE: You can answer no here if the PC has less than 256MB RAM, as Puppy"
echo "will automatically see insufficient RAM and not copy the .sfs file to RAM."
echo "NOTE: If are installing to one of the baby-laptops with only 256MB RAM, it"
echo "is strongly recommended to answer yes here (ex: Intel Classmate laptop)."
echo -n "ENTER key only for no, else any char then ENTER for yes: "
read FNORAM
[ "$FNORAM" != "" ] && FNORAM=" pfix=noram"
#v2.20 root=/dev/ram0 removed...
if [ "$FINALPMEDIA" = "ataflash" ];then
 echo "default vmlinuz initrd=initrd.gz ide=nodma pmedia=$FINALPMEDIA$FNORAM" > /mnt/data/extlinux.conf
else
 echo "default vmlinuz initrd=initrd.gz pmedia=$FINALPMEDIA$FNORAM" > /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/pup_*.sfs /mnt/data/
cp -f $SRCPATH/zdrv_*.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 "パピーユニバーサルインストーラ" -geometry 80x10 -e /tmp/installpup.sh $DESTPART $SRCPATH $FINALPMEDIA $DESTFS
    ;;
   *)
    gxmessage "$DESTPARTは$DESTFSファイルシステムです。現在外部vfat(FAT16/32)か ext2/ext3ファイルシステムへのインストールがサポートされています。
「OK」をクリックして終了..."
    exit
    ;;
  esac
  ;;
 scsihd|atahd) #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="これは新規インストールのようです。"
  else
   PREVPUPMSG="パピーはインストールされているようです。バージョンは $PUPVEROLD。
アップグレードするか全部入れ替えるか選択できます。"
  fi
  INSTOPTION="1"
  if [ ! "$DESTFS" = "vfat" ];then
   Xdialog --wmclass "gtkdialog2" --left --buttons-style text --title "パピーユニバーサルインストーラ" --ok-label "FRUGAL" --cancel-label "FULL" --yesno "/dev/$DESTPARTにインストールする選択をしました。これは
内蔵ハードディスクのようです($FINALPMEDIA)。
$PREVPUPMSG 

パピーをパーティションにインストールするには２つの方法があります:

1. FRUGAL （推奨）
vmlinuz, initrd.gzとpup_$NEWVER.sfsとzdrv_$NEWVER.sfsファイルをパーティションに
コピーし、個人的な設定をpup_saveファイルに保存します（CDから実行しているように）。
そのパーティションの以前の内容はそのままの状況に保ちます。利点：
- 同じパーティションにインストールしてある他のディストリビューションと共存できます。
- LinuxではないFATまたはNTFSパーティションにインストールできます（FATが好まれます）。
- アップグレードがより簡単: 新しい .isoファイルをダウンロードして上記のファイルを新しい
  バージョンと置き換えます（.isoファイルをマウントするとファイルにアクセスできます）。
  (注：パピーでは.isoファイルをクリックするだけで簡単にマウントできます）
- アドオン.sfsファイルの使用が可能です（アプリケーションのコンボパック）。
- Linuxファイルシステムならパーティション全部を保存でき、共存の必要がありません。

2. FULL
一般の\"ノーマル\"な、リナックスインストールです。パピーはパーティション全部を使用します。

注意：FRUGALオプション、FATかNTFSパーティションにインストールするには追加の
ブートオプションがあります。：フロッピディスクを使う\"WakePup2\"です。
さもなければ一般的な方法のGRUBで、フロッピ、USBか内蔵ハードディスクから起動します。

共存インストールならFRUGALをクリック（推奨）...
従来のインストールならFULLをクリック...
ウィンドウを閉じて終了..." 0 0
   RET_VAL=$?
   [ $RET_VAL -eq 255 ] && exit
   [ $RET_VAL -eq 1 ] && INSTOPTION="2"
  fi

  #info for creating a grub entry...
  DRV_TYPE="`echo -n "$DESTPART" | cut -b 1-3`" #ex: hda
  GRUB_DRVN=0
  for ONE_TYPE in `fdisk -l | grep "^Disk /dev/" | cut -d' ' -f2 | cut -d':' -f1 | tr '\n' ' '`
  do
   [ "/dev/$DRV_TYPE" = "$ONE_TYPE" ] && break
   GRUB_DRVN=`expr $GRUB_DRVN + 1`
  done
  GRUB_PARTN=`echo -n "$DESTPART" | cut -b 4-5`
  if [ $GRUB_PARTN ];then
   GRUB_PARTN=`expr $GRUB_PARTN - 1`
   GRUB_PARTN=",$GRUB_PARTN"
  fi
   
  #INSTOPTION, install puppy to DESTPART...
  if [ "$INSTOPTION" = "1" ];then #frugal.
   
   Xdialog --stdout --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --fixed-font --no-cancel --inputbox "パピーをパス${DESTMNTPT}にマウントされた ${DESTPART}パーティションに
インストールしようとしています。これはFRUGAL（質素な）インストールで、
フォルダの中にパピーファイルを置く選択ができます。これはパピーの複数
インストールに非常に便利です。例え１つのインストールだけでも、全ての
パピーファイルをそれ自身のフォルダに置く事は良いかも知れません。
そしてトップ「/」レベルで他のファイルと衝突を引き起こしません。
（例：既存の完全なLinuxインストールは「/」に「initrd.gz」があるかも知れません）

フォルダは固有の名前を入力して下さい。空白も「/」文字もあってはいけません。
パピーは起動時に1階層下を検索するだけなので、「puppyfiles/pup${NEWVER}」
のようなパスは取得できません。
OKの例：「pup${NEWVER}」（もちろん「」はタイプしません）。
文字と数字だけからなる一語句を入力して下さい。あるいは「/」にパピーを
インストールするならば、空白のままにして下さい。..." 0 0 "puppy${NEWVER}" >/tmp/NEWPSUBDIR
   [ $? -ne 0 ] && exit
   NEWPSUBDIR="`cat /tmp/NEWPSUBDIR | sed -e 's%/%%g'`"
   
   yaf-splash -font "8x16" -outline 0 -margin 4 -bg orange -text "Please wait, copying files to $DESTPART, in folder $NEWPSUBDIR..." &
   XPID=$!
   mkdir -p $DESTMNTPT/$NEWPSUBDIR
   cp -f $SRCPATH/vmlinuz $DESTMNTPT/$NEWPSUBDIR/
   sync
   cp -f $SRCPATH/initrd.gz $DESTMNTPT/$NEWPSUBDIR/
   sync
   cp -f ${SRCPATH}/pup_${NEWVER}*.sfs $DESTMNTPT/$NEWPSUBDIR/
   sync
   [ -f $SRCPATH/zdrv_$NEWVER.sfs ] && cp -f $SRCPATH/zdrv_$NEWVER.sfs $DESTMNTPT/$NEWPSUBDIR/
   sync
   FPCAPS="`echo -n "$FINALPMEDIA" | tr [a-z] [A-Z]`"
   touch $DESTMNTPT/$NEWPSUBDIR/$FPCAPS #needed by WakePup
   sync
   kill $XPID
   umount /dev/$DESTPART
   
   if [ "`echo -n "$DESTFS" | grep -E 'msdos|vfat'`" != "" ];then
   
    Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --ok-label "CREATE_BOOT_DISK" --cancel-label "NO_BOOT_DISK" --yesno "
フロッピーディスクでパピーをブートできます。
現在、PCをスキャンしてパピーのインストール場所を見つける
一般的な起動フロッピ、WakePup2を提供しています。

注意、 このあとGRUBブートローダの設定方法が提供されます。" 0 0
    if [ $? -eq 0 ];then
     /usr/sbin/wakepup2
    fi
    
   fi
   xNEWPSUBDIR=""
   OPTIONPSUBDIR=""
   if [ "$NEWPSUBDIR" != "" ];then
    xNEWPSUBDIR="/$NEWPSUBDIR"
    OPTIONPSUBDIR=" psubdir=${NEWPSUBDIR}"
   fi
   if [ -e /proc/ide ];then #v3.97
    grubEXTRAMSG="...ご参考までに、このテキストは/tmp/NEWGRUBTEXTに書かれています"
   else
    grubEXTRAMSG="...ご参考までに、このテキストは/tmp/NEWGRUBTEXTに書かれています

警告：お使いのPCにIDEとSATAのハードディスクが混在していると
(hd${GRUB_DRVN}${GRUB_PARTN})
は間違っているかも知れません。GRUBはドライブにhd<ドライブ>,<パーティション>
というように番号を付けます。ここで<ドライブ>と<パーティション>の番号付けは
「0」（ゼロ）から始まります。問題は、GRUBがIDEドライブを１番目（hd0,）に見ます。
ところがPmountはそれを２番目（hd1,）にリストして見えるかも知れません。
ユニバーサルインストーラはPmountによる結果の順番を使います。これはGRUBに対して
間違っているかも知れません！
（例：IDEドライブが hdb1,0 (sdb1)ならば、hd0,0に変更する必要があります）"
   fi
   echo "title Puppy Linux $NEWVER frugal
rootnoverify (hd${GRUB_DRVN}${GRUB_PARTN})
kernel ${xNEWPSUBDIR}/vmlinuz pmedia=${FINALPMEDIA}${OPTIONPSUBDIR}
initrd ${xNEWPSUBDIR}/initrd.gz" > /tmp/NEWGRUBTEXT

   Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --msgbox "GrubやLilo、その他のブートシステムの設定が手動でできます。

$DESTPARTパーティションはその中にファイルvmlinuz、initrd.gzとpup_$NEWVER.sfs
を持っています。vmlinuzはカーネルでinitrd.gzはイニシャルRAMディスクです。
そして、pup_$NEWVER.sfsは全てのパピーファイルです。

Grubがインストールしてあれば（通常Grubがインストールされているパーティションの
「/boot」にある）menu.lstファイルを見つけ、以下を挿入して下さい：

title Puppy Linux $NEWVER frugal
rootnoverify (hd${GRUB_DRVN}${GRUB_PARTN})
kernel ${xNEWPSUBDIR}/vmlinuz pmedia=${FINALPMEDIA}${OPTIONPSUBDIR}
initrd ${xNEWPSUBDIR}/initrd.gz

${grubEXTRAMSG}" 0 0
   
   #finished. could put up a final dlg here, then quit script.
   Xdialog --wmclass "gtkdialog2" --title "パピーユニバーサルインストーラ" --msgbox "オーケー、完了！" 0 0
   exit
  else #h.d. install option2
   #upgrade, ask if want delete partition...
   if [ ! $PUPVEROLD -eq 0 ];then
    Xdialog --wmclass "gtkdialog2" --left --buttons-style text --title "パピーユニバーサルインストーラ" --ok-label "UPGRADE" --cancel-label "WIPE" --yesno "$DESTPARTには、すでにインストールされたパピーのバージョンがあります。\nアップグレードしますか、それともパーティションを全て消去しますか？\n\n最後の整合性チェック: === $DESTPARTは本当に正しいパーティションですか？===\n（注意、$DESTPARTは現在$DESTMNTPTにマウントされています -- よろしいですか？）\n\nアップグレードするには「UPGRADE」ボタンを選択...\nパーティションを消去するには「WIPE」ボタンを選択...\nウィンドウを閉じて終了..." 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 --wmclass "gtkdialog2" --title "パピーユニバーサルインストーラ" --no-buttons --infobox "お待ち下さい。$DESTPARTの全ファイルを消去しています..." 0 0 200000 &
     XPID=$!
     sleep 3
     rm -rf $DESTMNTPT/*
     sync
     kill $XPID
    fi
   fi
   Xdialog --wmclass "gtkdialog2" --title "パピーユニバーサルインストーラ" --no-buttons --infobox "お待ち下さい。パピーファイルを$DESTPARTにコピーしています..." 0 0 120000 &
   XPID=$!
   sleep 1
   #loop-device mount pup_xxx.sfs in DESTPART, copy contents of pup_xxx.sfs to DESTPART...
   SFSPATTERN="^pup_${NEWVER}.*\\.sfs" #v3.01
   xSFSNAME="`ls -1 $SRCPATH/ | grep "$SFSPATTERN" | head -n 1`" #v3.01
   #losetup-FULL /dev/loop2 $SRCPATH/pup_$NEWVER.sfs
   losetup-FULL /dev/loop2 $SRCPATH/$xSFSNAME #v3.01
   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
   rm -f $DESTMNTPT/var/log/modprobes.log 2>/dev/null #v2.13 see /sbin/modprobe script.
   #...not necessary, not using this any more.
   #v3.96 /etc/rc.d/PUPSTATE only has 'PUPMODE=2', add this...
   if [ -e /proc/ide ];then
    echo "SATADRIVES='$SATADRIVES'" >> $DESTMNTPT/etc/rc.d/PUPSTATE
   else
    echo '#NEWS: IDE hd* drives are now also sd*. ATADRIVES is both ide and sata...' >> $DESTMNTPT/etc/rc.d/PUPSTATE
    echo "ATADRIVES='$ATADRIVES'" >> $DESTMNTPT/etc/rc.d/PUPSTATE
   fi
   sync
   kill $XPID
   #fix space optimisation links into initrd...
    #TODO
   #chroot to DESTPART, set /etc/puppyversion back to PUPVEROLD, run rc.update
   Xdialog --wmclass "gtkdialog2" --title "パピーユニバーサルインストーラ" --no-buttons --infobox "お待ち下さい。rc.updateスクリプトを実行中です..." 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 --wmclass "gtkdialog2" --left --buttons-style text --title "パピーユニバーサルインストーラ" --ok-label "Boot from USB" --cancel-label "Install/update GRUB" --yesno "問題なければパピーは$DESTPARTにインストールされました。\n\
しかしパピーをどうやって起動するかと言う少し難しい問題にぶつかります。\n\
下記の１、２の方法で解決できます：\n\
\n\
ブートディスク:フロッピーディスクかUSBペンドライブを使ってパピーを起動します。\n\
GRUB:      GRUBをハードディスクにインストール（又はGRUBをアップデート）します。\n\
\n\
「起動ディスク」としてUSBフラッシュペンドライブを犠牲にしたいならば、\n\
「Boot from USB」をクリックして下さい。このユニバーサルインストーラスクリプトは、\n\
USB「起動ディスク」を作成後、このダイアログウインドウに戻ります。\n\

注意、PCにフロッピドライブが無く、ハードディスクにGRUBをインストールしたくない\n\
ならば、多分この選択だけです。\n\
\n\
GRUBブートマネージャをインストール（またはアップデート）するには、\n\
「Install/update GRUB」をクリックして下さい。\n\
ハードディスクにGRUBをインストールするだけでなく、フロッピ「起動ディスク」を\n\
作成する機会も与えられます。\n\
\n\
=== USB起動ディスク選択の前に、今すぐディスクを挿入して下さい！ ===\n\
(FAT16ファイルシステムでなければなりません。その中の全てのファイルは削除されます)\n\
=== アンマウントでなければなりません -- 続ける前に確認して下さい === " 0 0
   if [ $? -eq 0 ];then #BOOT DISK
    BOOTPART=""
    #v3.96...
    USBDRIVES="`echo "$PROBEDISK" | grep 'Direct\-Access' | cut -f 3 -d '/' | cut -f 1 -d '|' | tr "\n" " "`"
    for ONEUSB in $USBDRIVES
    do
     [ "$ATADRIVES" != "" ] && [ "`echo "$ATADRIVES" | grep "$ONEUSB"`" != "" ] && continue #eliminate ide/sata drives. v3.97
     [ "$SATADRIVES" != "" ] && [ "`echo "$SATADRIVES" | grep "$ONEUSB"`" != "" ] && continue #eliminate sata drives, old kernel v3.97
     if [ "`disktype /dev/$ONEUSB | grep "file system" | grep "^FAT"`" != "" ];then
      BOOTPART="$ONEUSB"
      break
     fi
     if [ "`disktype /dev/${ONEUSB}1 | grep "file system" | grep "^FAT"`" != "" ];then
      BOOTPART="${ONEUSB}1"
      break
     fi
    done
    if [ ! "$BOOTPART" = "" ];then
     Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --yesno "パピーの起動ディスクに'$BOOTPART'を作成するか確認して下さい。\nパピーがデバイスを間違えて認識していたらここで「No」と答えて下さい...\n\n正しいデバイスであれば「Yes」ボタンをクリックして下さい..." 0 0
     [ ! $? -eq 0 ] && continue
    fi
    if [ ! "$BOOTPART" = "" ];then
     cp -af $SRCPATH/vmlinuz /mnt/$DESTPART/
     sync
     Xdialog --wmclass "gtkdialog2" --title "パピーユニバーサルインストーラ" --msgbox "$BOOTPART 起動ディスクを作成中..." 0 0 &
     XPID=$!
     #passed params $BOOTPART $DESTPART $SRCPATH $FINALPMEDIA
     echo '#!/bin/sh
     BOOTPART="$1"
     DESTPART="$2"
     SRCPATH="$3"
     FINALPMEDIA="$4"
      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
      echo "Making the /dev/$BOOTPART bootable using Syslinux..."
      syslinux /dev/$BOOTPART
     sync
     echo -n "Done. Press ENTER key: "
     read allisdone
' > /tmp/installpup.sh
     chmod 755 /tmp/installpup.sh
     rxvt -bg "orange" -title "パピーユニバーサルインストーラ" -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
    unmountcdfunc
    if [ -e /proc/ide ];then #v3.97
     grubEXTRAMSG=""
    else
     grubEXTRAMSG="
警告：お使いのPCにIDEとSATAのハードディスクが混在していると
GRUBはドライブの番号付けを間違えるかも知れません。その場合、GRUBがインストール
されている/boot/grub/menu.lstのエントリを手動で編集しなければいけないかも知れません。 
この問題は最近のLinux kernelで起こります。IDEドライブが以前は/dev/hd*だった
にもかかわらずSATAドライブと同じ/dev/sd*になってしまいます。
GRUBはIDEドライブとSATAドライブの両方に「hd」表記を使用します。そして
hd<ドライブ>,<パーティション>のようにドライブを数えます。ここで、<ドライブ>と
<パーティション>の番号は「0」から付けられます（また違います。Linuxはパーティション
を「1」から番号付けします）。
問題は、GRUBがIDEドライブを１番目（hd0,）に見る事です。ところがPmountではそれを
２番目（hd1,）にリストして見えるかも知れません。ユニバーサルインストーラはPmount
による結果の順番を使います。これはGRUBに対しては間違っているかも知れません！
（例：IDEドライブが hdb1,0 (sdb1)ならば、hd0,0に変更する必要があります）"
    fi
    Xdialog --buttons-style "text" --wmclass "gtkdialog2" --left --title "ユニバーサルインストーラ" --ok-label "UPDATE" --cancel-label "INSTALL" --yesno "GRUBの既存のインストールをアップデートするには「UPDATE」ボタンをクリック、またはGRUBをインストールか再インストールするには「INSTALL」をクリックして下さい...
${grubEXTRAMSG}" 0 0
    if [ $? -eq 0 ];then #v3.96 update grub.
     echo "title Puppy Linux $NEWVER full install
root (hd${GRUB_DRVN}${GRUB_PARTN})
kernel /boot/vmlinuz root=/dev/$DESTPART pmedia=${FINALPMEDIA}" > /tmp/NEWGRUBTEXT
     if [ -e /proc/ide ];then #v3.97
      grubEXTRAMSG="...ご参考までに、このテキストは/tmp/NEWGRUBTEXTに書かれています"
     else
      grubEXTRAMSG="...ご参考までに、このテキストは/tmp/NEWGRUBTEXTに書かれています

警告：お使いのPCにIDEとSATAのハードディスクが混在していると
(hd${GRUB_DRVN}${GRUB_PARTN})
は間違っているかも知れません。GRUBはドライブにhd<ドライブ>,<パーティション>
というように番号を付けます。ここで<ドライブ>と<パーティション>の番号付けは
「0」（ゼロ）から始まります。問題は、GRUBがIDEドライブを１番目（hd0,）に見ます。
ところがPmountはそれを２番目（hd1,）にリストして見えるかも知れません。
ユニバーサルインストーラはPmountによる結果の順番を使います。これはGRUBに対して
間違っているかも知れません！
（例：IDEドライブが hdb1,0 (sdb1)ならば、hd0,0に変更する必要があります）"
     fi

     Xdialog --wmclass "gtkdialog2" --left --title "ユニバーサルインストーラ" --msgbox "既存のGRUBインストールをアップデートする選択をしました。
これは最終的な手動ステップが必要です...
「menu.lst」ファイル（通常GRUBがインストールされているパーティション
の/boot/grubにあります）を見つけて、次のように書き加えて下さい：

title Puppy Linux $NEWVER full install in $DESTPART
root (hd${GRUB_DRVN}${GRUB_PARTN})
kernel /boot/vmlinuz root=/dev/$DESTPART pmedia=${FINALPMEDIA}

$grubEXTRAMSG

「OK」ボタンをクリックするとユニバーサルインストーラは終了します。" 0 0
     exit
    else
     Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --msgbox "\"grubconfig\" スクリプトを実行しようとしています。\nデフォルトのままにして下さい。最初の質問は簡単なインストールをするかどうかです。\nそのデフォルトオプションのままにして下さい。\nデフォルトのオプションと違う選択をするのは\nGrubをどこにインストールするかと聞かれた時です。 \"MBR\"を選択して下さい。" 0 0
     while [ 1 ];do
      grubconfig /dev/$DESTPART
      #...if choose to create a boot floppy, writes 'no' to /tmp/loopbrk.txt.
      Xdialog --wmclass "gtkdialog2" --title "パピーユニバーサルインストーラ" --yesno "すでにgrubconfigを実行して起動フロッピを作成あるいはHDDにインストールしてあれば\n\
「Yes」ボタンをクリックしてgrubconfigスクリプトを再実行し、もう１枚の起動フロッピを\n\
作成するか、「GRUB」をハードディスクへインストール或いは再インストールをして下さい。\n\
もし「Yes」を選択したら、前と同じように全てデフォルトのままにして下さい。\n\
\n\
「Yes」をクリックするとgrubconfigを再実行...\n\
インストールが完了したら「No」をクリック..." 0 0
      [ ! $? -eq 0 ] && break
     done
     rm -f /tmp/loopbrk.txt
     exit
    fi
   fi
   Xdialog --wmclass "gtkdialog2" --title "パピーユニバーサルインストーラ" --yesno "前に戻ってもう１枚ブートディスクを作成しますか、或いはGrubブートをしますか？..." 0 0
   [ ! $? -eq 0 ] && break
  done
  umount /mnt/$DESTPART 2> /dev/null
  ;;
 atacd|scsicd|usbcd)
  gxmessage "まだ実行していません"
  #TO DO
  ;;
esac

unmountcdfunc

###END###
