source: lliurex-up/trunk/fuentes/LliurexUpCore.py @ 2734

Last change on this file since 2734 was 2734, checked in by kbut, 3 years ago

wip

File size: 4.9 KB
Line 
1import xmlrpclib 
2import os
3import shutil
4import subprocess
5import socket
6
7class LliurexUpCore(object):
8        """docstring for LliurexUpCore"""
9        def __init__(self):
10                super(LliurexUpCore, self).__init__()
11                self.defaultMirror = 'llx16'
12                self.defaultVersion = 'xenial'
13                self.processPath = '/var/run/lliurex-up'
14                self.processSourceslist = '/var/run/lliurex-up/sourceslist'
15                self.n4d = xmlrpclib.ServerProxy('https://localhost:9779')
16                self.haveLliurexMirror = False
17                self.flavours = self.n4d.lliurex_version('','LliurexVersion','-v')[1].split(',')
18                if len(self.n4d.get_methods('MirrorManager')) > 0:
19                        self.haveLliurexMirror = True
20
21                self.prepareEnvironment()
22               
23        def prepareEnvironment(self):
24                if os.path.exists(self.processPath):
25                        shutil.rmtree(os.path.join(self.processPath))
26                os.mkdir(self.processPath)
27                os.mkdir(self.processSourceslist)
28                self.writeDefaultSourceslist()
29
30        def writeDefaultSourceslist(self):
31                f = open(os.path.join(self.processSourceslist,'default'),'w')
32                f.write('deb http://lliurex.net/{version} {version} main'.format(version=self.defaultVersion))
33                f.write('deb http://lliurex.net/{version} {version}-updates main'.format(version=self.defaultVersion))
34                f.write('deb http://lliurex.net/{version} {version}-security main'.format(version=self.defaultVersion))
35                f.close()
36
37        def getPackageVersionAvailable(self,package,options=""):
38                command = "LANG=C apt-cache policy {package} {options}".format(package=package,options=options)
39                p = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE)
40                installed = None
41                candidate = None
42                for line in iter(p.stdout.readline,""):
43                        stripedline = line.strip()
44                        if stripedline.startswith("Installed")
45                                installed = stripedline.replace("Installed: ")
46                        if stripedline.startswith("Candidate")
47                                candidate = stripedline.replace("Candidate: ")
48                return {"installed":installed,"candidate":candidate}
49
50        def checkLliurexUpIsUpdated(self):
51                sourceslistDefaultPath = os.path.join(self.processSourceslist,'default')
52                options = ""
53                if self.canConnectToLliurexNet():
54                        options = "-o Dir::Etc::sourcelist={sourceslistOnlyLliurex} -o Dir::Etc::sourceparts=/dev/null".format(sourceslistOnlyLliurex=sourceslistDefaultPath)
55                command = "LANG=C apt-get update {options}".format(options=options)
56                subprocess.Popen(command,shell=True).communicate()
57                result = self.getPackageVersionAvailable('lliurex-up',options)
58
59                if result['installed'] != result['candidate']:
60                        return "install"
61                return "nothing"
62
63        def installLliurexUp(self):
64                command = "LANG=C apt-get install lliurex-up {options}".format(options=options)
65                p = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE)
66                p.communicate()
67
68        def lliurexMirrorIsUpdated(self):
69                if self.haveLliurexMirror and 'server' in self.flavours :
70                        result = self.n4d.is_update_available('','MirrorManager',self.defaultMirror)
71                        return result
72                return None
73
74        def lliurexMirrorIsRunning(self):
75                if self.haveLliurexMirror and 'server' in self.flavours :
76                        result = self.n4d.is_alive('','MirrorManager')
77                        return result['status']
78                return False
79
80        def getPercentageLliurexMirror(self):
81                if self.haveLliurexMirror and 'server' in self.flavours:
82                        result = self.n4d.get_percentage('','MirrorManager',self.defaultMirror)
83                        if result['status']:
84                                return result['msg']
85                return None
86       
87        def checkFlavour(self):
88                targetMetapackage = None
89                if 'None' in self.flavours:
90                        # get last flavour
91                        result = self.n4d.lliurex_version('','LliurexVersion','--history')
92                        if result[0]:
93                                history = [ x.strip().split('\t')[0].strip() for x in result[1].split('\n') ]
94                                history = [ x for x in history if not 'lliurex-meta-live' in x ]
95                                for x in reversed(history):
96                                        if x.startswith('-'):
97                                                targetMetapackage = x[2:]
98                                                break
99                                if targetMetapackage != '':
100                return targetMetapackage
101
102        def canConnectToLliurexNet(self):
103                s =  socket.socket(socket.AF_INET, socket.SOCK_STREAM)
104                host = socket.gethostbyname('lliurex.net')
105                result = s.connect_ex((host, 80))
106                s.close()
107                if result:
108                        return False
109                return True
110
111        def getLliurexVersion(self):
112                sourceslistDefaultPath = os.path.join(self.processSourceslist,'default')
113                options = ""
114                if self.canConnectToLliurexNet():
115                        options = "-o Dir::Etc::sourcelist={sourceslistOnlyLliurex} -o Dir::Etc::sourceparts=/dev/null".format(sourceslistOnlyLliurex=sourceslistDefaultPath)
116                command = "LANG=C apt-get update {options}".format(options=options)
117                subprocess.Popen(command,shell=True).communicate()
118                return self.getPackageVersionAvailable('lliurex-version-stamp',options)
119
120        def getPackagesToUpdate(self):
121                packageInfo = {}
122                subprocess.Popen("LANG=C apt-get update",shell=True).communicate()
123                p = subprocess.Popen('LANG=C apt-get dist-upgrade -sV',shell=True,stdout=subprocess.PIPE)
124                z = p.stdout.readlines()
125                y = [ x.strip() for x in z if x.startswith('Inst') ]
126                r = [ w.replace('Inst ','') for w in y ]
127                for allinfo in r :
128                        packageInfo[allinfo.split(' ')[0]] = ' '.join(allinfo.split(' ')[1:])
129               
130
131
Note: See TracBrowser for help on using the repository browser.