#!/bin/sh
#simple script to remaster the puppy2 live-cd.
#(c) Copyright 2006 Barry Kauler, www.puppyos.com
#2007 Lesser GPL licence v2 (http://www.fsf.org/licensing/licenses/lgpl.html)
#BK 9 oct 2007: updated for puppy v3.01.
#RE 9 apr 2008: v3.99 copy active post-install scripts

#variables created at bootup by /initrd/usr/sbin/init...
. /etc/rc.d/PUPSTATE
[ "$PUP_LAYER" = "" ] && PUP_LAYER="/pup_ro2"
PUPPYVERSION="`cat /etc/puppyversion`"

PPATTERN="/initrd${PUP_LAYER}"
if [ "`mount | grep "$PPATTERN"`" = "" ];then
 #no pup_xxx.sfs file mounted on pup_ro2, probably h.d. install...
 Xdialog --wrap --left --title "パピーシンプルリマスターCD: エラー" --msgbox "このプログラムは /initrd${PUP_LAYER} にマウントされた pup_$PUPPYVERSION.sfsファイルが必要です。
今回はこのケースではありません。多分全ハードディスクのインストール
だからでしょうか？何にしてもパピーをライブCDからブートすればこのスクリプトが
使えます。

注意。試した事はありませんが pup_$PUPPYVERSION.sfsファイルを
 /initrd${PUP_LAYER} にマウントできるように設定すればこのプログラムを実行できます。
このプログラムはライブCDからファイルをコピーするので現在のバージョンのライブCDが必要です。
どなたか試してみますか?

OKボタンをクリックして終了..." 0 0
 exit
fi

SAVEPART="$PDEV1" #from PUPSTATE.
CDR="/dev/$SAVEPART"

#choose where to create isolinux-builds/ directory...
Xdialog --wrap --left --title "パピーシンプルリマスタCD" --msgbox "ようこそ！この小さなプログラムは現在のシステムのスナップショットをとってCDに焼きます。

パピーライブCDには５個のメインファイル:
「vmlinuz」「isolinux.cfg」「initrd.gz」「zdrv_$PUPPYVERSION.sfs」「pup_$PUPPYVERSION.sfs」
があり $PUPPYVERSION が現在のバージョン番号です(ドットなし)。

ここで注目するのは主に最後のファイルです:このファイルはパピーの「/」以下の全てのファイルシステムを持っています。
このスクリプトがする事は、現在の「/」以下の全てを含めてこのファイル「pup_$PUPPYVERSION.sfs」をリビルドする事です。 --
これはユーザがインストールした全てのパッケージ（DotPups、PupGetsとSlackwareパッケージ）全てのマウントされた
「.sfs」拡張子を持つファイル、ありとあらゆるものを結合して１つの「pup_$PUPPYVERSION.sfs」ファイルにしてCDに焼きます。
注意。他に「underdog Linux」もマウントしているとpup_$PUPPYVERSION.sfsファイルに
一緒に結合されてしまいサイズが大きくなってしまいます。特に注意が必要です！

OKボタンをクリックして続けて下さい (ウィンドウを閉じると終了します)..." 0 0

[ ! $? -eq 0 ] && exit

#calc size needed...
Xdialog --wrap --title "パピーシンプルリマスタCD" --msgbox "必要なワークスペースを計算しています。\nお待ち下さい。少し時間がかかります..." 0 0 &
XPID=$!
SIZEOPT=0
SIZEBIN=`du -sk /bin | cut -f 1`
SIZESBIN=`du -sk /sbin | cut -f 1`
SIZELIB=`du -sk /lib | cut -f 1`
SIZEUSR=`du -sk /usr | cut -f 1`
[ -d /opt ] && SIZEOPT=`du -sk /opt | cut -f 1`
sync
kill $XPID
#SIZETOTALK=`expr $SIZEBIN + $SIZESBIN + $SIZELIB + $SIZEUSR + $SIZEOPT`
SIZETOTALK=`dc $SIZEBIN $SIZESBIN + $SIZELIB + $SIZEUSR + $SIZEOPT + p`
SIZETOTALM=`expr $SIZETOTALK \/ 1024`
echo "SIZETOTALM=$SIZETOTALM"
#estimate a compressed size...
SIZENEEDEDM=`expr $SIZETOTALM \/ 3`
SIZESLACKM=`expr $SIZENEEDEDM \/ 3` #guess
SIZENEEDEDM=`expr $SIZENEEDEDM + $SIZESLACKM`
SIZENEEDEDM=`expr $SIZENEEDEDM + 25` #space for vmlinuz, initrd.gz, zdrv, etc

