diff options
-rwxr-xr-x | abs/core/LinHES-system/PKGBUILD | 4 | ||||
-rw-r--r-- | abs/core/LinHES-system/add_storage.py | 133 |
2 files changed, 85 insertions, 52 deletions
diff --git a/abs/core/LinHES-system/PKGBUILD b/abs/core/LinHES-system/PKGBUILD index 0c2a055..3234ee2 100755 --- a/abs/core/LinHES-system/PKGBUILD +++ b/abs/core/LinHES-system/PKGBUILD @@ -1,6 +1,6 @@ pkgname=LinHES-system pkgver=8.0 -pkgrel=33 +pkgrel=34 arch=('i686' 'x86_64') install=system.install pkgdesc="Everything that makes LinHES an automated system" @@ -94,7 +94,7 @@ md5sums=('5ee78704cab0e88ec58d1aab821fc1aa' 'bc69a520add58ede9b060c73e67ace13' '26fdd26e945f0c187f9fdcf98a7a5bef' '47e093e8cfe4b5b96602358e1f540832' - 'c9f6f08c415b8adee2c45ebeb5c11edb' + 'f2b16283a8c89b08d5e5360f7bf4c026' '2c005d95312018bef80092136f80f254' '6519d209e151cdc39ae7e1091d189c3e' 'ca63946920ba33de1f15abda83e74e40' diff --git a/abs/core/LinHES-system/add_storage.py b/abs/core/LinHES-system/add_storage.py index 3badbdc..600c8fe 100644 --- a/abs/core/LinHES-system/add_storage.py +++ b/abs/core/LinHES-system/add_storage.py @@ -153,7 +153,7 @@ class disk_device: def partition_disk(self): - print " Creating new partiton table" + print " Creating new partition table" cmd = "parted -s -a optimal %s mklabel gpt" %self.block_path runcmd(cmd) cmd = "parted -s -a optimal %s mkpart primary \" 1 -1\"" %self.block_path @@ -190,20 +190,23 @@ class disk_device: break return fstype - - def format_disk(self): + def lookup_format(self): fstab = self.read_fstab() - #lookup format current_media_mount = self.find_options_type(fstab)[1] new_fstype = self.find_fstype(current_media_mount) #setting self.new_fstype so that it can be referenced when setting fstab self.new_fstype = new_fstype + return + + def format_disk(self): + #lookup format + #self.lookup_format() #do format - if new_fstype == "xfs": - cmd = "mkfs -t %s -f %s " %(new_fstype,self.block_partition) + if self.new_fstype == "xfs": + cmd = "mkfs -t %s -f %s " %(self.new_fstype,self.block_partition) else: - cmd = "mkfs -t %s %s " %(new_fstype,self.block_partition) - print " Formating %s with %s" %(self.block_partition,new_fstype) + cmd = "mkfs -t %s %s " %(self.new_fstype,self.block_partition) + print " Formatting %s with %s" %(self.block_partition,self.new_fstype) runcmd(cmd) return @@ -286,8 +289,13 @@ class disk_device: except: os.makedirs(self.new_mount_point) if no_mount == False: - cmd = "mount %s" %self.new_mount_point - runcmd(cmd) + if os.path.ismount(self.new_mount_point): + print " Disk already mounted, will not mount:\n %s" %self.new_mount_point + pass + else: + print " Mounting %s" %self.new_mount_point + cmd = "mount %s" %self.new_mount_point + runcmd(cmd) return def mkdirs(self,FS_LIST): @@ -447,16 +455,16 @@ def prompt_to_add(current_drive,destruction = True): loop = True if destruction : prompt = ''' - Adding the disk will remove all contents on the disk. + ** Adding this disk will remove all contents on the disk. ** + This disk will be partitioned and formatted. - Do you wish enable this disk for MythTV storage(Y/N)?:''' + Enable this disk for MythTV storage (Y/N)?:''' else: prompt = ''' - ** Preserving existing data ** - will not format or partition + ** Preserving existing contents on the disk. ** + This disk will NOT be partitioned or formatted. - Do you wish enable this disk for MythTV storage(Y/N)?: - ''' + Enable this disk for MythTV storage (Y/N)?:''' while loop: str1 = raw_input(prompt) @@ -470,11 +478,17 @@ def prompt_to_add(current_drive,destruction = True): rc = False return rc -def prompt_to_continue(): +def prompt_to_continue(process_list): loop = True #while loop: - print "\n\n\n\n" - str1 = raw_input("\n Ready to add additional storage!\n Press Y to add disk(s), anything else to abort:") + print "\n\n\n Ready to add additional storage!\n" + if destruction: + print "** WARNING: These disk(s) WILL be partitioned and formatted. **\n ** All content on these disk(s) will be erased. **" + else: + print " ** These disk(s) will NOT be partitioned and formatted. **" + for i in process_list: + print " %s" %(i.get_name()) + str1 = raw_input("\n Press Y to add disk(s), any other key to cancel:") #if str1 in ['Y','N','y','n']: # loop = False @@ -484,6 +498,7 @@ def prompt_to_continue(): rc = True else: rc = False + print "\nCancelled: No disk(s) added to your system." print "-----" return rc @@ -499,7 +514,7 @@ def prompt_sg(dir_be_sg,dir_fe_sg): The content on these storage groups will only be available while the system is online. - Do you wish enable Backend Storage Groups(Y/N)?:''' + Enable Backend Storage Groups (Y/N)?:''' while loop: str1 = raw_input(prompt_string) @@ -519,14 +534,14 @@ def prompt_sg(dir_be_sg,dir_fe_sg): if dir_fe_sg != True: loop = True print "" - print "+" * 20 + print " ++++++++++++++++++++" prompt_string=''' Frontend Storage Groups are used for artwork and videos. The content on these storage groups will only be available while the system is online. - Do you wish enable Frontend Storage Groups(Y/N)?:''' + Enable Frontend Storage Groups (Y/N)?:''' while loop: str1 = raw_input(prompt_string) if str1 in ['Y','N','y','n']: @@ -548,7 +563,7 @@ def prompt_sg(dir_be_sg,dir_fe_sg): def remove_pickle(): try: - print "* Resetting list of known disks." + print "\n* Removing list of known disks.\n" os.remove(pickle_file) except: pass @@ -594,6 +609,7 @@ def main(scan_only, destruction, no_mount, install_call , dir_fe_sg, dir_be_sg): dstatus = " Ignoring - Disk has been previously skipped and is mounted:" print "\n" + print " --------------------------------------------------------" print dstatus print " model: %s" %i.model print " location: %s" %i.block_path @@ -604,31 +620,31 @@ def main(scan_only, destruction, no_mount, install_call , dir_fe_sg, dir_be_sg): if not scan_only: print "\n" print " --------------------------------------------------------" - print " Found new disk:" + print " Found New Disk:" print " model: %s" %i.model print " location: %s" %i.block_path print " size: %s " %i.device_size if prompt_to_add(i,destruction) : - print "\n Disk will be added to the storage pool!" + print "\n %s will be added to your system!" %i.model process_list.append(i) else: no_process_list.append(i) else: process_list.append(i) print "\n" - print " End of Scan" + print " Scan Finished" print "-" * 60 if scan_only: if len(process_list) > 0: - print " Unknown or unmounted disks:" + print " Unknown or Unmounted Disks:" f = open('/tmp/scan_report', 'w') for i in process_list: f.write("disk: %s , location: %s ,size: %s \n" %(i.model,i.block_path,i.device_size)) print "\n" print " ---------------------------------------------------------" - print " Found new disk:" + print " Found New Disk:" print " model: %s" %i.model print " location: %s" %i.block_path print " size: %s " %i.device_size @@ -646,7 +662,7 @@ def main(scan_only, destruction, no_mount, install_call , dir_fe_sg, dir_be_sg): system_drive_list.remove(y) write_known_drive_list(system_drive_list) else: - print "\nDid not find any new disks to add.\n" + print "\nThere are no disks to add to your system.\n\nFor more options: add_storage.py --help\n" write_known_drive_list(system_drive_list) #BE = MythBE(db=DB) @@ -660,12 +676,13 @@ def main(scan_only, destruction, no_mount, install_call , dir_fe_sg, dir_be_sg): print "\n Will add %s disk(s) to your system." %len(process_list) dir_be_sg , dir_fe_sg = prompt_sg(dir_be_sg,dir_fe_sg) - if prompt_to_continue() == True: + if prompt_to_continue(process_list) == True: write_known_drive_list(system_drive_list) disk_num = last_disk_num() for i in process_list: print " Disk: %s" %(i.get_name()) disk_num = disk_num + 1 + i.lookup_format() if destruction == True: i.partition_disk() i.format_disk() @@ -862,7 +879,6 @@ class reconstruct_path: cmd = "ln -s %s %s" %(self.mount_point,disk_ln) runcmd(cmd) - def add_fstab(self): #new_fstab_list=['UUID=', 'mount_point', 'auto', 'defaults', '0', '1'] new_fstab_list=['UUID=', 'mount_point', self.fstype, 'defaults', '0', '1'] @@ -897,8 +913,13 @@ class reconstruct_path: except: os.makedirs(self.mount_point) if no_mount == False : - cmd = "mount %s" %self.mount_point - runcmd(cmd) + if os.path.ismount(self.mount_point): + print " Disk already mounted, will not mount:\n %s" %self.mount_point + pass + else: + print " Mounting %s" %self.mount_point + cmd = "mount %s" %self.mount_point + runcmd(cmd) return def write_config(self): @@ -917,14 +938,14 @@ class reconstruct_path: return def reconstruct_mounts(no_mount): - print "Recreating disks based on contents of /etc/storage.d" + print "\nRecreating disks from contents of /etc/storage.d/" for conf_file in glob.glob('%s/*.conf' %storage_dir): print "\n" cf = reconstruct_path(conf_file) #print cf.get_conf() #print cf.get_uuid() - print " %s" %cf.get_mount_point() + print " Recreating %s" %cf.get_mount_point() #print cf.get_shareable() #print cf.get_is_myth_mount() #print cf.get_disk_num() @@ -934,6 +955,7 @@ def reconstruct_mounts(no_mount): cf.symlink_disk() cf.mount_disk(no_mount) + print "\n\nDone recreating disks.\n" pass @@ -941,31 +963,43 @@ def usage(): help=''' add_storage.py finds and sets up disks for MythTV usage. It's a powerful tool that could destroy data if not used correctly, - so please be careful. + please be careful. + + Scanned disks are ignored if they are mounted or have been + previously skipped by add_storage.py. The file system type for disks added by add_storage.py is - automatically set to the type you selected at install. + automatically set to the type selected for the data partition + at install. - Normal operations include (in this order): + Normal operations without options include (in this order): Partition the disk Format the disk Add disk to /etc/fstab Mount the disk Create the directories - Write out the config file to /etc/storage.d + Write out the disk config file to /etc/storage.d/ + Create disk# symlink at /data/storage/ + Create /myth symlink (if applicable) Add new locations to MythTV storage groups Options: - --no_mount: Do not mount the disk, only add it to /etc/fstab - and create the directory. + --add_be_sg: Create the storage group directories for backup, + tv and streaming. Excludes artwork and video. + --add_fe_sg: Create the storage group directories for artwork + and video. Excludes backup, tv and streaming. + -h, --help: Show this help message. + --new_init: Erase the list of known disks and rescan. --no_destruction: Will not partition or format the disk. - This can be used to import disks from other systems. - --new_init: Erase the list of new disks and rescan. + All other normal operations will be performed. + Can be used to import disks from other systems. + --no_mount: Do not mount the disk. + All other normal operations will be performed. + --reconstruct: Recreate mount point, /myth symlink, fstab entry, + /data/storage/disk# symlink, and mount the disk. + no_mount is the only option that works with + reconstruct. --report: Scan disks and print new found disks. - --add_fe_sg: Create the storage group directories for artwork - and video. Excludes backup, tv and streaming. - --add_be_sg: Create the storage group directories for backup, - tv and streaming. ''' print help sys.exit(0) @@ -988,9 +1022,9 @@ if __name__ == "__main__": pass if not os.geteuid()==0: - sys.exit("\nRoot access is required to run this program\n") + sys.exit("\nRoot access is required to run this program.\n") - if "--help" in sys.argv: + if "--help" in sys.argv or "-h" in sys.argv: usage() if "--install_call" in sys.argv: @@ -1014,7 +1048,6 @@ if __name__ == "__main__": if "--add_be_sg" in sys.argv: dir_be_sg = True - if "--reconstruct" in sys.argv: reconstruct = True |