summaryrefslogtreecommitdiffstats
path: root/abs/core-testing/LinHES-config/mv_install.py
diff options
context:
space:
mode:
Diffstat (limited to 'abs/core-testing/LinHES-config/mv_install.py')
-rwxr-xr-xabs/core-testing/LinHES-config/mv_install.py1432
1 files changed, 0 insertions, 1432 deletions
diff --git a/abs/core-testing/LinHES-config/mv_install.py b/abs/core-testing/LinHES-config/mv_install.py
deleted file mode 100755
index 908851b..0000000
--- a/abs/core-testing/LinHES-config/mv_install.py
+++ /dev/null
@@ -1,1432 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-import sys, os, commands, glob, time
-import getopt, re, MySQLdb
-import logging
-try:
- import parted
-except:
- print "module parted not found"
-
-def usage():
- print "help text:"
- print "example usage: --rootdisk=sda --rootfs=ext4 --rootsize=34240 --datafs=ext4 --datasize=3400 --datadisk=sda --swapsize=340 -c full_install"
-
-def clean_upgrade():
- return False
-
-def error_out(errmsg):
- cmd = '''echo %s >> /tmp/.install_error ''' %errmsg
- runcmd(cmd)
- logging.critical("***********************************")
- logging.critical("error: %s",errmsg)
- print "***********************************"
- print "ERROR: mv_install.py: %s" %errmsg
- print "***********************************"
- sys.exit(1)
-
-
-def update_db(value, data):
- db = MySQLdb.connect(host="localhost", user="mythtv", passwd="mythtv", db="mythconverg")
- try:
- cursor = db.cursor()
- cursor.execute("DELETE FROM settings where value=%s and hostname=%s;", (value, data_config.MVHOSTNAME))
- cursor.execute("REPLACE INTO settings set value=%s, data=%s, hostname=%s;", (value, data, data_config.MVHOSTNAME))
- logging.debug("Updated database with %s, %s", data, value)
- except MySQLdb.Error, e:
- logging.debug("Unable to update database with %s, %s", data, value)
-
-
-def progress(pgnum):
- progressline = str(pgnum) + "% complete"
- logging.debug("Progress: %s", pgnum)
- f = open('/tmp/.install_percent', 'w')
- f.write(progressline)
- f.close()
-
-def update_status(status):
- logging.debug("Status: %s", status)
- f = open('/tmp/.install_state', 'w')
- f.write(str(status))
- f.close()
-
-def kill_dhcp_chroot():
- logging.debug("Killing off chroot dhcpcd")
- stddir = os.getcwd()
- piddir = ("%s/var/run/") %data_config.MOUNTPOINT
- try:
- os.chdir(piddir)
- for FILE in glob.glob("dhcpcd-*.pid"):
- f = open(FILE, 'r')
- pid = f.readline()
- f.close()
- cmd = "kill -9 %s" %pid
- runcmd(cmd)
- os.remove(FILE)
- os.chdir(stddir)
- except:
- pass
-
-def statgrab(disk):
- cmd = "statgrab -M disk. |grep %s.write_bytes" % hostoptions["rootdisk"]
- out = commands.getoutput(cmd)
- try:
- prewritebytes = out.split("=")[1].strip()
- except:
- prewritebytes = "1024"
- outline = "STARTSIZE=%s" %prewritebytes
- f = open('/tmp/.startsize.io', 'w')
- f.write(str(outline))
- f.close()
-
-def backup_sql_check():
- logging.debug("Searching for backup file")
- try:
- hostoptions["backupfile"]
- except:
- logging.debug("Backup file var is empty")
- return False
- if os.path.exists(data_config.MOUNTPOINT+hostoptions["backupfile"]):
- logging.debug("Backup file %s is present", data_config.MOUNTPOINT+hostoptions["backupfile"])
- return True
- else:
- logging.debug("Backup file %s is NOT present", data_config.MOUNTPOINT+hostoptions["backupfile"])
- return False
-
-def mdadm_find(PREFIX):
- logging.debug("Searching for mdadm.conf")
- if os.path.exists(PREFIX+"/etc/KnoppMyth-version"):
- mdadmconf = "/etc/mdadm/mdadm.conf"
- else:
- mdadmconf = "/etc/mdadm.conf"
- logging.debug("Using %s for mdadm.conf", mdadmconf)
- return mdadmconf
-
-def mdadm_assemble_all():
- # read mdadm.conf and start the arrays
- #ARRAY /dev/md5 uuid=19464854:03f71b1b:e0df2edd:246cc977
- logging.debug("Starting mdadm support")
- mdadmconf_file = mdadm_find("/tmp")
- cmd = "cdadm --assemble --scan -c /tmp/%s" %mdadmconf_file
- runcmd(cmd)
- mdadm_contents = ''
- try:
- f = open(mdadmconf_file, 'r')
- mdadm_contents = f.readlines()
- f.close()
- except:
- logging.debug(" Couldn't open mdadmconf file")
- for line in mdadm_contents:
- if line.startswith("ARRAY"):
- logging.debug(" Found MD array: %s", line)
- array = line.split()[1]
- logging.info(" assembling array: %s", array)
- cmd = "mdadm --assemble -c /tmp%s %s" %(mdadmconf_file, array)
- runcmd(cmd)
- time.sleep(2)
- cmd = "fsck -p %s" %array
- runcmd
-
-def copy_updates():
- try:
- MVROOT = os.environ["MV_ROOT"]
- except:
- logging.debug("MVROOT was not defined, using the default value")
- MVROOT = "/usr/MythVantage"
- cp_and_log2(MVROOT+"/bin/", data_config.MOUNTPOINT+MVROOT+"/bin", "*.sh")
- cp_and_log2(MVROOT+"/bin/", data_config.MOUNTPOINT+MVROOT+"/bin", "*.py")
-
-def timezone_to_db(timefile):
- logging.info("importing timezone")
- try:
- f = open(timefile)
- timezonecontents = f.readline().strip()
- f.close()
- except:
- logging.debug("Couldn't open /tmp/etc/timezone, will not set the timezone")
- return
- update_db("HostTimeZone", timezonecontents);
- tzsplit = timezonecontents.partition('/')
- print tzsplit
- if tzsplit[2] == '' :
- update_db("HostTimeZoneRegion", tzsplit[0])
- else:
- update_db("HostTimeZoneRegion", tzsplit[0])
- tztemp="HostTimeZoneRegion_%s" % tzsplit[0]
- update_db(tztemp, tzsplit[2])
-
-
-
-def cp_and_log(srcfile, destfile):
- #return
- if not os.path.exists(srcfile):
- logging.info("%s is not present, skipping...", srcfile)
- else:
- cmd = ("rsync -arvp %s %s") %(srcfile, destfile)
- runcmd(cmd)
-
-def cp_and_log2(srcfile, destfile, fileglob):
- #return
- logging.debug("cp_and_log2")
- logging.debug("%s, %s, %s", srcfile, destfile, fileglob)
-
- if not os.path.exists(srcfile):
- logging.info("%s is not present, skipping...", srcfile)
- else:
- if fileglob == '':
- cmd = ("rsync -arvp %s %s") %(srcfile, destfile)
- runcmd(cmd)
- else:
- fileglob = "*"
- cmd = ("rsync -arvp %s/%s %s") %(srcfile, fileglob, destfile)
- runcmd(cmd)
-
-def runcmd(cmd):
- if data_config.NOOPDEBUG == "FALSE":
- pass
- else:
- cmd = "echo "+cmd
- logging.debug(" %s", cmd)
- cmdout = commands.getstatusoutput(cmd)
- logging.debug(" %s", cmdout)
- return cmdout
-
-def mysqldb(cmd, inchroot):
- if cmd == "start":
- mycmd = " /etc/rc.d/mysqld start"
- elif cmd == "stop":
- mycmd = " /etc/rc.d/mysqld stop"
- if inchroot == "chroot":
- mycmd = " chroot /newboot %s" %mycmd
- runcmd(mycmd)
-
-
-def mount_bind_chroot():
- logging.debug("Mounting dev/proc/sysfs for chroot")
- cmd = " mount --bind /dev %s" %data_config.MOUNTPOINT+"/dev"
- runcmd(cmd)
- cmd = " mount --bind /dev/pts %s" %data_config.MOUNTPOINT+"/dev/pts"
- runcmd(cmd)
- cmd = " mount --bind /proc %s" %data_config.MOUNTPOINT+"/proc"
- runcmd(cmd)
- cmd = " mount -t sysfs none %s" %data_config.MOUNTPOINT+"/sys"
- runcmd(cmd)
-
-
-def umount_bind_chroot():
- logging.debug("UnMounting dev/proc/sysfs for chroot")
- cmd = " umount -l %s" %data_config.MOUNTPOINT+"/dev/pts"
- runcmd(cmd)
- cmd = " umount -l %s" %data_config.MOUNTPOINT+"/dev"
- runcmd(cmd)
- cmd = " umount -l %s" %data_config.MOUNTPOINT+"/proc"
- runcmd(cmd)
- cmd = " umount -l %s" %data_config.MOUNTPOINT+"/sys"
- runcmd(cmd)
-
-
-def blank_table(diskdevice):
- logging.debug(" writing new parition table for %s", diskdevice)
- logging.debug("parition table before:")
- cmd = "fdisk -l %s" %diskdevice
- runcmd(cmd)
-
- cmd = "echo w |fdisk %s" %diskdevice
- runcmd(cmd)
-
- logging.debug("parition table after:")
- cmd = "fdisk -l %s" %diskdevice
- runcmd(cmd)
-
-def partitions_removeall(diskdevice, label):
- logging.info("Removing all partitions for %s %s", label, diskdevice)
- try:
- device = parted.getDevice(diskdevice)
- partdisk = parted.Disk(device)
- partdisk.deleteAllPartitions()
- if data_config.NOOPDEBUG == "FALSE":
- partdisk.commit()
- for partition in partdisk.partitions:
- print "type: %s" %partition.type
- except:
- logging.debug(" Error reading parition table, attempting to write a blank one")
- blank_table(diskdevice)
-
-
-def create_partitions(diskdevice, size, ptype, startsector):
- logging.debug("_____Create partitions______")
- if size == "NO":
- logging.info("Size is 0, skipping")
- return "NO"
- partlist = []
- newstart = 0
- totalused = 0
- device = parted.getDevice(diskdevice)
- partdisk = parted.Disk(device)
- for partition in partdisk.partitions:
- if partition.type != parted.PARTITION_FREESPACE:
- partlist.append((partition,
- partition.path,
- partition.getFlag(parted.PARTITION_BOOT),
- partition.geometry.start,
- partition.geometry.end,
- partition.geometry.length,
- partition.type,
- partition.fileSystem))
- for slice in partlist:
- (usedpartition, usedpath, usedbootable, usedstart, usedend, usedlength, usedtype, usedfs) = slice
- #Start the new partition one after the end of last
- newstart = usedend+1
-
- if startsector == 0:
- newstart = 0
- if size == "ALL":
- logging.debug(" Using the rest of the disk %s", (device.length-newstart) )
- try:
- geom = parted.Geometry(device=device, start=newstart, length=(device.length-newstart))
- except:
- logging.info("An error occured, probably invalid parition size")
- return
- else:
- # convert size in MB to a length on the device in sectors
- length = (int(size) * (1024 * 1024)) / device.sectorSize
- logging.debug("Size is %s", length)
- try:
- geom = parted.Geometry(device=device, start=newstart, length=length)
- except:
- logging.info("An error occured, probably invalid parition size")
- error_out("invalid parition size")
-
- #collect device constraint
- constraint = device.getConstraint()
- # new partition
- if ptype == "NORMAL":
- newpart = parted.Partition(disk=partdisk, type=parted.PARTITION_NORMAL, geometry=geom)
- elif ptype == "SWAP":
- newpart = parted.Partition(disk=partdisk, type=parted.PARTITION_NORMAL, geometry=geom)
-
- #add the partition to the disk and commit changes
- partdisk.addPartition(partition=newpart, constraint=constraint)
- if data_config.NOOPDEBUG == "FALSE":
- partdisk.commit()
- logging.info("created partition %s of %dMB and added it to %s" %
- (newpart.getDeviceNodeName(), newpart.getSize(), diskdevice))
- return newpart.getDeviceNodeName()
-
-def set_active_parition(diskdevice):
- """ Set the bootable flag for this partition. """
- logging.debug(" Setting active parition")
- device = parted.getDevice(diskdevice)
- partdisk = parted.Disk(device)
- try:
- for partition in partdisk.partitions:
- partition.setFlag(parted.PARTITION_BOOT)
- partdisk.commit()
- except:
- logging.info(" Couldn't set the active partition")
- logging.info(" Depending on your system this may not matter")
-
-
-def partition_disk():
- global hostoptions
- logging.info("Partitioning")
- logging.debug("____start of partition_disk____")
- rootdisk = hostoptions["rootdisk"]
- datadisk = hostoptions["datadisk"]
- label = "root"
- partitions_removeall("/dev/"+rootdisk, label)
- label = "data"
- partitions_removeall("/dev/"+datadisk, label)
- hostoptions["rootpartition"] = create_partitions("/dev/"+rootdisk, hostoptions["rootsize"], "NORMAL", 0)
- set_active_parition("/dev/"+rootdisk)
- hostoptions["swappartition"] = create_partitions("/dev/"+rootdisk, hostoptions["swapsize"], "SWAP", 1)
- if datadisk != rootdisk:
- hostoptions["datapartition"] = create_partitions("/dev/"+datadisk, hostoptions["datasize"], "NORMAL", 0)
- else:
- hostoptions["datapartition"] = create_partitions("/dev/"+datadisk, hostoptions["datasize"], "NORMAL", 1)
- time.sleep(5)
-
-def fscmd(fstype):
- fscmds = {"reiserfs":"mkreiserfs -q -l ROOT", "xfs": "mkfs -t xfs -f", "ext3": "mkfs.ext3", "jfs":"mkfs.jfs -q", "ext4":"mkfs.ext4", "Do_not_format":"noformat", "no_format":"noformat"}
- try:
- rc = fscmds[fstype]
- except:
- logging.critical(" %s is not a valid fs type, exiting now", fstype)
- error_out("Error mvinstall during format")
- return rc
-
-
-def format_disk(install_type):
- logging.info("______Starting Disk Format______")
- rootfs = fscmd(hostoptions["rootfs"])
- datafs = fscmd(hostoptions["datafs"])
-
- rootdisk = hostoptions["rootdisk"]
- datadisk = hostoptions["datadisk"]
- rootpartition = hostoptions["rootpartition"]
- datapartition = hostoptions["datapartition"]
- if install_type != "upgrade":
- swapsize = hostoptions["swapsize"]
- swappartition = hostoptions["swappartition"]
-
- logging.debug(" Format command for rootfs %s : %s ", rootfs, rootpartition)
- if ( rootfs != "noformat"):
- logging.info("Starting format of %s", rootpartition)
- cmd = " %s /dev/%s" %( rootfs, rootpartition)
- #os.system(cmd)
- runcmd(cmd)
- else:
- logging.info("Will not format root partition: %s", rootpartition)
-
- logging.debug(" Format command for datafs %s : %s ", datafs, datapartition)
- if (datafs != "noformat"):
- logging.info("Starting format of %s", datapartition)
- cmd = " %s /dev/%s" %( datafs, datapartition)
- #os.system(cmd)
- runcmd(cmd)
- else:
- logging.info("Will not format data partition: %s", datapartition)
-
- if install_type == "install":
- if (hostoptions["swapsize"] != "NO"):
- logging.info("Starting format for swap %s", swappartition)
- cmd = " mkswap /dev/%s" % swappartition
- #os.system(cmd)
- runcmd(cmd)
- else:
- logging.debug(" Swap is set to NO, will not run mkswap")
-
- logging.debug("_____End of format______")
-
-
-def mount_it():
- logging.info("______Mounting disk______")
-# Create mount points
- try:
- mountpoint = data_config.MOUNTPOINT
- mp = mountpoint
- logging.info("Creating mountpoints %s", mp)
- os.makedirs(mp)
- except OSError:
- logging.debug(" Could not create %s", mp)
-
-# Mount root
- cmd = "mount /dev/%s %s" %(hostoptions["rootpartition"], mountpoint)
- runcmd(cmd)
- #logging.debug(cmd)
- #cmdout=commands.getoutput(cmd)
- #logging.debug(cmdout)
-# Mount data
-#make mountpoint after mounting /
- try:
- mountpoint = data_config.MOUNTPOINT
- datapoint = data_config.DATAMOUNT
- mp = mountpoint+datapoint
- logging.info("Creating mountpoints %s", mp)
- os.makedirs(mp)
- except OSError:
- logging.debug(" Could not create %s", mp)
-
- cmd = "mount /dev/%s %s" %(hostoptions["datapartition"], mp)
- runcmd(cmd)
- #logging.debug(cmd)
- #cmdout=commands.getoutput(cmd)
- #logging.debug(cmdout)
-
-def unmount_it():
- logging.info("______Unmounting disk______")
- cmd = "umount %s" %(data_config.MOUNTPOINT+data_config.DATAMOUNT)
- runcmd(cmd)
- time.sleep(2)
-
- cmd = "swapoff /dev/%s" %(hostoptions["swappartition"])
- runcmd(cmd)
-
- cmd = "sync"
- runcmd(cmd)
-
- cmd = "umount %s" %(data_config.MOUNTPOINT)
- runcmd(cmd)
- cmd = "sync"
- runcmd(cmd)
-
-
-def create_squashlist():
- logging.debug("Creating squashlist")
- squashfile = data_config.SQUASHFILE
- f = open(squashfile, 'w')
- for i in data_config.SQUASHLIST:
- f.write(i)
- f.write("\n")
- logging.debug(i)
- f.close()
-
-
-def copy_it(install_type):
- logging.info("______Transferring to disk______")
- logging.debug( install_type)
- if ( install_type == "install"):
- logging.info("Transferring system")
- cmd = " unsquashfs -f -d %s /.livesys/medium/larch/system.sqf" %(data_config.MOUNTPOINT)
- runcmd(cmd)
- #logging.debug(cmd)
- #cmdout=commands.getoutput(cmd)
-
- if ( install_type == "upgrade"):
- logging.info("Upgrading system")
- create_squashlist()
- cmd = " unsquashfs -e %s -f -d %s /.livesys/medium/larch/system.sqf" %(data_config.SQUASHFILE, data_config.MOUNTPOINT)
- runcmd(cmd)
- #logging.debug(cmd)
- #cmdout=commands.getoutput(cmd)
-# Create the missing dir
- i = ("sys", "proc", "dev", "tmp", "mnt", "media", "media/cdrom", "media/dvd", "var/log/mythtv")
- mountpoint = data_config.MOUNTPOINT
- for item in i:
- try:
- mp = mountpoint+"/"+item
- logging.info("Creating mountpoints %s", mp)
- os.makedirs(mp)
- except OSError:
- logging.debug(" __Could not create %s", mp)
-# General fixup
- cmd = "chmod 777 %s/tmp" %(data_config.MOUNTPOINT)
- runcmd(cmd)
- cmd = "mknod %s/dev/null c 1 5" %(data_config.MOUNTPOINT)
- runcmd(cmd)
- cmd = "mknod %s/dev/console c 5 1" %(data_config.MOUNTPOINT)
- runcmd(cmd)
- cmd = "chmod +s %s/usr/bin/Xorg" %(data_config.MOUNTPOINT)
- runcmd(cmd)
- cmd = "chmod +s %s/usr/bin/crontab" %(data_config.MOUNTPOINT)
- runcmd(cmd)
- cmd = "chmod +s %s/usr/bin/sudo" %(data_config.MOUNTPOINT)
- runcmd(cmd)
- cmd = "chmod +s %s/bin/mount" %(data_config.MOUNTPOINT)
- runcmd(cmd)
- logging.debug("__End of copy_it__")
-
-def create_fstab(extralines):
- logging.debug("______Creating new fstab file_______")
- logging.info("Creating new fstab file")
- fstabfile = data_config.MOUNTPOINT+"/etc/fstab"
- fstab_list = []
- f = open(fstabfile, 'w')
- line = '''# <file system> <dir> <type> <options> <dump> <pass> \n'''
- fstab_list.append(line)
- line = '''none /dev/pts devpts defaults 0 0 \n'''
- fstab_list.append(line)
- line = '''none /dev/shm tmpfs defaults 0 0\n'''
- fstab_list.append(line)
- line = '''/dev/sr0 /media/cdrom auto ro,user,noauto,unhide 0 0\n'''
- fstab_list.append(line)
- line = '''UUID=ROOTUID / auto defaults,noatime 0 1\n'''
- fstab_list.append(line)
- line = '''UUID=DATAUID %s auto defaults,noatime 0 1\n''' %(data_config.DATAMOUNT)
- fstab_list.append(line)
- line = '''UUID=SWAPUID swap swap defaults 0 0 \n'''
- fstab_list.append(line)
- for vline in extralines:
- fstab_list.append(vline)
- for outline in fstab_list:
- logging.debug(outline)
- f.write(outline)
- f.close()
-
-def find_uuid(partition):
- logging.info("Finding the UUID for %s...", partition)
- cmd = "blkid -s UUID /dev/%s" %partition
- tmpuuid = runcmd(cmd)[1]
- splituuid = tmpuuid.partition("=")
- uuid = splituuid[2].replace('"', "")
- logging.info("The uuid is %s", uuid)
- return uuid.strip()
-
-def pick_out_vg():
- logging.info("Searching for Volume Groups in old fstab")
- vglines = []
- f = open("/tmp/etc/fstab", 'r')
- oldfscontents = f.readlines()
- for line in oldfscontents:
- if line.startswith("/dev/vg"):
- vglines.append(line)
- templine = line.split()
- mdir = templine[1]
- if not os.path.exists (mdir):
- logging.debug("Creating dir %s for VG mount", mdir)
- os.makedirs (mdir)
-# Might need to os.chown to mythtv:users
- else:
- logging.debug("Directory %s for VG mount already present", mdir)
- return vglines
-
-def fstab_it(install_type):
- logging.info("______Checking fstab______")
- kmvg = []
- fstabfile = data_config.MOUNTPOINT+"/etc/fstab"
-# Check for knoppmyth install, if found create new
- if install_type == "upgrade":
- if os.path.exists("/tmp/etc/KnoppMyth-version"):
- logging.debug(" KnoppMyth-Version found, creating new fstab")
- kmvg = pick_out_vg()
- create_fstab(kmvg)
- elif os.path.exists("/tmp/etc/fstab"):
- logging.debug(" Upgrade and not Knoppmyth, using old fstab")
- cp_and_log("/tmp/etc/fstab", fstabfile)
-# Catch all for creating new fstab
- if not os.path.exists(data_config.MOUNTPOINT+"/etc"):
- os.makedirs(data_config.MOUNTPOINT+"/etc")
- if not os.path.exists(fstabfile):
- create_fstab(kmvg)
-
- logging.info("____UUID check for %s", "swap")
- swapuuid = find_uuid(hostoptions["swappartition"])
-
- logging.info("____UUID check for %s", "data")
- datauuid = find_uuid(hostoptions["datapartition"])
-
- logging.info("____UUID check for %s", "root")
- rootuuid = find_uuid(hostoptions["rootpartition"])
-
- fstabfile = data_config.MOUNTPOINT+"/etc/fstab"
- logging.info("Correcting UUID's in %s", fstabfile)
- f = open(fstabfile, 'r')
- oldfscontents = f.readlines()
- newfstab = []
- f.close()
- for line in oldfscontents:
- if line.startswith("UUID"):
- templine = line.split()
- if ( templine[1] == "/"):
- logging.debug(" Found Root fstab line:")
- logging.debug( templine)
- templine[0] = "UUID=%s" %(rootuuid)
- newline = ''
- for i in templine:
- newline+=i
- newline+=" "
- newline+="\n"
- logging.debug(" New fstab line:")
- logging.debug( newline)
- newfstab.append(newline)
-
- if ( templine[1] == data_config.DATAMOUNT):
- logging.debug(" Found DATA mount")
- logging.debug( templine)
- templine[0] = "UUID=%s" %(datauuid)
- newline = ''
- for i in templine:
- newline+=i
- newline+=" "
- newline+="\n"
- logging.debug(" New fstab line:")
- logging.debug( newline)
- newfstab.append(newline)
-
- if ( templine[1] == "swap"):
- if len(swapuuid) <= 5:
- logging.debug(" swapp uuid is to small")
- else:
- logging.debug(" Found swap partition")
- logging.debug( templine)
- templine[0] = "UUID=%s" %(swapuuid)
- newline = ''
- for i in templine:
- newline+=i
- newline+=" "
- newline+="\n"
- logging.debug(" New fstab line:")
- logging.debug( newline)
- newfstab.append(newline)
- else:
- logging.debug(" Line didn't match, adding to newfstab:")
- logging.debug( line)
- newfstab.append(line)
- logging.info("Writing out newfstab")
- logging.debug("______This is the new fstab_____")
- f = open(fstabfile, 'w')
- for line in newfstab:
- logging.debug(line)
- f.write(line)
- #f.write("\n")
- f.close()
-
-def grub_it():
- logging.info("______Start of grub install______")
- cmd = " grub-install --recheck --no-floppy --root-directory=%s \"(hd0)\" " % data_config.MOUNTPOINT
- logging.info("Running grub-install")
- runcmd(cmd)
- rootuuid = find_uuid(hostoptions["rootpartition"])
- cmd = " mkinitcpio -g %s/boot/kernel26.img" % data_config.MOUNTPOINT
- logging.info("Running mkinitcpio")
- runcmd(cmd)
- logging.info("Adding root uuid to grub menu")
- grubfile = data_config.MOUNTPOINT+"/boot/grub/menu.lst"
- try:
- f = open(grubfile, 'r')
- oldgrub = f.readlines()
- newgrub = []
- f.close()
- for line in oldgrub:
- if line.startswith("kernel"):
- templine = line.split()
- logging.debug(" Found kernel Root grubline:")
- logging.debug( templine)
- templine[2] = "root=/dev/disk/by-uuid/%s" %(rootuuid)
- newline = ''
- for i in templine:
- newline+=i
- newline+=" "
- newline+="\n"
- logging.debug(" New grub menu.lst line:")
- logging.debug( newline)
- newgrub.append(newline)
- else:
- logging.debug("Line didn't match, adding to newgrub:")
- logging.debug( line)
- newgrub.append( line)
- logging.info("Writing out new grub file")
- logging.debug("______This is the new grub_____")
- f = open(grubfile, 'w')
- for line in newgrub:
- logging.debug(line)
- f.write(line)
- f.close()
- except:
- logging.debug("Couldn't open grub file")
-
-def fix_permissions():
- logging.info("Fixing permissions")
- SE = os.environ["TEMPLATES"]+"/settings/syssettings"
- cmd = " chmod -R 755 %s" %(data_config.MOUNTPOINT+SE)
- runcmd(cmd)
- cmd = " chmod 775 %s" %(data_config.MOUNTPOINT+"/etc/systemconfig")
- runcmd(cmd)
- cmd = " chmod 755 %s" %(data_config.MOUNTPOINT+"/root")
- runcmd(cmd)
- cmd = " chown root:mythtv %s" %(data_config.MOUNTPOINT+"/etc/systemconfig")
- runcmd(cmd)
- cmd = " chown -R mythtv:mythtv %s" %(data_config.MOUNTPOINT+SE)
- runcmd(cmd)
- cmd = " chown -R mythtv:mythtv %s" %(data_config.MOUNTPOINT+"/var/log/mythtv")
- runcmd(cmd)
-
-def apply_new_auth():
- logging.info("_____Applying Password updates_______")
- passfile = "/root/myth_user_call.out"
- try:
- MVROOT = os.environ["MV_ROOT"]
- except:
- logging.debug("MVROOT was not defined, using the default value")
- MVROOT = "/usr/MythVantage"
- if data_config.NOOPDEBUG == "FALSE":
- cmdprefix = "chroot " + data_config.MOUNTPOINT + " " + MVROOT+"/bin/myth_user_call -i "
- else:
- cmdprefix = "echo chroot " + data_config.MOUNTPOINT + " " + MVROOT+"/bin/myth_user_call -i "
- try:
- f = open(passfile, 'r')
- passcmds = f.readlines()
- f.close()
- for cmd in passcmds:
- execmd = cmdprefix+cmd
-# Using os.system because runcmd fails
- logging.debug(execmd)
- os.system(execmd)
- except:
- logging.debug("Applying password updates failed, couldn't open %s", passfile)
- logging.debug
-
-def add_to_blacklist(module):
- rcfile = data_config.MOUNTPOINT + "/etc/rc.conf"
- logging.debug(" Attempting to add %s to blacklist", module)
- newline=''
- try:
- f = open(rcfile, 'r')
- conflines = f.readlines()
- f.close()
- except:
- logging.critical(" *Couldn't open %s for reading",rcfile)
- return
-
- try:
- f = open(rcfile, 'w')
- except:
- logging.critical(" *Couldn't open %s for reading",rcfile)
- return
-
- for line in conflines:
- newline = line
- if re.match("MOD_BLACKLIST",line):
- logging.debug(line)
- try:
- lastpar = line.rindex(')')
- logging.debug(" found ) at %s", lastpar)
- newline = line[:lastpar] +" !" + module + " " + line[lastpar:]
- logging.debug(newline)
- except:
- logging.debug("Couldn't find ending )")
- newline = line
- f.write(newline)
- f.close()
-
-
-def add_to_modulelist(module):
- rcfile = data_config.MOUNTPOINT + "/etc/rc.conf"
- logging.debug(" Attempting to add %s to modulelist", module)
- newline=''
- try:
- f = open(rcfile, 'r')
- conflines = f.readlines()
- f.close()
- except:
- logging.critical(" *Couldn't open %s for reading",rcfile)
- return
-
- try:
- f = open(rcfile, 'w')
- except:
- logging.critical(" *Couldn't open %s for reading",rcfile)
- return
-
- for line in conflines:
- newline = line
- if re.match("MODULES=",line):
- logging.debug(line)
- try:
- lastpar = line.rindex(')')
- logging.debug(" found ) at %s", lastpar)
- newline = line[:lastpar] +" " + module + " " + line[lastpar:]
- logging.debug(newline)
- except:
- logging.debug("Couldn't find ending )")
- newline = line
- f.write(newline)
- f.close()
-
-
-
-def special_hardware_check():
- logging.info("_____Applying special boot parameters_______")
- try:
- f = open('/proc/cmdline', 'r')
- bootoptions = f.readlines()
- f.close()
- except:
- logging.critical(" *Couldn't open /proc/cmdline")
- return
- bootoptions = bootoptions[0].split()
- logging.debug(" Boot options: %s", bootoptions)
- for item in bootoptions:
- logging.debug(item)
- if re.match("disablemodules",item) != None :
- logging.debug(" Found disabledmodules")
- modulelist = item.split("=")[1]
- for module in modulelist.split(','):
- add_to_blacklist(module)
-
- if re.match("modules",item) != None :
- logging.debug(" Found modules")
- modulelist = item.split("=")[1]
- for module in modulelist.split(','):
- add_to_modulelist(module)
-
- if re.match("type",item) != None :
- logging.debug(" Found special hardware type")
- try:
- typefile = open(data_config.MOUNTPOINT + "/myth/.special_hardware_type", 'w')
- typelist = item.split("=")[1]
- # there should be only one special hardware type, but this will handle multiples, just in case
- for type in typelist.split(','):
- typefile.write(type)
- typefile.write("\n")
- typefile.close()
- except:
- logging.debug("Couldn't write to file: ", typefile)
- if re.match("no_meth",item) != None :
- cmd = " touch %s%s/.no_meth" %(data_config.MOUNTPOINT, data_config.MYTHHOME)
- runcmd(cmd)
-
-def swapsearch():
-#currently unused!
- partlist = []
- stddir = os.getcwd()
- os.chdir("/sys/block")
- partitionlist = glob.glob("*")
- for item in partitionlist:
- try:
- newitem = item.strip().rpartition(" ")[2]
- if (not newitem == '') and (not newitem.startswith("loop")):
- path = "/dev/"+newitem.strip()
- path = path.strip()
- device = parted.getDevice(path)
- (cylinders, heads, sectors) = device.biosGeometry
- sizeInBytes = device.length * device.sectorSize
- disk = parted.Disk(device)
- for partition in disk.partitions:
- if partition.type == parted.PARTITION_PROTECTED or \
- partition.type == parted.PARTITION_METADATA or \
- partition.type == parted.PARTITION_FREESPACE:
- continue
-
- partlist.append((partition,
- partition.path,
- partition.getFlag(parted.PARTITION_BOOT),
- partition.geometry.start,
- partition.geometry.end,
- partition.geometry.length,
- partition.type,
- partition.fileSystem))
- for slice in partlist:
- (partition, path, bootable, start, end, length, type, fs) = slice
- if partition.getFlag(parted.PARTITION_SWAP) or fs.type == "linux-swap":
- print "found swap"
- print path
- except:
- pass
- os.chdir(stddir)
-
-def sane_settings(file):
- #Remove some settings from file_name
- removeline = ("HOSTrootfstype", "HOSTrootfstype", "HOSTdatafstype", "HOSTOSsize", "HostUseALLdata", "HOSTDATAsize", "HOSTuprootfstype", "HostUseSWAP", "HOSTSWAPsize")
- logging.debug("__Running sane settings")
- try:
- f = open(file, 'r')
- filecontents = f.readlines()
- f.close()
- except:
- logging.debug(" Couldn't find file %s to sane", file)
- try:
- f = open(file, 'w')
- for line in filecontents:
- for item in removeline:
- if line.startsize(line.strip()):
- logging.debug(" Found a line to remove in %s, %s", file, line)
- else:
- f.write(line)
- except:
- logging.debug(" Couldn't open file %s for writing", file)
- logging.debug(" __End sane settings")
-
-def restore_default_settings():
- try:
- MVROOT = os.environ["MV_ROOT"]
- except:
- logging.debug(" MVROOT was not defined, using the default value")
- MVROOT = "/usr/MythVantage"
- logging.info("Saving syssettings")
- cmd = "%s/bin/restore_default_settings.sh -c save -t syssettings -h %s -d localhost" %(MVROOT, data_config.MVHOSTNAME)
- runcmd(cmd)
- SE = os.environ["TEMPLATES"]+"/settings/syssettings/"
- cp_and_log(SE, data_config.MOUNTPOINT+SE)
- cp_and_log("/etc/mtab", data_config.MOUNTPOINT+"/etc/mtab")
- copy_updates()
- fix_permissions()
-
-def full_install(hostoptions):
- logging.info("______Start of full install______")
- try:
- MVROOT = os.environ["MV_ROOT"]
- except:
- logging.debug(" MVROOT was not defined, using the default value")
- MVROOT = "/usr/MythVantage"
-
- try:
- os.remove("/tmp/.this_is_upgrade")
- except OSError:
- logging.debug(" File /tmp/.this_is_upgrade not present, couldn't delete it")
- pass
-# Partition disk
- statusmsg = "Partitioning %s" %( hostoptions["rootdisk"])
- update_status(statusmsg)
- progress(1)
- if data_config.NOOPDEBUG == "FALSE":
- partition_disk()
- else:
- logging.debug(" Debug mode, skipping partitioning step")
-
-# Format disk
- statusmsg = "Preparing %s" %( hostoptions["rootdisk"])
- update_status(statusmsg)
- progress(2)
- format_disk("install")
-
-
-# Mount partitions
- statusmsg = "Mounting %s" %( hostoptions["rootdisk"])
- update_status(statusmsg)
- progress(3)
- mount_it()
-
-# Find number of bytes written to disk before starting copy. This is used
-# to have a somewhat decent progress indication.
- statgrab( hostoptions["rootdisk"])
- msg = "Creating %s" %(systemconfig["hostname"])
- update_status(msg)
-
-# Copy system to disk
- copy_it("install")
-# Remove old fstab so that a new one is created
- fstabfile = data_config.MOUNTPOINT+"/etc/fstab"
- try:
- os.remove(fstabfile)
- except OSError:
- logging.debug(" ERROR: deleting %s", fstabfile)
- fstab_it("full_install")
-# Configure system
- msg = "Configuring system"
- update_status(msg)
- progress(98)
- grub_it()
- special_hardware_check()
-# Configuring the system
- logging.info("______Configuring system________")
- cp_and_log("/etc/systemconfig", data_config.MOUNTPOINT+"/etc/systemconfig")
- cp_and_log("/root/xorg.conf.install", data_config.MOUNTPOINT+"/etc/X11/xorg.conf.install")
- restore_default_settings()
- #try:
- #MVROOT=os.environ["MV_ROOT"]
- #except:
- #logging.debug(" MVROOT was not defined, using the default value")
- #MVROOT="/usr/MythVantage"
- #logging.info("Saving syssettings")
- #cmd="%s/bin/restore_default_settings.sh -c save -t syssettings -h %s -d localhost" %(MVROOT, data_config.MVHOSTNAME)
- #runcmd(cmd)
- #SE=os.environ["TEMPLATES"]+"/settings/syssettings"
- #cp_and_log(SE, data_config.MOUNTPOINT+SE)
- #cp_and_log("/etc/mtab", data_config.MOUNTPOINT+"/etc/mtab")
- #cp_and_log2(MVROOT+"/bin/", data_config.MOUNTPOINT+MVROOT+"/bin/", "*.sh")
- #cp_and_log2(MVROOT+"/bin/", data_config.MOUNTPOINT+MVROOT+"/bin/", "*.py")
- #fix_permissions()
- mount_bind_chroot()
- apply_new_auth()
- umount_bind_chroot()
- if ( systemconfig["SystemType"] == "Master_backend" or systemconfig["SystemType"] == "Standalone" ):
-# This install will need a DB, so install it
- logging.info("______Installing Database in CHROOT________")
- mysqldb("stop", '')
- mount_bind_chroot()
- cmd = " chroot %s %s/bin/install_db_chroot.sh |tee /tmp/chrootdb.out" %(data_config.MOUNTPOINT, MVROOT)
- runcmd(cmd)
- logging.info("Running systemconfig in chroot")
- #cmd = " chroot %s %s/bin/systemconfig.sh misc, hostype, network, advanced, user, this_is_install" %(data_config.MOUNTPOINT, MVROOT)
- cmd = "chroot %s %s/bin/systemconfig.sh all,this_is_install" %(data_config.MOUNTPOINT, MVROOT)
- rc = runcmd(cmd)[0]
- if rc != 0 :
- error_out("Running systemconfig")
-
- mysqldb("stop", "chroot")
- kill_dhcp_chroot()
- logging.info("____End Database in CHROOT____")
- mysqldb("start", '')
- umount_bind_chroot()
- else:
- logging.info("______No database required, continuing configuration________")
- mount_bind_chroot()
- cmd = " chroot %s DISPLAY=127.0.0.1:0 %s/bin/MythVantage -t restore, default 1" %(data_config.MOUNTPOINT, MVROOT)
- runcmd(cmd)
-# Need to check for to touch /tmp/.dbsysfailed
- cmd = " chroot %s %s/bin/restore_default_settings.sh -c restore -t syssettings " %(data_config.MOUNTPOINT, MVROOT)
- runcmd(cmd)
- if ( 'x' == '1' ):
- logging.debug("touching /tmp/.dbsysfailed")
- else:
- #cmd = " chroot %s %s/bin/systemconfig.sh misc, hostype, network, advanced, user, this_is_install" %(data_config.MOUNTPOINT, MVROOT)
- cmd = "chroot %s %s/bin/systemconfig.sh all,this_is_install" %(data_config.MOUNTPOINT, MVROOT)
- rc = runcmd(cmd)[0]
- if rc != 0 :
- error_out("Running systemconfig")
- cmd = "chroot %s %s/bin/restore_default_settings.sh -c ACCESSCONTROL " %(data_config.MOUNTPOINT, MVROOT)
- runcmd(cmd)
- umount_bind_chroot()
- cmd = " touch %s%s/.configure" %(data_config.MOUNTPOINT, data_config.MYTHHOME)
- runcmd(cmd)
- cmd = " chmod 777 %s%s/.configure" %(data_config.MOUNTPOINT, data_config.MYTHHOME)
- runcmd(cmd)
-
- msg = "Done"
- update_status(msg)
- cp_and_log("/tmp/mythvantage_install.log", data_config.MOUNTPOINT+"/var/log/mythvantage_install.log")
- cp_and_log("/tmp/mv_debug.log", data_config.MOUNTPOINT+"/var/log/mv_debug.log")
- unmount_it()
- logging.debug("_____End of full install_____")
-
-def find_upgrade():
- logging.info("_____Start of find_upgrade_____")
- global hostoptions
- #try to mount first partition of disk
- #copy old /etc/systemconfig to live, import settings into db
- #umount drive.
- #check for clean upgrade
- if ( clean_upgrade() ):
- logging.info("Clean upgrade requested, not using old data")
- return
- mount_it()
- oldbackupfile = data_config.MOUNTPOINT+"/root/backup/"+data_config.BACKUPFILE
- newbackupfile = "/tmp/"+data_config.BACKUPFILE
- if os.path.exists(oldbackupfile):
- logging.debug("Setting backup file to %s", newbackupfile)
- hostoptions["backupfile"] = newbackupfile
- cp_and_log(oldbackupfile, newbackupfile)
-
- srcfile = data_config.MOUNTPOINT+"/etc/systemconfig"
- logging.info("Searching for systemconfig file %s", srcfile)
- if os.path.exists(srcfile):
- logging.info("Found systemconfig file %s", srcfile)
- TEMPLATES = os.environ["TEMPLATES"]+"/settings/syssettings"
- cp_and_log2(data_config.MOUNTPOINT+TEMPLATES, data_config.TEMP_TEMPLATES, '')
- sane_settings("/tmp/templates/settings/syssettings/settings.txt")
- cp_and_log2(data_config.TEMP_TEMPLATES, TEMPLATES, '')
- cp_and_log(srcfile, "/etc/systemconfig")
- cp_and_log(data_config.MOUNTPOINT+"/etc/", "/tmp/etc/")
- cp_and_log(data_config.MOUNTPOINT+"/var/lib/alsa/", "/tmp/alsa")
- cp_and_log(data_config.MOUNTPOINT+"/var/lib/oss/", "/tmp/oss")
- cp_and_log("/tmp/etc/mdadm.conf", "/etc/mdadm.conf")
- else:
- logging.info("Could not find systemconfig file %s", srcfile)
- cp_and_log(data_config.MOUNTPOINT+"/etc/", "/tmp/etc/")
- cp_and_log(data_config.MOUNTPOINT+"/var/lib/alsa/", "/tmp/alsa")
- cp_and_log("/tmp/etc/mdadm.conf", "/etc")
- timezone_to_db("/tmp/etc/timezone")
- unmount_it()
- logging.debug("End of find_upgrade")
-
-def upgrade_mount_search():
- #Search for data/myth partition based on contents of fstab
- logging.debug("______Start of upgrade_mount_search_____")
- cmd = "umount %s%s" %(data_config.MOUNTPOINT, data_config.DATAMOUNT)
- runcmd(cmd)
- fstab_list = []
- fstab_data_mount = ''
- try:
- f = open("/tmp/etc/fstab", 'r')
- oldfscontents = f.readlines()
- f.close()
- ## ['UUID=', '/myth', 'auto', 'defaults, noatime', '0', '1']
- #for line in oldfscontents:
- #mountdir=line.split()
- #if mountdir[1] == (data_config.DATAMOUNT):
- #fstablist.append(mountdir)
- except:
- logging.debug(" Couldn't open /tmp/etc/fstab")
- for line in oldfscontents:
- if line.startswith("#"):
- continue
- mountdir=line.split()
- try:
- if mountdir[1] == (data_config.DATAMOUNT):
- fstablist.append(mountdir)
- except:
- continue
- #search fstab for data/myth mountpoint
- for i in fstab_list:
- if i[1] == data_config.DATAMOUNT:
- fstab_data_mount = i[0]
- break
-
- #start software raid support if needed
- for i in fstab_list:
- if i[0].startswith("/dev/md"):
- logging.debug(" starting software raid support")
- mdadm_assemble_all
-
-
- if re.search("UUID", fstab_data_mount):
- fstab_data_uuid = fstab_data_mount.split("=")[1]
- cmd = "blkid -t UUID=%s" %fstab_data_uuid
- retcode = call(cmd, shell=True)
- if retcode != 0:
- logging.debug(" Couldn't find uuid %s, starting md support", fstab_data_uuid)
- mdadm_assemble_all
- #hoping everything is up and running and data/myth will be available for mount
- cmd = "mount -U %s %s" %(fstab_data_uuid, data_config.MOUNTPOINT)
- runcmd(cmd)
- cmd = "blkid -t UUID=%s|cut -d: -f1" %fstab_data_uuid
- logging.debug(cmd)
- datadisk = commands.getoutput(cmd)
- cmd = "basename %s" %datadisk
- datadisk = commands.getoutput(cmd)
- else:
- cmd = "mount %s %s" %(fstab_data_mount, data_config.MOUNTPOINT)
- runcmd(cmd)
- cmd = "basename %s" %fstab_data_mount
- datadisk = commands.getoutput(cmd)
- time.sleep(3)
-# hostoptions["backupfile"]=data_config.BACKUPPATH+data_config.BACKUPFILE
- if not backup_sql_check():
- newbackupfile = "/tmp/"+data_config.BACKUPFILE
- if os.path.exists(newbackupfile):
- logging.debug("Setting backup file to %s", newbackupfile)
- cp_and_log(newbackupfile, data_config.MOUNTPOINT+newbackupfile)
- hostoptions["backupfile"] = newbackupfile
- else:
- logging.info("Couldn't find any database to restore, upgrade will continue with a new database")
-
-
-
-def upgrade(hostoptions):
-
- try:
- MVROOT = os.environ["MV_ROOT"]
- except:
- logging.debug("MVROOT was not defined, using the default value")
- MVROOT = "/usr/MythVantage"
- logging.info("______Start of upgrade______")
- cmd = "touch /tmp/.this_is_upgrade"
- runcmd(cmd)
- if hostoptions["rootfs"] == "Do_not_format":
- logging.info("Will not format root filesystem")
- else:
- statusmsg = "Preparing %s" %( hostoptions["rootdisk"])
- update_status(statusmsg)
- progress(2)
- format_disk("upgrade")
- #sys.exit(2)
- statusmsg = "Mounting %s" %( hostoptions["rootdisk"])
- update_status(statusmsg)
- progress(3)
- mount_it()
- hostoptions["backupfile"] = data_config.BACKUPPATH+data_config.BACKUPFILE
- statgrab( hostoptions["rootdisk"])
- msg = "Upgrading %s" %(systemconfig["hostname"])
- update_status(msg)
- time.sleep(3)
- copy_it("upgrade")
- cmd = "rm -rf %s/etc.old" %data_config.MOUNTPOINT
- runcmd(cmd)
- cmd = "rm -rf %s/alsa.old" %data_config.MOUNTPOINT
- runcmd(cmd)
-
- cp_and_log("/tmp/etc/", data_config.MOUNTPOINT+"/etc.old/")
- cp_and_log("/tmp/alsa/", data_config.MOUNTPOINT+"/alsa.old/")
- cp_and_log("/tmp/oss", data_config.MOUNTPOINT+"/var/lib/oss.old")
-
- srcfile = "%s/etc.old/ssh/" %(data_config.MOUNTPOINT)
- destfile = "%s/etc/ssh/" %(data_config.MOUNTPOINT)
- cp_and_log2(srcfile, destfile, '*.pub')
- cp_and_log2(srcfile, destfile, '*.key')
- cp_and_log2(srcfile, destfile, '*key')
-
- mdfile = mdadm_find("/tmp")
- cp_and_log("/tmp"+mdfile, data_config.MOUNTPOINT+"/etc")
-
- srcfile = "%s/etc.old/asound.conf" %(data_config.MOUNTPOINT)
- destfile = "%s/etc/asound.conf" %(data_config.MOUNTPOINT)
- cp_and_log(srcfile, destfile)
-
- # R5.5 -> R6
- srcfile = "%s/alsa.old/asound.state" %(data_config.MOUNTPOINT)
- destfile = "%s/etc/asound.state" %(data_config.MOUNTPOINT)
- cp_and_log(srcfile, destfile)
- # R6 -> R6
- srcfile = "%s/etc.old/asound.state" %(data_config.MOUNTPOINT)
- destfile = "%s/etc/asound.state" %(data_config.MOUNTPOINT)
- cp_and_log(srcfile, destfile)
-
- srcfile = "%s/etc.old/mplayer/mplayer.conf" %(data_config.MOUNTPOINT)
- destfile = "%s/etc/mplayer/mplayer.conf" %(data_config.MOUNTPOINT)
- cp_and_log(srcfile, destfile)
-
- if not os.path.exists("/tmp/etc/KnoppMyth-version"):
- logging.debug(" standard upgrade, restoring auth files")
- cp_and_log(data_config.MOUNTPOINT+"/etc.old/passwd", data_config.MOUNTPOINT+"/etc/passwd")
- cp_and_log(data_config.MOUNTPOINT+"/etc.old/shadow", data_config.MOUNTPOINT+"/etc/shadow")
- cp_and_log(data_config.MOUNTPOINT+"/etc.old/group", data_config.MOUNTPOINT+"/etc/group")
- msg = "Configuring system"
-
- update_status(msg)
- progress(98)
- logging.info("______Configuring system________")
- cp_and_log("/etc/systemconfig", data_config.MOUNTPOINT+"/etc/systemconfig")
- if not backup_sql_check():
- upgrade_mount_search()
- fstab_it("upgrade")
- time.sleep(1)
- grub_it()
- time.sleep(1)
- #needed to get around a bug with pacman
- special_hardware_check()
- cp_and_log("/root/xorg.conf.install", data_config.MOUNTPOINT+"/etc/X11/xorg.conf.install")
- cp_and_log("/etc/mtab", data_config.MOUNTPOINT+"/etc/mtab")
- if clean_upgrade() or os.path.exists("/tmp/etc/KnoppMyth-version"):
- logging.debug("clean upgrade or knoppmyth upgrade detected, running restore settings")
- restore_default_settings()
- if clean_upgrade():
- file = "%s/%s/.kmupgrade" %(data_config.MOUNTPOINT, data_config.MYTHHOME)
- cmd = "touch %s && chmod 777 %s" %(file, file)
- runcmd(cmd)
- copy_updates()
- fix_permissions()
- mount_bind_chroot()
- logging.info("Running systemconfig in chroot")
- #cmd = " chroot %s %s/bin/systemconfig.sh misc, hostype, network, advanced, user, this_is_install" %(data_config.MOUNTPOINT, MVROOT)
- cmd = "chroot %s %s/bin/systemconfig.sh all,this_is_install" %(data_config.MOUNTPOINT, MVROOT)
- rc = runcmd(cmd)[0]
- if rc != 0 :
- error_out("Running systemconfig")
- mysqldb("stop", "")
- if ( systemconfig["SystemType"] == "Master_backend" or systemconfig["SystemType"] == "Standalone" ):
- if clean_upgrade() or not backup_sql_check():
- logging.info("Installing new database")
- cmd = " chroot %s %s/bin/install_db_chroot.sh |tee /tmp/chrootdb.out" %(data_config.MOUNTPOINT, MVROOT)
- runcmd(cmd)
- else:
- logging.info("Restoring database")
- cmd = " chroot %s %s/bin/restore_km_db_chroot.sh %s|tee /tmp/chrootdb.out" %(data_config.MOUNTPOINT, MVROOT, hostoptions["backupfile"])
- runcmd(cmd)
-
- if os.path.exists("/tmp/etc/KnoppMyth-version"):
- cmd = " chroot %s %s/bin/restore_default_settings.sh -c restore -t hostsettings " %(data_config.MOUNTPOINT, MVROOT)
- runcmd(cmd)
- logging.debug("Correcting permissions because of km->linhes upgrade")
- cmd = " chown -R mythtv:mythtv %s" %(data_config.MOUNTPOINT+data_config.DATAMOUNT)
- runcmd(cmd)
- cmd = " chown -R root:root %s" %(data_config.MOUNTPOINT+data_config.DATAMOUNT+"/backup")
- runcmd(cmd)
- else:
- cmd = " chroot %s %s/bin/restore_default_settings.sh -c restore -t syssettings " %(data_config.MOUNTPOINT, MVROOT)
- runcmd(cmd)
-
- logging.info("Running systemconfig in chroot 2nd time")
- #cmd = " chroot %s %s/bin/systemconfig.sh misc, hostype, network, advanced, user, this_is_install" %(data_config.MOUNTPOINT, MVROOT)
- cmd = "chroot %s %s/bin/systemconfig.sh all,this_is_install" %(data_config.MOUNTPOINT, MVROOT)
- rc = runcmd(cmd)[0]
- if rc != 0 :
- error_out("Running systemconfig")
- #logging.info("Running systemconfig in chroot")
- #cmd = " chroot %s %s/bin/systemconfig.sh advanced" %(data_config.MOUNTPOINT, MVROOT)
- #runcmd(cmd)
- mysqldb("stop", 'chroot')
- apply_new_auth()
- kill_dhcp_chroot()
- umount_bind_chroot()
- cp_and_log("/tmp/mythvantage_install.log", data_config.MOUNTPOINT+"/var/log/mythvantage_install.log")
- cp_and_log("/tmp/mv_debug.log", data_config.MOUNTPOINT+"/var/log/mv_debug.log")
- unmount_it()
- msg = "Done"
- update_status(msg)
- mysqldb("start", '')
-
-
-
-
-def main(argv):
- global hostoptions
- try:
- opts, args = getopt.getopt(argv, 'c:h', ["help", "rootdisk=", "rootfs=", "rootsize=", "datafs=", "datasize=", "datadisk=", "swapsize=", "datapartition=" ] )
- except getopt.GetoptError, why:
- print why
- usage()
- sys.exit(2)
- hostoptions = {"op": 'null'}
- for opt, arg in opts:
- if opt in ("-h", "--help"):
- usage()
- sys.exit(0)
- elif opt in ( "--rootdisk"):
- hostoptions["rootdisk"] = arg
- hostoptions["rootpartition"] = arg+str(1)
- elif opt in ("--rootfs"):
- hostoptions["rootfs"] = arg
- elif opt in ("--rootsize"):
- hostoptions["rootsize"] = arg
- elif opt in ("--datafs"):
- hostoptions["datafs"] = arg
- elif opt in ("--datasize"):
- hostoptions["datasize"] = arg
- elif opt in ("--datadisk"):
- hostoptions["datadisk"] = arg
- elif opt in ("--datapartition"):
- hostoptions["datapartition"] = arg
- elif opt in ("--swapsize"):
- hostoptions["swapsize"] = arg
-
- elif opt in ("-c"):
- validop = ["full_install", "upgrade", "netboot", "find_upgrade"]
- if arg not in validop:
- logging.critical("-c %s is not a valid option", arg)
- sys.exit(2)
- else:
- hostoptions["op"] = arg
- try:
- hostoptions["datadisk"]
- except:
- hostoptions["datadisk"] = hostoptions["rootdisk"]
- hostoptions["datapartition"] = hostoptions["datadisk"]+str(3)
- try:
- hostoptions["datapartition"]
- except:
- hostoptions["datapartition"] = hostoptions["datadisk"]+str(3)
- hostoptions["swappartition"] = hostoptions["rootdisk"] + str(2)
-
-
- if ( hostoptions["op"] == "full_install" ) :
- full_install(hostoptions)
- elif (hostoptions["op"] == "upgrade" ) :
- hostoptions["datafs"] = "no_format"
- find_upgrade()
- upgrade(hostoptions)
- elif (hostoptions["op"] == "find_upgrade" ) :
- find_upgrade()
- return hostoptions
-
-
-#____________________________________________setup the logging______________________________________________________
-LOG_FILENAME = '/tmp/mv_status.log'
-DEBUGLOG = '/tmp/mv_debug.log'
-logging.basicConfig(level=logging.DEBUG,
- format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
- datefmt='%m-%d %H:%M',
- filename=DEBUGLOG,
- filemode='a')
-# define a Handler which writes INFO messages or higher to the sys.stderr
-console = logging.StreamHandler()
-console.setLevel(logging.INFO)
-# set a format which is simpler for console use
-#formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
-formatter = logging.Formatter("%(message)s")
-# tell the handler to use this format
-console.setFormatter(formatter)
-# add the handler to the root logger
-logging.getLogger('').addHandler(console)
-
-#infoformatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
-infoformatter = logging.Formatter("%(message)s")
-infofile = logging.FileHandler(LOG_FILENAME, 'w')
-infofile.setFormatter(infoformatter)
-infofile.setLevel(logging.INFO)
-logging.getLogger('').addHandler(infofile)
-
-#Read in systemconfig
-global systemconfig
-systemconfig = {}
-file_name = "/etc/systemconfig"
-try:
- config_file = open(file_name)
-except:
- logging.debug("%s could not be opened", file_name)
- config_file = ''
-
-for line in config_file:
- line = line.strip()
- if line and line[0] is not "#" and line[-1] is not "=":
- var, val = line.rsplit("=", 1)
- val = val.strip('"')
- systemconfig[var.strip()] = val.strip()
-
-
-if __name__ == "__main__":
- config_file = "mv_config"
- data_config = __import__(config_file, globals(), locals(), [])
- logging.debug("___________START OF DEBUG_________________________")
- cmdoptions = main(sys.argv[1:])
- logging.debug("______cmd line options______")
- for i in cmdoptions.items():
- logging.debug (i)
- logging.debug("______systemconfig______")
- for i in systemconfig.items():
- logging.debug(i)
- logging.debug("______hostoptions______")
- for i in hostoptions.items():
- logging.debug(i)
- pass
-