#!/bin/bash
#20060614 LiveCD2HDD.sh hse@ukr.net

# Gentoo instalation script from DYSTRYK LiveCD.
# You must mount yore disk to /mnt/gentoo befor run it!

TARGET_SOURCE=/mnt/gentoo
SOURCE=/mnt/livecd

# беремо перший диск з списку:
dev=`fdisk -l |grep 'Disk /dev/' |awk -F'/' '{print $3}' |cut -c1-3 |awk '{if (NR==1) print $1}'`

bootdev=/dev/${dev}1
swapdev=/dev/${dev}2
rootdev=/dev/${dev}3

if [ ! -d $TARGET_SOURCE ]
  then
#    /etc/init.d/automounter stop
    ram=`cat /proc/meminfo |grep 'MemTotal:' |awk '{print $2}'`
    if (( $ram < 200000 ))
      then
        swap=256
      else
        (( swap=2*$ram/1000 ))
    fi
    boot=32
    root=`fdisk -l |grep 'Disk /dev/'|awk '{print $5}'`
    (( root=$root/1048576-$swap-$boot ))
#    for i in `fdisk -l |grep 'Disk /dev/' |awk -F'/' '{print $3}' |cut -c1-3`
#      do
#       if [ `fdisk -l |grep 'Disk /dev/' |awk -F'/' '{print $3}' |cut -c1-3` != "$i" ]
#         then
#           dev=`fdisk -l |grep 'Disk /dev/' |awk -F'/' '{print $3}' |cut -c1-3`
    if (( $root < 3000 ))
      then
        echo ""
        echo "Шкода, для кореневого диску не вистарчає місця"
        echo ""
        N1=1; N2=2; N3=3
        echo "Пристрій     Точка монтування  Файлова система   Розмір"
        echo "$bootdev      /boot            ext2            $boot Mb"
        echo "$swapdev      swap             swap            $swap Mb"
        echo "$rootdev      /                xfs             $root Mb"
        echo ""
        echo "$dev 3  /  ext3   мінімальний розмір 3000 Mb"
        echo "Програма встановлення не може самостійно знайти"
        echo "достатньо місця на локальних дисках."
        echo "Розбийте відформатуйте та примонтуйте у /mnt/gentoo"
        echo "дерево каталогів Лінукс та запустіть цю програму знов."
        exit 1
    fi
    echo ""
    echo "   УВАГА    УВАГА    УВАГА"
    echo ""
    echo "Наступна операція знищить всі дані на диску /dev/$dev"
    echo ""
    echo "ЗНИЩУЮТЬСЯ ВСІ ДАНІ НА ЛОКАЛЬНОМУ ДИСКУ ! ! !"
    echo "Для відміни натисніть Ctrl + C"
    echo ""
    echo "ваш диск /dev/$dev буде розбито та відформатовано наступним чином:"
    echo ""
    echo "Пристрій     Точка монтування  Файлова система   Розмір"
    echo "$bootdev      /boot            ext2            $boot Mb"
    echo "$swapdev      swap             swap            $swap Mb"
    echo "$rootdev      /                xfs             $root Mb"
    echo ""
    echo "Якщо вам це не подобається негайно натисніть Ctrl + C"
    echo "дaлі розбийте та відформатуйте диск(и)"
    echo "як ви хочете, а потім створіть з них дерево каталогів "
    echo "примонтувавши їх у каталозі /mnt/gentoo тобто /mnt/gentoo"
    echo "є новим коренем системи, та запустіть цю програму знов;"
    echo "після її завершення відкоректуйте $TARGET_SOURCE/etc/fstab"
    echo "$TARGET_SOURCE/boot/grub/grub.conf та належно встановіть GRUB"
    echo ""
    echo "Через 60 секунд дані на локальному диску /dev/$dev знищаться"
    echo "і почнеться процес встановлення Лінукс"
    echo "Для відміни встановлення натисніть Ctrl + C"
    echo ""
    echo ""
    sleep 60
    echo -n "Зачекайте йде розбивка та форматування дисків...   "
    (( swap=$swap+32 ))
    (( root=$root+$swap ))
#    parted -s /dev/$dev print

    # Umount all disks
    sync
    sleep 1
    swapoff -a
    for k in 1 2 3
      do
        for d in `mount |grep /dev/hd |awk '{print $1}'` `mount |grep /dev/sd |awk '{print $1}'`
          do
            umount 2>&1 > /dev/null $d 2>/dev/null
          done
      done

    # Remove exist partition
    for d in `fdisk -l |grep /dev/hdc |awk '{print $1}' |grep /dev/hdc |awk -F'/dev/hdc' '{print $2}'`
      do
        parted -s /dev/$dev rm $d
      done
