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

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

Fix

File size: 12.5 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                        is_lliurexup_installed=self.llxUpCore.installLliurexUp()
179                        isreturncode=is_lliurexup_installed['returncode']
180                        error=is_lliurex_up_installed['stderrs']
181                        log_msg="Installing lliurex-up. Returncode: " + str(returncode) + ". Error: " + str(error)
182                        self.log(log_msg)
183                        return returncode
184                       
185                except Exception as e:
186                        log_msg="Installing lliurex-up. Error: " + str(e)
187                        self.log(log_msg)
188                        return True
189
190        #def installLliurexUp   
191
192       
193        def lliurexMirrorIsUpdated(self):
194
195                try:
196                        is_mirror_updated=self.llxUpCore.lliurexMirrorIsUpdated()
197
198                        if is_mirror_updated !=None:
199                       
200                                if is_mirror_updated['action']=='update':
201                                        log_msg="Checking mirror. Is mirror update: False"
202                                        self.log(log_msg)
203                                        return False
204                                else: 
205                                        log_msg="Checking mirror. Is mirror update: " + is_mirror_updated['action']
206                                        self.log(log_msg)
207                                        return True
208                        else:
209                                log_msg="Checking mirror. Is mirror update: None"
210                                self.log(log_msg)
211                                return True
212               
213               
214                except Exception as e:
215                        log_msg="Checking mirror. Error: " + str(e)
216                        self.log(log_msg)
217                        return True     
218
219        #def lliurexMirrorIsUpdated             
220
221        def lliurexMirrorIsRunning(self):
222
223                try:
224                        is_lliurexmirror_running=self.llxUpCore.lliurexMirrorIsRunning()
225                        return is_lliurexmirror_running
226
227                except Exception as e:
228                        log_msg="Updating mirror. Error: " + str(e)
229                        self.log(log_msg)
230                        return False
231
232        #def lliurexMirrorIsRunning             
233
234        def getPercentageLliurexMirror(self):
235
236                try:
237                        percentage_mirror=self.llxUpCore.getPercentageLliurexMirror()
238                        if percentage_mirror != None:
239                                return percentage_mirror
240                        else:
241                                return 0       
242               
243                except Exception as e:
244                        return 0       
245
246
247        #def getPercentageLliurexMirror
248
249        def getLliurexVersionLocal(self):
250               
251                try:
252                       
253                        self.lliurexVersionLocal=self.llxUpCore.getLliurexVersionLocal()
254                        log_msg="Get LliurexVersion installed: " + self.lliurexVersionLocal["installed"]
255                        self.log(log_msg)
256                        log_msg="Get LliurexVersion candidate from Local repository: " + self.lliurexVersionLocal["candidate"]
257                        self.log(log_msg)
258                        #self.lliurexVersionLocal=self.lliurexVersionLocal["candidate"]
259
260                except Exception as e:
261                        log_msg="Get LliurexVersion from Local repository. Error: " + str(e)
262                        self.log(log_msg)
263                        self.lliurexVersionLocal=None
264
265                return self.lliurexVersionLocal
266
267        #def getLliurexVersionLocal(
268       
269        def getLliurexVersionNet(self):
270               
271                try:
272                        self.lliurexVersionNet=self.llxUpCore.getLliurexVersionLliurexNet()["candidate"]
273                        log_msg="Get LliurexVersion candidate from Lliurex Net: " + self.lliurexVersionNet
274                        self.log(log_msg)
275                       
276
277                except Exception as e:
278                        log_msg="Get LliurexVersion from Lliurex Net. Error: " + str(e)
279                        self.log(log_msg)
280                        self.lliurexVersionNet=None
281
282                return self.lliurexVersionNet   
283
284        #def getLliurexVersionNet
285       
286        def installInitialFlavour(self,flavourToInstall):
287
288                try:
289                        is_flavour_installed=self.llxUpCore.installInitialFlavour(flavourToInstall)
290                        returncode=is_flavour_installed['returncode']
291                        error=is_flavour_installed['stderrs']
292                        log_msg="Install initial flavour:" + flavourToInstall + ": Returncode: " + str(returncode) + " Error: " + str(error)
293                        self.log(log_msg)
294                        return returncode
295
296                except Exception as e:
297                        print str(e)
298                        log_msg="Install initial flavour: " + flavourToInstall + ". Error: " + str(e)
299                        self.log(log_msg)
300                        return
301                       
302        #def installInitialFlavour
303
304        def getPackagesToUpdate(self):
305               
306                ref_flavour=["lliurex-meta-server","lliurex-meta-client", "lliurex-meta-desktop", "lliurex-meta-music", "lliurex-meta-pyme", "lliurex-meta-infantil"] 
307                packages_parse=[]
308                self.incorrect_flavours=[]
309               
310                try:
311                        packages=self.llxUpCore.getPackagesToUpdate()
312                        if len(packages)>0:
313                                for item in packages:
314                                        version=packages[item]
315                                        packages_parse.append(item+";"+version['candidate']+";"+'20Mb')
316                                        if item in ref_flavour:
317                                                self.incorrect_flavours.append(item)
318
319                        log_msg="Get packages to update. Number of packages: " + str(len(packages)) 
320                        self.log(log_msg)               
321
322                except Exception as e:
323                        log_msg="Get packages to update. Error: " + str(e)
324                        self.log(log_msg)
325
326                return packages_parse
327                       
328        #def getPackagesToUpdate
329
330        def checkIncorrectFlavours(self):
331               
332                count=0
333
334                if len(self.incorrect_flavours)>0:
335
336                        for item in self.incorrect_flavours:
337                                if self.targetMetapackage != None:
338                                        print self.targetMetapackage
339                                        if item != self.targetMetapackage:
340                                                count=count+1
341                                else:
342                                        meta=item.split("-")[2]
343                                        if 'None' in self.previousFlavours:
344                                                if not meta in self.metapackageRef:
345                                                        count=count+1
346                                        else:           
347                                                if not meta in self.previousFlavours:
348                                                        count=count+1
349
350                if count>0:
351                        log_msg="Checking incorrect flavours. Others flavours detected: " + str(self.incorrect_flavours)
352                        self.log(log_msg)
353                        return True
354
355                else:
356                        log_msg="Checking incorrect flavours. Others flavours no detected"
357                        self.log(log_msg)
358                        return False
359       
360        #def checkIncorrectFlavours
361
362        def preActionsScript(self):
363
364                self.preActions=self.llxUpCore.preActionsScript()
365                self.preActions=self.preActions + ' ;touch ' + self.preactions_token + '\n'
366                log_msg="Exec Pre-Actions"
367                self.log(log_msg)
368                return self.preActions
369
370        #def preActionsScript   
371
372        def distUpgradeProcess(self):
373               
374                self.distupgrade=self.llxUpCore.distUpgradeProcess()   
375                self.distupgrade=self.distupgrade + ' ;touch ' + self.upgrade_token + '\n'
376                log_msg="Exec Dist-uggrade"
377                self.log(log_msg)
378                return self.distupgrade
379
380        #def distUpgradeProcess
381       
382        def checkErrorDistUpgrade(self):
383
384                count=0
385                error=False
386
387                if os.path.exists(self.errorpostaction_token):
388                        aux = open(self.errorpostaction_token,'r')
389                        lines = aux.readlines()
390                        for x in lines:
391                                if 'E: ' in x:
392                                        count=count+1
393                        aux.close()
394
395                if count==0:
396                        cmd='dpkg -l | grep "^i[^i]" >' + self.errorupgrade_token
397                        os.system(cmd)
398               
399                        if os.path.exists(self.errorupgrade_token):
400                                aux = open(self.errorupgrade_token,'r')
401                                lines = aux.readlines()
402                                aux.close()
403                       
404                                if len(lines)>0:
405                                        error=True
406                                        #log_msg="Dist-upgrade process ending with errors"
407                                        #self.log(log_msg)
408                                else:
409                                        j=0
410                                        cmd='apt-get dist-upgrade -sV >' + self.finalupgrade_token
411                                        os.system(cmd)
412                                        if os.path.exists(self.finalupgrade_token):
413                                                aux = open(self.finalupgrade_token,'r')
414                                                lines = aux.readlines()
415                                                aux.close()
416
417                                                for x in lines:
418                                                        if 'Inst' in x:
419                                                                j=j+1
420
421                                                if j>0:
422                                                        error=True             
423                else:
424                        error=True
425
426                if error:
427                        log_msg="Dist-upgrade process ending with errors"
428                        self.log(log_msg)
429                else:                   
430                        log_msg="Dist-upgrade process ending OK"
431                        self.log(log_msg)
432       
433                return error
434               
435
436        #def checkErrorDistUpgrade
437       
438        def checkFinalFlavour(self):
439               
440                flavourToInstall=None
441               
442                try:
443                        self.targetMetapackage=self.llxUpCore.checkFlavour()
444                        log_msg="Final check metapackage. Metapackage to install: " + str(self.targetMetapackage)
445                        self.log(log_msg)
446                        if self.targetMetapackage==None:
447                                flavourToInstall=self.requiresInstallFlavour()
448                        else:
449                                flavourToInstall=self.targetMetapackage         
450
451                except Exception as e:
452                        log_msg="Final check metapackage. Error: " + str(e)
453                        self.log(log_msg)
454
455                return flavourToInstall
456
457       
458        #def checkFinalFlavour
459       
460        def installFinalFlavour(self,flavourToInstall):
461
462                self.command=self.llxUpCore.installFinalFlavour(flavourToInstall)
463                self.command=self.command + ' ;touch ' + self.installflavour_token + '\n'
464                log_msg="Install final flavour"
465                self.log(log_msg)
466                return self.command
467
468        #def installFinalFlavour
469
470        def postActionsScript(self):
471
472                self.postActions=self.llxUpCore.postActionsScript()
473                self.postActions=self.postActions + ' 2> >(tee ' + self.errorpostaction_token + ') ;touch ' + self.postactions_token + '\n'
474                log_msg="Exec Post-Actions"
475                self.log(log_msg)
476                return self.postActions
477
478        #def postActionsScript
479
480        def cleanEnvironment(self):
481               
482                try:
483                        self.llxUpCore.cleanEnvironment()
484                        log_msg="Clean environment: OK"
485                        self.log(log_msg)
486
487                except Exception as e:
488                        log_msg="Clean environment. Error :" + str(e)
489                        self.log(log_msg)                               
490
491        #def cleanEnvironment
492                       
493        def log(self,msg):
494               
495                log_file="/var/log/lliurex-up.log"
496                f=open(log_file,"a+")
497                f.write(msg + '\n')
498                f.close()
499
500        #def log                       
Note: See TracBrowser for help on using the repository browser.