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

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

WIP packages changelog info

File size: 12.8 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                self.previousFlavours=self.llxUpCore.previousFlavours
50                log_msg="Get initial metapackage: " + str(self.previousFlavours)
51                self.log(log_msg)
52                return self.targetMetapackage
53
54        #def checkFlavoour
55
56
57        def canConnectToLliurexNet(self):
58
59                can_connect=self.llxUpCore.canConnectToLliurexNet()
60
61                if can_connect:
62                        log_msg="Can connect to lliurex.net: True"
63                        self.log(log_msg)
64                        return True
65
66                else:
67                        log_msg="Can connect to lliurex.net: False"
68                        self.log(log_msg)
69                        if "lliurex-meta-server" == self.targetMetapackage or "server" in self.llxUpCore.previousFlavours:
70                                return False
71                        else:
72                                return True             
73
74        #def canConnectToLliurexNet
75
76
77        def initActionsScript(self):
78               
79                arg="initActions"
80                command="DEBIAN_FRONTEND=gnome DEBIAN_PRIORITY=high " + self.llxUpCore.initActionsScript(arg)
81               
82                try:
83                        os.system(command)
84                        log_msg="Exec Init-Actions"
85                        self.log(log_msg)
86                        return True
87
88                except Exception as e:
89                        log_msg="Exec Init-Actions.Error: " +str(e)
90                        self.log(log_msg)
91                        return False           
92
93        #def initActionsScript 
94
95        def clientCheckingMirrorIsRunning(self):
96
97                is_mirror_running_inserver=self.llxUpCore.clientCheckingMirrorIsRunning()
98               
99                if is_mirror_running_inserver['ismirrorrunning'] ==None:
100                        log_msg="Checking if mirror in server is being updated. Error: " + str(is_mirror_running_inserver['exception'])
101                        self.log(log_msg)
102
103                else:
104                        if is_mirror_running_inserver['ismirrorrunning']==True:
105                                log_msg="Mirror is being udpated in server. Unable to update the system"
106                                self.log(log_msg)
107                               
108               
109                return is_mirror_running_inserver['ismirrorrunning']
110
111        #def clientCheckingMirrorIsRunning
112               
113        def isLliurexUpIsUpdated(self):
114
115                try:
116                        is_lliurexup_updated=self.llxUpCore.isLliurexUpIsUpdated()
117                        log_msg="Checking lliurex-up. Is lliurex-up updated: "+ str(is_lliurexup_updated)
118                        self.log(log_msg)
119                        return is_lliurexup_updated
120               
121                except Exception as e:
122                        log_msg="Checking lliurex-up. Error: " + str(e)
123                        self.log(log_msg)
124                        return True
125
126        #def isLliurexUpIsUpdated
127
128        def installLliurexUp(self):
129
130                try:
131                        is_lliurexup_installed=self.llxUpCore.installLliurexUp()
132                        returncode=is_lliurexup_installed['returncode']
133                        error=is_lliurexup_installed['stderrs']
134                        log_msg="Installing lliurex-up. Returncode: " + str(returncode) + ". Error: " + str(error)
135                        self.log(log_msg)
136                        return returncode
137                       
138                except Exception as e:
139                        log_msg="Installing lliurex-up. Error: " + str(e)
140                        self.log(log_msg)
141                        return True
142
143        #def installLliurexUp   
144
145       
146        def lliurexMirrorIsUpdated(self):
147
148                try:
149                        is_mirror_updated=self.llxUpCore.lliurexMirrorIsUpdated()
150
151                        if is_mirror_updated !=None:
152                       
153                                if is_mirror_updated['action']=='update':
154                                        log_msg="Checking mirror. Is mirror update: False"
155                                        self.log(log_msg)
156                                        return False
157                                else: 
158                                        log_msg="Checking mirror. Is mirror update: " + is_mirror_updated['action']
159                                        self.log(log_msg)
160                                        return True
161                        else:
162                                log_msg="Checking mirror. Is mirror update: None"
163                                self.log(log_msg)
164                                return True
165               
166               
167                except Exception as e:
168                        log_msg="Checking mirror. Error: " + str(e)
169                        self.log(log_msg)
170                        return True     
171
172        #def lliurexMirrorIsUpdated             
173
174        def lliurexMirrorIsRunning(self):
175
176                try:
177                        is_lliurexmirror_running=self.llxUpCore.lliurexMirrorIsRunning()
178                        return is_lliurexmirror_running
179
180                except Exception as e:
181                        log_msg="Updating mirror. Error: " + str(e)
182                        self.log(log_msg)
183                        return False
184
185        #def lliurexMirrorIsRunning             
186
187        def getPercentageLliurexMirror(self):
188
189                try:
190                        percentage_mirror=self.llxUpCore.getPercentageLliurexMirror()
191                        if percentage_mirror != None:
192                                return percentage_mirror
193                        else:
194                                return 0       
195               
196                except Exception as e:
197                        return 0       
198
199
200        #def getPercentageLliurexMirror
201
202        def getLliurexVersionLocal(self):
203               
204                try:
205                       
206                        self.lliurexVersionLocal=self.llxUpCore.getLliurexVersionLocal()
207                        log_msg="Get LliurexVersion installed: " + str(self.lliurexVersionLocal["installed"])
208                        self.log(log_msg)
209                        log_msg="Get LliurexVersion candidate from Local repository: " + str(self.lliurexVersionLocal["candidate"])
210                        self.log(log_msg)
211                        #self.lliurexVersionLocal=self.lliurexVersionLocal["candidate"]
212
213                except Exception as e:
214                        log_msg="Get LliurexVersion from Local repository. Error: " + str(e)
215                        self.log(log_msg)
216                        self.lliurexVersionLocal={"installed":None,"candidate":None}
217
218                return self.lliurexVersionLocal
219
220        #def getLliurexVersionLocal(
221       
222        def getLliurexVersionNet(self):
223               
224                try:
225                        self.lliurexVersionNet=self.llxUpCore.getLliurexVersionLliurexNet()["candidate"]
226                        log_msg="Get LliurexVersion candidate from Lliurex Net: " + str(self.lliurexVersionNet)
227                        self.log(log_msg)
228                       
229
230                except Exception as e:
231                        log_msg="Get LliurexVersion from Lliurex Net. Error: " + str(e)
232                        self.log(log_msg)
233                        self.lliurexVersionNet=None
234
235                return self.lliurexVersionNet   
236
237        #def getLliurexVersionNet
238       
239        def installInitialFlavour(self,flavourToInstall):
240
241                try:
242                        is_flavour_installed=self.llxUpCore.installInitialFlavour(flavourToInstall)
243                        returncode=is_flavour_installed['returncode']
244                        error=is_flavour_installed['stderrs']
245                        log_msg="Install initial metapackage:" + flavourToInstall + ": Returncode: " + str(returncode) + " Error: " + str(error)
246                        self.log(log_msg)
247                        return returncode
248
249                except Exception as e:
250                        print str(e)
251                        log_msg="Install initial metapackage: " + flavourToInstall + ". Error: " + str(e)
252                        self.log(log_msg)
253                        return 1
254                       
255        #def installInitialFlavour
256
257        def getPackagesToUpdate(self):
258               
259                #ref_flavour=["lliurex-meta-server","lliurex-meta-client", "lliurex-meta-desktop", "lliurex-meta-music", "lliurex-meta-pyme", "lliurex-meta-infantil"]
260                packages_parse=[]
261                self.total_size=0
262                #self.incorrect_flavours=[]
263               
264                try:
265                        packages=self.llxUpCore.getPackagesToUpdate()
266                        if len(packages)>0:
267                                for item in packages:
268                                        version=packages[item]['candidate']
269                                        size=self.getSizePackagesToUpdate(item)
270                                        install=str(packages[item]['install'])
271                                        packages_parse.append(item+";"+version+";"+size+";"+install)
272                                       
273                        log_msg="Get packages to update. Number of packages: " + str(len(packages)) 
274                        self.log(log_msg)               
275
276                except Exception as e:
277                        log_msg="Get packages to update. Error: " + str(e)
278                        self.log(log_msg)
279
280                self.total_size=self.convert_size(self.total_size)     
281                return packages_parse,self.total_size
282                       
283        #def getPackagesToUpdate
284       
285        def getSizePackagesToUpdate(self,pkg):
286                size=0
287                try:
288                        command='apt-cache show ' + pkg + ' |grep "^Size:" |cut -d " " -f2 |head -1'
289                        p=subprocess.Popen(command,shell=True,stdout=subprocess.PIPE)
290                        size=p.stdout.readline().strip()
291                        self.total_size=(self.total_size)+int(size)
292                        size=self.convert_size(size)
293                        return size
294
295                except Exception as e:
296                        print e
297                        return self.convert_size(size) 
298       
299
300        def convert_size(self,size_bytes):
301
302                size_bytes=float(size_bytes)
303                if (size_bytes == 0):
304                        return '0B'
305
306                size_name = ("B", "KB", "MB", "GB")
307                i = int(math.floor(math.log(size_bytes, 1024)))
308                p = math.pow(1024, i)
309                s = round(size_bytes/p,)
310                s=int(s)
311                return '%s %s' % (s, size_name[i])
312
313       
314        def checkIncorrectFlavours(self):
315
316                incorrectFlavours=self.llxUpCore.checkIncorrectFlavours()
317
318                if incorrectFlavours:
319                        log_msg="Checking incorrect metapackages. Others metapackages detected: " + str(incorrectFlavours)
320                        self.log(log_msg)
321                else:
322                        log_msg="Checking incorrect metapackages. Others metapackages not detected"
323                        self.log(log_msg)
324
325                return incorrectFlavours       
326
327        #def checkIncorrectFlavours     
328
329        def getPackageChangelog(self,package):
330
331                changelog_file=os.path.join(self.llxUpCore.changelogsPath,package)
332                changelog="Changelog not found"
333
334                if not os.path.exists(changelog_file):
335                        #os.system('LANG=C LANGUAGE=en apt-get changelog %s > %s'%(package,changelog_file))
336                        cmd='LANG=C LANGUAGE=en apt-get changelog %s > %s'%(package,changelog_file)
337                        p=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
338                        poutput,perror=p.communicate()
339
340                        if len(perror)>0:
341                                pass
342                        else:
343
344                                try:
345                                        cmd="sed -i '/Get:1 http/d' " + str(changelog_file)
346                                        os.system(cmd)
347                                        f=open(changelog_file,"r")
348                                        changelog=f.readlines()
349                                        f.close()
350                                                               
351                                except Exception as e:
352                                        changelog="Changelog not found" 
353
354                return changelog       
355
356        #def getPackageChangelog               
357
358        def preActionsScript(self):
359
360                self.preActions=self.llxUpCore.preActionsScript()
361                self.preActions='DEBIAN_FRONTEND=gnome DEBIAN_PRIORITY=high ' +self.preActions + ' ;touch ' + self.preactions_token + '\n'
362                log_msg="Exec Pre-Actions"
363                self.log(log_msg)
364                return self.preActions
365
366        #def preActionsScript   
367
368        def distUpgradeProcess(self):
369               
370                self.distupgrade=self.llxUpCore.distUpgradeProcess()   
371                self.distupgrade='DEBIAN_FRONTEND=gnome DEBIAN_PRIORITY=high ' +self.distupgrade + ' ;touch ' + self.upgrade_token + '\n'
372                log_msg="Exec Dist-uggrade"
373                self.log(log_msg)
374                return self.distupgrade
375
376        #def distUpgradeProcess
377       
378        def checkErrorDistUpgrade(self):
379
380                try:
381                        error=self.llxUpCore.checkErrorDistUpgrade()
382                        if error:
383                                log_msg="Dist-upgrade process ending with errors"
384                                self.log(log_msg)
385                        else:                   
386                                log_msg="Dist-upgrade process ending OK"
387                                self.log(log_msg)
388
389                except Exception as e:
390                        print e
391                        log_msg="Error checking distupgrade. Error: " + str(e)
392                        self.log(log_msg)
393                        error=True
394
395                return error   
396                               
397
398        #def checkErrorDistUpgrade
399       
400        def getStatusPackage(self):
401
402                command='dpkg -l |grep "^i[i]"'
403                packages_status=[]
404                try:
405                        p = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE)
406                        for line in iter(p.stdout.readline,""):
407                                tmp=str(line.strip().split()[1].split(":")[0])+"_"+str(line.strip().split()[2])
408                                packages_status.append(tmp)
409
410                except Exception as e:
411                        print str(e)
412
413                return packages_status                                         
414
415        def checkFinalFlavour(self):
416
417                flavourToInstall=None
418                try:
419               
420                        flavourToInstall=self.llxUpCore.checkFinalFlavour()
421                        log_msg="Final check metapackage. Metapackage to install: " + str(flavourToInstall)
422                        self.log(log_msg)
423
424                except Exception as e:
425                        log_msg="Final check metapackage. Error: " + str(e)
426                        self.log(log_msg)
427
428                return flavourToInstall
429
430       
431        #def checkFinalFlavour
432       
433        def installFinalFlavour(self,flavourToInstall):
434
435                self.command=self.llxUpCore.installFinalFlavour(flavourToInstall)
436                self.command='DEBIAN_FRONTEND=gnome DEBIAN_PRIORITY=high ' +self.command + ' ;touch ' + self.installflavour_token + ' ; exit'+' \n'
437                log_msg="Install final metapackage"
438                self.log(log_msg)
439                return self.command
440
441        #def installFinalFlavour
442
443        def postActionsScript(self):
444
445                self.postActions=self.llxUpCore.postActionsScript()
446                self.postActions='DEBIAN_FRONTEND=gnome DEBIAN_PRIORITY=high '+self.postActions + ' 2> >(tee ' + self.llxUpCore.errorpostaction_token + ') ;touch ' + self.postactions_token + ' \n'
447                #self.postActions=self.postActions + ' ;touch ' + self.postactions_token + ' \n'
448
449                log_msg="Exec Post-Actions"
450                self.log(log_msg)
451                return self.postActions
452
453        #def postActionsScript
454
455        def cleanEnvironment(self):
456               
457                try:
458                        self.llxUpCore.cleanEnvironment()
459                        log_msg="Clean environment: OK"
460                        self.log(log_msg)
461
462                except Exception as e:
463                        log_msg="Clean environment. Error :" + str(e)
464                        self.log(log_msg)                               
465
466        #def cleanEnvironment
467
468        def cleanLliurexUpLock(self):
469
470                try:
471                        self.llxUpCore.cleanLliurexUpLock()
472               
473                except Exception as e:
474                        print e
475       
476        #def cleanLliurexUpLock                 
477                       
478        def log(self,msg):
479               
480                log_file="/var/log/lliurex-up.log"
481                f=open(log_file,"a+")
482                f.write(msg + '\n')
483                f.close()
484
485        #def log                       
Note: See TracBrowser for help on using the repository browser.