source: lliurex-up/trunk/fuentes/lliurex-up-cli/usr/sbin/lliurex-upgrade @ 3449

Last change on this file since 3449 was 3449, checked in by jrpelegrina, 3 years ago

Refactoring code

  • Property svn:executable set to *
File size: 9.8 KB
Line 
1#!/usr/bin/env python
2
3from clint import arguments
4from clint.textui import puts, indent, colored
5import lliurex.lliurexup
6import os
7import sys
8import commands
9import time
10
11class LliurexUpCli(object):
12        def __init__(self):
13
14                self.lliurexcore = lliurex.lliurexup.LliurexUpCore()
15                self.checkInitialFlavour()
16       
17        def checkInitialFlavour(self):
18
19                self.targetMetapackage=self.lliurexcore.checkInitialFlavour()
20
21                # try:
22                #       self.targetMetapackage=self.lliurexcore.checkFlavour()
23                       
24                #       #if self.targetMetapackage !=None:
25                #       self.metapackageRef=self.lliurexcore.metapackageRef
26                #       if len(self.metapackageRef)==0:
27                #               self.lliurexcore.getTargetMetapackage()
28         #              self.metapackageRef=sorted(self.metapackageRef)
29                         
30                #       self.previousFlavours=self.lliurexcore.previuosFlavours
31                #       if len(self.previousFlavours)==0:
32                #               self.lliurexcore.getPreviuosFlavours()
33                # except Exception as e:
34                #       print e
35
36        def initActionsScript(self):
37
38                command=self.lliurexcore.initActionsScript(self.initActionsArg)
39                try:
40                        os.system(command)
41
42                except Exception as e:
43                        print e         
44
45        def checkLliurexUp(self):
46
47                is_lliurexup_updated=self.lliurexcore.isLliurexUpIsUpdated()
48
49                if not is_lliurexup_updated:
50                        print ("  [Lliurex-up]: Updating Lliurex-up")
51                        is_lliurexup_installed=self.lliurexcore.installLliurexUp()
52                        print ("  [Lliurex-up]: Lliurex-up is now udpate and will be reboot now" )
53                        time.sleep(3)
54                        os.execv("lliurex-upgrade",sys.argv)   
55
56                else:
57                        print ("  [Lliurex-up]: Lliurex-up is updated.Nothing to do")   
58
59
60        def checkMirror(self):
61
62                is_mirror_updated=self.lliurexcore.lliurexMirrorIsUpdated()
63
64                if is_mirror_updated !=None:
65                        is_mirror_running=self.lliurexcore.lliurexMirrorIsRunning()
66
67                        if is_mirror_updated['action']=='update':
68                                if not is_mirror_running:
69                                        response=raw_input('  [LLiurex-up]: Do you want update mirror (yes/no): ').lower()
70                                        if response.startswith('y'):
71                                                print("  [Lliurex-up]: Updating mirror. Wait a moment please")
72                                                command='lliurex-mirror update llx16'
73                                                os.system(command)
74                                        else:
75                                                print("  [Lliurex-up]: Mirror update.Nothing to do")           
76                else:
77                        print("  [Lliurex-up]: Nothing to do with mirror")
78
79       
80        def checkingInitialFlavourToInstall(self):
81
82
83                if self.targetMetapackage == None:
84                        self.flavourToInstall=self.lliurexcore.requiresInstallFlavour()
85                        if self.flavourToInstall != None:
86                                print "  [Lliurex-up]: Installation of flavour is required: " +str(self.flavourToInstall)
87                                is_flavour_installed=self.lliurexcore.installInitialFlavour(self.flavourToInstall)     
88                                returncode=is_flavour_installed['returncode']
89                                error=is_flavour_installed['stderrs']
90                                print "  [Lliurex-up]: Flavour is now installed: " + str(returncode) + " Error: " + str(error)
91                        else:
92                                print "  [Lliurex-up]: Installation of flavour is not required"
93                else:
94                        print "  [Lliurex-up]: Installation of flavour is required: " + str(self.targetMetapackage)
95                        is_flavour_installed=self.lliurexcore.installInitialFlavour(self.targetMetapackage)     
96                        returncode=is_flavour_installed['returncode']
97                        error=is_flavour_installed['stderrs']
98                        print "  [Lliurex-up]: Flavour is now installed: " + str(returncode) + " Error: " + str(error)
99
100        # def requiresInstallFlavour(self):
101               
102        #       flavourToInstall=None
103               
104        #       self.flavours=self.lliurexcore.flavours
105        #       if not 'None' in self.previousFlavours:
106        #               if self.previousFlavours !=self.flavours:
107        #                       flavourToInstall=self.parseFlavourToInstall(self.previousFlavours)
108                                                                                       
109        #       else:
110        #               if self.metapackageRef != self.flavours:
111        #                       flavourToInstall=self.parseFlavourToInstall(self.metapackageRef)
112
113        #       return flavourToInstall                                         
114                       
115        #def requiresInstallFlavour
116       
117        # def parseFlavourToInstall(self,flavours):
118       
119        #       parse_flavour=""
120
121        #       for item in flavours:
122        #               if item != "edu":
123        #                       parse_flavour=parse_flavour + " " + "lliurex-meta-" + item
124
125        #       return parse_flavour           
126
127        def checkingIncorrectFlavours(self):
128               
129                incorrectFlavours=self.lliurexcore.checkIncorrectFlavours()
130                return incorrectFlavours
131                # count=0
132                # ref_flavour=["lliurex-meta-server","lliurex-meta-client", "lliurex-meta-desktop", "lliurex-meta-music", "lliurex-meta-pyme", "lliurex-meta-infantil"]
133                # self.incorrect_flavours=[]
134
135                # for item in self.packages:
136                #       if item in ref_flavour:
137                #               self.incorrect_flavours.append(item)
138                               
139                # if len(self.incorrect_flavours)>0:
140                #       for item in self.incorrect_flavours:
141                #               if self.targetMetapackage != None:
142                #                       if item != self.targetMetapackage:
143                #                               count=count+1
144                #               else:
145                #                       meta=item.split("-")[2]
146                #                       if 'None' in self.previousFlavours:
147                #                               if not meta in self.metapackageRef:
148                #                                       count=count+1
149                #                       else:           
150                #                               if not meta in self.previousFlavours:
151                #                                       count=count+1
152
153                # if count>0:
154                #       return True
155                # else:
156                #       return False
157
158
159        def checkPreviousUpgrade(self):
160               
161                error=False
162                if self.version_update["candidate"]!=None:
163                        if self.version_update["installed"]!=self.version_update["candidate"]:
164                                error=True
165                else:
166                        if self.version_update["installed"]!=self.version_available["candidate"]:       
167                                error=True
168
169                return error                   
170
171        def preActionsScript(self):
172
173                command=self.lliurexcore.preActionsScript()
174                try:
175                        os.system(command)
176
177                except Exception as e:
178                        print e
179
180        def distUpgrade(self):
181
182                command=self.lliurexcore.distUpgradeProcess()
183                try:
184                        os.system(command)
185                except Exception as e:
186                        print e
187
188        # def checkFinalFlavour(self):
189               
190        #       flavourToInstall=None
191               
192        #       try:
193        #               self.targetMetapackage=self.lliurexcore.checkFlavour()
194        #               if self.targetMetapackage==None:
195        #                       flavourToInstall=self.requiresInstallFlavour()
196        #               else:
197        #                       flavourToInstall=self.targetMetapackage         
198
199        #       except Exception as e:
200        #               print e
201                       
202        #       return flavourToInstall                 
203
204
205        def checkingFinalFlavourToInstall(self):
206               
207                self.flavourToInstall=self.lliurexcore.checkFinalFlavour()
208
209                if self.flavourToInstall!=None:
210                        print ("  [Lliurex-up]: Install of meta is required: " + str(self.flavourToInstall))
211                        command=self.lliurexcore.installFinalFlavour(self.flavourToInstall)
212                        try:
213                                os.system(command)
214                        except Exception as e:
215                                print e
216                else:
217                        print ("  [Lliurex-up]: Meta is correct. Nothing to do")
218
219                return                 
220
221
222        def postActionsScript(self):
223
224                command=self.lliurexcore.postActionsScript()+'  2>&1 1>/dev/null | tee ' + self.lliurexcore.errorpostaction_token
225                try:
226                        os.system(command)
227                except Exception as e:
228                        print e                         
229
230        def checkFinalUpgrade(self):
231               
232                print ("  [Lliurex-up]: Checking ")
233                error=self.lliurexcore.checkErrorDistUpgrade()
234
235                # cmd='dpkg -l | grep "^i[^i]" >' + self.errorupgrade_token
236                # os.system(cmd)
237               
238                # if os.path.exists(self.errorupgrade_token):
239                #       aux = open(self.errorupgrade_token,'r')
240                #       lines = aux.readlines()
241                #       aux.close()
242                       
243                #       if len(lines)>0:
244                #               error=True
245
246                #       else:
247                #               j=0
248                #               cmd='apt-get dist-upgrade -sV >' + self.finalupgrade_token
249                #               os.system(cmd)
250                #               if os.path.exists(self.finalupgrade_token):
251                #                       aux = open(self.finalupgrade_token,'r')
252                #                       lines = aux.readlines()
253                #                       aux.close()
254
255                #                       for x in lines:
256                #                               if 'Inst' in x:
257                #                                       j=j+1
258
259                #                       if j>0:
260                #                               error=True     
261                if error:
262                        print("  [Lliurex-up]: The updated process is endend with errors")
263               
264                else:                                   
265                        print("  [Lliurex-up]: The system is now update")                       
266
267        def main(self,mode):
268
269                if mode=="sai":
270                        self.initActionsArg="initActionsSai"
271                       
272                else:
273                        self.initActionsArg="initActions"       
274
275                print("  [Lliurex-up]: Checking system")
276                self.initActionsScript()
277                print("  [Lliurex-up]: Checking Lliurex-up version")
278                self.checkLliurexUp()
279                print("  [Lliurex-up]: Checking if mirror is updated")
280                self.checkMirror()
281                print("  [Lliurex-up]: Checking LliurexVersion from local repository")
282                self.version_update=self.lliurexcore.getLliurexVersionLocal()
283                print("  [Lliurex-up]: Checking LliurexVersion from lliurex.net")
284                self.version_available=self.lliurexcore.getLliurexVersionLliurexNet()
285
286                print("  [Lliurex-up]: Checking if installation of flavour is required")
287                self.checkingInitialFlavourToInstall()
288
289                print("  [Lliurex-up]: Checking for new updates")
290                self.packages=self.lliurexcore.getPackagesToUpdate()
291
292                if not self.checkingIncorrectFlavours():
293                        if len(self.packages)>0:
294                                print("  [Lliurex-up]:List of packages to update")
295                                for item in self.packages:
296                                        print item + ": " + self.packages[item]["candidate"]
297
298                                response=raw_input('  [LLiurex-up]: Do you want to udpate the system(yes/no)): ').lower()
299                                if response.startswith('y'):
300                                        print("  [Lliurex-up]: Preparing system to update")
301                                        self.preActionsScript()
302                                        print("  [Lliurex-up]: Downloading and installing packages")
303                                        self.distUpgrade()
304                                        print("  [Lliurex-up]: Ending the update")
305                                        self.postActionsScript()
306                                        print("  [Lliurex-up]: Checking Final Flavour")
307                                        self.checkingFinalFlavourToInstall()   
308                                        self.checkFinalUpgrade()
309                                        self.lliurexcore.cleanEnvironment()
310
311                                else:
312                                        print("  [Lliurex-up]: Cancel the update")
313                                        self.lliurexcore.cleanEnvironment()
314                                        return 0       
315                        else:
316                                if not self.checkPreviousUpgrade():
317                                        print("  [Lliurex-up]: Your systems is updated. Nothing to do")
318                                        return 0
319                                else:
320                                        print("  [Lliurex-up]: Updated abort. An error occurred checking new updates")
321                                        return 1
322                else:
323                        print("[Lliurex-up]: Updated abort for incorrect flavours detected in new update")
324                        return 1                       
325
326def     usage():
327        puts("Usage")
328        with indent(4):
329                puts("lliurex-upgrade [FLAGS...]")
330                puts("Flags")
331                with indent(4):
332                        puts("-h --help: Show help")
333                        puts("-s --sai: Update the system without checking sources list")       
334
335        sys.exit(1)             
336
337
338
339if __name__ == '__main__':
340        if os.geteuid() != 0:
341                print "You need be root!"
342                sys.exit(1)
343        mode=None       
344        args=arguments.Args().copy
345       
346        if args.contains(["-h", "--help"]):
347                usage()
348       
349        if args.contains(["-s", "--sai"]):
350                mode="sai"
351        else:
352                if len(args)>0:
353                        usage() 
354       
355        lliurexupcli = LliurexUpCli()   
356        sys.exit(lliurexupcli.main(mode))
Note: See TracBrowser for help on using the repository browser.