#!/bin/ash
#fdisk -l /dev/sdd |tail -n+10
v=171025
TST(){
if [ "`cat /proc/cmdline |grep root=`" ] ;then #rootaufs2
    defaultbrowser "http://wiki.puppyrus.org/puppyrus/pra-roll#%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0"
    exit
fi
if [ "`cat /proc/cmdline |grep "uird."`" ] ;then 
    defaultbrowser "http://wiki.puppyrus.org/puppyrus/soft/uird"
    exit
fi
if [ ! "`cat /proc/cmdline |grep dir=`" ] ;then 
    ntf -a "неизвестный тип initrd"
    exit
fi
}

[ "`uname -m`" = "x86_64" ] && km="_64"
k="`uname -r`$km"
[ "$1" ] && d="$1/`hostname`" ||  d=/mnt
mount-all
STYXXXXX(){
[ "$dir" ] || dir="`echo $d| sed 's/dev/mnt/'`"
[ "$chg" ] || chg="qwqwwqw"
s="`date "+%y%m%d%H%M%S"`"
d="`yad --title "${SCRIPT_NAME}" --on-top --center --form \
--field="Монтировать все доступные носители:":BTN 'mount-all' \
--field="Каталог установки:":DIR ''$d'1' \
--field="Каталог сохранения:":DIR ''$d'1' \
--field="Метка":LBL ''$s'' \
--field="One-sided":CHK  'true'`"
#ERR
echo $d
dir="`echo "$d"| awk -F"|" '{print $1}'`"
chg="`echo "$d"| awk -F"|" '{print $2}'`"
}

ST(){
[ "$dir" ] || dir="`echo $d| sed 's/dev/mnt/'`"
s="`date "+%y%m%d%H%M%S"`"

MAIN_DIALOG='	
<window title="Установка дистрибутива v.'$v'"  window-position="1" icon-name="gtk-add">
 <vbox>

#    <button>
#     <input file icon="gtk-harddisk"></input>
#    <label>Монтировать все доступные носители</label>
#     <action>mount-all</action>
#     <action>ntf Выполнено</action>
#    </button>

   <frame Каталог установки дистрибутива:>
  <text wrap="true" use-markup="true"><label>"Создайте каталог для размещения модулей дистрибутива"</label></text>
   <hbox>
    <entry activates_default="true" accept="newdirectory" icon="gtk-open">
     <variable>dir</variable>
         <default>'$d'</default>
    </entry>

    <button>
     <input file stock="gtk-directory"></input>
     <action type="fileselect">dir</action>
    </button>
   </hbox>
   </frame>

   <frame Каталог сохранения состояния:>
  <text wrap="true" use-markup="true"><label>"Создайте на linux (ext*) разделе каталог для сохранения.
Если таких разделов нет - оставьте поле пустым и используйте сохранение в файл или модуль.pfs <i>(Меню - Настройки - Создание файла сохранения*)</i>"</label></text>
   <hbox>
    <entry activates_default="true" accept="newdirectory" icon="gtk-open">
     <variable>chg</variable>
#         <default>'$d'1</default>
    </entry>

    <button>
     <input file stock="gtk-directory"></input>
     <action type="fileselect">chg</action>
    </button>
   </hbox>
   </frame>

#   <frame Метка:>
#    <hbox>
#	<entry><variable>sgn</variable>
#        <default>'$s'</default>
#	</entry>
#    </hbox>
#   </frame>

    <hbox>
   <button tooltip-text="Содержание изменяется 
от выбора ресурса">
    <label>Справка</label>
    <input file icon="gtk-help"></input>
    <action>defaultbrowser "http://wiki.puppyrus.org/puppyrus/pra#установка_загрузка" &</action>
   </button>

       <button cancel></button>
#       <button ok></button>
   <button can-default="true" has-default="true">
    <label>Установить</label>
    <input file icon="gtk-ok"></input>
    <action>EXIT:OK</action>
   </button>

    </hbox>
    
 </vbox>
</window>'

export GUI="`echo "$MAIN_DIALOG" | sed -e 's/^#.*//'`"
ret="`gtkdialog --program=GUI --center`"

eval "$ret"
echo $ret
[ "$EXIT" = "OK" ] || exit
}

