133 lines
3.9 KiB
Python
133 lines
3.9 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
"""
|
||
|
|
||
|
Copyright (C) 2013-2014 Team-XBMC
|
||
|
Copyright (C) 2014-2019 Team Kodi
|
||
|
|
||
|
This file is part of service.xbmc.versioncheck
|
||
|
|
||
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||
|
See LICENSES/GPL-3.0-or-later.txt for more information.
|
||
|
|
||
|
"""
|
||
|
|
||
|
import sys
|
||
|
|
||
|
from .common import log
|
||
|
from .handler import Handler
|
||
|
|
||
|
try:
|
||
|
from subprocess import check_output
|
||
|
except ImportError:
|
||
|
check_output = None
|
||
|
log('ImportError: subprocess')
|
||
|
|
||
|
|
||
|
class ShellHandlerApt(Handler):
|
||
|
""" Apt shell handler
|
||
|
"""
|
||
|
|
||
|
def __init__(self, use_sudo=False):
|
||
|
Handler.__init__(self)
|
||
|
self.sudo = use_sudo
|
||
|
self._update = False
|
||
|
installed, _ = self._check_versions('kodi')
|
||
|
if not installed:
|
||
|
# there is no package installed via repo, so we exit here
|
||
|
log('No installed package found, exiting')
|
||
|
sys.exit(0)
|
||
|
self._update = True
|
||
|
|
||
|
def _check_versions(self, package):
|
||
|
""" Check apt package versions
|
||
|
|
||
|
:param package: package to check
|
||
|
:type package: str
|
||
|
:return: installed version, candidate version
|
||
|
:rtype: str, str / False, False
|
||
|
"""
|
||
|
_cmd = 'apt-cache policy ' + package
|
||
|
|
||
|
if self.update and not self._update_cache():
|
||
|
return False, False
|
||
|
|
||
|
try:
|
||
|
result = check_output([_cmd], shell=True).split('\n')
|
||
|
except Exception as error: # pylint: disable=broad-except
|
||
|
log('ShellHandlerApt: exception while executing shell command %s: %s' % (_cmd, error))
|
||
|
return False, False
|
||
|
|
||
|
if result[0].replace(':', '') == package:
|
||
|
installed = result[1].split()[1]
|
||
|
candidate = result[2].split()[1]
|
||
|
if installed == '(none)':
|
||
|
installed = False
|
||
|
if candidate == '(none)':
|
||
|
candidate = False
|
||
|
return installed, candidate
|
||
|
|
||
|
log('ShellHandlerApt: error during version check')
|
||
|
return False, False
|
||
|
|
||
|
def _update_cache(self):
|
||
|
""" Update apt cache
|
||
|
|
||
|
:return: success of updating apt cache
|
||
|
:rtype: bool
|
||
|
"""
|
||
|
_cmd = 'apt-get update'
|
||
|
try:
|
||
|
if self.sudo:
|
||
|
_ = check_output('echo \'%s\' | sudo -S %s' %
|
||
|
(self._get_password(), _cmd), shell=True)
|
||
|
else:
|
||
|
_ = check_output(_cmd.split())
|
||
|
except Exception as error: # pylint: disable=broad-except
|
||
|
log('Exception while executing shell command %s: %s' % (_cmd, error))
|
||
|
return False
|
||
|
|
||
|
return True
|
||
|
|
||
|
def upgrade_package(self, package):
|
||
|
""" Upgrade apt package
|
||
|
|
||
|
:param package: package to upgrade
|
||
|
:type package: str
|
||
|
:return: success of apt package upgrade
|
||
|
:rtype: bool
|
||
|
"""
|
||
|
_cmd = 'apt-get install -y ' + package
|
||
|
try:
|
||
|
if self.sudo:
|
||
|
_ = check_output('echo \'%s\' | sudo -S %s' %
|
||
|
(self._get_password(), _cmd), shell=True)
|
||
|
else:
|
||
|
_ = check_output(_cmd.split())
|
||
|
log('Upgrade successful')
|
||
|
except Exception as error: # pylint: disable=broad-except
|
||
|
log('Exception while executing shell command %s: %s' % (_cmd, error))
|
||
|
return False
|
||
|
|
||
|
return True
|
||
|
|
||
|
def upgrade_system(self):
|
||
|
""" Upgrade system
|
||
|
|
||
|
:return: success of system upgrade
|
||
|
:rtype: bool
|
||
|
"""
|
||
|
_cmd = 'apt-get upgrade -y'
|
||
|
try:
|
||
|
log('Upgrading system')
|
||
|
if self.sudo:
|
||
|
_ = check_output('echo \'%s\' | sudo -S %s' %
|
||
|
(self._get_password(), _cmd), shell=True)
|
||
|
else:
|
||
|
_ = check_output(_cmd.split())
|
||
|
except Exception as error: # pylint: disable=broad-except
|
||
|
log('Exception while executing shell command %s: %s' % (_cmd, error))
|
||
|
return False
|
||
|
|
||
|
return True
|