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

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

Fix code

  • Property svn:executable set to *
File size: 10.0 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 datetime
10
11class LliurexUpCli(object):
12        def __init__(self):
13
14                self.lliurexcore = lliurex.lliurexup.LliurexUpCore()
15                log_msg="------------------------------------------\n"+"LLIUREX-UP-CLI STARTING AT: " + datetime.datetime.today().strftime("%d/%m/%y %H:%M:%S") +"\n------------------------------------------"
16                self.log(log_msg)
17                self.checkInitialFlavour()
18       
19        def checkInitialFlavour(self):
20
21                self.targetMetapackage=self.lliurexcore.checkInitialFlavour()
22                log_msg="Initial check metapackage. Metapackage to install: " + str(self.targetMetapackage)
23                self.log(log_msg)
24                log_msg="Get initial flavours: " + str(self.lliurexcore.previuosFlavours)
25                self.log(log_msg)
26               
27
28        def initActionsScript(self):
29
30                command=self.lliurexcore.initActionsScript(self.initActionsArg)
31               
32                try:
33                        os.system(command)
34                        log_msg="Exec Init-Actions"
35                        self.log(log_msg)       
36                except Exception as e:
37                        log_msg="Exec Init-Actions.Error: " +str(e)
38                        self.log(log_msg)
39                        print e         
40
41        def checkLliurexUp(self):
42
43                is_lliurexup_updated=self.lliurexcore.isLliurexUpIsUpdated()
44
45
46                if not is_lliurexup_updated:
47                        print ("  [Lliurex-up]: Updating Lliurex-up")
48                        is_lliurexup_installed=self.lliurexcore.installLliurexUp()
49                        log_msg="Installing lliurex-up. Returncode: " + str(is_lliurexup_installed['returncode']) + ". Error: " + str(is_lliurexup_installed['stderrs'])
50                        self.log(log_msg)
51                        print ("  [Lliurex-up]: Lliurex-up is now udpate and will be reboot now" )
52                        time.sleep(3)
53                        os.execv("lliurex-upgrade",sys.argv)   
54
55                else:
56                        log_msg="Checking lliurex-up. Is lliurex-up updated: "+ str(is_lliurexup_updated)
57                        self.log(log_msg)
58                        print ("  [Lliurex-up]: Lliurex-up is updated.Nothing to do")   
59
60
61        def checkMirror(self):
62
63                is_mirror_updated=self.lliurexcore.lliurexMirrorIsUpdated()
64
65                if is_mirror_updated !=None:
66                        is_mirror_running=self.lliurexcore.lliurexMirrorIsRunning()
67
68                        if is_mirror_updated['action']=='update':
69                                log_msg="Checking mirror. Is mirror update: False"
70                                self.log(log_msg)
71                                if not is_mirror_running:
72                                        response=raw_input('  [LLiurex-up]: Do you want update mirror (yes/no): ').lower()
73                                        if response.startswith('y'):
74                                                log_msg="Update lliurex-mirror: Yes"
75                                                self.log(log_msg)
76                                                print("  [Lliurex-up]: Updating mirror. Wait a moment please")
77                                                command='lliurex-mirror update llx16'
78                                                os.system(command)
79                                        else:
80                                                log_msg="Update lliurex-mirror: No"
81                                                self.log(log_msg)
82                                                print("  [Lliurex-up]: Mirror update.Nothing to do")           
83                else:
84                        log_msg="Checking mirror. Is mirror update: None"
85                        self.log(log_msg)
86                        print("  [Lliurex-up]: Nothing to do with mirror")
87
88       
89        def checkingInitialFlavourToInstall(self):
90
91                self.returncode_initflavour=0
92
93                if self.targetMetapackage == None:
94                        # self.flavourToInstall=self.lliurexcore.requiresInstallFlavour()
95                        # if self.flavourToInstall != None:
96                        #       log_msg="Requires Install this Flavour: " + str(self.flavourToInstall)
97                        #       self.log(log_msg)       
98                        #       print "  [Lliurex-up]: Installation of flavour is required: " +str(self.flavourToInstall)
99                        #       is_flavour_installed=self.lliurexcore.installInitialFlavour(self.flavourToInstall)     
100                        #       returncode=is_flavour_installed['returncode']
101                        #       error=is_flavour_installed['stderrs']
102                        #       print "  [Lliurex-up]: Flavour is now installed: " + str(returncode) + " Error: " + str(error)
103                        #       log_msg="Install initial flavour:" + flavourToInstall + ": Returncode: " + str(returncode) + " Error: " + str(error)
104                        #       self.log(log_msg)
105                        # else:
106                        print "  [Lliurex-up]: Installation of metapackage is not required"
107                       
108                else:
109                        print "  [Lliurex-up]: Installation of metapackage is required: " + str(self.targetMetapackage)
110                        is_flavour_installed=self.lliurexcore.installInitialFlavour(self.targetMetapackage)     
111                        self.returncode_initflavour=is_flavour_installed['returncode']
112                        error=is_flavour_installed['stderrs']
113                        log_msg="Install initial metapackage:" + self.targetMetapackage + ": Returncode: " + str(self.returncode_initflavour) + " Error: " + str(error)
114                        self.log(log_msg)
115                        print "  [Lliurex-up]: Metapackage is now installed: " + str(self.returncode_initflavour) + " Error: " + str(error)
116
117       
118        def checkingIncorrectFlavours(self):
119               
120                incorrectFlavours=self.lliurexcore.checkIncorrectFlavours()
121                log_msg="Checking incorrect metapackages. Others metapackages detected: " + str(incorrectFlavours)
122                self.log(log_msg)
123
124                return incorrectFlavours
125               
126
127        def checkPreviousUpgrade(self):
128               
129                error=False
130                if self.returncode_initflavour!=0:
131                        error=True
132
133                else:
134                        if self.version_update["candidate"]!=None:
135                                if self.version_update["installed"]!=self.version_update["candidate"]:
136                                        error=True
137                        else:
138                                if self.version_update["installed"]!=self.version_available["candidate"]:       
139                                        error=True
140
141                return error                   
142
143        def preActionsScript(self):
144
145                command=self.lliurexcore.preActionsScript()
146                try:
147                        os.system(command)
148                        log_msg="Exec Pre-Actions"
149                        self.log(log_msg)
150
151                except Exception as e:
152                        log_msg="Exec Pre-Actions. Error " +str(e)
153                        self.log(log_msg)
154                        print e
155
156        def distUpgrade(self):
157
158                command=self.lliurexcore.distUpgradeProcess()
159                try:
160                        os.system(command)
161                        log_msg="Exec Dist-uggrade"
162                        self.log(log_msg)
163                except Exception as e:
164                        log_msg="Exec Dist-uggrade.Error : " +str(e)
165                        self.log(log_msg)
166                        print e
167
168        def checkingFinalFlavourToInstall(self):
169               
170                #self.flavourToInstall=self.lliurexcore.checkFinalFlavour()
171                self.flavourToInstall=self.lliurexcore.checkFlavour()
172
173                log_msg="Final check metapackage. Metapackage to install: " + str(self.flavourToInstall)
174                self.log(log_msg)
175               
176                if self.flavourToInstall!=None:
177                        print ("  [Lliurex-up]: Install of metapackage is required: " + str(self.flavourToInstall))
178                       
179                        command=self.lliurexcore.installFinalFlavour(self.flavourToInstall)
180                        try:
181                                os.system(command)
182                               
183                        except Exception as e:
184                                print e
185                else:
186                        print ("  [Lliurex-up]: Metapackage is correct. Nothing to do")
187
188
189        def postActionsScript(self):
190
191                command=self.lliurexcore.postActionsScript()+'  2>&1 1>/dev/null | tee ' + self.lliurexcore.errorpostaction_token
192                try:
193                        os.system(command)
194                        log_msg="Exec Post-Actions"
195                        self.log(log_msg)
196                except Exception as e:
197                        print e                         
198
199        def checkFinalUpgrade(self):
200               
201                print ("  [Lliurex-up]: Checking Dist-upgrade ")
202                error=self.lliurexcore.checkErrorDistUpgrade()
203
204                if error:
205                        print("  [Lliurex-up]: The updated process is endend with errors")
206                        log_msg="Dist-upgrade process ending with errors"
207               
208                else:                                   
209                        print("  [Lliurex-up]: The system is now update")       
210                        log_msg="Dist-upgrade process ending OK"
211               
212                self.log(log_msg)
213
214        def log(self,msg):
215               
216                log_file="/var/log/lliurex-up.log"
217                f=open(log_file,"a+")
218                f.write(msg + '\n')
219                f.close()               
220
221        def main(self,mode):
222
223                if mode=="sai":
224                        self.initActionsArg="initActionsSai"
225                       
226                else:
227                        mode="nomal"
228                        self.initActionsArg="initActions"       
229
230                log_msg="Mode of execution: " + str(mode)
231                self.log(log_msg)
232                       
233                print("  [Lliurex-up]: Checking system")
234                self.initActionsScript()
235                print("  [Lliurex-up]: Checking Lliurex-up version")
236                self.checkLliurexUp()
237                print("  [Lliurex-up]: Checking if mirror is updated")
238                self.checkMirror()
239                print("  [Lliurex-up]: Checking LliurexVersion from local repository")
240                self.version_update=self.lliurexcore.getLliurexVersionLocal()
241                log_msg="Get LliurexVersion installed: " + str(self.version_update["installed"])
242                self.log(log_msg)
243                log_msg="Get LliurexVersion candidate from Local repository: " + str(self.version_update["candidate"])
244                self.log(log_msg)
245
246                print("  [Lliurex-up]: Checking LliurexVersion from lliurex.net")
247                self.version_available=self.lliurexcore.getLliurexVersionLliurexNet()
248                log_msg="Get LliurexVersion candidate from Lliurex Net: " + str(self.version_available["candidate"])
249                self.log(log_msg)
250
251                print("  [Lliurex-up]: Checking if installation of metapackage is required")
252                self.checkingInitialFlavourToInstall()
253
254                print("  [Lliurex-up]: Checking for new updates")
255                self.packages=self.lliurexcore.getPackagesToUpdate()
256
257                if not self.checkingIncorrectFlavours():
258                        if len(self.packages)>0:
259                                print("  [Lliurex-up]:List of packages to update")
260                                log_msg="Number of packages: "+ str(len(self.packages))
261                                self.log(log_msg)
262
263                                for item in self.packages:
264                                        print item + ": " + self.packages[item]["candidate"]
265
266                                response=raw_input('  [LLiurex-up]: Do you want to udpate the system(yes/no)): ').lower()
267                                if response.startswith('y'):
268                                        print("  [Lliurex-up]: Preparing system to update")
269                                        self.preActionsScript()
270                                        print("  [Lliurex-up]: Downloading and installing packages")
271                                        self.distUpgrade()
272                                        print("  [Lliurex-up]: Ending the update")
273                                        self.postActionsScript()
274                                        print("  [Lliurex-up]: Checking final metapackage")
275                                        self.checkingFinalFlavourToInstall()   
276                                        self.checkFinalUpgrade()
277                                        self.lliurexcore.cleanEnvironment()
278
279                                else:
280                                        log_msg="Cancel the update"
281                                        self.log(log_msg)
282                                        print("  [Lliurex-up]: Cancel the update")
283                                        self.lliurexcore.cleanEnvironment()
284                                        return 0       
285                        else:
286                                if not self.checkPreviousUpgrade():
287                                        print("  [Lliurex-up]: Your systems is updated. Nothing to do")
288                                        self.lliurexcore.cleanEnvironment()
289                                        return 0
290                                else:
291                                        print("  [Lliurex-up]: Updated abort. An error occurred checking new updates")
292                                        self.lliurexcore.cleanEnvironment()
293                                        return 1
294                else:
295                        print("[Lliurex-up]: Updated abort for incorrect flavours detected in new update")
296                        self.lliurexcore.cleanEnvironment()
297
298                        return 1                       
299
300def     usage():
301        puts("Usage")
302        with indent(4):
303                puts("lliurex-upgrade [FLAGS...]")
304                puts("Flags")
305                with indent(4):
306                        puts("-h --help: Show help")
307                        puts("-s --sai: Update the system without checking sources list")       
308
309        sys.exit(1)             
310
311
312
313if __name__ == '__main__':
314        if os.geteuid() != 0:
315                print "You need be root!"
316                sys.exit(1)
317        mode=None       
318        args=arguments.Args().copy
319       
320        if args.contains(["-h", "--help"]):
321                usage()
322       
323        if args.contains(["-s", "--sai"]):
324                mode="sai"
325        else:
326                if len(args)>0:
327                        usage() 
328       
329        lliurexupcli = LliurexUpCli()   
330        sys.exit(lliurexupcli.main(mode))
Note: See TracBrowser for help on using the repository browser.