#now choose working partition...
PARTSLIST="`probepart -m 2> /dev/null | grep '^/dev/' | grep --extended-regexp 'ext2|ext3|reiserfs|msdos|vfat|ntfs' | cut -f 1-3 -d '|'`"

 echo -n "" > /tmp/schoices.txt
 echo "$PARTSLIST" |
 while read APART
 do
  [ "$APART" = "" ] && continue #v3.01 preaution
  MNTSTATUS='(マウント中)'
  ATAG="`echo -n "$APART" | cut -f 1 -d '|' | cut -f 3 -d '/'`"
  ASIZE="`echo -n "$APART" | cut -f 3 -d '|'`"
  AFS="`echo -n "$APART" | cut -f 2 -d '|'`"
  AFPATTERN="^/dev/$ATAG " #v3.01
  AFREE="`df -m | grep "$AFPATTERN" | tr -s " " | cut -f 4 -d " "`"
  if [ ! "$AFREE" ];then
   MNTSTATUS='(未マウント)'
   mkdir -p /mnt/$ATAG
   mount -t $AFS /dev/$ATAG /mnt/$ATAG > /dev/null 2>&1
   if [ $? -eq 0 ];then
    if [ "$ATAG" = "fd0" ];then
     FFREE=`df -k | grep "$AFPATTERN" | tr -s " " | cut -f 4 -d " "`
     AFREE="`dc $FFREE 1024 \/ p`"
    else
     AFREE="`df -m | grep "$AFPATTERN" | tr -s " " | cut -f 4 -d " "`"
    fi
    umount /dev/$ATAG
   fi
  fi
  [ "$AFS" ] && echo "${ATAG} \"ファイルシステム: $AFS  サイズ: ${ASIZE}M  空き: ${AFREE}M ${MNTSTATUS}\" \\" >> /tmp/schoices.txt #v3.01 added precaution.
 done
 SCHOICES="`cat /tmp/schoices.txt`"

#add tmpfs ramdisk choice...
SIZETMPFSM="`df -m | grep '^tmpfs' | grep '/initrd/pup_rw' | tr -s " " | cut -f 4 -d " "`"
TMPFSMSG=''
if [ "$SIZETMPFSM" != "" ];then
 TOTALTMPFSM="`df -m | grep '^tmpfs' | grep '/initrd/pup_rw' | tr -s " " | cut -f 2 -d " "`"
 if [ "$SCHOICES" = "" ];then #v3.01
  SCHOICES="ramdisk \"ファイルシステム: tmpfs  サイズ: ${TOTALTMPFSM}M  空き: ${SIZETMPFSM}M (マウント中)\" \\"
 else
  SCHOICES="$SCHOICES
ramdisk \"ファイルシステム: tmpfs  サイズ: ${TOTALTMPFSM}M  空き: ${SIZETMPFSM}M (マウント中)\" \\"
 fi
 TMPFSMSG='注意２：もし十分な容量があればRAM中の「tmpfs ramdisk」が使えます。
'
fi

[ "$SCHOICES" = "" ] && exit #precaution.

 echo '#!/bin/sh' > /tmp/savedlg
 echo -n "Xdialog --wrap --stdout --left --title \"パピーシンプルリマスタCD\" --menubox \"新しいライブCDのISOファイルを作成する作業領域が必要です。
以下が利用できるパーティションです。少なくとも${SIZENEEDEDM}Mの空き容量のあるパーティションを選ばなければなりません。
さらにCD/DVDに直接焼かずISOファイルを作成する選択をするとさらに100から200MBの空きが必要です。
(ISOファイルのサイズがどのくらいになっても)

使いたいパーティションの空き容量が ${SIZENEEDEDM}M よりも少なければ、
このスクリプトを中止して何かファイルを削除する必要があります。
注意１：USBドライブが使えますがこのスクリプトを実行する前に検出されるように差し込んでおく必要があります。
${TMPFSMSG}
希望の選択をハイライトしてOKボタンをクリックして下さい...\" 0 0 5 " >> /tmp/savedlg
 echo "$SCHOICES"  >> /tmp/savedlg
 echo ' > /tmp/tag.txt' >> /tmp/savedlg
 chmod 755 /tmp/savedlg

