diff options
Diffstat (limited to 'abs/core/LinHES-config-svn/install_functions.sh')
-rwxr-xr-x | abs/core/LinHES-config-svn/install_functions.sh | 621 |
1 files changed, 621 insertions, 0 deletions
diff --git a/abs/core/LinHES-config-svn/install_functions.sh b/abs/core/LinHES-config-svn/install_functions.sh new file mode 100755 index 0000000..4f6f7ed --- /dev/null +++ b/abs/core/LinHES-config-svn/install_functions.sh @@ -0,0 +1,621 @@ +#!/bin/bash +. /etc/profile +disk=$2 +mountpoint=new_boot + +#------------------------------------------- +MYTHDBUSER=mythtv +MYTHTVPASSWD=mythtv +CMDLINE=$(cat /proc/cmdline) +hostname=`hostname` +MYSQLCMD_C="mysql -u$MYTHDBUSER -p$MYTHTVPASSWD mythconverg -B --exec" +BASE="" + + +function update_db_settings () { + + echo "setting database value $1 to $2 for $hostname" + $MYSQLCMD_C "delete from settings where value='${1}' and hostname=\"$hostname\";" + $MYSQLCMD_C "REPLACE INTO settings set value='${1}', data='${2}' , hostname=\"$hostname\";" +} + +function random_theme () { +THEMES="basic-blue +basic-green +basic-red +basic-purple +basic-amber" + +theme=($THEMES) # Read into array variable. + +num_themes=${#theme[*]} # Count how many elements. + +pick=${theme[$((RANDOM%num_themes))]} +echo "Selected $pick as the theme" +update_db_settings Theme "$pick" +} + + +function splash_setup (){ + echo $CMDLINE | grep -q splash=silent + if [ $? -eq 0 ] + then + update_db_settings Hostbootsplash 1 + else + update_db_settings Hostbootsplash 0 + fi +} + + +function setupremote { + [ -e $BASE/etc/lircd.conf ] && mv -f $BASE/etc/lircd.conf $BASE/etc/lircd.conf.`date +%Y-%m-%d-%H-%M` + if [ -d $TEMPLATES/remotes/$Remotetype ] + then + cd $TEMPLATES/remotes/$Remotetype + for i in lircd* + do + cat $i >> $BASE/etc/lircd.conf + done + cp -f lircrc* $BASE/etc/lircrc 2> /dev/null + [ -e /etc/lircrc ] && chmod 755 /etc/lircrc + update_db_settings HostRemoteType "$Remotetype" + #special case for special remote + echo "Starting with support for $Remotetype" + if [ "$Remotetype" == "dvico" ] + then + /usr/sbin/lircd -d /dev/usb/hiddev0 + else + /usr/sbin/lircd -d /dev/lirc0 + fi + [ -e /root/.mythtv ] || mkdir /root/.mythtv 2>/dev/null + ln -s /etc/lircrc /root/.mythtv/lircrc 2>/dev/null + else + echo "Couldn't open directory $TEMPLATES/remotes/$Remotetype" + fi +} + +function scan_for_hpg_receiver() { +echo "Scanning for Hauppauge receiver" +for hpgid in `lspci -nm -d4444: |cut -d" " -f6- |tr -d '"'|tr " " :` +do + line=`grep $hpgid $TEMPLATES/remotes/i2c.id` + if [ $? -eq 0 ] + then + modprobe lirc_i2c + FoundReceiverType=`echo "$line"|cut -d"|" -f2` + Remotetype=`echo "$line"|cut -d"|" -f4` + statusline=`echo "$line"|cut -d"|" -f2,4` + echo "Found $statusline , $Remotetype" + update_db_settings HostReceiverType $FoundReceiverType + setupremote + break + fi + +done +} + + +function scan_for_usb_remote () { +found_remote=1 +echo "Scanning for usb receiver/remote" +while read line +do + USBID=`echo "$line"|cut -d"|" -f1` + lsusb -d "$USBID" > /dev/null 2>/dev/null + if [ $? -eq 0 ] + then + Remotetype=`echo "$line"|cut -d"|" -f2` + echo "Found $Remotetype" + setupremote + found_remote=0 + break + fi +done <$BASE/$TEMPLATES/remotes/receiver_usb.id +if [ $found_remote -eq 1 ] +then + scan_for_hpg_receiver +fi +echo "Scanning for TatIR..." +if lsusb | grep 04d8:0004 > /dev/null 2>/dev/null +then + /usr/bin/PyroUsb.py > /dev/null 2>&1 & +fi +} + +function rest_of_network () { + #netmask + echo $CMDLINE | grep -q netmask + if [ $? -eq 0 ] + then + TEMPVAR=${CMDLINE#*netmask=} + NETMASK=${TEMPVAR%% *} + /sbin/ifconfig eth0 $IP netmask $NETMASK + nm=`/usr/bin/nmconv.py -obits $NETMASK` + NETMASK="/$nm $NETMASK" + echo $NETMASK + update_db_settings HostNETMASK${MYTHDEFAULT} "$NETMASK" + else + echo "netmask not found" + fi + #gateway + echo $CMDLINE | grep -q gateway + if [ $? -eq 0 ] + then + TEMPVAR=${CMDLINE#*gateway=} + GATEWAY=${TEMPVAR%% *} + /sbin/route add default gw $GATEWAY + update_db_settings HostGW${MYTHDEFAULT} "$GATEWAY" + + else + echo "gateway not found" + fi + + #dns + echo $CMDLINE | grep -q dns + if [ $? -eq 0 ] + then + TEMPVAR=${CMDLINE#*dns=} + DNS=${TEMPVAR%% *} + echo "nameserver $DNS" >> /etc/resolv.conf + update_db_settings HostDNS${MYTHDEFAULT} "$DNS" + else + echo "DNS not found" + fi +} + +function init_network { + echo $CMDLINE |grep -q netdev + if [ $? -eq 0 ] + then + TEMPVAR=${CMDLINE#*netdev=} + MYTHDEFAULT=${TEMPVAR%% *} + else + MYTHDEFAULT="eth0" + fi + + + + echo $CMDLINE | grep -q ip + if [ $? -eq 0 ] + then + update_db_settings HostDefaulteth0 0 + update_db_settings HostDefault${MYTHDEFAULT} 1 + + update_db_settings HostActiveonbooteth0 0 + update_db_settings HostActiveonboot${MYTHDEFAULT} 1 + update_db_settings HostNetDevice ${MYTHDEFAULT} + + TEMPVAR=${CMDLINE#*ip=} + IP=${TEMPVAR%% *} + if [ "$IP" == "dhcp" ] + then + /sbin/dhcpcd $MYTHDEFAULT + update_db_settings HostUseDHCP${MYTHDEFAULT} 0 + else + /sbin/ifconfig ${MYTHDEFAULT} $IP + update_db_settings HostUseDHCP${MYTHDEFAULT} 1 + update_db_settings HostIP${MYTHDEFAULT} "$IP" + rest_of_network + fi + fi +} + +function init_remote { + echo $CMDLINE | grep -q remoteport + if [ $? -eq 0 ] + then + TEMPVAR=${CMDLINE#*remoteport=} + REMOTEPORT=${TEMPVAR%% *} + if [ "$ReceiverType" == "Serial" ] + then + if [ -e /dev/$REMOTEPORT ] + then + /usr/bin/setserial /dev/$REMOTEPORT uart none + /sbin/modprobe lirc_serial + update_db_settings HostReceiverType Serial + update_db_settings HostSerialPortlirc "$REMOTEPORT" + fi + fi + + fi + + echo $CMDLINE | grep -q remote + if [ $? -eq 0 ] + then + TEMPVAR=${CMDLINE#*remote=} + Remotetype=${TEMPVAR%% *} + setupremote + else + scan_for_usb_remote + fi +} + +#----------------------- + +#set -x + +partition_it () { +ROOT=$1 +DATA=$2 +SWAP=$3 + +if [ "$SWAP" != "NO" ] + then + SWAPLINE=",$SWAP,S" + MKSWAPCMD="mkswap /dev/${disk}2" + else + SWAPLINE=",0,0" + MKSWAPCMD="" + fi + +if [ "$DATA" == "ALL" ] +then + DATALINE=",,," + EXTRALINE="" +else + DATALINE=",$DATA,," + EXTRALINE=",0,," +fi +sfdisk /dev/$disk -uM << EOF +,$1,,* +$SWAPLINE +$DATALINE +$EXTRALINE +; +EOF + +$MKSWAPCMD +#sfdisk -l /dev/$disk +} + + +function fscmd () { + +case $1 in + reiserfs) FSCMDC="mkreiserfs -q -l ROOT" + ;; + + xfs) FSCMDC="mkfs -t $1 -f" + ;; + ext3) FSCMDC="mkfs.ext3" + ;; + jfs) FSCMDC="mkfs.jfs -q " + ;; + ext4) FSCMDC="mkfs.ext4" + ;; + *) FSCMDC="echo $1" + ;; +esac +} + +format_it () { + fscmd $1 + $FSCMDC /dev/${disk}1| tr -s [:cntrl:] \\n + fscmd $2 + $FSCMDC /dev/${disk}3| tr -s [:cntrl:] \\n +} + +mount_it () { + if [ ! -d \/$mountpoint ] + then + mkdir \/$mountpoint + fi + mount /dev/${disk}1 \/$mountpoint + mkdir \/$mountpoint/myth + mount /dev/${disk}3 \/$mountpoint/myth +} + +unmount_it () { + umount /dev/${disk}1 + umount /dev/${disk}3 + umount \/$mountpoint/myth + umount \/$mountpoint +} + + +copy_it () { + + if [ "$1" == "ALL" ] + then + echo "Transferring system" + unsquashfs -f -d /$mountpoint /.livesys/medium/system.sqf + else + echo "Upgrading system" + unsquashfs -e $1 -f -d /$mountpoint /.livesys/medium/system.sqf + fi + + for i in sys proc dev tmp + do + mkdir /$mountpoint/$i + + done + chmod 777 /$mountpoint/tmp + mknod /$mountpoint/dev/null c 1 3 + mknod /$mountpoint/dev/null c 1 5 + mknod /$mountpoint/dev/console c 5 1 + chmod +s /$mountpoint/usr/bin/Xorg + chmod +s /$mountpoint/usr/bin/crontab + chmod +s /$mountpoint/usr/bin/sudo + chmod +s /$mountpoint/bin/mount + +} + + +device_node () { + cd /dev + mknod hda b 3 0 + mknod hda1 b 3 1 + mknod hda2 b 3 2 + mknod hda3 b 3 3 + mknod hda4 b 3 4 + mknod hda5 b 3 5 + mknod hda6 b 3 6 + mknod hda7 b 3 7 + mknod hda8 b 3 8 + mknod sda b 8 0 + mknod sda1 b 8 1 + mknod sda2 b 8 2 + mknod sda3 b 8 3 + mknod sda4 b 8 4 + mknod sda5 b 8 5 + mknod sda6 b 8 6 + mknod sda7 b 8 7 + mknod sda8 b 8 8 + mknod sdb b 8 16 + mknod sdb1 b 8 17 + mknod sdb2 b 8 18 + mknod sdb3 b 8 19 + mknod sdb4 b 8 20 + mknod sdb5 b 8 21 + mknod sdb6 b 8 22 + mknod sdb7 b 8 23 + mknod sdb8 b 8 24 + cd - + } + + + + +function create_fstab() +{ +echo "creating fstab" +cat > /$mountpoint/etc/fstab << EOF +# <file system> <dir> <type> <options> <dump> <pass> +none /dev/pts devpts defaults 0 0 +none /dev/shm tmpfs defaults 0 0 +/dev/cdrom /media/cdrom auto ro,user,noauto,unhide 0 0 +/dev/dvd /media/dvd auto ro,user,noauto,unhide 0 0 +UUID=ROOTUID / auto defaults 0 1 +UUID=DATAUID /myth auto defaults 0 1 +UUID=SWAPUID swap swap defaults 0 0 +EOF + + +} + + +function find_uuid() { + uuid=`blkid -s UUID /dev/$1 |cut -d= -f2|cut -d\" -f2` + echo $uuid for $1 + FOUNDUUID=$uuid + +} + + +get_grub_map() { + [ -e /tmp/dev.map ] && rm /tmp/dev.map + /sbin/grub --no-floppy --device-map /tmp/dev.map <<EOF +quit +EOF +} + +mapdev() { + partition_flag=0 + device_found=0 + devs=$(cat /tmp/dev.map | grep -v fd | sed 's/ *\t/ /' | sed ':a;$!N;$!ba;s/\n/ /g') + linuxdevice=$(echo $1 | cut -b1-8) + if [ "$(echo $1 | egrep '[0-9]$')" ]; then + # /dev/hdXY + pnum=$(echo $1 | cut -b9-) + pnum=$(($pnum-1)) + partition_flag=1 + fi + for dev in $devs + do + if [ "(" == $(echo $dev | cut -b1) ]; then + grubdevice="$dev" + else + if [ "$dev" == "$linuxdevice" ]; then + device_found=1 + break + fi + fi + done + if [ "$device_found" == "1" ]; then + if [ "$partition_flag" == "0" ]; then + echo "$grubdevice" + else + grubdevice_stringlen=${#grubdevice} + grubdevice_stringlen=$(($grubdevice_stringlen - 1)) + grubdevice=$(echo $grubdevice | cut -b1-$grubdevice_stringlen) + echo "$grubdevice,$pnum)" + fi + else + echo "DEVICE NOT FOUND" + fi +} + + +dogrub() { + get_grub_map + sync + ROOTDEV=/dev/$1 + echo $ROOTDEV + + bootdev=$(mapdev $ROOTDEV) + echo $bootdev + cp -a /$mountpoint/usr/lib/grub/i386-pc/* /$mountpoint/boot/grub/ + sync + # freeze xfs filesystems to enable grub installation on xfs filesystems + if [ -x /usr/sbin/xfs_freeze ]; then + #/usr/sbin/xfs_freeze -f /$mountpoint > /dev/null 2>&1 + echo "freezing xfs fs" + /usr/sbin/xfs_freeze -f /$mountpoint + if [ $? -eq 0 ] + then + sleep 40 + echo "unfreezing xfs" + /usr/sbin/xfs_freeze -u /$mountpoint + fi + fi + #$DESTDIR/sbin/grub-install --recheck --root-directory=$DESTDIR $bootdev >/tmp/grub.log 2>&1 + echo grub-install --recheck --root-directory=/$mountpoint $bootdev + grub-install --recheck --root-directory=/$mountpoint $bootdev + # unfreeze xfs filesystems + + + if grep "Error [0-9]*: " /tmp/grub.log >/dev/null; then + echo "Error installing GRUB. " + return 1 + fi + echo "GRUB was successfully installed." +} + +function removevg () { + LIST=`pvscan |grep $1|tr -s " " |cut -d" " -f 5` + for vg in $LIST + do + echo "Removing vg $vg" + vgremove -f -v $vg + done + + + + +} + + +case $1 in + partition_it ) + #drive ROOT DATA(ALL) SWAP(NO) + for i in `mount | grep $disk | awk ' { print $1 } '` + do + umount $i + done + swap=`cat /etc/fstab |grep $disk|grep swap|awk ' { print $1 } '` + swapoff $swap + removevg $disk + partition_it $3 $4 $5 + exit 0 + + ;; + format_it ) + device_node + + format_it $3 $4 + exit 0 + ;; + mount_it ) + mount_it + ;; + copy_it ) + copy_it $3 + + ;; + + + fstab_fix_it) + echo $@ >> /tmp/fstab.input + if [ ! -f /$mountpoint/etc/fstab ] + then + create_fstab + fi + #was 5 + if [ "$3" == "UPGRADE" ] + then + if [ ! -f /tmp/etc/KnoppMyth-version ] + then + if [ -f /tmp/etc/fstab ] + then + cp -f /tmp/etc/fstab /$mountpoint/etc/fstab + else + create_fstab + fi + else + create_fstab + fi + fi + + #search for UUID + FOUNDUUID="" + find_uuid ${2}1 + ROOTUUID=$FOUNDUUID + echo "--" + echo $ROOTUUID + echo "--" + FOUNDUUID="" + find_uuid ${2}2 + SWAPUUID=$FOUNDUUID + + FOUNDUUID="" + if [ "$4" == "" ] + then + #upgrade + find_uuid ${2}3 + elif [ "$5" == "FULL_INSTALL" ] + then + #install + find_uuid ${2}3 + else + #upgrade with non statndard myth + find_uuid $4 + fi + + DATAUUID=$FOUNDUUID + + + + sed -i -e "s/.*\/\ .*$/UUID=$ROOTUUID \/ auto defaults,noatime 0 1/g" /$mountpoint/etc/fstab + sed -i -e "s/.*\/myth\ .*$/UUID=$DATAUUID \/myth auto defaults,noatime 0 1/g" /$mountpoint/etc/fstab + sed -i -e "s/.*swap\ .*$/UUID=$SWAPUUID swap swap defaults 0/g" /$mountpoint/etc/fstab + +#if Knoppmyth upgrade then loop through old fstab picking out vg + if [ -f /tmp/etc/KnoppMyth-version ] + then + if [ -f /tmp/etc/fstab ] + then + grep -q /dev/vg /tmp/etc/fstab + if [ $? -eq 0 ] + then + grep /dev/vg /tmp/etc/fstab >> /$mountpoint/etc/fstab + grep /dev/vg /tmp/etc/fstab | awk -v mount=$mountpoint ' { print "/" mount $2 }' |xargs mkdir + grep /dev/vg /tmp/etc/fstab | awk -v mount=$mountpoint ' { print "/" mount $2 }' |xargs chown -R mythtv:users + fi + fi + fi + ;; + + grub_it ) + + #grub-install --recheck --no-floppy --root-directory=/$mountpoint "(hd0)" + #fixing grub/menu.1st + dogrub ${disk} + FOUNDUUID="" + find_uuid ${disk}1 + ROOTUUID=$FOUNDUUID + sed -i -e "s/root=.\S*/root=\/dev\/disk\/by-uuid\/$ROOTUUID/g" /$mountpoint/boot/grub/menu.lst + mkinitcpio -g /$mountpoint/boot/kernel26.img + ;; + umount_it) + umount \/$mountpoint/myth + umount \/$mountpoint + ;; + update_db_it ) + update_db_settings "$2" "$3" + ;; + + +esac + + + |