#    parted -s /dev/$dev print

    # Create format and mount new disks
    parted -s /dev/$dev mkpartfs primary ext2 0 $boot
    sleep 1
    parted -s /dev/$dev mkpartfs primary linux-swap $boot $swap
    sleep 1
    parted -s /dev/$dev mkpart primary $swap $root
    sync
    sleep 1
    mkfs.xfs -f /dev/hdc3 2>&1 > /dev/null
    parted -s /dev/$dev set 1 boot on
    parted -s /dev/$dev set 2 swap on
#    parted -s /dev/$dev print
    sync
    sleep 1
    mkdir -p $TARGET_SOURCE
    mount $rootdev $TARGET_SOURCE/
    mkdir $TARGET_SOURCE/boot
    mount $bootdev $TARGET_SOURCE/boot/
    swapon $swapdev

    echo "OK!"

fi

echo ""
echo "Через 10 секунд почнеться процес встановлення Лінукс"
echo "в каталог /mnt/gentoo - корінь нової системи."
echo "Для відміни встановлення натисніть Ctrl + C"
echo ""
sleep 10


echo -n "Йде копіювання файлів з LiveCD до HDD ... "

cp -rf /mnt/cdrom/boot $TARGET_SOURCE/
cp -pRPd $SOURCE/* $TARGET_SOURCE/

rm -fr $TARGET_SOURCE/newroot

echo " OK!"
echo ""

echo -n "Створення деяких файлів налаштування системи...  "

# Create fstab:
cp /home/DYSTRYK/etc/fstab $TARGET_SOURCE/etc/
echo "$bootdev          /boot                   ext2            noatime,nodev,nosuid,noexec,ro                                1 1" >> $TARGET_SOURCE/etc/fstab
echo "$swapdev          none                    swap            sw                   0 0" >> $TARGET_SOURCE/etc/fstab
echo "$rootdev          /                       xfs             defaults             0 0" >> $TARGET_SOURCE/etc/fstab

# Create grub.conf
cp /home/DYSTRYK/etc/grub.conf $TARGET_SOURCE/boot/grub/
cd $TARGET_SOURCE/boot/grub/
rm $TARGET_SOURCE/boot/grub/menu.lst
ln -s grub.conf menu.lst

case "$dev" in
    "hda")
        disk=hd0
    ;;
    "hdb")
        disk=hd1
    ;;
    "hdc")
        disk=hd2
    ;;
    "hdd")
        disk=hd3
    ;;
    "sda")
        disk=hd0
    ;;
    "sdb")
        disk=hd1
    ;;
    "sdc")
        disk=hd2
    ;;
    "sdd")
        disk=hd3
    ;;
esac
# Здається диск завжди буде hd0 ???
disk=hd0

cd $TARGET_SOURCE/boot

N=3
for kernel in `ls kernel*`
  do
    version=`echo "$kernel" |awk -F'kernel' '{print $2}'`
    initramfs=initramfs$version
        echo "" >> $TARGET_SOURCE/boot/grub/grub.conf
        echo "title=$kernel SELinux Hardened" >> $TARGET_SOURCE/boot/grub/grub.conf
        echo " root ($disk,0)" >> $TARGET_SOURCE/boot/grub/grub.conf
        echo "   kernel /boot/$kernel vga=791 splash=silent,fadein,theme:livecd-2006.0 fbcon=scrollback:128K quiet kdgraphics INPUT_EVDEV=y CONSOLE=/dev/tty1 root=/dev/ram0 init=/linuxrc real_root=$rootdev udev selinux=1 checkreqprot=1 permissive=1 enforcing=1" >> $TARGET_SOURCE/boot/grub/grub.conf
        echo "   initrd /boot/$initramfs" >> $TARGET_SOURCE/boot/grub/grub.conf

        echo "" >> $TARGET_SOURCE/boot/grub/grub.conf
        echo "title=$kernel secure" >> $TARGET_SOURCE/boot/grub/grub.conf
        echo " root ($disk,0)" >> $TARGET_SOURCE/boot/grub/grub.conf
        echo "   kernel /boot/$kernel vga=791 splash=silent,fadein,theme:livecd-2006.0 fbcon=scrollback:128K quiet kdgraphics INPUT_EVDEV=y CONSOLE=/dev/tty1 root=/dev/ram0 init=/linuxrc real_root=$rootdev udev selinux=1 checkreqprot=1 permissive=1 pax_softmode=1" >> $TARGET_SOURCE/boot/grub/grub.conf
        echo "   initrd /boot/$initramfs" >> $TARGET_SOURCE/boot/grub/grub.conf

        echo "" >> $TARGET_SOURCE/boot/grub/grub.conf
        echo "title=$kernel" >> $TARGET_SOURCE/boot/grub/grub.conf
        echo " root ($disk,0)" >> $TARGET_SOURCE/boot/grub/grub.conf
        echo "   kernel /boot/$kernel vga=791 splash=silent,fadein,theme:livecd-2006.0 fbcon=scrollback:128K quiet kdgraphics INPUT_EVDEV=y CONSOLE=/dev/tty1 root=/dev/ram0 init=/linuxrc real_root=$rootdev udev selinux=0 pax_softmode=1" >> $TARGET_SOURCE/boot/grub/grub.conf
        echo "   initrd /boot/$initramfs" >> $TARGET_SOURCE/boot/grub/grub.conf

        echo "" >> $TARGET_SOURCE/boot/grub/grub.conf
        echo "title=$kernel NoInitrd" >> $TARGET_SOURCE/boot/grub/grub.conf
        echo " root ($disk,0)" >> $TARGET_SOURCE/boot/grub/grub.conf
        echo "   kernel /boot/$kernel vga=791 root=$rootdev udev selinux=0 pax_softmode=1" >> $TARGET_SOURCE/boot/grub/grub.conf
  done

echo "" >> $TARGET_SOURCE/boot/grub/grub.conf
echo "title=Memtest86+" >> $TARGET_SOURCE/boot/grub/grub.conf
echo " root ($disk,0)" >> $TARGET_SOURCE/boot/grub/grub.conf
echo "   kernel /boot/memtest86plus/memtest.bin" >> $TARGET_SOURCE/boot/grub/grub.conf

echo "" >> $TARGET_SOURCE/boot/grub/grub.conf
echo "title Change the colors" >> $TARGET_SOURCE/boot/grub/grub.conf
echo "color green/black blink-green/blue" >> $TARGET_SOURCE/boot/grub/grub.conf

echo " OK!"
echo ""

echo -n "всановлення GRUB для можливості завантаження системи з локального диску...  "
# Grub install:
#grub-install $1
/sbin/grub --batch <<EOT 1>/dev/null 2>/dev/null
root (hd0,0)
setup (hd0)
quit
EOT

echo "OK!"
echo ""

echo "Йде встановлення бази даних пакетів Генту з Інтернету ... "
cd $TARGET_SOURCE/var/db

# Downloading the portage snapshot.
#lynx http://www.gentoo.org/main/en/mirrors.xml

url="http://mirrors.sec.informatik.tu-darmstadt.de/gentoo/snapshots/"
snapshot="portage-latest"
wget -c $url$snapshot.tar.bz2
wget -c $url$snapshot.tar.bz2.md5sum
# Cheking
if ? `md5sum -c $snapshot.tar.bz2.md5 
  then
    md5sum -c $snapshot.tar.bz2.md5
#    exit 1
fi
# installing
tar -xvjf $snapshot.tar.bz2 -C $TARGET_SOURCE/usr

# Downloading the installed pkg tarboll.
url="http://"
pkg="pkg-*"
wget -c $url$pkg.tar.bz2
wget -c $url$pkg.tar.bz2.md5sum
# Cheking
if ? `md5sum -c $pkg.tar.bz2.md5 
  then
    md5sum -c $pkg.tar.bz2.md5
#    exit 1
fi
# installing
tar -xvjpf $pkg.tar.bz2

echo ""
echo ""

echo -n "Монтуання спецрозділів ... "
cd $TARGET_SOURCE
mount -o bind /sys $TARGET_SOURCE/sys
mount -o bind /dev $TARGET_SOURCE/dev
mount -t proc none $TARGET_SOURCE/proc
echo " OK!"
echo ""

echo "Зараз виконується ./LiveCDchrootHDD.sh, до каталогу $TARGET_SOURCE
для встановлення міток безпеки SELinux..."
chroot $TARGET_SOURCE/ /home/DYSTRYK/bin/LiveCDchrootHDD.sh
env-update
source /etc/profile
echo "OK!"
echo ""

echo -n "Розмонтуання розділів ... "
umount $TARGET_SOURCE/sys
umount $TARGET_SOURCE/dev
umount $TARGET_SOURCE/proc

umount $TARGET_SOURCE/boot
sync
sleep 1
umount $TARGET_SOURCE/
swapoff $swapdev

echo " OK!"
echo ""

echo "Gentoo GNU/Linux з DYSTRYK LiveCD успішно встановлений,
перезавантажте компютер та витягніть компакт диск ... "
#reboot

exit 0