#!/bin/bash #chroot and /tmp MVHOSTNAME=larch5 . /etc/profile TEMP_TEMPLATES=/tmp/templates disk=$2 rootfs=$3 rootsize=$4 datafs=$5 datasize=$6 swapsize=$7 mountpoint="/new_boot" run=$MV_ROOT/bin/install_functions.sh . /etc/systemconfig 2>/dev/null . $MV_ROOT/bin/networkconfig.sh CMDLINE=$(cat /proc/cmdline) #TEMPNET="Hostip"$default_interface #eval MYTHIP=\$${TEMPNET} progress () { mypercent=`echo "$1" | cut -d. -f1` if [ x$mypercent = x ] then echo "" > /tmp/.install_percent else echo "${mypercent}% complete" > /tmp/.install_percent fi } function apply_new_auth () { #check if file is present if [ -f /root/myth_user_call.out ] then #read in file, running each command in chroot exec 4 /tmp/user_auth.update fi done rm -f /root/myth_user_call.out else echo "No new password changes to apply" fi } function backup_sql_check { if [ -f $mountpoint/myth/backup/mythconverg.sql.gz ] then return 0 else return 1 fi } function upgrade_mount_search { MYTH_P=`cat /tmp/etc/fstab |grep /myth| awk ' {print $1 '} ` umount $mountpoint/myth mount $MYTH_P $mountpoint/myth return 0 } full_install () { if [ -f /tmp/.this_is_upgrade ] then rm /tmp/.this_is_upgrade fi echo "Partitioning $disk" > /tmp/.install_state progress 1 sleep 1 $run partition_it $disk $rootsize $datasize $swapsize echo "Formating $disk" > /tmp/.install_state progress 2 sleep 1 $run format_it $disk $rootfs $datafs echo "Preparing $disk" > /tmp/.install_state progress 3 sleep 1 $run mount_it $disk startsize=`statgrab -M disk.|grep $disk.write_bytes|cut -d= -f 2|tr -d " "` echo "STARTSIZE=$startsize">/tmp/.startsize.io echo "Installing data" > /tmp/.install_state sleep 1 $run copy_it $disk ALL rm $mountpoint/etc/fstab $run fstab_fix_it $disk $rootfs $datafs FULL_INSTALL progress 99 sleep 1 $run grub_it $disk echo "Configuring system" > /tmp/.install_state progress 100 sleep 1 cp -f /etc/systemconfig "$mountpoint"/etc #run save syssettings to save settings, then copy to new mountpoint $MV_ROOT/bin/restore_default_settings.sh -c save -t syssettings -h $MVHOSTNAME -d localhost SE=$TEMPLATES/settings/syssettings mkdir -p ${mountpoint}$SE cp -rp $SE/* ${mountpoint}$SE/ chown root:mythtv "$mountpoint"/etc/systemconfig chown -R mythtv:mythtv ${mountpoint}$SE chmod -R 775 ${mountpoint}$SE chmod 775 "$mountpoint"/etc/systemconfig #copy over any updates that might have occured cp -f $MV_ROOT/bin/*.sh "$mountpoint"$MV_ROOT/bin/ chmod -R 755 ${mountpoint}/root cp /etc/mtab "$mountpoint"/etc/mtab apply_new_auth if [ $SystemType = "Master_backend" -o $SystemType = "Standalone" ] then #installing DB to local machine #turn off old live database, so the chroot one can start /etc/rc.d/mysqld stop mount --bind /dev "$mountpoint/dev" chroot "$mountpoint" "$MV_ROOT/bin/install_db_chroot.sh" > /tmp/chrootdb.out chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,advanced,this_is_install echo "stopping mysql in chroot" chroot "$mountpoint" /etc/rc.d/mysqld stop umount "$mountpoint/dev" #/etc/rc.d/mysqld start else #update remotedb with this host settings chroot "$mountpoint" DISPLAY=127.0.0.1:0 /usr/local/bin/MythVantage -t restore,default_1 chroot "$mountpoint" $MV_ROOT/bin/restore_default_settings.sh -c restore -t syssettings if [ ! $? = 0 ] then touch $mountpoint/tmp/.dbsysfailed chmod 777 $mountpoint/tmp/.dbsysfailed else #Run second time chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,advanced,this_is_install chroot "$mountpoint" $MV_ROOT/bin/restore_default_settings.sh -c ACCESSCONTROL fi fi chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh advanced touch $mountpoint/home/mythtv/.configure && chmod 777 $mountpoint/home/mythtv/.configure echo "Done" > /tmp/.install_state cp /tmp/mythvantage_install.log $mountpoint/var/log/ $run unmount_it $disk } function createsquashlist(){ if [ -f $1 ] then rm -f $1 fi for i in bin boot etc home lib opt root sbin usr var do echo $i >> $1 done } function upgrade () { touch /tmp/.this_is_upgrade if [ ! x$rootfs = "xDo_not_format" ] then echo "Formating $disk" > /tmp/.install_state progress 2 sleep 1 $run format_it $disk $rootfs NO fi echo "Preparing $disk" > /tmp/.install_state progress 3 sleep 1 $run mount_it $disk startsize=`statgrab -M disk.|grep $disk.write_bytes|cut -d= -f 2|tr -d " "` echo "STARTSIZE=$startsize">/tmp/.startsize.io echo "Installing data" > /tmp/.install_state sleep 1 cp -rf /tmp/etc /new_boot/etc.old cp -rf /tmp/oss /new_boot/var/lib/oss.old SQUASHLIST="/tmp/.squashlist" createsquashlist $SQUASHLIST $run copy_it $disk $SQUASHLIST #copy back ssh keys cp -rp /data/var/cache/pacman/pkg/* /new_boot/data/var/cache/pacman/pkg/ cp -fp /new_boot/etc.old/ssh/*.pub /new_boot/etc/ssh/ cp -fp /new_boot/etc.old/ssh/*.key /new_boot/etc/ssh/ cp -fp /new_boot/etc.old/ssh/*key /new_boot/etc/ssh/ if [ ! -f /tmp/etc/KnoppMyth-version ] then #passwd/shadow/group cp -fp /new_boot/etc.old/passwd /new_boot/etc/ cp -fp /new_boot/etc.old/shadow /new_boot/etc/ cp -fp /new_boot/etc.old/group /new_boot/etc/ fi if [ x$rootfs = "xDo_not_format" ] then rootfs=`grep \/\ /tmp/etc/fstab |awk ' { print $3 } '` fi $run fstab_fix_it $disk UPGRADE echo "Writing boot sector" > /tmp/.install_state progress 99 sleep 1 $run grub_it $disk echo "Configuring system" > /tmp/.install_state progress sleep 1 cp /etc/mtab "$mountpoint"/etc/mtab cp -f /etc/systemconfig "$mountpoint"/etc #make sure mythconverg.sql.gz is present if [ ! backup_sql_check ] then upgrade_mount_search fi if [ -f /tmp/etc/KnoppMyth-version ] then #run save syssettings to save settings, then copy to new mountpoint $MV_ROOT/bin/restore_default_settings.sh -c save -t syssettings -h $MVHOSTNAME -d localhost SE=$TEMPLATES/settings/syssettings mkdir -p ${mountpoint}$SE cp -rp $SE/* ${mountpoint}$SE/ chown root:mythtv "$mountpoint"/etc/systemconfig chown -R mythtv:mythtv ${mountpoint}$SE chmod -R 775 ${mountpoint}$SE touch $mountpoint/home/mythtv/.kmupgrade && chmod 777 $mountpoint/home/mythtv/.kmupgrade fi cp -f $MV_ROOT/bin/*.sh "$mountpoint"$MV_ROOT/bin/ chmod -R 755 ${mountpoint}/root chown root:mythtv "$mountpoint"/etc/systemconfig chmod 775 "$mountpoint"/etc/systemconfig #mount /proc and /dev mount --bind /dev "$mountpoint/dev" mount --bind /proc "$mountpoint/proc" chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,advanced,this_is_install #wrap this in a network check_network, no need to update the db if the import worked. ##### do I need to start mysql? /etc/rc.d/mysqld stop chroot "$mountpoint" "$MV_ROOT/bin/restore_km_db_chroot.sh" > /tmp/chrootdb_km.out if [ -f /tmp/etc/KnoppMyth-version ] then chroot "$mountpoint" $MV_ROOT/bin/restore_default_settings.sh -c restore -t hostsettings else chroot "$mountpoint" $MV_ROOT/bin/restore_default_settings.sh -c restore -t syssettings fi # #Run second time chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,advanced,this_is_install chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh advanced,this_is_install apply_new_auth umount "$mountpoint/dev" umount "$mountpoint/proc" echo "Done" > /tmp/.install_state cp /tmp/mythvantage_install.log $mountpoint/var/log/ $run unmount_it $disk /etc/rc.d/mysqld start } function netboot-full_install () { TEMPVAR=${CMDLINE#*nfsroot=} NFSROOT=${TEMPVAR%% *} NFSROOT=`echo $NFSROOT|cut -d: -f1` MAC=`/sbin/ifconfig eth0|grep HWaddr| cut -d: -f2-|awk '{ print $3}'|tr : -` URL="http://$NFSROOT:1337/diskless.py?HOSTNAME=$hostname&MAC=$MAC" echo "calling $URL" echo "Starting" > /tmp/.install_state curl $URL ${MV_ROOT}/bin/xconfig.sh } function killdhcp () { if [ -f /etc/dhcpc/dhcpcd-eth0.pid ] then pid=`cat /etc/dhcpc/dhcpcd-eth0.pid` kill -9 $pid rm -f /etc/dhcpc/dhcpcd-eth0.pid rm -f /var/run/dhcpcd* fi if [ -f /var/run/dhcpcd-eth0.pid ] then pid=`cat /var/run/dhcpcd-eth0.pid` kill -9 $pid rm -f /var/run/dhcpcd-eth0.pid* fi ip address flush dev eth0 } function SANE_SYSETTINGS () { sed -e '/HOSTrootfstype/d' \ -e '/HOSTrootfstype/d' \ -e '/HOSTdatafstype/d' \ -e '/HOSTOSsize/d' \ -e '/HostUseALLdata/d' \ -e '/HOSTDATAsize/d' \ -e '/HOSTuprootfstype/d' \ -e '/HostUseSWAP/d' \ -e '/HOSTSWAPsize/d ' /tmp/templates/settings/syssettings/settings.txt > /tmp/settings.new mv /tmp/settings.new /tmp/templates/settings/syssettings/settings.txt } case $1 in full_install_it ) full_install ;; NETBOOT) echo "-----------------------------------------------------------------------3-----" netboot-full_install ;; find_update) #TRY TO mount first partition of drive #copy /etc/systemconfig to live, import settings into db #umount drive $run mount_it $disk if [ -f /new_boot/etc/systemconfig ] then ###########ADD templates mkdir -p $TEMP_TEMPLATES cp -pr /new_boot/$TEMPLATES $TEMP_TEMPLATES SANE_SYSETTINGS cp -rp $TEMP_TEMPLATES/settings $TEMPLATES/ cp /new_boot/etc/systemconfig /etc/systemconfig cp -rf /new_boot/etc /tmp/etc cp -rf /new_boot/var/lib/oss /tmp/oss $MV_ROOT/bin/restore_default_settings.sh -c restore -t syssettings -h $MVHOSTNAME -d 127.0.0.1 else cp -rf /new_boot/etc /tmp/etc #now we search for the timezone and try to update TZREGION=`cat /tmp/etc/timezone | cut -d"/" -f1` TZSUB=`cat /tmp/etc/timezone | cut -d"/" -f2 -` if [ $TZREGION = $TZSUB ] then $run update_db_it HostTimeZoneRegion "$TZREGION" else $run update_db_it HostTimeZoneRegion "$TZREGION" $run update_db_it HostTimeZoneRegion_$TZREGION "$TZSUB" fi fi $run umount_it $disk ;; upgrade_it) #"$MV_ROOT/bin/install_proxy.sh upgrade_it " + install_drive + " " + rootfs + "&" upgrade ;; disk_model_it) model="unknown" size="xxx" case $2 in h* ) model=`cat /proc/ide/$2/model` ;; s*) model=`sginfo /dev/$2|grep Product|awk ' { print $2 } '` ;; esac size=`parted /dev/$2 print |grep Disk|awk ' { print $3 } ' ` echo ""$model" $size " >/tmp/model ;; network_check_it) #Should never return from check_network case $2 in setup_network) vnc_check install_network_setup ;; check_self) myipdefault=`ifconfig | grep -C1 $default_interface| grep -v $default_interface | cut -d: -f2 | awk '{ print $1}'` ping -c 1 $myipdefault if [ ! $? = 0 ] then exit 3 #can't ping yourself fi ;; check_gw) #check gateway mygwdefault=`/sbin/route |grep $default_interface|grep UG|awk '{ print $2}'` if [ ! x$mygwdefault = x ] then ping -c 1 $mygwdefault if [ ! $? = 0 ] then exit 4 fi fi ;; check_ns) #check nameserver mydns=`cat /etc/resolv.conf|grep nameserver|head -1|awk '{ print $2}'` ping -c 1 $mydns if [ ! $? = 0 ] then exit 5 fi ;; check_names) host google.com if [ ! $? = 0 ] then exit 6 fi ;; host_names) #if host is found, then check to see if it's online #if not online, assume it's ok to use this hostname hout=`host $hostname` status=$? #found host, now grab the ip if [ $status = 0 ] then hoip=`echo $hout|awk '{print $4}'` ping -c 1 $hoip if [ $? = 0 ] then status=0 else status=1 fi fi if [ $status = 0 ] then exit 7 fi ;; esac exit 0 ;; * ) state=`cat /tmp/.install_state` if [ x"${state}" = "xConfiguring system" ] then progress "" else if [ -f /tmp/.startsize.io ] then . /tmp/.startsize.io #finding the drive ddrive=`df | grep $mountpoint | head -n1 | awk -F/ ' { print $3 } ' | cut -d" " -f 1|cut -b1,2,3 ` used=`statgrab -M disk.|grep ${ddrive}.write_bytes|cut -d= -f 2|tr -d " "` used=`echo $used-$STARTSIZE|bc` #echo $used fi if [ ! x$used = x ] then . /root/.install_size #somehow find if it's an install or update if [ -f /tmp/.this_is_upgrade ] then total=$UPGRADESIZE else total=$TOTALSIZE fi percent=`echo "scale=2 ; ($used/$total) * 100 " |bc ` cond2=$(echo "$percent > 100" |bc ) if [ $cond2 -eq 1 ] then percent=100 fi cond3=$(echo "$percent < 3" |bc ) if [ $cond3 -eq 0 ] then progress $percent fi fi fi ;; esac