DIRE(){
[ "`ls -1 "$1"`" ] && ntf -a "Каталог $1 не пустой" "Выберите пустой" && err=1
}

PDIR(){
chg1="`echo "$1" |awk -F"/" '{print "\\\/"$2"\\\/"$3}'`"
}

EXT(){
PDIR "$1"
[ ! "`mount |awk '/on '$chg1' type ext/ {print $0}'`" ] && ntf -a "Каталог $1 находится не на linux разделе" \
    "Выберите любой ext* раздел или используйте сохранение в файл или .pfs" && chg= && ST
}
ST 
if [ ! -d "$dir" ] ;then 
    ntf -q "Каталог $dir не cуществует" "Создать?" && `which sudo` mkdir -p "$dir" || (dir= && ST)
fi
#exit
DIRE "$dir"
#[ "$chg" ] && DIRE "$chg" && EXT "$chg" && c="changes=$chg"
[ "$chg" ] && EXT "$chg" && c="changes=$chg"
[ "$err" ] && ST 

value() { egrep -o "(^| )$1=[^ ]+" /proc/cmdline | cut -d= -f2; } #sfs
df="`value dir`"
#wt "sleep 99999" "Копируются модули дистрибутива" &
wt -start "Копируются модули дистрибутива" &
e="`cd "/mnt/home/$df" && cp -RL * "$dir" 2>&1`"
[ "$e" ] && ntf -a "Ошибка. Дистрибутив не установлен" "$e" && exit || echo "Уникальная метка для поиска при загрузке. Не удаляйте" > "$dir/$s"
#[ "`wt "cd "/mnt/home/$df" && cp -RL * "$dir""`" ] && ntf -a "Ошибка. Дистрибутив не установлен" "$e" && exit || echo "Уникальная метка для поиска при загрузке. Не удаляйте" > "$dir/$s"
wt -kill

WARN(){
ntf -a "Файл $1 не обнаружен в $dir" "Вероятно, установка производится не с оригинального СД.
Запишите $1 вручную. Иначе дистрибутив не загрузится"
}
for i in "$dir/initrd.xz" "$dir/vmlinuz-$k" ;do
    [ -f "$i" ] || WARN "$i"
done


m1="\
#default 6
timeout 5
color 11 12 13 14
graphicsmode -1 640:800
font /rus_bold.lz

"
m2="\
title PRA. Без загрузки в RAM и сохранения. Рекомендуется при < 256Mb RAM.\n Модули не загружаются в RAM (оперативную память)\n load=module[1];module[n]   - .pfs загружаются выше базы из /optional\n noload=module[1];module[n] - пропуск загрузки перечисленных модулей (regex)\n debug - вывод подробностей загрузки (пошаговый режим)
    set d=`basename $dir`
    set s=$s
    find --set-root --ignore-floppies --ignore-cd /%d%/%s%
    kernel /%d%/vmlinuz-$k dir=%d% sgnfile=%s% $c quiet  
    initrd /%d%/initrd.xz

title PRA. Copy2RAM (загрузка в RAM), без сохранения и swap. Рекомендуется при > 500Mb RAM.\n Все модули загружаются в RAM (оперативную память)
    set d=`basename $dir`
    set s=$s
    find --set-root --ignore-floppies --ignore-cd /%d%/%s%
    kernel /%d%/vmlinuz-$k dir=%d% sgnfile=%s% $c quiet copy2ram noswap  
    initrd /%d%/initrd.xz

