source: lliurex-up/trunk/fuentes/python-lliurex-up/lliurex/lliurexup/__init__.py @ 7387

Last change on this file since 7387 was 7387, checked in by jrpelegrina, 18 months ago

Wip in get PID, new banner, resizing the window and indicator

File size: 21.1 KB
Line 
1import xmlrpclib 
2import os
3import shutil
4import subprocess
5import socket
6import distutils.dir_util
7import urllib2
8import time
9
10
11class LliurexUpCore(object):
12        """docstring for LliurexUpCore"""
13        def __init__(self):
14                super(LliurexUpCore, self).__init__()
15                self.flavourReference=["lliurex-meta-server","lliurex-meta-client", "lliurex-meta-desktop", "lliurex-meta-music", "lliurex-meta-pyme", "lliurex-meta-infantil"] 
16                self.defaultMirror = 'llx16'
17                self.defaultVersion = 'xenial'
18                self.lockTokenPath="/var/run/lliurexUp.lock"
19                self.processPath = '/var/run/lliurex-up'
20                self.sourcesListPath='/etc/apt/'
21                self.changelogsPath = os.path.join(self.processPath,'changelogs')
22                self.processSourceslist = os.path.join(self.processPath,'sourceslist')
23                self.origsourcesfile=os.path.join(self.sourcesListPath,"sources.list")
24                self.origsourcesfileback=os.path.join(self.sourcesListPath,"lliurexup_sources.list")
25                self.targetMetapackagePath=os.path.join(self.processPath,"targetMetapackage")
26                self.previousflavourspath = os.path.join(self.processPath,'previousflavours')
27                self.errorpostaction_token=os.path.join(self.processPath,'errorpostaction_token')
28                self.errorfinalmetapackage_token=os.path.join(self.processPath,'errorfinalmetapackage_token')
29                self.errorupgrade_token=os.path.join(self.processPath,'errorupgrade_token')
30                self.finalupgrade_token=os.path.join(self.processPath,'finalupgrade_token')
31
32                self.initActionsPath='/usr/share/lliurex-up/initActions'
33                self.preActionsPath = '/usr/share/lliurex-up/preActions'
34                self.postActionsPath = '/usr/share/lliurex-up/postActions'
35
36                self.createLockToken()
37                self.retryN4d=True
38                self.n4dStatus=True
39                self.n4d = xmlrpclib.ServerProxy('https://localhost:9779')
40                self.checkN4dStatus()
41                self.haveLliurexMirror = False
42                self.metapackageRef=[]
43                self.previousFlavours = []
44
45               
46                self.getTargetMetapackage()
47                self.flavours = []
48                self.getPreviousFlavours()
49               
50                if self.n4dStatus:
51                        if len(self.n4d.get_methods('MirrorManager')) > 0:
52                                self.haveLliurexMirror = True
53                       
54                self.retryN4d=True
55                self.prepareEnvironment()
56
57
58        def createLockToken(self):
59
60                if not os.path.exists(self.lockTokenPath):
61                        f=open(self.lockTokenPath,'w')
62                        up_pid=os.getpid()
63                        f.write(str(up_pid))
64                        f.close()
65
66        def getPreviousFlavours(self):
67               
68                if os.path.exists(self.previousflavourspath):
69                        aux = open(self.previousflavourspath,'r')
70                        lines = aux.readlines()
71                        for x in lines:
72                                self.previousFlavours.append(x.strip())
73                        aux.close()
74
75        def checkN4dStatus(self):
76       
77                checkStatus=True
78                cmd='systemctl status n4d.service 1>/dev/null'
79                result=os.system(cmd)
80
81                if result !=0:
82                        if self.retryN4d:
83                                self.retryN4d=False
84                                try: 
85                                        cmd='systemctl restart n4d.service 1>/dev/null'
86                                        restart=os.system(cmd)
87                                        time.sleep(5)
88                                        if restart ==0:
89                                                self.checkN4dStatus()
90                                        else:
91                                                self.n4dStatus=False
92                                                                                               
93                                except Exception as e:
94                                        self.n4dStatus=False
95                                       
96                                       
97                        else:
98                                self.n4dStatus=False
99                               
100                                                                               
101                else:           
102                        self.n4dStatus=True
103                       
104                               
105        def getTargetMetapackage(self):
106
107                if os.path.exists(self.targetMetapackagePath):
108                        aux = open(self.targetMetapackagePath,'r')
109                        lines = aux.readlines()
110                        for x in lines:
111                                self.metapackageRef.append(x.strip())
112                        aux.close()             
113
114        def saveTargetMetapackage(self,targetMetapackage):
115
116                aux=open(self.targetMetapackagePath,'w')
117                x=targetMetapackage.split("-")[2]
118                aux.write(x+"\n")
119                x="edu"
120                aux.write(x+"\n")
121                aux.close()
122
123
124        def checkInitialFlavour(self,args=None):
125
126                self.targetMetapackage=self.checkFlavour()
127                if len(self.metapackageRef)==0:
128                        self.getTargetMetapackage()
129               
130                self.metapackageRef=sorted(self.metapackageRef) 
131                         
132                if len(self.previousFlavours)==0:
133                        self.getPreviousFlavours()
134               
135
136                self.writeDefaultSourceslist()
137                self.writeDefaultSourceslistMirror()
138                self.writeDefaultSourceslistAll()
139
140                self.addSourcesListLliurex(args)
141
142                return self.targetMetapackage
143               
144
145        def updateFlavoursList(self):
146               
147                #self.flavours = [ x.strip() for x in self.n4d.lliurex_version('','LliurexVersion','-v')[1].split(',') ]
148                cmd='lliurex-version -v'
149                p=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE)
150                result=p.communicate()
151                self.flavours = [ x.strip() for x in result[0].split(',') ]
152
153                if len(self.flavours) > 0:
154                        aux = open(self.previousflavourspath,'w')
155                        for x in self.flavours:
156                                aux.write(x+"\n")
157                        aux.close()
158
159        def writeDefaultSourceslist(self):
160
161                f = open(os.path.join(self.processSourceslist,'default'),'w')
162                f.write('deb http://lliurex.net/{version} {version} main restricted universe multiverse\n'.format(version=self.defaultVersion))
163                f.write('deb http://lliurex.net/{version} {version}-updates main restricted universe multiverse\n'.format(version=self.defaultVersion))
164                f.write('deb http://lliurex.net/{version} {version}-security main restricted universe multiverse\n'.format(version=self.defaultVersion))
165                f.close()
166
167        def writeDefaultSourceslistMirror(self):
168               
169                f = open(os.path.join(self.processSourceslist,'default_mirror'),'w')
170                f.write('deb http://mirror/{version_mirror} {version} main restricted universe multiverse\n'.format(version_mirror=self.defaultMirror,version=self.defaultVersion))
171                f.write('deb http://mirror/{version_mirror} {version}-updates main restricted universe multiverse\n'.format(version_mirror=self.defaultMirror,version=self.defaultVersion))
172                f.write('deb http://mirror/{version_mirror} {version}-security main restricted universe multiverse\n'.format(version_mirror=self.defaultMirror,version=self.defaultVersion))
173                f.close()       
174
175
176        def writeDefaultSourceslistAll(self):
177               
178                f = open(os.path.join(self.processSourceslist,'default_all'),'w')
179                f.write('deb http://mirror/{version_mirror} {version} main restricted universe multiverse\n'.format(version_mirror=self.defaultMirror,version=self.defaultVersion))
180                f.write('deb http://mirror/{version_mirror} {version}-updates main restricted universe multiverse\n'.format(version_mirror=self.defaultMirror,version=self.defaultVersion))
181                f.write('deb http://mirror/{version_mirror} {version}-security main restricted universe multiverse\n'.format(version_mirror=self.defaultMirror,version=self.defaultVersion))
182                f.write('deb http://lliurex.net/{version} {version} main restricted universe multiverse\n'.format(version=self.defaultVersion))
183                f.write('deb http://lliurex.net/{version} {version}-updates main restricted universe multiverse\n'.format(version=self.defaultVersion))
184                f.write('deb http://lliurex.net/{version} {version}-security main restricted universe multiverse\n'.format(version=self.defaultVersion))
185                f.close()               
186
187        def prepareEnvironment(self):
188                '''
189                        This funcion delete all environment and rebuild environment
190
191                '''
192                self.cleanEnvironment()
193                if not os.path.exists(self.processPath):
194                        os.mkdir(self.processPath)
195                if not os.path.exists(self.processSourceslist):
196                        os.mkdir(self.processSourceslist)
197                if not os.path.exists(self.changelogsPath):
198                        os.mkdir(self.changelogsPath)
199
200                #self.writeDefaultSourceslist()
201                #self.writeDefaultSourceslistMirror()
202
203        def addSourcesListLliurex(self,args=None):
204               
205                #sourcesrefmirror=os.path.join(self.processSourceslist, 'default_mirror')
206
207                newsourcesfile=os.path.join(self.sourcesListPath,'sources.list')
208                extrasources=[]
209                client=False
210                textsearch_mirror="/mirror/"+str(self.defaultMirror)
211                textsearch_lliurex="/lliurex.net/"+str(self.defaultVersion)
212
213
214                if self.targetMetapackage=="lliurex-meta-client" or "client" in self.previousFlavours or "client" in self.metapackageRef:
215                        client=True
216                        if args:
217                                sourcesref=os.path.join(self.processSourceslist, 'default_all')
218
219                        else:
220                                #textsearch="/mirror/"+str(self.defaultMirror)
221                                sourcesref=os.path.join(self.processSourceslist, 'default_mirror')
222
223                else:
224                        #textsearch="/lliurex.net/"+str(self.defaultVersion)
225                        sourcesref=os.path.join(self.processSourceslist, 'default')     
226
227                if os.path.exists(self.origsourcesfile):
228                        os.rename(self.origsourcesfile,self.origsourcesfileback)
229                        origsources=open(self.origsourcesfileback,'r')
230                        if not client:
231                                for line in origsources:
232                                        if not textsearch_lliurex in line:
233                                                extrasources.append(line.strip())
234                        else:
235                                for line in origsources:
236                                        if args:
237                                                if (not textsearch_lliurex in line) and (not textsearch_mirror in line):
238                                                        extrasources.append(line.strip())
239                                        else:
240                                                if not textsearch_mirror in line:
241                                                        extrasources.append(line.strip())               
242                                                                                               
243
244                        origsources.close()
245                               
246                        if os.path.exists(sourcesref):
247                                shutil.copy(sourcesref,self.origsourcesfile)
248                                if len(extrasources)>0: 
249                                        newsourcesedit=open(newsourcesfile,'a')
250                                        for line in extrasources:
251                                                newsourcesedit.write(line+'\n')
252                                        newsourcesedit.close()
253                        else:
254                                os.rename(self.origsourcesfileback,self.origsourcesfile)                                       
255                       
256
257        def restoreOrigSourcesList(self):
258               
259                if os.path.exists(self.origsourcesfileback):
260                        os.rename(self.origsourcesfileback,self.origsourcesfile)
261
262        def readSourcesList(self):
263               
264                count=0
265                if os.path.exists(self.origsourcesfile):
266                        sources=open(self.origsourcesfile,'r')
267                        ref="/lliurex.net/"+str(self.defaultVersion)
268                        for line in sources:
269                                if ref in line:
270                                        if not "#" in line:
271                                                count=count+1
272                return count           
273
274        def cleanEnvironment(self):
275               
276                if os.path.exists(self.processPath):
277                        shutil.rmtree(os.path.join(self.processPath))
278
279                self.restoreOrigSourcesList()   
280
281        def cleanLliurexUpLock(self):
282
283                if os.path.exists(self.lockTokenPath):
284                        os.remove(self.lockTokenPath)
285
286        def updateCacheApt(self,options=""):
287               
288                command = "LANG=C LANGUAGE=en apt-get update {options}".format(options=options)
289                subprocess.Popen(command,shell=True).communicate()
290
291
292        def getPackageVersionAvailable(self,package,options=""):
293                '''
294                        Args :
295                                package String
296                                options String
297
298                        return dictionary => result
299                        result : {'installed':String,'candidate':String}
300
301                        Options are Apt options
302                '''
303                command = "LANG=C LANGUAGE=en apt-cache policy {package} {options}".format(package=package,options=options)
304                p = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE)
305                installed = None
306                candidate = None
307                for line in iter(p.stdout.readline,""):
308                        stripedline = line.strip()
309                        if stripedline.startswith("Installed"):
310                                installed = stripedline.replace("Installed: ","")
311                        if stripedline.startswith("Candidate"):
312                                candidate = stripedline.replace("Candidate: ","")
313                return {"installed":installed,"candidate":candidate}
314
315        def isLliurexUpIsUpdated(self,args=None):
316                '''
317                        return Boolean
318                '''
319                sourceslistDefaultPath = os.path.join(self.processSourceslist,'default')
320
321                if "client" in self.previousFlavours or "lliurex-meta-client"==self.targetMetapackage:
322                        if not args:
323                                sources=self.readSourcesList()
324                                if sources==0:
325                                        sourceslistDefaultPath = os.path.join(self.processSourceslist,'default_mirror')
326
327
328                options = ""
329                if self.canConnectToLliurexNet():
330                        options = "-o Dir::Etc::sourcelist={sourceslistOnlyLliurex} -o Dir::Etc::sourceparts=/dev/null".format(sourceslistOnlyLliurex=sourceslistDefaultPath)
331
332                self.updateCacheApt(options)
333                result = self.getPackageVersionAvailable('lliurex-up',options)
334
335                if result['installed'] != result['candidate']:
336                        return False
337                return True
338
339        def installLliurexUp(self,options=""):
340                '''
341                        Args :
342                                options String
343                        return dictionary => result
344                        result : {'returncode':Int,'stdout':String,'stderr':String}
345
346                        options are Apt options
347                       
348
349                        This function install lliurex-up
350                '''
351                self.updateCacheApt(options)
352                command = "LANG=C LANGUAGE=en DEBIAN_FRONTEND=noninteractive apt-get install --allow-downgrades --allow-remove-essential --allow-change-held-packages --yes lliurex-up {options}".format(options=options)
353                p = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE)
354                poutput,perror = p.communicate()
355                return {'returncode':p.returncode,'stdout':poutput,'stderrs':perror}
356
357        def lliurexMirrorIsUpdated(self):
358                '''
359                        return None | dictionary => result
360                        result : {'status':Boolean,'msg':String,'action':String}
361                        result.msg : message of status
362                        result.action : Action to launch
363                '''
364                if self.haveLliurexMirror and ('server' in self.flavours or 'lliurex-meta-server'==self.targetMetapackage):
365                        result = self.n4d.is_update_available('','MirrorManager',self.defaultMirror)
366                        return result
367                return None
368
369        def lliurexMirrorIsRunning(self):
370                '''
371                        return Boolean
372                '''
373                if self.haveLliurexMirror and ('server' in self.flavours or 'lliurex-meta-server'==self.targetMetapackage):
374                        result = self.n4d.is_alive('','MirrorManager')
375                        return result['status']
376                return False
377
378        def clientCheckingMirrorIsRunning(self):
379
380                if self.targetMetapackage=="lliurex-meta-client" or "client" in self.previousFlavours or "client" in self.metapackageRef:
381                       
382                        try:
383                                client=xmlrpclib.ServerProxy('https://server:9779')
384                                result=client.is_alive('','MirrorManager')
385                                return {'ismirrorrunning':result['status'],'exception':False}
386                       
387                        except Exception as e:
388                                return {'ismirrorrunning':None,'exception':str(e)}     
389
390                return {'ismirrorrunning':False,'exception':False}     
391
392        def getPercentageLliurexMirror(self):
393                '''
394                        return int | None
395                '''
396                if self.haveLliurexMirror and ('server' in self.flavours or 'lliurex-meta-server'==self.targetMetapackage):
397                        result = self.n4d.get_percentage('','MirrorManager',self.defaultMirror)
398                        if result['status']:
399                                return result['msg']
400                return None
401       
402        def checkFlavour(self):
403                '''
404                        return None|String
405                        If metapackages has been uninstalled, this function return
406                        package to must install. If return None, you are ok and don't need
407                        install anything.
408                '''
409                self.updateFlavoursList()
410                targetMetapackage = None
411                if 'None' in self.flavours:
412                        # get last flavour
413                        #result = self.n4d.lliurex_version('','LliurexVersion','--history')
414                        cmd='lliurex-version --history'
415                        p=subprocess.Popen(cmd,shell=True, stdout=subprocess.PIPE)
416                        result=p.communicate()
417                        if result[0]:
418                                #history = [ x.strip().split('\t')[0].strip() for x in result[1].split('\n') ]
419                                history = [ x.strip().split('\t')[0].strip() for x in result[0].split('\n') ]
420                                history = [ x for x in history if not 'lliurex-meta-live' in x ]
421                                for x in reversed(history):
422                                        if x.startswith('-'):
423                                                targetMetapackage = x[2:]
424                                                break
425
426                if targetMetapackage !=None:
427                        self.saveTargetMetapackage(targetMetapackage)                           
428                return targetMetapackage
429
430        def canConnectToLliurexNet(self):
431                '''
432                        return Boolean
433                '''
434                '''
435                s =  socket.socket(socket.AF_INET, socket.SOCK_STREAM)
436                host = socket.gethostbyname('lliurex.net')
437                result = s.connect_ex((host, 80))
438                s.close()
439                if result:
440                        return False
441                return True
442                '''
443                try:
444                        req=urllib2.Request("http://lliurex.net/xenial")
445                        res=urllib2.urlopen(req)
446                        return True
447                except:
448                        return False
449                               
450        def getLliurexVersionLliurexNet(self):
451                '''
452                        return dictionary => result
453                        result : {'installed':String,'candidate':String}
454                '''
455                sourceslistDefaultPath = os.path.join(self.processSourceslist,'default')
456                options = ""
457                if self.canConnectToLliurexNet():
458                        options = "-o Dir::Etc::sourcelist={sourceslistOnlyLliurex} -o Dir::Etc::sourceparts=/dev/null".format(sourceslistOnlyLliurex=sourceslistDefaultPath)
459                self.updateCacheApt(options)
460                return self.getPackageVersionAvailable('lliurex-version-timestamp',options)
461
462        def getLliurexVersionLocal(self):
463               
464                self.updateCacheApt('')
465                return self.getPackageVersionAvailable('lliurex-version-timestamp','')         
466
467        def initActionsScript(self,arg):
468               
469                #return 'run-parts --arg="initActions" ' + self.initActionsPath
470                return 'run-parts --arg=' +str(arg) + ' ' + self.initActionsPath
471
472
473        def preActionsScript(self):
474               
475                return 'run-parts --arg="preActions" ' + self.preActionsPath
476
477        def postActionsScript(self):
478               
479                return 'run-parts --arg="postActions" ' + self.postActionsPath
480
481        '''     
482        def requiresInstallFlavour(self):
483               
484                flavourToInstall=None
485               
486                if not 'None' in self.previuosFlavours:
487                        if self.previuosFlavours !=self.flavours:
488                                flavourToInstall=self.parseFlavourToInstall(self.previousFlavours)
489                                                                               
490                else:
491                       
492                        if self.metapackageRef != self.flavours:
493                                flavourToInstall=self.parseFlavourToInstall(self.metapackageRef)
494                                                       
495
496                return flavourToInstall                                 
497
498               
499        def parseFlavourToInstall(self,flavours):
500       
501                parse_flavour=""
502
503                for item in flavours:
504                        if item != "edu":
505                                parse_flavour=parse_flavour + " " + "lliurex-meta-" + item
506
507                return parse_flavour
508                       
509        #def parseFlavourToInstall
510        '''
511
512        def installInitialFlavour(self,flavourToInstall,options=""):
513                '''
514                        Args :
515                                flavourToInstall String
516                                options String
517                        return dictionary => result
518                        result : {'returncode':Int,'stdout':String,'stderr':String}
519
520                        options are Apt options
521                       
522
523                        This function install lliurex-up
524                '''
525                self.updateCacheApt(options)
526                command = "LANG=C LANGUAGE=en DEBIAN_FRONTEND=noninteractive apt-get install --yes --allow-downgrades --allow-remove-essential --allow-change-held-packages " + flavourToInstall + "{options} ".format(options=options)
527                p = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE)
528                poutput,perror = p.communicate()
529               
530                if p.returncode!=0:
531                        command = "LANG=C LANGUAGE=en DEBIAN_FRONTEND=noninteractive apt-get install -f --yes --allow-downgrades --allow-remove-essential --allow-change-held-packages {options} ".format(options=options)
532                        p = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
533                        poutput,perror = p.communicate()
534
535
536                return {'returncode':p.returncode,'stdout':poutput,'stderrs':perror}   
537
538        def getPackagesToUpdate(self):
539                '''
540                        packageInfo definition
541                        {
542                                'PACKAGENAME' : {
543                                                'install' : 'INSTALLEDVERSION',
544                                                'candidate' : 'CANDIDATEVERSION',
545                                                'icon' : 'ICONNAME',
546                                                'changelog' : 'CHANGELOGTEXT'
547                                }
548                        }
549                '''
550                self.packageInfo = {}
551                self.updateCacheApt("")
552                psimulate = subprocess.Popen('LANG=C LANGUAGE=en apt-get dist-upgrade -sV',shell=True,stdout=subprocess.PIPE)
553                rawoutputpsimulate = psimulate.stdout.readlines()
554                rawpackagestoinstall = [ aux.strip() for aux in rawoutputpsimulate if aux.startswith('Inst') ]
555                r = [ aux.replace('Inst ','') for aux in rawpackagestoinstall ]
556                for allinfo in r :
557                        self.packageInfo[allinfo.split(' ')[0]] = {}
558                        self.packageInfo[allinfo.split(' ')[0]]['raw'] = ' '.join(allinfo.split(' ')[1:])
559
560                for package in self.packageInfo:
561                        raw = self.packageInfo[package]['raw'].split(' ')
562                        if raw[0].startswith('['):
563                                self.packageInfo[package]['install'] = raw[0][1:-1]
564                                self.packageInfo[package]['candidate'] = raw[1][1:]
565                        elif raw[0].startswith('('):
566                                self.packageInfo[package]['install'] = None
567                                self.packageInfo[package]['candidate'] = raw[0][1:]
568                        self.packageInfo[package].pop('raw')
569                        #packageInfo[package]['changelog'] = os.path.join(self.changelogsPath,package)
570                        #os.system('LANG=C LANGUAGE=en apt-get changelog %s > %s%s'%(package,self.changelogsPath,package))
571                        #packageInfo[package]['icon'] =
572                return self.packageInfo
573
574
575        def checkIncorrectFlavours(self):
576               
577                self.incorrect_flavours=[]
578                count=0
579
580                for item in self.packageInfo:
581                        if item in self.flavourReference:
582                                self.incorrect_flavours.append(item)
583
584
585                if len(self.incorrect_flavours)>0:
586
587                        for item in self.incorrect_flavours:
588                                if self.targetMetapackage != None:
589                                        if item != self.targetMetapackage:
590                                                count=count+1
591                                else:
592                                        meta=item.split("-")[2]
593                                        if 'None' in self.previousFlavours:
594                                                if not meta in self.metapackageRef:
595                                                        count=count+1
596                                        else:           
597                                                if not meta in self.previousFlavours:
598                                                        count=count+1
599
600                if count>0:
601                        return True
602
603                else:
604                        return False   
605
606
607        def distUpgradeProcess(self):
608       
609                return 'apt-get dist-upgrade --yes --allow-downgrades --allow-remove-essential --allow-change-held-packages'
610
611
612
613        def checkErrorDistUpgrade(self):
614
615                countPostaction=0
616                countMetapackage=0
617                error=False
618
619                if os.path.exists(self.errorpostaction_token):
620                        aux = open(self.errorpostaction_token,'r')
621                        lines = aux.readlines()
622                        for x in lines:
623                                if 'E: ' in x:
624                                        countPostaction=countPostaction+1
625                        aux.close()
626
627                if countPostaction==0:
628
629                        if os.path.exists(self.errorfinalmetapackage_token):
630                                aux = open(self.errorfinalmetapackage_token,'r')
631                                lines = aux.readlines()
632                                for x in lines:
633                                        if 'E: ' in x:
634                                                countMetapackage=countMetapackage+1
635                                aux.close()
636                        if countMetapackage==0:
637                               
638                                cmd='dpkg -l | grep "^i[^i]" >' + self.errorupgrade_token
639                                os.system(cmd)
640                       
641                                if os.path.exists(self.errorupgrade_token):
642                                        aux = open(self.errorupgrade_token,'r')
643                                        lines = aux.readlines()
644                                        aux.close()
645                               
646                                        if len(lines)>0:
647                                                error=True
648                                                #log_msg="Dist-upgrade process ending with errors"
649                                                #self.log(log_msg)
650                                        else:
651                                                j=0
652                                                cmd='apt-get dist-upgrade -sV >' + self.finalupgrade_token
653                                                os.system(cmd)
654                                                if os.path.exists(self.finalupgrade_token):
655                                                        aux = open(self.finalupgrade_token,'r')
656                                                        lines = aux.readlines()
657                                                        aux.close()
658
659                                                        for x in lines:
660                                                                if 'Inst' in x:
661                                                                        j=j+1
662
663                                                        if j>0:
664                                                                error=True     
665                        else:
666                                error=True                                     
667                else:
668                        error=True
669
670                return error   
671
672        '''     
673        def checkFinalFlavour(self):
674               
675                flavourToInstall=None
676               
677                self.targetMetapackage=self.checkFlavour()
678                if self.targetMetapackage!=None:
679                        #flavourToInstall=self.requiresInstallFlavour()
680                #else:
681                        flavourToInstall=self.targetMetapackage         
682
683                return flavourToInstall
684        '''             
685
686
687        def installFinalFlavour(self,flavourToInstall):
688
689                return 'apt-get install ' + flavourToInstall + ' --yes  --allow-downgrades --allow-remove-essential --allow-change-held-packages'               
690       
691
692if __name__ == '__main__':
693        x = LliurexUpCore()
Note: See TracBrowser for help on using the repository browser.