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

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

Add log in n cli and add sources for client

  • Property svn:executable set to *
File size: 9.9 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
[3449]91
[3411]92                if self.targetMetapackage == None:
[3493]93                        # self.flavourToInstall=self.lliurexcore.requiresInstallFlavour()
94                        # if self.flavourToInstall != None:
95                        #       log_msg="Requires Install this Flavour: " + str(self.flavourToInstall)
96                        #       self.log(log_msg)       
97                        #       print "  [Lliurex-up]: Installation of flavour is required: " +str(self.flavourToInstall)
98                        #       is_flavour_installed=self.lliurexcore.installInitialFlavour(self.flavourToInstall)     
99                        #       returncode=is_flavour_installed['returncode']
100                        #       error=is_flavour_installed['stderrs']
101                        #       print "  [Lliurex-up]: Flavour is now installed: " + str(returncode) + " Error: " + str(error)
102                        #       log_msg="Install initial flavour:" + flavourToInstall + ": Returncode: " + str(returncode) + " Error: " + str(error)
103                        #       self.log(log_msg)
104                        # else:
105                        print "  [Lliurex-up]: Installation of metapackage is not required"
106                       
[3411]107                else:
[3493]108                        print "  [Lliurex-up]: Installation of metapackage is required: " + str(self.targetMetapackage)
[3411]109                        is_flavour_installed=self.lliurexcore.installInitialFlavour(self.targetMetapackage)     
[3493]110                        self.returncode_initflavour=is_flavour_installed['returncode']
[3411]111                        error=is_flavour_installed['stderrs']
[3493]112                        log_msg="Install initial flavour:" + self.targetMetapackage + ": Returncode: " + str(self.returncode_initflavour) + " Error: " + str(error)
113                        self.log(log_msg)
114                        print "  [Lliurex-up]: Metapackage is now installed: " + str(returncode) + " Error: " + str(error)
[3405]115
[3411]116       
117        def checkingIncorrectFlavours(self):
118               
[3449]119                incorrectFlavours=self.lliurexcore.checkIncorrectFlavours()
[3493]120                log_msg="Checking incorrect metapackages. Others metapackages detected: " + str(incorrectFlavours)
121                self.log(log_msg)
122
[3449]123                return incorrectFlavours
[3493]124               
[3411]125
[3426]126        def checkPreviousUpgrade(self):
127               
128                error=False
[3493]129                if self.returncode_initflavour!=0:
130                        error=True
131
[3426]132                else:
[3493]133                        if self.version_update["candidate"]!=None:
134                                if self.version_update["installed"]!=self.version_update["candidate"]:
135                                        error=True
136                        else:
137                                if self.version_update["installed"]!=self.version_available["candidate"]:       
138                                        error=True
[3426]139
140                return error                   
141
[3405]142        def preActionsScript(self):
[3411]143
[3405]144                command=self.lliurexcore.preActionsScript()
145                try:
146                        os.system(command)
[3493]147                        log_msg="Exec Pre-Actions"
148                        self.log(log_msg)
[3405]149
150                except Exception as e:
[3493]151                        log_msg="Exec Pre-Actions. Error " +str(e)
152                        self.log(log_msg)
[3405]153                        print e
154
155        def distUpgrade(self):
[3411]156
[3405]157                command=self.lliurexcore.distUpgradeProcess()
158                try:
159                        os.system(command)
[3493]160                        log_msg="Exec Dist-uggrade"
161                        self.log(log_msg)
[3405]162                except Exception as e:
[3493]163                        log_msg="Exec Dist-uggrade.Error : " +str(e)
164                        self.log(log_msg)
[3405]165                        print e
166
[3493]167        def checkingFinalFlavourToInstall(self):
[3426]168               
[3493]169                #self.flavourToInstall=self.lliurexcore.checkFinalFlavour()
170                self.flavourToInstall=self.lliurexcore.checkFlavour()
[3426]171
[3493]172                log_msg="Final check metapackage. Metapackage to install: " + str(self.flavourToInstall)
173                self.log(log_msg)
[3426]174               
175                if self.flavourToInstall!=None:
[3493]176                        print ("  [Lliurex-up]: Install of metapackage is required: " + str(self.flavourToInstall))
177                       
[3426]178                        command=self.lliurexcore.installFinalFlavour(self.flavourToInstall)
179                        try:
180                                os.system(command)
[3493]181                               
[3426]182                        except Exception as e:
183                                print e
184                else:
[3493]185                        print ("  [Lliurex-up]: metapackage is correct. Nothing to do")
[3426]186
187
[3405]188        def postActionsScript(self):
[3411]189
[3449]190                command=self.lliurexcore.postActionsScript()+'  2>&1 1>/dev/null | tee ' + self.lliurexcore.errorpostaction_token
[3405]191                try:
192                        os.system(command)
[3493]193                        log_msg="Exec Post-Actions"
194                        self.log(log_msg)
[3405]195                except Exception as e:
[3426]196                        print e                         
[3405]197
[3426]198        def checkFinalUpgrade(self):
199               
[3493]200                print ("  [Lliurex-up]: Checking Dist-upgrade ")
[3449]201                error=self.lliurexcore.checkErrorDistUpgrade()
[3391]202
[3426]203                if error:
204                        print("  [Lliurex-up]: The updated process is endend with errors")
[3493]205                        log_msg="Dist-upgrade process ending with errors"
[3426]206               
207                else:                                   
[3493]208                        print("  [Lliurex-up]: The system is now update")       
209                        log_msg="Dist-upgrade process ending OK"
210               
211                self.log(log_msg)
[3426]212
[3493]213        def log(self,msg):
214               
215                log_file="/var/log/lliurex-up.log"
216                f=open(log_file,"a+")
217                f.write(msg + '\n')
218                f.close()               
219
[3426]220        def main(self,mode):
221
222                if mode=="sai":
[3449]223                        self.initActionsArg="initActionsSai"
224                       
225                else:
[3493]226                        mode="nomal"
[3449]227                        self.initActionsArg="initActions"       
[3426]228
[3493]229                log_msg="Mode of execution: " + str(mode)
230                self.log(log_msg)
231                       
[3405]232                print("  [Lliurex-up]: Checking system")
233                self.initActionsScript()
234                print("  [Lliurex-up]: Checking Lliurex-up version")
235                self.checkLliurexUp()
236                print("  [Lliurex-up]: Checking if mirror is updated")
237                self.checkMirror()
238                print("  [Lliurex-up]: Checking LliurexVersion from local repository")
[3426]239                self.version_update=self.lliurexcore.getLliurexVersionLocal()
[3493]240                log_msg="Get LliurexVersion installed: " + str(self.version_update["installed"])
241                self.log(log_msg)
242                log_msg="Get LliurexVersion candidate from Local repository: " + str(self.version_update["candidate"])
243                self.log(log_msg)
244
[3405]245                print("  [Lliurex-up]: Checking LliurexVersion from lliurex.net")
[3426]246                self.version_available=self.lliurexcore.getLliurexVersionLliurexNet()
[3493]247                log_msg="Get LliurexVersion candidate from Lliurex Net: " + str(self.version_available["candidate"])
248                self.log(log_msg)
[3391]249
[3405]250                print("  [Lliurex-up]: Checking if installation of flavour is required")
[3411]251                self.checkingInitialFlavourToInstall()
[3405]252
253                print("  [Lliurex-up]: Checking for new updates")
[3411]254                self.packages=self.lliurexcore.getPackagesToUpdate()
[3405]255
[3426]256                if not self.checkingIncorrectFlavours():
257                        if len(self.packages)>0:
[3411]258                                print("  [Lliurex-up]:List of packages to update")
[3493]259                                log_msg="Number of packages: "+ str(len(self.packages))
260                                self.log(log_msg)
261
[3411]262                                for item in self.packages:
263                                        print item + ": " + self.packages[item]["candidate"]
[3405]264
[3426]265                                response=raw_input('  [LLiurex-up]: Do you want to udpate the system(yes/no)): ').lower()
[3411]266                                if response.startswith('y'):
[3426]267                                        print("  [Lliurex-up]: Preparing system to update")
[3411]268                                        self.preActionsScript()
269                                        print("  [Lliurex-up]: Downloading and installing packages")
270                                        self.distUpgrade()
271                                        print("  [Lliurex-up]: Ending the update")
272                                        self.postActionsScript()
[3426]273                                        print("  [Lliurex-up]: Checking Final Flavour")
274                                        self.checkingFinalFlavourToInstall()   
275                                        self.checkFinalUpgrade()
[3411]276                                        self.lliurexcore.cleanEnvironment()
[3405]277
[3411]278                                else:
[3493]279                                        log_msg="Cancel the update"
280                                        self.log(log_msg)
[3411]281                                        print("  [Lliurex-up]: Cancel the update")
282                                        self.lliurexcore.cleanEnvironment()
283                                        return 0       
[3405]284                        else:
[3426]285                                if not self.checkPreviousUpgrade():
286                                        print("  [Lliurex-up]: Your systems is updated. Nothing to do")
287                                        return 0
288                                else:
289                                        print("  [Lliurex-up]: Updated abort. An error occurred checking new updates")
290                                        return 1
[3405]291                else:
[3426]292                        print("[Lliurex-up]: Updated abort for incorrect flavours detected in new update")
293                        return 1                       
[3405]294
[3426]295def     usage():
296        puts("Usage")
297        with indent(4):
298                puts("lliurex-upgrade [FLAGS...]")
299                puts("Flags")
300                with indent(4):
301                        puts("-h --help: Show help")
302                        puts("-s --sai: Update the system without checking sources list")       
[3405]303
[3426]304        sys.exit(1)             
[3405]305
306
[3426]307
[3391]308if __name__ == '__main__':
309        if os.geteuid() != 0:
310                print "You need be root!"
311                sys.exit(1)
[3426]312        mode=None       
313        args=arguments.Args().copy
314       
315        if args.contains(["-h", "--help"]):
316                usage()
317       
318        if args.contains(["-s", "--sai"]):
319                mode="sai"
[3449]320        else:
321                if len(args)>0:
322                        usage() 
[3426]323       
324        lliurexupcli = LliurexUpCli()   
325        sys.exit(lliurexupcli.main(mode))
Note: See TracBrowser for help on using the repository browser.