#!/bin/sh
v=181230 #sfs
dd=/mnt/live/memory/images
value() { egrep -o "(^| )$1=[^ ]+" /proc/cmdline | cut -d= -f2; } #sfs
#to="`ntf -c "dir"`"
ms="Установка PRA Linux"
ms1="Дистрибутив должен быть загружен FRUGAL с тем комплектом модулей, \
который Вы хотите установить"

ms2XX="
'копировать' = скопировать ядро и initrd в место установки"
[ ! "`value dir``value overlay`" ] && ntf -a "$m" "$m1" && exit 1
dir="$(find `realpath /mnt/home/` -maxdepth 1  -type d -name "`value dir`")"
wwwr="http://wiki.puppyrus.org/soft/arch-initrd-rootaufs2"
wwwp="http://wiki.puppyrus.org/soft/porteus-initrd"
wwws="http://wiki.puppyrus.org/puppyrus/grub"

khlp="каталог в корне раздела
или раздел (FULL)"
TO(){
y="$(yad  \
--title "$ms v.$v" --center \
--window-icon=/usr/share/xcowsay/pup_small.png \
--image-on-top --image="/usr/share/xcowsay/pup_small.png" \
--Xtext-align=fill \
--text "<b><big>$ms</big></b>
$ms1
$ms2" \
--form  \
--columns=2 \
--field="Монтировать все разделы"!gtk-harddisk!"Смонтировать все подключенные носители":FBTN 'ymount' \
--field="Тип установки":CB 'FRUGAL!FULL' \
--field="Установить в ":DIR '/mnt' \
--field=Ядро:FL ''$(ls -1 $dir/vmlinuz* |head -1)'' \
--field=Initrd:FL ''$(ls -1 $dir/initrd.xz |head -1)'' \
--field="rootaufs2 initrd"!gtk-help!"Рекомендуется для FULL":FBTN 'defaultbrowser "'$wwwr'"' \
--field="Full или Frugal"!gtk-help!"Тип установки":FBTN 'defaultbrowser "http://wiki.puppyrus.org/setups/full-vs-frugal"' \
--field="$khlp":LBL '' \
--field="Справка"!gtk-help!"Подробности установки":FBTN 'defaultbrowser "'$wwws'"' \
--field="porteus initrd"!gtk-help!"initrd.xz : рекомендуется для FRUGAL":FBTN 'defaultbrowser "'$wwwp'"' \
)"
#--field=" ":LBL ''\
[ "$?" = 0 ] || exit

#echo $y ;exit
P(){ echo "$y" | cut -d'|' -f "$1"; }
ff="`P 2`" 
to="`P 3`" 
 k="`P 4`"
 i="`P 5`"
#kc="`P 9`"
kc=TRUE
#ic="`P 10`"
ic=TRUE
}
TO
#echo "to=$to" ;exit

EX(){ ($0 &) ;exit ; }
[ "`ls -1 "$to"`" ] && { ntf -a "Каталог $to не пустой" "Выберите пустой" && EX || EX ; }
#chg1="`df "$to" |tail -1 |awk '{print $6}' |sed 's#/#\\/#g'`"
#mkdir -p "$to"

dir="`realpath "$to"`"
r="`df "$dir" |awk '/^\// {print $1}'`"
rm="`df "$dir" |awk '/^\// {print $6}'`"

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

"

s="`date "+%y%m%d%H%M%S"`"

CKI(){
C(){  mkdir -p "${to}$boot" ; wt -o "cp "$1" "${to}$boot"" ; }
echo "to=$to k=$k"
[ "$kc" = "TRUE" ] && C "$k" && k="/`basename $to`$boot/`basename "$k"`"
[ "$ic" = "TRUE" ] && C "$i" && i="/`basename $to`$boot/`basename "$i"`"
}

