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

Last change on this file since 3231 was 3231, checked in by jrpelegrina, 4 years ago

Fix code

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