Changeset 3517 for lliurex-detect/trunk/fuentes/lliurex-detect.install/usr
- Timestamp:
- Feb 2, 2017, 5:19:12 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lliurex-detect/trunk/fuentes/lliurex-detect.install/usr/bin/lliurex-detect
r3121 r3517 1 #!/usr/bin/env python 1 #!/usr/bin/python3 2 3 # 4 # TODO: Detect live systems 5 # 6 # 7 2 8 import sys 3 9 import os 10 import pwd,grp 11 import argparse 12 import glob 4 13 from subprocess import check_output 14 5 15 ltsConfFile="/etc/lts.conf" 6 result=[]7 16 8 def show_help(): 9 print ("Usage: lliurex-detect [-t] [-f]\n\t -t show type\n\t -f show flavour\n") 10 exit(1) 11 #def show_help 17 def detect_live(): 18 if (os.isdir('/rofs') and os.isdir('/cow')): 19 try: 20 check_output(['grep','loop','/proc/mounts']) 21 return None 22 except: 23 raise Exception('Not live') 24 raise Exception('Not live') 25 #def detect_live(): 12 26 13 27 def detect_flavour(): 14 try: 15 flavour=check_output(["lliurex-version","-v"]).split(",")[-1] 16 except Exception as e: 17 print ("Can't check flavour: lliurex-version not installed") 18 exit(1) 19 return flavour.strip() 28 file_name= [ filename for filename in glob.iglob('/usr/share/lliurex-cdd/**/cddflavour') ] 29 try: 30 with open(file_name[0],'r') as fileccd: 31 cdd= [ line.strip() for line in fileccd ] 32 cdd.sort() 33 return cdd 34 except Exception as e: 35 raise Exception('Error getting cddflavour: '+str(e)) 20 36 #def detect_flavour 21 37 38 def detect_num_cdd(): 39 try: 40 num_cdd=check_output(['dpkg-query','--showformat=\'${Version}\'','--show','lliurex-version-timestamp']).decode('utf-8') 41 return num_cdd.strip('\'') 42 except Exception as e: 43 raise Exception('Error '+e) 44 #def detect_num_cdd(): 45 46 def get_history_version(): 47 try: 48 with open('/etc/lliurex-cdd-version','r') as etc_cdd_file: 49 return etc_cdd_file.read() 50 except Exception as e: 51 raise Exception('Error: '+e) 52 #def get_history_version() 53 22 54 def detect_type(): 23 display=os.environ.get('DISPLAY') 24 #On thin clients display is ip+display so it's at least 7 chars 25 if len(display)>= 7: 26 client_type='thin' 27 else: 28 if os.path.exists(ltsConfFile): 29 #Attempt to open lts.conf as is more reliable than check environment 30 try: 31 for line in open (ltsConfFile): 32 if line=="LTSP_FATCLIENT": 33 if "true" in line: 34 client_type="semi" 35 else: 36 if "true" in line: 37 client_type="thin" 38 else: 39 client_type="unknown" 40 break 41 ltsConfFile.close() 42 except: 43 fatclient=os.environ.get('LTSP_FATCLIENT') 44 if fatclient=='true': 45 client_type="semi" 46 else: 47 if fatclient=='false': 48 client_type="thin" 49 else: 50 client_type="unknown" 51 else: 52 client_type='fat' 53 return client_type.rstrip() 55 # 56 # Possible output values: thin,semi,fat,unknown 57 # 58 # 59 display=os.environ.get('DISPLAY') 60 #On thin clients display is ip+display so it's at least 7 chars 61 if len(display)>= 7: 62 client_type='thin' 63 else: 64 if os.path.exists(ltsConfFile): 65 #Attempt to open lts.conf as is more reliable than check environment 66 try: 67 for line in open (ltsConfFile): 68 if line=="LTSP_FATCLIENT": 69 if "true" in line: 70 client_type="semi" 71 else: 72 if "true" in line: 73 client_type="thin" 74 else: 75 client_type="unknown" 76 break 77 ltsConfFile.close() 78 except: 79 fatclient=os.environ.get('LTSP_FATCLIENT') 80 if fatclient=='true': 81 client_type="semi" 82 else: 83 if fatclient=='false': 84 client_type="thin" 85 else: 86 client_type="unknown" 87 else: 88 client_type='fat' 89 return client_type.rstrip() 54 90 #def detect_type 55 91 56 def process_parms(): 57 for parm in sys.argv: 58 error=1 59 if (parm=="-t"): 60 result.append(detect_type()) 61 error=0 62 if (parm=="-f"): 63 result.append(detect_flavour()) 64 error=0 65 if (error==1): 66 show_help() 67 return result 68 #def process_parms 92 def detect_user(user=''): 93 if user == '' or user == None: 94 user_id=os.getuid() 95 user_name=pwd.getpwuid(user_id)[0] 96 else: 97 try: 98 user_uid=pwd.getpwnam(user)[3] 99 except: 100 raise Exception('user not found!') 101 user_name=user 102 #user_info [0]=>username [1]=>pwd [2]=>uid [3]=>gid [4]=>gecos [5]=>homedir [6]=>shell 103 #grp_info [0]=>name [1]=>pwd [2]=>gid [3]=>member 104 grupos = [ group[0] for group in grp.getgrall() if user_name in group[3] ] 105 with open('/etc/passwd','r') as filepwd: 106 localusers=[ line.split(':')[0] for line in filepwd.readlines() ] 69 107 70 if (len(sys.argv) > 1): 71 process_parms() 72 else: 73 result.append(detect_type()) 74 result.append(detect_flavour()) 108 ret=user_name 109 if 'admins' in grupos : 110 ret='*'+str(user_name) 111 if user_name in localusers: 112 ret += '(local)' 113 else: 114 ret += '(ldap)' 115 return ret 116 #def detect_user(): 75 117 118 parser = argparse.ArgumentParser(description='Get information about running environment') 119 parser.add_argument('-a','--all',metavar='',action='store_const',help='Get all information',const=True) 120 parser.add_argument('-s','--session',metavar='',action='store_const',help='Get current session type',const=True) 121 parser.add_argument('-f','--flavour',metavar='',action='store_const',help='Get the flavour of current system',const=True) 122 parser.add_argument('-u','--usertype',metavar='username',nargs='?',const='',help='Get the usertype from current user or from passed username') 123 parser.add_argument('-lt','--ltsp',metavar='',action='store_const',help='Get if it\'s running on ltsp system',const=True) 124 parser.add_argument('-lv','--live',metavar='',action='store_const',help='Get if it\'s running on live system',const=True) 125 # lliurex-version options 126 parser.add_argument('-n','--number',metavar='',action='store_const',const=True,help='Get the cdd number version') 127 parser.add_argument('-v','--version',metavar='',action='store_const',const=True,help='Get the cdd version') 128 parser.add_argument('-t','--test',metavar='cdd_name',help='Test if the cdd is installed') 129 parser.add_argument('--history',metavar='',action='store_const',const=True,help='Get the installed meta\'s history') 130 args=parser.parse_args() 76 131 77 print (','.join(result)) 132 args_all=args.all 133 #Commented due to compatibility with lliurex-version without parameters 134 #args_all=True 135 #if args.all != True: 136 # for arg in vars(args): 137 # if getattr(args,arg) != None: 138 # args_all=False 139 # break 140 arg_none_for_lliurex_version=True 141 if args.all != True: 142 for arg in vars(args): 143 if getattr(args,arg) != None: 144 arg_none_for_lliurex_version=False 145 break 146 147 result=[] 148 try: 149 if args_all or args.session != None: 150 result.append(detect_type()) 151 if args_all or args.flavour != None: 152 result.append(detect_flavour()[-1]) 153 if args_all or args.usertype != None: 154 result.append(detect_user(args.usertype)) 155 if args.ltsp != None: 156 if 'fat' == detect_type(): 157 exit(0) 158 else: 159 exit(1) 160 result.append() 161 if args.live != None: 162 try: 163 detect_live() 164 print('yes') 165 exit(0) 166 except: 167 print('no') 168 exit(1) 169 #lliurex version options 170 if args_all or args.number != None: 171 print(detect_num_cdd()) 172 if args_all or args.version != None: 173 print(', '.join(detect_flavour())) 174 if arg_none_for_lliurex_version: 175 ret=detect_flavour() 176 ret.append(detect_num_cdd()) 177 print(', '.join(ret)) 178 if args.test != None: 179 try: 180 detect_flavour() 181 exit(0) 182 except: 183 exit(1) 184 if args_all or args.history != None: 185 print(get_history_version().rstrip()) 186 #end lliurex-version options 187 188 if len(result) > 0: 189 print (','.join(result)) 190 191 except Exception as e: 192 print('Error '+e) 193 exit(1) 78 194 79 195 exit (0)
Note: See TracChangeset
for help on using the changeset viewer.