FULL(){ ############
ms3="Если планируете использовать AUR (компилировать софт) - распакуйте в корень DEVX*.pfs (не входит в состав iso)"
[ "$dir" = "$rm" ] || { d="`echo "$dir" |sed 's#'$rm'/##'`" ; rd="rootdir=$d" ; }

chg1="`df "$to" |tail -1 |awk '{print $6}'`"
PDIR(){
chg1="`echo "$1" |awk -F"/" '{print "\\\/"$2"\\\/"$3}'`"
}
PDIR "$chg1"
#[ ! "`mount |egrep '^/dev/'  |awk '/on '$chg1' type ext/ {print $0}'`" ] \
if [ ! "`mount |egrep '^/dev/'  |awk '/on '$chg1'\/.* type ext/ {print $0}'`" ] ;then
    ntf -q "Уверены, что каталог $to" "находится не на linux разделе" || EX 
fi

#[ "`bsdtar -tf "$i" |grep "hooks/rootaufs2"`" ] && CKI || { ntf -a "$i " "не rootaufs2. Не подходит для FULL.\n Выберите другой" ; EX  ; }
boot=/boot && CKI
#m2="$(ntf -k "`cd "$dd" && ls -1d .*.pfs /mnt/.*.pfs |while read m ;do
#m2="$(ntf -k "`ls -1d "$dd" /mnt/.*.pfs |egrep '.pfs$' |while read m ;do
m2="$(ntf -k "$(for m in `cd "$dd" && ls -1d *.pfs` `cd /mnt && ls -1d .*.pfs` ;do
    echo true
    echo "$m"
    echo "$m"
done)" "$ms" "Выберите модули, которые Вы хотите установить.
Не рекомендуется пропускать модули, начинающиеся с цифр 
$ms3")"
[ "$?" = 0 ] || exit

CP(){
echo "$m2"  |while read d ;do
    echo "$d" |egrep "$1" "$2" || continue
    d="$dd/$d"
    [ -d "$d" ] || continue
    echo $d
    wt -o  "cp -aPR "$d/"* "$to""
done
}
##CP "-vq" "^0[89][90]"
##CP "-q" "^0[89][90]"

echo "Уникальная метка для поиска при загрузке. Не удаляйте" > "$to/$s"

m2="\
title PRA-roll FULL. 
    find --set-root --ignore-floppies --ignore-cd /`basename $to`/$s
    kernel $k root=$r rw $rd  quiet  
    initrd $i

title PRA-roll FULL RO. Дистрибутив в RO (read only) + сохранение изменений в памяти\n (после перезагрузки не сохраняются).
    find --set-root --ignore-floppies --ignore-cd /`basename $to`/$s
    kernel $k root=$r rw $rd  quiet changes
    initrd $i

title PRA-roll. Emergency (аварийный режим). Доступ к root консоле перед запуском Х.\n rootcopy не используется. Добавление параметра 'debug' даст пошаговое выполнение initrd\n Включается запись логов.\n Если проблему решить не удалось - создайте с помощью 'inxi-wrapper' отчет и отправьте на форум.
    find --set-root --ignore-floppies --ignore-cd /`basename $to`/$s
    kernel $k root=$r rw $rd  quiet emergency
    initrd $i
"
www="http://wiki.puppyrus.org/soft/arch-initrd-rootaufs2?&#full_установка"
} ##########FULL

FRUGAL(){
df="`value dir`"
#wt "sleep 99999" "Копируются модули дистрибутива" &
wt -start "Копируются модули дистрибутива" &
e="`cd "/mnt/home/$df" && cp -RL * "$dir" 2>&1`"
[ "$e" ] && ntf -a "Ошибка. Дистрибутив не установлен" "$e" && exit 
wt -kill

if [ "`bsdtar -tf "$i" |grep "hooks/rootaufs2"`" ] ;then
    ipr=rootaufs2 ; ipr2=rw ; www="$wwwr"
else
    ipr=porteus   ; ipr2="sgnfile=%s%" ; www="http://wiki.puppyrus.org/soft/porteus-initrd"
fi
CKI

m2="\
title PRA FRUGAL $ipr.\n Без загрузки в RAM (copy2ram)  и сохранения (changes=`basename $to`). \n load=module[1];module[n]   - .pfs загружаются выше базы из /optional\n noload=module[1];module[n] - пропуск загрузки перечисленных модулей (regex)\n debug - вывод подробностей загрузки (пошаговый режим)
    set d=`basename $to`
    set s=$s
    find --set-root --ignore-floppies --ignore-cd /%d%/%s%
    kernel $k dir=%d% $ipr2 quiet
    initrd $i
"
} ########FRUGAL
$ff

OK(){
[ "$m" ] && ml="
\
gtk-edit
Редактировать $m
2"
[ "$ml2" ] && ml="$ml
\
gtk-edit
Меню загрузки PRA $ff $ipr $ml2
3"

y="`ntf -3 "\
gtk-help
Смотреть параметры загрузки дистрибутива
1$ml" "PRA $ff $ipr установлен в :$dir" "Меню grub4dos: $m\n"`"
case $y in
    1) 
	defaultbrowser "$www" &
	OK ;;
    2)
	defaulttexteditor "$m" &
	OK ;;
    3)
	defaulttexteditor "$ml2" &
	OK ;;
esac
exit
}
#m="$(find `dirname "$dir"` -maxdepth 1 -type f \( -name "menu.lst" \) |head -1)"
sd="$(basename `df "$to" |awk '/\/dev/ {print $1}'` |sed 's/[0-9]//')"
m="$(find `mount |awk '/^\/dev\/'$sd'/ {print $3}'` -maxdepth 1 -type f \( -name "menu.lst" \) |head -1)"

echo "m="$m" dir=$dir" m1=$m1 m2=$m2
if [ ! "$m" ] ;then
    ml2="`df "$to" |awk '/\/dev/ {print $6}'`/menu.lst"
    echo "$m1$m2" >> "$ml2" 
    OK
else 
    if ntf -q "Обнаружен $m (меню grub4dos)" "Добавить новые пункты меню в конец меню?" ;then
	echo "$m2" >> "$m" && OK
    else 
        ml2="$dir/menu-pra.lst" 
        echo "$m1$m2" >> "$ml2"
        OK
    fi
fi
#ntf -a "Ошибка. Дистрибутив установлен не полностью" "Не удалось создать menu.lst"
