#!/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 () { $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 setupremote { mv -f $BASE/etc/lircd.conf $BASE/etc/lircd.conf.`date +%Y-%m-%d-%H-%M` 2>/dev/null 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 chmod 755 /etc/lircrc update_db_settings HostRemoteType "$Remotetype" /usr/sbin/lircd -d /dev/lirc0 mkdir /root/.mythtv ln -s /etc/lircrc /root/.mythtv/lircrc fi } function scan_for_usb_remote () { 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 [ $? = 0 ] then Remotetype=`echo "$line"|cut -d"|" -f2` echo "found $Remotetype" setupremote break fi done <$BASE/$TEMPLATES/remotes/receiver_usb.id } function rest_of_network () { #netmask echo $CMDLINE | grep -q netmask if [ $? = 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 [ $? = 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 [ $? = 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 [ $? = 0 ] then TEMPVAR=${CMDLINE#*netdev=} MYTHDEFAULT=${TEMPVAR%% *} else MYTHDEFAULT="eth0" fi echo $CMDLINE | grep -q ip if [ $? = 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 [ x$IP = xdhcp ] 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 [ $? = 0 ] then TEMPVAR=${CMDLINE#*remoteport=} REMOTEPORT=${TEMPVAR%% *} if [ x"$ReceiverType" = "xSerial" ] 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 [ $? = 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 [ ! x$SWAP = xNO ] then SWAPLINE=",$SWAP,S" MKSWAPCMD="mkswap /dev/${disk}2" else SWAPLINE=",0,0" MKSWAPCMD="" fi if [ x$DATA = xALL ] 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 " ;; *) 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 } copy_it () { if [ x$1 = xALL ] 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 } 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 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 [ x$3 = xUPGRADE ] 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="" find_uuid ${2}3 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 ;; grub_it ) grub-install --recheck --no-floppy --root-directory=/$mountpoint "(hd0)" #fixing grub/menu.1st 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 ;; esac