title PRA. Emergency (аварийный режим). Доступ к root консоле перед запуском Х.\n rootcopy не используется. Добавление параметра 'debug' даст пошаговое выполнение initrd\n Включается запись логов.\n Если проблему решить не удалось - создайте с помощью 'inxi-wrapper' отчет и отправьте на форум.
    set d=`basename $dir`
    set s=$s
    find --set-root --ignore-floppies --ignore-cd /%d%/%s%
    kernel /%d%/vmlinuz-$k dir=%d% sgnfile=%s% norootcopy  emergency
    initrd /%d%/initrd.xz

title 		PRA. Пример загрузки с параметрами.\n Сохранение в поддиректорию changes, находящуюся на EXT разделе.\n При FAT,NTFS - создайте скриптом make-changes файл changes.dat\n Загрузка только драйверов ATI (noload=)
    set d=`basename $dir`
    set s=$s
    find --set-root --ignore-floppies --ignore-cd /%d%/%s%
    pause --wait=0 Запрет загрузки модулей ядра:
    set bl=modprobe.blacklist=pcspkr,ipv6 volume=0% autoexec=sudo~defaultterminal~-e~mc
    kernel /%d%/vmlinuz-$k %bl% dir=%d% quiet sgnfile=%s% changes=/%d% copy2ram noswap noload=video-intel;video-nvidia load=Premote
    initrd /%d%/initrd.xz

title    Windows XP\n  Можно загружать grub4dos через загрузчик Windows NT/2000/XP:\n    1. Скопируйте GRLDR на C: \n    2. Допишите в файл C:\BOOT.INI строку C:\GRLDR=\"Start GRUB\"
    find --set-root --ignore-floppies --ignore-cd /boot.ini
    chainloader +1

title    Windows Vista & 7 & 8
    find --set-root --ignore-floppies --ignore-cd /bootmgr
    chainloader /bootmgr
"

OK(){
y="`ntf -3 "\
gtk-help
Смотреть параметры загрузки дистрибутива
1
\
gtk-edit
Редактировать $m
2" "Дистрибутив установлен в :$dir\n\nМеню grub4dos: $m\n" "Извлеките флэш и СД и перезагрузите компьютер\n" `"
case $y in
    1) 
	defaultbrowser "http://wiki.puppyrus.org/soft/porteus-initrd" &
	OK
    ;;
    2)
	defaulttexteditor "$m" &
	OK
esac
exit
}
m="$(find `dirname "$dir"` -maxdepth 1 -type f \( -name "menu.lst" \) |head -1)"
if [ ! "$m" ] ;then
    ntf -q "menu.lst на `dirname "$dir"` не найден" "Искать на других разделах?

Если устанавливаете на съемный носитель 
или единственный жесткий диск без grub4dos 
<u>- отвечайте НЕТ</u>
(на `dirname "$dir"` будет создан новый menu.lst)" && m="`find /mnt/[sh]d[a-z][1-9] -maxdepth 1 -type f \( -name "menu.lst" \) |head -1`"
fi
echo "m="$m" dir=$dir" m1=$m1 m2=$m2
if [ ! "$m" ] ;then
    #m="`echo "$dir" |awk -F"/" '{print "/"$2"/"$3"1"}'`" ; 
    m="`dirname $dir`/menu.lst" ;cp "$m" "$m"`date "+%y%m%d"` ; echo "$m1$m2" > "$m" && OK
else 
    if ntf -q "Обнаружен $m (меню grub4dos)" "Добавить новые пункты меню в конец меню?" ;then
	echo "$m2" >> "$m" && OK
    else 
	#mv "$m" "$m$s" && 	echo "$m1$m2" > "$m" && OK
        m="`dirname $dir`/menu.lst" ; mv "$m" "$m.$s" && echo "$m1$m2" > "$m" && OK
    fi
fi
ntf -a "Ошибка. Дистрибутив установлен не полностью" "Не удалось создать menu.lst"

#tail -n+6 menu2c.lst 