/tmp/savedlg
WKGPART="`cat /tmp/tag.txt`"
echo "WKGPART=$WKGPART"
[ "$WKGPART" = "" ] && exit
#[ "$WKGPART" = "ramdisk" ] && WKGPART="tmpfs"

#copy files off live-cd....
DRIVESFND="`probedisk 2>&1`"
IDEDRVSFND="`test-eide 2>&1 | grep "cdrom"`"
SELECTIONS="`echo "$DRIVESFND" | grep '^/dev/' | grep "cdrom" | cut -f 1,3 -d "|" | tr " " "_" | tr "|" " " | tr '$' "_"`"
BURNERDRV="`Xdialog --wrap --left --title \"パピーシンプルリマスタCD\" --stdout --menubox \"このリマスタープログラムは現在のライブCDからいくつかのファイルを読み取る必要があります。
そのためCD/DVDドライブを選択する必要があります。ドライブはこのプログラムによって作成された
ファイルを新しいCD/DVDに焼く事ができる書き込みドライブでなくてはなりません。
(ISOファイルを焼くのを別の機会に延期してISOファイルだけを作成する選択をしても)
CD/DVDドライブを選択して下さい...\" 0 48 4 $SELECTIONS 2> /dev/null `"
[ ! $? -eq 0 ] && exit
[ "$BURNERDRV" = "" ] && exit
BURNERDRV="`echo -n "$BURNERDRV" | cut -f 3 -d '/'`"
echo "BURNERDRV=$BURNERDRV"

CDPATTERN="/dev/$BURNERDRV "
CDMNTPT="`mount | grep "$CDPATTERN" | tr -s " " | cut -f 3 -d " "`"
if [ "$CDMNTPT" != "" ];then
 if [ ! -f $CDMNTPT/initrd.gz ];then
  fuser -k -m /dev/$BURNERDRV
  sync
  umount /dev/$BURNERDRV 2> /dev/null
  if [ ! $? -eq 0 ];then
   Xdialog --title "エラー" --msgbox "CDがマウントされています。このプログラムを実行する前にCDを取り出して下さい！" 0 0
   exit
  fi
  CDMNTPT=""
 fi
fi

if [ "$CDMNTPT" = "" ];then
 while [ 1 ];do
 Xdialog --wrap --title "パピーシンプルリマスタCD" --msgbox "現在のパピーライブCDを $BURNERDRV に入れて下さい。
そしてOKをクリックして下さい..." 0 0
 #now mount it...
 CDMNTPT="/mnt/$BURNERDRV"
 mkdir -p /mnt/$BURNERDRV
 mount -t iso9660 /dev/$BURNERDRV /mnt/$BURNERDRV
 [ $? -eq 0 ] && break
 done
fi

#now get the files off it...
#firstly need working place to write to...
[ "$WKGPART" = "ramdisk" ] && WKGMNTPT="/"
WPATTERN="/dev/$WKGPART "
[ "$WKGMNTPT" = "" ] && WKGMNTPT="`mount | grep "$WPATTERN" | tr -s " " | cut -f 3 -d " "`"
#[ "$WKGMNTPT" = "/initrd/pup_rw" ] && WKGMNTPT="/"
if [ "$WKGMNTPT" = "" ];then
 PPATTERN="^$WKGPART "
 WKGFS="`echo "$SCHOICES" | grep "$PPATTERN" | cut -f 2 -d ':' | cut -f 2 -d " "`"
 [ "$WKGFS" = "msdos" ] && WKGFS="vfat"
 mkdir -p /mnt/$WKGPART
 mount -t $WKGFS /dev/$WKGPART /mnt/$WKGPART
 [ $? -ne 0 ] && exit #precaution.
 WKGMNTPT="/mnt/$WKGPART"
fi
[ "$WKGMNTPT" = "/" ] && WKGMNTPT=""

