#!/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 # 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 < /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