Exemplo n.º 1
0
def download():
    if not os.path.exists(os.path.join(settings.config_path, 'release.json')):
        return True
    release = get_latest_release()
    if release:
        ox.makedirs(settings.updates_path)
        os.chdir(os.path.dirname(settings.base_dir))
        current_files = {'release.json'}
        for module in release['modules']:
            if release['modules'][module]['version'] > current_version(module):
                module_tar = os.path.join(settings.updates_path, release['modules'][module]['name'])
                base_url = settings.server.get('release_url').rsplit('/', 1)[0]
                url = '/'.join([base_url, release['modules'][module]['name']])
                if not os.path.exists(module_tar):
                    logger.debug('download', os.path.basename(module_tar))
                    get(url, module_tar)
                    if ox.sha1sum(module_tar) != release['modules'][module]['sha1']:
                        logger.debug('invalid checksum', os.path.basename(module_tar))
                        os.unlink(module_tar)
                        return False
                current_files.add(os.path.basename(module_tar))
        for f in set(next(os.walk(settings.updates_path))[2])-current_files:
            os.unlink(os.path.join(settings.updates_path, f))
        return True
    return True
Exemplo n.º 2
0
def install():
    if not os.path.exists(os.path.join(settings.updates_path, 'release.json')):
        return True
    if not os.path.exists(os.path.join(settings.config_path, 'release.json')):
        return True
    with open(os.path.join(settings.updates_path, 'release.json')) as fd:
        release = json.load(fd)
    old_version = current_version('openmedialibrary')
    new_version = release['modules']['openmedialibrary']['version']
    if verify(release) and old_version < new_version:
        os.chdir(os.path.dirname(settings.base_dir))
        for module in release['modules']:
            if release['modules'][module]['version'] > current_version(module):
                module_tar = os.path.join(settings.updates_path, release['modules'][module]['name'])
                if os.path.exists(module_tar) and ox.sha1sum(module_tar) == release['modules'][module]['sha1']:
                    #tar fails if old platform is moved before extract
                    new = '%s_new' % module
                    ox.makedirs(new)
                    os.chdir(new)
                    tar = tarfile.open(module_tar)
                    tar.extractall()
                    tar.close()
                    os.chdir(os.path.dirname(settings.base_dir))
                    module_old = '%s_old' % module
                    if os.path.exists(module):
                        shutil.move(module, module_old)
                    shutil.move(os.path.join(new, module), module)
                    if os.path.exists(module_old):
                        shutil.rmtree(module_old)
                    shutil.rmtree(new)
                else:
                    os.unlink(module_tar)
                    return False
        shutil.copy(os.path.join(settings.updates_path, 'release.json'), os.path.join(settings.config_path, 'release.json'))
        for cmd in [
                ['./ctl', 'stop'],
                ['./ctl', 'setup'],
                ['./ctl', 'postupdate', '-o', old_version, '-n', new_version]
            ]:
            subprocess.call(cmd)
        upgrade_app()
        return True
    return True
Exemplo n.º 3
0
 def download_upgrade(self, release):
     for module in release['modules']:
         path = os.path.join(settings.update_path, release['modules'][module]['name'])
         if not os.path.exists(path):
             url = '%s/oml/%s' % (self.url, release['modules'][module]['name'])
             sha1 = release['modules'][module]['sha1']
             headers = {
                 'User-Agent': settings.USER_AGENT,
             }
             self._opener.addheaders = list(zip(headers.keys(), headers.values()))
             r = self._opener.open(url)
             if r.getcode() == 200:
                 with open(path, 'w') as fd:
                     fd.write(r.read())
                     if (ox.sha1sum(path) != sha1):
                         logger.error('invalid update!')
                         os.unlink(path)
                         return False
             else:
                 return False
Exemplo n.º 4
0
 def download_upgrade(self, release):
     for module in release['modules']:
         path = os.path.join(settings.update_path,
                             release['modules'][module]['name'])
         if not os.path.exists(path):
             url = '%s/oml/%s' % (self.url,
                                  release['modules'][module]['name'])
             sha1 = release['modules'][module]['sha1']
             headers = {
                 'User-Agent': settings.USER_AGENT,
             }
             self._opener.addheaders = list(
                 zip(headers.keys(), headers.values()))
             r = self._opener.open(url)
             if r.getcode() == 200:
                 with open(path, 'w') as fd:
                     fd.write(r.read())
                     if (ox.sha1sum(path) != sha1):
                         logger.error('invalid update!')
                         os.unlink(path)
                         return False
             else:
                 return False
Exemplo n.º 5
0
def get_id(f=None, data=None):
    if data:
        return base64.b32encode(hashlib.sha1(data).digest()).decode()
    else:
        return base64.b32encode(
            codecs.decode(ox.sha1sum(f, cached=True), 'hex')).decode()
Exemplo n.º 6
0
def get_id(f=None, data=None):
    if data:
        return base64.b32encode(hashlib.sha1(data).digest()).decode()
    else:
        return base64.b32encode(codecs.decode(ox.sha1sum(f, cached=True), "hex")).decode()