Xdialog --wrap --title "パピーシンプルリマスタCD" --msgbox "CDから $WKGMNTPT/puppylivecdbuild/ へファイルをコピーしています。お待ち下さい..." 0 0 &
XPID=$!
rm -rf $WKGMNTPT/puppylivecdbuild #precaution
mkdir $WKGMNTPT/puppylivecdbuild
#now copy the files...
   sync
   cp $CDMNTPT/isolinux.bin $WKGMNTPT/puppylivecdbuild/
   sync
   cp $CDMNTPT/isolinux.cfg $WKGMNTPT/puppylivecdbuild/
   sync
   cp $CDMNTPT/boot.msg $WKGMNTPT/puppylivecdbuild/ 2> /dev/null
   sync
   cp $CDMNTPT/goofy.16 $WKGMNTPT/puppylivecdbuild/ 2> /dev/null
   sync
   cp $CDMNTPT/vmlinuz $WKGMNTPT/puppylivecdbuild/
   sync
   cp $CDMNTPT/initrd.gz $WKGMNTPT/puppylivecdbuild/
   sync
   #v2.12...
   [ -f $CDMNTPT/zdrv_$PUPPYVERSION.sfs ] && cp -af $CDMNTPT/zdrv_$PUPPYVERSION.sfs $WKGMNTPT/puppylivecdbuild/
   sync

umount /dev/$BURNERDRV 2> /dev/null

kill $XPID
Xdialog --left --title "パピーシンプルリマスタCD" --msgbox "$WKGMNTPT/puppylivecdbuild/ に pup_$PUPPYVERSION.sfsファイルを作成しています。
このプロセスはとても長い時間がかかります。お待ち下さい.... ひたすらお待ち下さい...
注意。OKボタンをクリックする必要はありません。pup_$PUPPYVERSION.sfsファイルが
最終的に作成された時点でこのウィンドウは消えます。
お待ち下さい..." 0 0 &
XPID=$!

#create new pup_xxx.sfs file...
DIRHOME=""
[ -d /home ] && DIRHOME="/home"
[ -d /sys ] && DIRSYS="/sys"
[ -d /lost+found ] && DIRLOST="/lost+found"
rm -f ${WKGMNTPT}/puppylivecdbuild/pup_${PUPPYVERSION}*.sfs 2> /dev/null
sync
#note, /pup_$PUPPYVERSION.sfs is not normally there, i relocated it to a separate tmpfs,
#however have not yet done that for multisession-cd/dvd (PUPMODE=77).
#note, /home could be in underdog linux...
mksquashfs / $WKGMNTPT/puppylivecdbuild/pup_$PUPPYVERSION.sfs -e /etc /proc /initrd /var /tmp /archive /mnt /root /puppylivecdbuild $DIRHOME $DIRSYS $DIRLOST /pup_$PUPPYVERSION.sfs
sync

#add pristine folders (out of current pup_xxx.sfs)...
mksquashfs /initrd${PUP_LAYER}/proc $WKGMNTPT/puppylivecdbuild/pup_$PUPPYVERSION.sfs -keep-as-directory
sync
mksquashfs /initrd${PUP_LAYER}/tmp $WKGMNTPT/puppylivecdbuild/pup_$PUPPYVERSION.sfs -keep-as-directory
sync
mksquashfs /initrd${PUP_LAYER}/mnt $WKGMNTPT/puppylivecdbuild/pup_$PUPPYVERSION.sfs -keep-as-directory
sync

kill $XPID

