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
RevLine 
[3391]1#!/usr/bin/env python
2
3from clint import arguments
4from clint.textui import puts, indent, colored
5import lliurex.lliurexup
6import os
7import sys
[3405]8import commands
[3493]9import datetime
[3391]10
[3426]11class LliurexUpCli(object):
[3391]12        def __init__(self):
[3411]13
[3391]14                self.lliurexcore = lliurex.lliurexup.LliurexUpCore()
[3493]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)
[3411]17                self.checkInitialFlavour()
18       
19        def checkInitialFlavour(self):
[3391]20
[3449]21                self.targetMetapackage=self.lliurexcore.checkInitialFlavour()
[3493]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               
[3411]27
[3405]28        def initActionsScript(self):
[3411]29
[3449]30                command=self.lliurexcore.initActionsScript(self.initActionsArg)
[3493]31               
[3405]32                try:
33                        os.system(command)
[3493]34                        log_msg="Exec Init-Actions"
35                        self.log(log_msg)       
[3405]36                except Exception as e:
[3493]37                        log_msg="Exec Init-Actions.Error: " +str(e)
38                        self.log(log_msg)
[3405]39                        print e         
40
41        def checkLliurexUp(self):
42
43                is_lliurexup_updated=self.lliurexcore.isLliurexUpIsUpdated()
44
[3493]45
[3405]46                if not is_lliurexup_updated:
47                        print ("  [Lliurex-up]: Updating Lliurex-up")
48                        is_lliurexup_installed=self.lliurexcore.installLliurexUp()
[3493]49                        log_msg="Installing lliurex-up. Returncode: " + str(is_lliurexup_installed['returncode']) + ". Error: " + str(is_lliurexup_installed['stderrs'])
50                        self.log(log_msg)
[3405]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:
[3493]56                        log_msg="Checking lliurex-up. Is lliurex-up updated: "+ str(is_lliurexup_updated)
57                        self.log(log_msg)
[3405]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':
[3493]69                                log_msg="Checking mirror. Is mirror update: False"
70                                self.log(log_msg)
[3405]71                                if not is_mirror_running:
[3449]72                                        response=raw_input('  [LLiurex-up]: Do you want update mirror (yes/no): ').lower()
[3405]73                                        if response.startswith('y'):
[3493]74                                                log_msg="Update lliurex-mirror: Yes"
75                                                self.log(log_msg)
[3405]76                                                print("  [Lliurex-up]: Updating mirror. Wait a moment please")
77                                                command='lliurex-mirror update llx16'
78                                                os.system(command)
79                                        else:
[3493]80                                                log_msg="Update lliurex-mirror: No"
81                                                self.log(log_msg)
[3405]82                                                print("  [Lliurex-up]: Mirror update.Nothing to do")           
83                else:
[3493]84                        log_msg="Checking mirror. Is mirror update: None"
85                        self.log(log_msg)
[3405]86                        print("  [Lliurex-up]: Nothing to do with mirror")
87
88       
89        def checkingInitialFlavourToInstall(self):
90
[3514]91                self.returncode_initflavour=0
[3449]92
[3411]93                if self.targetMetapackage == None:
[3493]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                       
[3411]108                else:
[3493]109                        print "  [Lliurex-up]: Installation of metapackage is required: " + str(self.targetMetapackage)
[3411]110                        is_flavour_installed=self.lliurexcore.installInitialFlavour(self.targetMetapackage)     
[3493]111                        self.returncode_initflavour=is_flavour_installed['returncode']
[3411]112                        error=is_flavour_installed['stderrs']
[3514]113                        log_msg="Install initial metapackage:" + self.targetMetapackage + ": Returncode: " + str(self.returncode_initflavour) + " Error: " + str(error)
[3493]114                        self.log(log_msg)
[3514]115                        print "  [Lliurex-up]: Metapackage is now installed: " + str(self.returncode_initflavour) + " Error: " + str(error)
[3405]116
[3411]117       
118        def checkingIncorrectFlavours(self):
119               
[3449]120                incorrectFlavours=self.lliurexcore.checkIncorrectFlavours()
[3493]121                log_msg="Checking incorrect metapackages. Others metapackages detected: " + str(incorrectFlavours)
122                self.log(log_msg)
123
[3449]124                return incorrectFlavours
[3493]125               
[3411]126
[3426]127        def checkPreviousUpgrade(self):
128               
129                error=False
[3493]130                if self.returncode_initflavour!=0:
131                        error=True
132
[3426]133                else:
[3493]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
[3426]140
141                return error                   
142
[3405]143        def preActionsScript(self):
[3411]144
[3405]145                command=self.lliurexcore.preActionsScript()
146                try:
147                        os.system(command)
[3493]148                        log_msg="Exec Pre-Actions"
149                        self.log(log_msg)
[3405]150
151                except Exception as e:
[3493]152                        log_msg="Exec Pre-Actions. Error " +str(e)
153                        self.log(log_msg)
[3405]154                        print e
155
156        def distUpgrade(self):
[3411]157
[3405]158                command=self.lliurexcore.distUpgradeProcess()
159                try:
160                        os.system(command)
[3493]161                        log_msg="Exec Dist-uggrade"
162                        self.log(log_msg)
[3405]163                except Exception as e:
[3493]164                        log_msg="Exec Dist-uggrade.Error : " +str(e)
165                        self.log(log_msg)
[3405]166                        print e
167
[3493]168        def checkingFinalFlavourToInstall(self):
[3426]169               
[3493]170                #self.flavourToInstall=self.lliurexcore.checkFinalFlavour()
171                self.flavourToInstall=self.lliurexcore.checkFlavour()
[3426]172
[3493]173                log_msg="Final check metapackage. Metapackage to install: " + str(self.flavourToInstall)
174                self.log(log_msg)
[3426]175               
176                if self.flavourToInstall!=None:
[3493]177                        print ("  [Lliurex-up]: Install of metapackage is required: " + str(self.flavourToInstall))
178                       
[3426]179                        command=self.lliurexcore.installFinalFlavour(self.flavourToInstall)
180                        try:
181                                os.system(command)
[3493]182                               
[3426]183                        except Exception as e:
184                                print e
185                else:
[3514]186                        print ("  [Lliurex-up]: Metapackage is correct. Nothing to do")
[3426]187
188
[3405]189        def postActionsScript(self):
[3411]190
[3449]191                command=self.lliurexcore.postActionsScript()+'  2>&1 1>/dev/null | tee ' + self.lliurexcore.errorpostaction_token
[3405]192                try:
193                        os.system(command)
[3493]194                        log_msg="Exec Post-Actions"
195                        self.log(log_msg)
[3405]196                except Exception as e:
[3426]197                        print e                         
[3405]198
[3426]199        def checkFinalUpgrade(self):
200               
[3493]201                print ("  [Lliurex-up]: Checking Dist-upgrade ")
[3449]202                error=self.lliurexcore.checkErrorDistUpgrade()
[3391]203
[3426]204                if error:
205                        print("  [Lliurex-up]: The updated process is endend with errors")
[3493]206                        log_msg="Dist-upgrade process ending with errors"
[3426]207               
208                else:                                   
[3493]209                        print("  [Lliurex-up]: The system is now update")       
210                        log_msg="Dist-upgrade process ending OK"
211               
212                self.log(log_msg)
[3426]213
[3493]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
[3426]221        def main(self,mode):
222
223                if mode=="sai":
[3449]224                        self.initActionsArg="initActionsSai"
225                       
226                else:
[3493]227                        mode="nomal"
[3449]228                        self.initActionsArg="initActions"       
[3426]229
[3493]230                log_msg="Mode of execution: " + str(mode)
231                self.log(log_msg)
232                       
[3405]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")
[3426]240                self.version_update=self.lliurexcore.getLliurexVersionLocal()
[3493]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
[3405]246                print("  [Lliurex-up]: Checking LliurexVersion from lliurex.net")
[3426]247                self.version_available=self.lliurexcore.getLliurexVersionLliurexNet()
[3493]248                log_msg="Get LliurexVersion candidate from Lliurex Net: " + str(self.version_available["candidate"])
249                self.log(log_msg)
[3391]250
[3514]251                print("  [Lliurex-up]: Checking if installation of metapackage is required")
[3411]252                self.checkingInitialFlavourToInstall()
[3405]253
254                print("  [Lliurex-up]: Checking for new updates")
[3411]255                self.packages=self.lliurexcore.getPackagesToUpdate()
[3405]256
[3426]257                if not self.checkingIncorrectFlavours():
258                        if len(self.packages)>0:
[3411]259                                print("  [Lliurex-up]:List of packages to update")
[3493]260                                log_msg="Number of packages: "+ str(len(self.packages))
261                                self.log(log_msg)
262
[3411]263                                for item in self.packages:
264                                        print item + ": " + self.packages[item]["candidate"]
[3405]265
[3426]266                                response=raw_input('  [LLiurex-up]: Do you want to udpate the system(yes/no)): ').lower()
[3411]267                                if response.startswith('y'):
[3426]268                                        print("  [Lliurex-up]: Preparing system to update")
[3411]269                                        self.preActionsScript()
270                                        print("  [Lliurex-up]: Downloading and installing packages")
271                                        self.distUpgrade()
272                                        print("  [Lliurex-up]: Ending the update")
273                                        self.postActionsScript()
[3514]274                                        print("  [Lliurex-up]: Checking final metapackage")
[3426]275                                        self.checkingFinalFlavourToInstall()   
276                                        self.checkFinalUpgrade()
[3411]277                                        self.lliurexcore.cleanEnvironment()
[3405]278
[3411]279                                else:
[3493]280                                        log_msg="Cancel the update"
281                                        self.log(log_msg)
[3411]282                                        print("  [Lliurex-up]: Cancel the update")
283                                        self.lliurexcore.cleanEnvironment()
284                                        return 0       
[3405]285                        else:
[3426]286                                if not self.checkPreviousUpgrade():
287                                        print("  [Lliurex-up]: Your systems is updated. Nothing to do")
[3514]288                                        self.lliurexcore.cleanEnvironment()
[3426]289                                        return 0
290                                else:
291                                        print("  [Lliurex-up]: Updated abort. An error occurred checking new updates")
[3514]292                                        self.lliurexcore.cleanEnvironment()
[3426]293                                        return 1
[3405]294                else:
[3426]295                        print("[Lliurex-up]: Updated abort for incorrect flavours detected in new update")
[3514]296                        self.lliurexcore.cleanEnvironment()
297
[3426]298                        return 1                       
[3405]299
[3426]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")       
[3405]308
[3426]309        sys.exit(1)             
[3405]310
311
[3426]312
[3391]313if __name__ == '__main__':
314        if os.geteuid() != 0:
315                print "You need be root!"
316                sys.exit(1)
[3426]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"
[3449]325        else:
326                if len(args)>0:
327                        usage() 
[3426]328       
329        lliurexupcli = LliurexUpCli()   
330        sys.exit(lliurexupcli.main(mode))
Note: See TracBrowser for help on using the repository browser.