source: lliurex-up/trunk/fuentes/lliurex-up/usr/share/lliurex-up/LliurexUpConnect.py @ 3525

Last change on this file since 3525 was 3525, checked in by jrpelegrina, 3 years ago

Fix code

File size: 14.9 KB
Line 
1import xmlrpclib 
2import os
3import shutil
4import subprocess
5import socket
6import threading
7import datetime
8import math
9#from math import pi
10
11import lliurex.lliurexup as LliurexUpCore
12
13from gi.repository import Gtk, Gdk, GObject, GLib, PangoCairo, Pango
14
15import signal
16signal.signal(signal.SIGINT, signal.SIG_DFL)
17
18
19class LliurexUpConnect():
20
21        def __init__(self):
22
23                self.llxUpCore=LliurexUpCore.LliurexUpCore()
24                GObject.threads_init()
25                log_msg="------------------------------------------\n"+"LLIUREX-UP-GUI STARTING AT: " + datetime.datetime.today().strftime("%d/%m/%y %H:%M:%S") +"\n------------------------------------------"
26                self.log(log_msg)
27               
28
29
30                #self.saveTargetMetapackagePath=os.path.join(self.llxUpCore.processPath,"targetMetapackage")
31                self.preactions_token=os.path.join(self.llxUpCore.processPath,'preactions_token')
32                self.upgrade_token=os.path.join(self.llxUpCore.processPath,'upgrade_token')
33                self.installflavour_token=os.path.join(self.llxUpCore.processPath,'installflavour_token')
34                self.postactions_token=os.path.join(self.llxUpCore.processPath,'postactions_token')
35                self.errorpostaction_token=os.path.join(self.llxUpCore.processPath,'errorpostaction_token')
36                self.errorupgrade_token=os.path.join(self.llxUpCore.processPath,'errorupgrade_token')
37                self.finalupgrade_token=os.path.join(self.llxUpCore.processPath,'finalupgrade_token')
38                self.checkInitialFlavour()
39
40
41        #def __init__   
42
43
44        def checkInitialFlavour(self):
45
46                self.targetMetapackage=self.llxUpCore.checkInitialFlavour()
47                log_msg="Initial check metapackage. Metapackage to install: " + str(self.targetMetapackage)
48                self.log(log_msg)
49                log_msg="Get initial metapackage: " + str(self.llxUpCore.previuosFlavours)
50                self.log(log_msg)
51                return self.targetMetapackage
52
53                # try:
54                #       self.targetMetapackage=self.llxUpCore.checkFlavour()
55                #       log_msg="Initial check metapackage. Metapackage to install: " + str(self.targetMetapackage)
56                #       self.log(log_msg)
57                       
58                #       #if self.targetMetapackage !=None:
59                #       self.metapackageRef=self.llxUpCore.metapackageRef
60                #       if len(self.metapackageRef)==0:
61                #               self.llxUpCore.getTargetMetapackage()
62         #              self.metapackageRef=sorted(self.metapackageRef)
63                         
64                #       self.previousFlavours=self.llxUpCore.previuosFlavours
65                #       if len(self.previousFlavours)==0:
66                #               self.llxUpCore.getPreviuosFlavours()
67                       
68                #       log_msg="Get initial flavours: " + str(self.previousFlavours)
69                #       self.log(log_msg)
70                 
71                # except Exception as e:
72                #       log_msg="Initial check metapackage. Error: " + str(e)
73                #       self.log(log_msg)
74
75                # return self.targetMetapackage
76
77        #def checkFlavoour
78
79
80        # def saveTargetMetapackage(self):
81
82        #       try:
83        #               aux=open(self.saveTargetMetapackagePath,'w')
84        #               x=self.targetMetapackage.split("-")[2]
85        #               aux.write(x+"\n")
86        #               x="edu"
87        #               aux.write(x+"\n")
88        #               aux.close()
89
90        #       except Exception as e:
91        #               print str(e)   
92
93        # def requiresInstallFlavour(self):
94
95        #       log_msg="Get update flavours: " + str(self.llxUpCore.flavours)
96        #       self.log(log_msg)
97        #       flavourToInstall=self.llxUpCore.requiresInstallFlavour()
98
99        #       if flavourToInstall !=None:
100        #               log_msg="Requires Install this Flavour: " + str(flavourToInstall)
101        #               self.log(log_msg)
102
103        #       else:
104        #               log_msg="Requires Install Flavour: No"
105        #               self.log(log_msg)
106
107        #       return flavourToInstall
108                # self.flavours=self.llxUpCore.flavours
109                # log_msg="Get update flavours: " + str(self.flavours)
110                # self.log(log_msg)
111
112                # if not 'None' in self.previousFlavours:
113                #       if self.previousFlavours !=self.flavours:
114                #               flavourToInstall=self.parseFlavourToInstall(self.previousFlavours)
115                #               log_msg="Requires Install this Flavour: " + str(flavourToInstall)
116                #               self.log(log_msg)
117                               
118                #       else:
119                #               log_msg="Requires Install Flavour: No"
120                #               self.log(log_msg)       
121                                                       
122                # else:
123                #       log_msg="Flavours reference: " + str(self.metapackageRef)
124                #       self.log(log_msg)
125                #       if self.metapackageRef != self.flavours:
126                #               flavourToInstall=self.parseFlavourToInstall(self.metapackageRef)
127
128                #               log_msg="Requires Install this Flavour: " + str(flavourToInstall)
129                #               self.log(log_msg)
130                #       else:
131                #               log_msg="Requires Install Flavour: No"
132                #               self.log(log_msg)
133
134                # return flavourToInstall                                               
135                       
136        #def requiresInstallFlavour
137       
138        # def parseFlavourToInstall(self,flavours):
139       
140        #       parse_flavour=""
141
142        #       for item in flavours:
143        #               if item != "edu":
144        #                       parse_flavour=parse_flavour + " " + "lliurex-meta-" + item
145
146        #       return parse_flavour
147                       
148        #def parseFlavourToInstall(
149       
150        def canConnectToLliurexNet(self):
151
152                if "lliurex-meta-server" == self.targetMetapackage or "server" in self.llxUpCore.previuosFlavours:
153                        can_connect=self.llxUpCore.canConnectToLliurexNet()
154                        if can_connect:
155                                log_msg="Can connect to lliurex.net: True"
156                                self.log(log_msg)
157                                return True 
158                        else:
159                                log_msg="Can connect to lliurex.net: False"
160                                self.log(log_msg)
161                                return False
162                       
163                else:
164                        return True             
165
166        #def canConnectToLliurexNet
167
168
169        def initActionsScript(self):
170               
171                arg="initActions"
172                command=self.llxUpCore.initActionsScript(arg)
173               
174                try:
175                        os.system(command)
176                        log_msg="Exec Init-Actions"
177                        self.log(log_msg)
178                        return True
179
180                except Exception as e:
181                        log_msg="Exec Init-Actions.Error: " +str(e)
182                        self.log(log_msg)
183                        return False           
184
185        #def initActionsScript 
186               
187        def isLliurexUpIsUpdated(self):
188
189                try:
190                        is_lliurexup_updated=self.llxUpCore.isLliurexUpIsUpdated()
191                        log_msg="Checking lliurex-up. Is lliurex-up updated: "+ str(is_lliurexup_updated)
192                        self.log(log_msg)
193                        return is_lliurexup_updated
194               
195                except Exception as e:
196                        log_msg="Checking lliurex-up. Error: " + str(e)
197                        self.log(log_msg)
198                        return True
199
200        #def isLliurexUpIsUpdated
201
202        def installLliurexUp(self):
203
204                try:
205                        is_lliurexup_installed=self.llxUpCore.installLliurexUp()
206                        returncode=is_lliurexup_installed['returncode']
207                        error=is_lliurexup_installed['stderrs']
208                        log_msg="Installing lliurex-up. Returncode: " + str(returncode) + ". Error: " + str(error)
209                        self.log(log_msg)
210                        return returncode
211                       
212                except Exception as e:
213                        log_msg="Installing lliurex-up. Error: " + str(e)
214                        self.log(log_msg)
215                        return True
216
217        #def installLliurexUp   
218
219       
220        def lliurexMirrorIsUpdated(self):
221
222                try:
223                        is_mirror_updated=self.llxUpCore.lliurexMirrorIsUpdated()
224
225                        if is_mirror_updated !=None:
226                       
227                                if is_mirror_updated['action']=='update':
228                                        log_msg="Checking mirror. Is mirror update: False"
229                                        self.log(log_msg)
230                                        return False
231                                else: 
232                                        log_msg="Checking mirror. Is mirror update: " + is_mirror_updated['action']
233                                        self.log(log_msg)
234                                        return True
235                        else:
236                                log_msg="Checking mirror. Is mirror update: None"
237                                self.log(log_msg)
238                                return True
239               
240               
241                except Exception as e:
242                        log_msg="Checking mirror. Error: " + str(e)
243                        self.log(log_msg)
244                        return True     
245
246        #def lliurexMirrorIsUpdated             
247
248        def lliurexMirrorIsRunning(self):
249
250                try:
251                        is_lliurexmirror_running=self.llxUpCore.lliurexMirrorIsRunning()
252                        return is_lliurexmirror_running
253
254                except Exception as e:
255                        log_msg="Updating mirror. Error: " + str(e)
256                        self.log(log_msg)
257                        return False
258
259        #def lliurexMirrorIsRunning             
260
261        def getPercentageLliurexMirror(self):
262
263                try:
264                        percentage_mirror=self.llxUpCore.getPercentageLliurexMirror()
265                        if percentage_mirror != None:
266                                return percentage_mirror
267                        else:
268                                return 0       
269               
270                except Exception as e:
271                        return 0       
272
273
274        #def getPercentageLliurexMirror
275
276        def getLliurexVersionLocal(self):
277               
278                try:
279                       
280                        self.lliurexVersionLocal=self.llxUpCore.getLliurexVersionLocal()
281                        log_msg="Get LliurexVersion installed: " + str(self.lliurexVersionLocal["installed"])
282                        self.log(log_msg)
283                        log_msg="Get LliurexVersion candidate from Local repository: " + str(self.lliurexVersionLocal["candidate"])
284                        self.log(log_msg)
285                        #self.lliurexVersionLocal=self.lliurexVersionLocal["candidate"]
286
287                except Exception as e:
288                        log_msg="Get LliurexVersion from Local repository. Error: " + str(e)
289                        self.log(log_msg)
290                        self.lliurexVersionLocal={"installed":None,"candidate":None}
291
292                return self.lliurexVersionLocal
293
294        #def getLliurexVersionLocal(
295       
296        def getLliurexVersionNet(self):
297               
298                try:
299                        self.lliurexVersionNet=self.llxUpCore.getLliurexVersionLliurexNet()["candidate"]
300                        log_msg="Get LliurexVersion candidate from Lliurex Net: " + str(self.lliurexVersionNet)
301                        self.log(log_msg)
302                       
303
304                except Exception as e:
305                        log_msg="Get LliurexVersion from Lliurex Net. Error: " + str(e)
306                        self.log(log_msg)
307                        self.lliurexVersionNet=None
308
309                return self.lliurexVersionNet   
310
311        #def getLliurexVersionNet
312       
313        def installInitialFlavour(self,flavourToInstall):
314
315                try:
316                        is_flavour_installed=self.llxUpCore.installInitialFlavour(flavourToInstall)
317                        returncode=is_flavour_installed['returncode']
318                        error=is_flavour_installed['stderrs']
319                        log_msg="Install initial metapackage:" + flavourToInstall + ": Returncode: " + str(returncode) + " Error: " + str(error)
320                        self.log(log_msg)
321                        return returncode
322
323                except Exception as e:
324                        print str(e)
325                        log_msg="Install initial metapackage: " + flavourToInstall + ". Error: " + str(e)
326                        self.log(log_msg)
327                        return 100
328                       
329        #def installInitialFlavour
330
331        def getPackagesToUpdate(self):
332               
333                #ref_flavour=["lliurex-meta-server","lliurex-meta-client", "lliurex-meta-desktop", "lliurex-meta-music", "lliurex-meta-pyme", "lliurex-meta-infantil"]
334                packages_parse=[]
335                self.total_size=0
336                #self.incorrect_flavours=[]
337               
338                try:
339                        packages=self.llxUpCore.getPackagesToUpdate()
340                        if len(packages)>0:
341                                for item in packages:
342                                        version=packages[item]['candidate']
343                                        size=self.getSizePackagesToUpdate(item)
344                                        install=str(packages[item]['install'])
345                                        packages_parse.append(item+";"+version+";"+size+";"+install)
346                                       
347                        log_msg="Get packages to update. Number of packages: " + str(len(packages)) 
348                        self.log(log_msg)               
349
350                except Exception as e:
351                        log_msg="Get packages to update. Error: " + str(e)
352                        self.log(log_msg)
353
354                self.total_size=self.convert_size(self.total_size)     
355                return packages_parse,self.total_size
356                       
357        #def getPackagesToUpdate
358       
359        def getSizePackagesToUpdate(self,pkg):
360                size=0
361                try:
362                        command='apt-cache show ' + pkg + ' |grep "^Size:" |cut -d " " -f2 |head -1'
363                        p=subprocess.Popen(command,shell=True,stdout=subprocess.PIPE)
364                        size=p.stdout.readline().strip()
365                        self.total_size=(self.total_size)+int(size)
366                        size=self.convert_size(size)
367                        return size
368
369                except Exception as e:
370                        print e
371                        return self.convert_size(size) 
372       
373
374        def convert_size(self,size_bytes):
375
376                size_bytes=float(size_bytes)
377                if (size_bytes == 0):
378                        return '0B'
379
380                size_name = ("B", "KB", "MB", "GB")
381                i = int(math.floor(math.log(size_bytes, 1024)))
382                p = math.pow(1024, i)
383                s = round(size_bytes/p,)
384                s=int(s)
385                return '%s %s' % (s, size_name[i])
386
387       
388        def checkIncorrectFlavours(self):
389
390                incorrectFlavours=self.llxUpCore.checkIncorrectFlavours()
391
392                if incorrectFlavours:
393                        log_msg="Checking incorrect metapackages. Others metapackages detected: " + str(incorrectFlavours)
394                        self.log(log_msg)
395                else:
396                        log_msg="Checking incorrect metapackages. Others metapackages not detected"
397                        self.log(log_msg)
398
399                return incorrectFlavours       
400
401        #def checkIncorrectFlavours     
402
403        def preActionsScript(self):
404
405                self.preActions=self.llxUpCore.preActionsScript()
406                self.preActions=self.preActions + ' ;touch ' + self.preactions_token + '\n'
407                log_msg="Exec Pre-Actions"
408                self.log(log_msg)
409                return self.preActions
410
411        #def preActionsScript   
412
413        def distUpgradeProcess(self):
414               
415                self.distupgrade=self.llxUpCore.distUpgradeProcess()   
416                self.distupgrade='DEBIAN_FRONTEND=gnome DEBIAN_PRIORITY=high ' +self.distupgrade + ' ;touch ' + self.upgrade_token + '\n'
417                log_msg="Exec Dist-uggrade"
418                self.log(log_msg)
419                return self.distupgrade
420
421        #def distUpgradeProcess
422       
423        def checkErrorDistUpgrade(self):
424
425                try:
426                        error=self.llxUpCore.checkErrorDistUpgrade()
427                        if error:
428                                log_msg="Dist-upgrade process ending with errors"
429                                self.log(log_msg)
430                        else:                   
431                                log_msg="Dist-upgrade process ending OK"
432                                self.log(log_msg)
433
434                except Exception as e:
435                        print e
436                        log_msg="Error checking distupgrade. Error: " + str(e)
437                        self.log(log_msg)
438                        error=True
439
440                return error   
441                # count=0
442                # error=False
443
444                # if os.path.exists(self.errorpostaction_token):
445                #       aux = open(self.errorpostaction_token,'r')
446                #       lines = aux.readlines()
447                #       for x in lines:
448                #               if 'E: ' in x:
449                #                       count=count+1
450                #       aux.close()
451
452                # if count==0:
453                #       cmd='dpkg -l | grep "^i[^i]" >' + self.errorupgrade_token
454                #       os.system(cmd)
455               
456                #       if os.path.exists(self.errorupgrade_token):
457                #               aux = open(self.errorupgrade_token,'r')
458                #               lines = aux.readlines()
459                #               aux.close()
460                       
461                #               if len(lines)>0:
462                #                       error=True
463                #                       #log_msg="Dist-upgrade process ending with errors"
464                #                       #self.log(log_msg)
465                #               else:
466                #                       j=0
467                #                       cmd='apt-get dist-upgrade -sV >' + self.finalupgrade_token
468                #                       os.system(cmd)
469                #                       if os.path.exists(self.finalupgrade_token):
470                #                               aux = open(self.finalupgrade_token,'r')
471                #                               lines = aux.readlines()
472                #                               aux.close()
473
474                #                               for x in lines:
475                #                                       if 'Inst' in x:
476                #                                               j=j+1
477
478                #                               if j>0:
479                #                                       error=True             
480                # else:
481                #       error=True
482
483                # if error:
484                #       log_msg="Dist-upgrade process ending with errors"
485                #       self.log(log_msg)
486                # else:                 
487                #       log_msg="Dist-upgrade process ending OK"
488                #       self.log(log_msg)
489       
490                # return error
491               
492
493        #def checkErrorDistUpgrade
494       
495        def getStatusPackage(self):
496
497                command='dpkg -l |grep "^i[i]"'
498                packages_status=[]
499                try:
500                        p = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE)
501                        for line in iter(p.stdout.readline,""):
502                                tmp=str(line.strip().split()[1].split(":")[0])+"_"+str(line.strip().split()[2])
503                                packages_status.append(tmp)
504
505                except Exception as e:
506                        print str(e)
507
508                return packages_status                                         
509 
510        def checkFinalFlavour(self):
511
512                flavourToInstall=None
513                try:
514               
515                        flavourToInstall=self.llxUpCore.checkFinalFlavour()
516                        log_msg="Final check metapackage. Metapackage to install: " + str(flavourToInstall)
517                        self.log(log_msg)
518
519                except Exception as e:
520                        log_msg="Final check metapackage. Error: " + str(e)
521                        self.log(log_msg)
522
523                return flavourToInstall
524
525       
526        #def checkFinalFlavour
527       
528        def installFinalFlavour(self,flavourToInstall):
529
530                self.command=self.llxUpCore.installFinalFlavour(flavourToInstall)
531                self.command='DEBIAN_FRONTEND=gnome DEBIAN_PRIORITY=high ' +self.command + ' ;touch ' + self.installflavour_token + ' ; exit'+' \n'
532                log_msg="Install final metapackage"
533                self.log(log_msg)
534                return self.command
535
536        #def installFinalFlavour
537
538        def postActionsScript(self):
539
540                self.postActions=self.llxUpCore.postActionsScript()
541                self.postActions=self.postActions + ' 2> >(tee ' + self.llxUpCore.errorpostaction_token + ') ;touch ' + self.postactions_token + ' \n'
542                #self.postActions=self.postActions + ' ;touch ' + self.postactions_token + ' \n'
543
544                log_msg="Exec Post-Actions"
545                self.log(log_msg)
546                return self.postActions
547
548        #def postActionsScript
549
550        def cleanEnvironment(self):
551               
552                try:
553                        self.llxUpCore.cleanEnvironment()
554                        log_msg="Clean environment: OK"
555                        self.log(log_msg)
556
557                except Exception as e:
558                        log_msg="Clean environment. Error :" + str(e)
559                        self.log(log_msg)                               
560
561        #def cleanEnvironment
562                       
563        def log(self,msg):
564               
565                log_file="/var/log/lliurex-up.log"
566                f=open(log_file,"a+")
567                f.write(msg + '\n')
568                f.close()
569
570        #def log                       
Note: See TracBrowser for help on using the repository browser.