#######START WORKING ON /root#######
rm -rf /tmp/root 2> /dev/null
#do some work on /root before add it to the squashfs...
cp -a /initrd${PUP_LAYER}/root /tmp/root #pristine /root
#copy all of my-applications/
cp -af /root/my-applications/* /tmp/root/my-applications/
#some dotpups get installed here...
cp -af /root/my-roxapps /tmp/root/
#window manager config files...
cp -af /root/.jwmrc /tmp/root/
cp -af /root/.fvwm95rc /tmp/root/
cp -af /root/.icewm/menu /tmp/root/.icewm/
#rox desktop settings...
cp -af /root/Choices/ROX-Filer/PuppyPin /tmp/root/Choices/ROX-Filer/
cp -af /root/Choices/ROX-Filer/globicons /tmp/root/Choices/ROX-Filer/
#this may have been modified for a different w.m...
cp -af /root/.xinitrc /tmp/root/
#also this...
[ -f /root/.xset.sh ] && cp -af /root/.xset.sh /tmp/root/

#TODO think need to do this for /var also...

#.packages/ .files, copy any files installed to /root...
echo -n "" > /tmp/allpkgs.files
for ONEPKG in `ls -1 /root/.packages/*.files 2>/dev/null | tr "\n" " "`
do
 for ONEFILE in `cat $ONEPKG | grep '^/root/' | tr "\n" " "`
 do
  DIRNAME="`dirname $ONEFILE`"
  mkdir -p /tmp$DIRNAME
  cp -f $ONEFILE /tmp$DIRNAME/
 done
done

#modify /root/.packages/ files, as all installed packages are now part of the new cd...
 #integrity check of /root/.packages/alienpackages.txt...
 if [ -s /root/.packages/alienpackages.txt ];then
  ZZPATTERN='^".\+" ".\+" .\+ ".*" \\$' #v2.11
  ERRLINE="`cat /root/.packages/alienpackages.txt | grep -v "$ZZPATTERN"`"
  if [ ! "$ERRLINE" = "" ];then
   gxmessage -bg '#ff8080' -title "エラーエラー" " /root/.packages/alienpackages.txtの以下の行に
不正な構文があるので削除されました:
$ERRLINE

パッケージを詰め込んだ作者に忠告してやって下さい！
注意。このリマスタCDプログラムはまだ続けられます。ボタンをクリックして下さい..."
  fi
  #cat /root/.packages/alienpackages.txt | grep '^".\+" ".\+" .\+ ".\+" \\' > /tmp/alienpackagesxxx
  #v2.11...
  cat /root/.packages/alienpackages.txt | grep "$ZZPATTERN" > /tmp/alienpackagesxxx
  sync
  cp -f /tmp/alienpackagesxxx /root/.packages/alienpackages.txt
 fi
#any entries in livepackages.txt now "on", transferred to packages.txt...
rm -rf /tmp/root/.packages/*
echo -n "" > /tmp/root/.packages/packages.txt
cp /root/.packages/buildvariables /tmp/root/.packages/
#tricky, packages.txt lines have "\" on ends, which stuffs up the read...
cat /root/.packages/packages.txt | tr "\\" "|" |
while read ONELINE
do
 [ "$ONELINE" = "" ] && continue #precaution, blank line.
 ONEPKG="^\"`echo -n "$ONELINE" | cut -f 2 -d '"'`\""   #' fix Geany highlighting
  #if alien package with same name, let it override...
  if [ -s /root/.packages/alienpackages.txt ];then
   [ ! "`cat /root/.packages/alienpackages.txt | grep "$ONEPKG"`" = "" ] && continue
  fi
 NEWLINE="`cat /root/.packages/livepackages.txt 2> /dev/null | grep "$ONEPKG" | grep '" on "'`"
 if [ "$NEWLINE" = "" ];then
  echo "$ONELINE" | tr "|" "\\" >> /tmp/root/.packages/packages.txt
 else
  echo "$NEWLINE" >> /tmp/root/.packages/packages.txt
 fi
done
#also handle any alien packages (dotpups will be)...
if [ -s /root/.packages/alienpackages.txt ];then
 cat /root/.packages/alienpackages.txt >> /tmp/root/.packages/packages.txt
 sort -u /tmp/root/.packages/packages.txt > /tmp/packagesxxx
 cp -f /tmp/packagesxxx /tmp/root/.packages/packages.txt
fi

Xdialog --left --title "パピーシンプルリマスタCD" --msgbox "このプログラムは「/tmp/root」フォルダを作成します。ここには今から
pup_$PUPPYVERSION.sfsファイルの/rootとして追加される全てがあります。
これはほとんど「初期状態」ですがどう見てもCDに焼きたくないキャッシュ 
ファイルや一時ファイル、メールファイルその他作業/一時ファイルがある
可能性があります。パピーの作業に慣れていれば今すぐ「/tmp/root」の
中を調べて下さい。/rootから何でも追加や削除ができます。
(もしこのプログラムがCDの/rootに焼くべき何か重要なミスがあれば
私に知らせて下さい -- Barry Kauler)

===「/tmp/root」の点検後 ===
OKをクリックすると pup_$PUPPYVERSION.sfsファイルの /rootに追加します..." 0 0
sync
mksquashfs /tmp/root $WKGMNTPT/puppylivecdbuild/pup_$PUPPYVERSION.sfs -keep-as-directory
sync
rm -rf /tmp/root
#######END WORKING ON /root#######

#######START WORKING ON /etc#######
rm -rf /tmp/etc 2> /dev/null
#do some work on /etc before add it to the .sfs...
cp -a /initrd${PUP_LAYER}/etc /tmp/etc #pristine /etc.
#maybe this has been modified...
cp -af /etc/ld.so.conf /tmp/etc/
#v3.99 post-install scripts, since /lib/modules/firmware.dep.(kernel) shows them as copied into /etc/init.d.
cp -af /etc/init.d/* /tmp/etc/init.d/   #3.99

#.packages/ .files, copy any files installed to /etc...
echo -n "" > /tmp/allpkgs.files
for ONEPKG in `ls -1 /root/.packages/*.files 2>/dev/null | tr "\n" " "`
do
 for ONEFILE in `cat $ONEPKG | grep '^/etc/' | tr "\n" " "`
 do
  DIRNAME="`dirname $ONEFILE`"
  mkdir -p /tmp$DIRNAME
  cp -f $ONEFILE /tmp$DIRNAME/
 done
done
sync

#what about settings for a particular pc?...
MSG1="ハードウェアカスタム化は選択されませんでした。"
Xdialog --left --title "パピーシンプルリマスタCD" --yesno "新しいpup_$PUPPYVERSION.sfsファイル用の「/etc」ディレクトリを作成しました。
これは「初期状態」ですがカスタム化の選択もできます。
ハードウェアに合ったカスタム化をしますか？例えばマウス、キーボード
ビデオ。しかしここで「Yes」と答えるとライブCDは自分のPCだけに合った
設定になります。そのため違うPCで新しいライブCDを起動するには
「No」と答えて下さい。

「/etc」をカスタマイズするには「Yes」ボタンをクリック...
カスタマイズしないなら「No」ボタンをクリック(推奨)..." 0 0
if [ $? -eq 0 ];then
 cp -af /etc/codepage /tmp/etc/
 cp -af /etc/fontmap /tmp/etc/
 cp -af /etc/keyboardtype /tmp/etc/
 cp -af /etc/keymap /tmp/etc/
 cp -af /etc/mousebuttons /tmp/etc/
 cp -af /etc/mousedevice /tmp/etc/
 cp -af /etc/videomode /tmp/etc/
 cp -af /etc/eth0mode /tmp/etc/
 cp -af /etc/eth1mode /tmp/etc/
 cp -af /etc/resolv.conf /tmp/etc/
 rm -f /tmp/etc/localtime #a symlink
 cp -af /etc/localtime /tmp/etc/
 cp -af /etc/TZ /tmp/etc/
 cp -af /etc/cdburnerdevice /tmp/etc/
 cp -af /etc/dvddevice /tmp/etc/
 cp -af /etc/modemdevice /tmp/etc/
 cp -af /etc/securetelnetrc /tmp/etc/
 cp -af /etc/modules.conf /tmp/etc/
 cp -af /etc/modprobe.conf /tmp/etc/
 cp -af /etc/rdesktoprc /tmp/etc/
 cp -af /etc/windowmanager /tmp/etc/
 cp -af /etc/xextraoptions /tmp/etc/
 cp -af /etc/X11/xorg.conf /tmp/etc/X11
 MSG1="These files were customised in /etc:
codepage fontmap keyboardtype keymap mousebuttons mousedevice videomode
eth0mode eth1mode resolv.conf localtime TZ cdburnerdevice dvddevice modemdevice
securetelnetrc modprobe.conf rdesktoprc windowmanager xextraoptions X11/xorg.conf"
fi

#some files to always copy...
cp -af /etc/Puppybackgroundcolor /tmp/etc/
cp -af /etc/Puppybackgroundpicture /tmp/etc/
#TODO: other gtk and jwm customisations.

Xdialog --left --title "パピーシンプルリマスタCD" --msgbox "$MSG1

何をしているか分かっているなら、ここで「/tmp/etc」フォルダのどんな
ファイルも修正できます。これは .sfsファイルの「/etc」に追加されます。
=== 変更する事があれば「Ok」をクリックする前にして下さい。===
(このプログラムに何か重要なミスがあれば私に知らせて下さい -- Barry Kauler)

OKをクリックすると pup_$PUPPYVERSION.sfsファイルに「/etc」を追加します..." 0 0

sync
mksquashfs /tmp/etc $WKGMNTPT/puppylivecdbuild/pup_$PUPPYVERSION.sfs -keep-as-directory
sync
rm -rf /tmp/etc
#######END WORKING ON /etc#######

#######START WORKING ON /var#######
rm -rf /tmp/var 2> /dev/null
cp -a /initrd${PUP_LAYER}/var /tmp/var #pristine var

#.packages/ .files, copy any files installed to /var...
echo -n "" > /tmp/allpkgs.files
for ONEPKG in `ls -1 /root/.packages/*.files 2>/dev/null | tr "\n" " "`
do
 for ONEFILE in `cat $ONEPKG | grep '^/var/' | tr "\n" " "`
 do
  DIRNAME="`dirname $ONEFILE`"
  mkdir -p /tmp$DIRNAME
  cp -f $ONEFILE /tmp$DIRNAME/
 done
done
sync

sync
mksquashfs /tmp/var $WKGMNTPT/puppylivecdbuild/pup_$PUPPYVERSION.sfs -keep-as-directory
sync
rm -rf /tmp/var
#######END WORKING ON /var#######


#edit isolinux.cfg...
ISOLINUXCFG="`cat $WKGMNTPT/puppylivecdbuild/isolinux.cfg`"
#small tweaks, like acpi=on, ide=nodma...
Xdialog --wrap --left --title "パピーシンプルリマスタCD" --yesno "もうすぐCDを焼く準備ができます！
CDに焼く全てのファイルは $WKGMNTPT/puppylivecdbuild/ にあります。

次にする事は isolinux.cfg の編集です。以下があります:
$ISOLINUXCFG

'pmedia'パラメータはパピーにライブCDをどの媒体から起動するかのヒントです。
'pmedia=cd'は任意のCD/DVDドライブを意味します。その他のオプション:
 usbflash usbhd usbcd ideflash idehd idecd idezip satahd satacd scsihd scsicd

'pkeys'はデフォルトのキーボードレイアウトです。例: 'pkeys=us'  選択肢は:
 be br cf de dk es fi fr gr hu it jp no pl ru se uk us
もっと選択肢が必要なら起動後のキーボードウィザードにあります。

その他のカーネルパラメータも追加できます。あるPCは正しく起動するために 'acpi=off' が必要です。

(Yesと答えるとエディタが表れます。このプログラムを続ける前に
エディタを終了しなければいけません)
isolinux.cfgを編集するにはYesボタンをクリックして下さい..." 0 0
if [ $? -eq 0 ];then
 #leafpad $WKGMNTPT/puppylivecdbuild/isolinux.cfg
 #gtk-shell -t "$WKGMNTPT/puppylivecdbuild/isolinux.cfg" -ef "$WKGMNTPT/puppylivecdbuild/isolinux.cfg"
 #sync
 defaulttexteditor $WKGMNTPT/puppylivecdbuild/isolinux.cfg
fi
sync

Xdialog --left --title "パピーシンプルリマスタCD" --msgbox "もうすぐCDを焼く準備ができます！
CDに焼く全てのファイルは $WKGMNTPT/puppylivecdbuild/ にあります。

それは「pup_${PUPPYVERSION}.sfs」ファイルを含みます。しかしこの名前は
好きに変更できます。バージョン番号のあとに文字列を追加できます。
例えば:
 pup_${PUPPYVERSION}beta1.sfs  pup_${PUPPYVERSION}ce.sfs  pup_${PUPPYVERSION}firehydrant.sfs

名前をカスタマイズする理由は同じバージョンの公式パピーと他のリマスタCDが
クラッシュしないためです。ライブCDから起動する時、起動速度を上げるために
「 pup_${PUPPYVERSION}.sfs 」ファイルをハードディスクにコピーする
オプションがあります。カスタム名はパピーが起動する時に間違った
「.sfs」ファイルをロードしないようにします。

名前を変更するにはROXファイラを使って $WKGMNTPT/puppylivecdbuild/ を開きます。
そして「OK」ボタンをクリックする前に変更します。上の例に示すようにカスタマイズは
バージョン番号の直後に文字列を入れます。" 0 0
sync

#build new iso file, or direct burn to cd...
#to save space, burn direct from $WKGMNTPT/puppylivecdbuild/ to cd...
Xdialog --wrap --left --title "パピーシンプルリマスタCD" --yesno "$WKGMNTPT/puppylivecdbuild/ にはCDに焼く全てのファイルがあります。

作業パーティションの空き容量が限られている（例えばUSBペンドライブを使っている）場合、これらのファイルは
中間段階のISOファイルを作成せずに直接CD/DVDに焼かれます。
（dd if=/dev/$BURNERDRV of=puppy.iso seek=0 bs=32k）
もしISOファイルが必要な場合は後でCDからコピーできます。

=しかし今はISOファイルだけ必要でCD/DVDに焼かないなら「No」ボタンをクリックして下さい。=

「Yes」ボタンをクリックするとCD/DVDに焼きます..." 0 0

if [ ! $? -eq 0 ];then
 Xdialog --wrap --left --title "パピーシンプルリマスタCD" --yesno "「Yes」ボタンをクリックすると「custom-puppy-${PUPPYVERSION}.iso」
を「${WKGMNTPT}/」に作ります（100MBから200MBの空き容量を見込みます）...
「No」ボタン（あるいはウィンドウの終了ボックス）をクリックするとこの時点で
（既存の ${WKGMNTPT}/puppylivecdbuild/ ファイルを残して）プログラムを終了します..." 0 0
 if [ $? -eq 0 ];then
  #cd $WKGMNTPT
  rxvt -bg orange -title "Puppy simple remaster CD" -e mkisofs -D -R -o $WKGMNTPT/custom-puppy-$PUPPYVERSION.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table $WKGMNTPT/puppylivecdbuild/
 fi
 sync
 Xdialog --wrap --left --title "パピーシンプルリマスタCD" --msgbox " $WKGMNTPT/custom-puppy-$PUPPYVERSION.iso が作成されました。
$WKGMNTPT/puppylivecdbuild/ ファイルは残されています。
「Ok」ボタンをクリックすると終了します..." 0 0
 exit
fi

if [ "`echo "$BURNERDRV" | grep 'hd'`" != "" ];then
 DEVDEV="ATAPI:/dev/$BURNERDRV"
else
 DEVDEV="/dev/$BURNERDRV"
fi

#now for the actual burn...
CDCHOICE="`Xdialog --wrap --left --stdout --title \"パピーシンプルリマスタCD\" --menubox \"書き込む媒体を選択して下さい。
書き込みドライブは /dev/$BURNERDRVです。DVDを焼くにはドライブは明らかにDVD書き込みドライブでなければなりません！

注意。「dd」プログラムを使うとあとでISOファイルを作成できます:
 # dd if=/dev/$BURNERDRV of=puppy.iso seek=0 bs=32k

==今すぐ新しいCDかDVDを入れてメニューから選択して下さい==...\" 0 0 4 CD-R \"新しい空のCD\" DVD-R \"新しい空のDVD-R (+R, -RW, +RWではなく)\"`"

echo '#!/bin/sh' > /tmp/new2cd.sh
if [ "`echo "$CDCHOICE" | grep 'DVD'`" = "" ];then
 #burn to CD...
 echo "mkisofs -D -R -quiet -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table $WKGMNTPT/puppylivecdbuild/ | cdrecord -multi -tao -pad -data -v speed=4 gracetime=2 dev=$DEVDEV  -" >> /tmp/new2cd.sh
else
 echo "growisofs -speed=4 -Z /dev/$BURNERDRV -R -D -quiet -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table $WKGMNTPT/puppylivecdbuild/" >> /tmp/new2cd.sh
fi
echo 'echo -n "Finished. Press ENTER key to continue: "' >> /tmp/new2cd.sh
echo 'read nippi'  >> /tmp/new2cd.sh
chmod 755 /tmp/new2cd.sh
rxvt -bg orange -title "Puppy simple remaster CD" -e /tmp/new2cd.sh

sync
rm -rf /puppylivecdbuild
rm -rf $WKGMNTPT/puppylivecdbuild
sync
umount /dev/$WKGPART

eject /dev/$BURNERDRV

Xdialog --wrap --left --title "パピーシンプルリマスタCD" --msgbox "新しいカスタムパピーライブCDができました！

警告:
ここで手ごわい状況に会います。何故ならインストールした全てのパッケージ（DotPup、PET、インストールした他のあらゆるもの）は全部CD/DVDに焼かれました（.sfs拡張子ファイルも加えて）。
しかし、これらのパッケージはまだ現在の「pup_save.2fs」（パピーの持続性保存ファイル）にインストールされていて、次回パピーを起動してもこれらのファイルはそこにあります。これらのファイルは新しくカスタマイズしたパピーライブCDのファイルと重複します。しかし新しいCDを起動した時、何か不都合を起こしますか?...オーケーのはずです。しかし新しいCDの起動前にできるだけ早くそれらのパッケージをアンインストールする事をお勧めします。注意。新しいCDの起動後はそれらのファイルはアンインストールしないで下さい。CDに焼かれたパッケージも「削除」してしまいます。

あるいはもっとも簡単できれいなオプションはパピーを起動オプション「pfix=ram」で起動しシャットダウンします。すると真新しい「pup_save」ファイルが作成されます。カスタムCDが正しく動くかどうかわからなくても実際これが気にせずにできる一番いい方法です。-- 確かめるだけならRAMで起動するのが最良です！" 0 0


####THE END######
