#!/bin/bash
#
# При написването на този скрипт е ползван програмен код от скриптовете на
# Knoppix, Slackware-Live и Linux-Live (SLAX).
#
#				 Валентин Стойков <valentin_stoykov()mail!bg>

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /etc/rc.d/functions

# Много е важно монтирането на proc, защото се използва за намиране на
# дисковете и дяловете 
mount proc /proc -t proc 

# Спира съобщенията на ядрото
#echo "0" > /proc/sys/kernel/printk

# извикване на подпрограмата, която търси и монтира нашия cdrom
mount_cd

export LIVECD_PATH="/cdrom"

#if [ "${#FOUND_DISK}" -lt 1 ]; then
if [ ! -e $LIVECD_PATH/cloop ]; then
  echo "$FOUND_DISK"
  echo "${RED}cannot find your disk!${NORMAL}"
  echo "Press Ctrl+Alt+Del for reboot."
  bash
fi

# Монтиране на CLOOP файловата система
/sbin/insmod /lib/modules/2.4.22/kernel/fs/cloop/cloop.o.gz file=$LIVECD_PATH/cloop
mount -r -t iso9660 /dev/cloop /cloop

# Създаване на символни връзки
/cloop/bin/ln -s /cloop/bin/* /bin/       2> /dev/null > /dev/null
ln -s /cloop/sbin/* /sbin/                2> /dev/null > /dev/null
ln -s /cloop/opt/* /opt/                  2> /dev/null > /dev/null

ln -s /cloop/usr/bin/* /usr/bin/          2> /dev/null > /dev/null
ln -s /cloop/usr/sbin/* /usr/sbin/        2> /dev/null > /dev/null
ln -s /cloop/usr/* /usr/                  2> /dev/null > /dev/null

rm -rf /lib/modules                       2> /dev/null > /dev/null
ln -s /cloop/lib/* /lib/                  2> /dev/null > /dev/null

# Зареждане на шрифт (за да може да се чете на български)
. /etc/rc.d/rc.font

echo "${YELLOW}Стартиране на hwsetup...${NORMAL}"
/sbin/hwsetup -p

echo "${YELLOW}Създаване на файла /etc/X11/XF86Config...${NORMAL}"
/mkxf86config.bash

echo "Записване потребителските настройки на root..."
tar -zxmf $LIVECD_PATH/root.tar.gz -C / 2>/dev/null >/dev/null
chown root.root /root -R
echo "Записване потребителските настройки на guest..."
tar -zxmf $LIVECD_PATH/guest.tar.gz -C /home 2>/dev/null >/dev/null
chown guest.users /home/guest -R

bash # дебъгване

# Намиране на всички дялове (с изключение на swap дяловете)
if [ -x /etc/rc.d/rebuildfstab.sh ]; then
  /etc/rc.d/rebuildfstab.sh -v
else
echo "${RED}Не може да се изпълни скрипта /etc/rc.d/rebuildfstab.sh!${NORMAL}"
fi

bash # дебъгване

make_swap_partition()
{

dialog --title " Желаете ли да създадете swap дял " --defaultno  --yesno   "\nНе е намерен swap дял на твърдия диск.\n\nНе е задължително да имате такъв дял. Вместо него е по-добре да се ползва swap файл.\n\nИзберете Yes, само ако знаете какво правите." 12 50
if [ $? = 0 ]; then

dialog  --title " Сигурни ли сте, че искате да продължите? " --defaultno --yesno "\nЗа създаване на swap дял можете да ползвате програмата cfdisk. \n\nАко изберете Yes, ще се стартира командният интерпретатор bash. Излизането от bash става като напишете exit" 12 50

   if [ $? = 0 ]; then
#    clear
    bash -ls
    dialog  --title " Желаете ли да рестартирате? "  --yesno  "\nАко сте правили промени по дяловете на хард диска, трябва да рестартирате системата.\n\nЗа да рестартирате, натиснете Yes." 10 50
    if [ $? = 0 ]; then reboot; fi
    return 0
   else
    return 1
   fi

else
 return 1
fi

}


# Намиране на swap дяловете и вписване на намерените дялове в fstab
#list_swaps >> /etc/fstab

 /sbin/fdisk -l 2>/dev/null | grep -i "Linux swap" | egrep -o "^/dev/[a-z0-9/]+" | while read LINE;
 do
  dialog  --title " Намерен е swap дял "  --yesno  "\nДялът $LINE е с тип Linux swap.\n\nЖелаете ли системата да го ползва?\n\nВнимание! Ако имате операционна система Solaris отговорете No, тъй като тя ползва този дял." 12 52
  if [ $? = 0 ]; then # Потребителят желае да ползва дяла
 dialog --defaultno --title " Да форматирам ли $LINE? "  --yesno "\nДа форматирам ли swap дяла $LINE преди да го ползвам?\n\nИзберете Yes ако не сте го форматирали след като сте го създали (или ако желаете да го тествате за грешки).\n\nВнимание! Ако  имате на твърдия диск ГНУ/Линукс система, с ядро по-старо от 2.1.117, която ползва този дял, дайте отговор No (тъй като старите ядра не могат да ползват swap дялове, форматирани по новия стил)." 15 65
      if [ $? = 0 ]
        then # Потребителят желае да се форматира дяла
            dialog --title " Форматиране... " --infobox "\n\n\nЗапочна форматирането и проверката за грешки на $LINE..."  10 50
	    echo "Стартирана е командата: mkswap -c $LINE"
            mkswap -c $LINE  # форматира се и се проверява за грешки
            Err=$?
            if [ $Err = 0 ]; then echo "$LINE swap swap defaults 0 0" >> /etc/fstab; echo "Форматирането на swap дяла приключи успешно"
                             else echo "Натиснете ENTER за да продължите"; dialog --title " Грешка " --msgbox "\nФорматирането на swap дяла $LINE не бе успешно.\nПрограмата mkswap върна грешка номер $Err\n\nТози дял няма да се ползва.\n"  11 50
            fi
        else  # Потребителят не желае да се форматира дяла преди да се ползва
        echo "$LINE swap swap defaults 0 0" >> /etc/fstab
      fi    
  fi
 done

grep swap /etc/fstab &> /dev/null
if [ $? = 0 ]; then
echo "Намерен е swap дял, ще бъде използван (това съобщение май беше излишно)"
else
make_swap_partition # създава се SWAP дял
# Ако потребитят създаде SWAP ДЯЛ, трябва да рестартира (и следващите редове
# няма да бъдат изпълнени)
# Ако не е създал, SWAP ДЯЛ, към потребирля се задава въпрос
# дали желае да създаде SWAP ФАЙЛ.
dialog  --title " SWAP ФАЙЛ " --defaultno --yesno "\nСкрипта за създаване на swap файл е в процес на разработка. Желаете ли да направите това ръчно?\n\nАко изберете Yes, ще се стартира командният интерпретатор bash. Излизането от bash става като напишете exit" 13 50
  if [ $? = 0 ]; then
    echo "* За да разберете как се прави и активира swap файл:"
    echo "   ${WHITE}man mkswap${NORMAL}"
    echo "   ${WHITE}man swapon${NORMAL}"
    echo "* За да излезете от bash, напишете exit"
    bash -ls
  fi
fi

echo "freeing ramdisk..."
umount -l /mnt/ramdisk
/sbin/blockdev --flushbufs /dev/ram0

bash # дебъгване


# Enable kernel messages
#echo "6" > /proc/sys/kernel/printk

#echo "${WHITE}   Ще се старитра bash. За да излезете, напишете exit."
#echo "(стартирането на bash е предвидено за дебъгване)"
#echo "   След като излезете от bash, ще се изпълни /sbin/init ${NORMAL}"
#
#bash -ls

# Изпълняват се нещата от inittab
exec /sbin/init <dev/console >dev/console 2>&1
