Exemplo n.º 1
1
    def remove(self, ignore_errors=False):
        # Think about ignore_errors
        stream_logger.info("   - %s" % self.name)

        # If archive not already extract
        if not os.path.exists("%s/%s" % (conf.get("settings", "cache"), self.name)):
            self.unarchive()

        self.import_control()
        # Pre Remove
        stream_logger.info("     | Pre Remove")
        self.control.pre_remove()

        # Remove
        stream_logger.info("     | Remove")
        files_list = open(os.path.join(conf.get("settings", "cache"), self.name, "files.lst")).readlines()
        for _file in files_list:
            try:
                os.remove(os.path.join(conf.get("settings", "packages"), _file.replace("\n", "")))
            except:
                pass
        # Post Remove
        stream_logger.info("     | Post Remove")
        self.control.post_remove()

        stream_logger.info("     | Clean")
        shutil.rmtree(os.path.join(conf.get("settings", "cache"), self.name))
Exemplo n.º 2
0
def get_logger(log_file=conf.get('settings', 'log_file'), name='ubik', level=conf.get('logger', 'level')):
    """
    Ubik file logger
    """
    # Create log file if not exist
    if not os.path.exists(log_file):
        open(log_file, 'w').close()

    logger = logging.getLogger('ubik')
    # Create file handler which logs even debug messages
    fh = logging.FileHandler(log_file)
    # Create console handler with a higher log level
    ch = logging.StreamHandler()
    # Create formatter and add it to the handlers
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    ch.setFormatter(formatter)
    fh.setFormatter(formatter)

    # Set logger level
    if level == "2":
        logger.setLevel(logging.ERROR)
        fh.setLevel(logging.ERROR)
    elif level == "3":
        logger.setLevel(logging.DEBUG)
        fh.setLevel(logging.DEBUG)
    else:
        logger.setLevel(logging.INFO)
        fh.setLevel(logging.INFO)
    ch.setLevel(logging.ERROR)

    # Add the handlers to logger
    logger.addHandler(ch)
    logger.addHandler(fh)
    return logger
Exemplo n.º 3
0
Arquivo: tools.py Projeto: toxinu/ubik
def unarchiver(package):
    src = os.path.join(conf.get('settings', 'cache'), package.name + ".tar")
    dst = conf.get('settings', 'cache')

    # Open tarfile
    tar = tarfile.open(src)
    if tarfile.is_tarfile(src):
        tar.extractall(dst)
    else:
        raise Exception('Archive invalid (not a tarfile)')
Exemplo n.º 4
0
 def post_upgrade(self):
     # Go to tmp and extract pacakge
     os.chdir(os.path.join(conf.get("settings", "packages"), "tmp", "ubik"))
     os.system("tar xvf %s" % self.archive_name)
     # Go into package and install it
     os.chdir(self.dir_name)
     os.system("python setup.py install --upgrade --no-compile --prefix=%s" % conf.get("settings", "packages"))
     # Clean package dir and archive
     os.chdir(os.path.join(conf.get("settings", "packages"), "tmp", "ubik"))
     rmtree(self.dir_name)
     os.remove(self.archive_name)
Exemplo n.º 5
0
 def check_system(self, package):
     if package.arch != conf.get('system', 'arch'):
         if package.arch != "noarch":
             return False
     if package.dist != conf.get('system', 'dist'):
         if package.dist != "nodist":
             return False
     if package.vers != conf.get('system', 'vers'):
         if package.vers != "novers":
             return False
     return True
Exemplo n.º 6
0
def get_proxies():
    proxies = {}
    proxies['http'] = os.environ.get('http_proxy', '')
    proxies['https'] = os.environ.get('https_proxy', '')

    if conf.has_section('proxy'):
        if conf.has_option('proxy', 'http_proxy') and conf.get('proxy', 'http_proxy'):
            proxies['http'] = conf.get('proxy', 'http_proxy')
        if conf.has_option('proxy', 'https_proxy'):
            proxies['https'] = conf.get('proxy', 'https_proxy')
    return proxies
Exemplo n.º 7
0
 def post_upgrade(self):
     # Go to tmp and extract pacakge
     os.chdir(os.path.join(conf.get('settings', 'packages'), 'tmp', 'ubik'))
     os.system('tar xvf %s' % self.archive_name)
     # Go into package and install it
     os.chdir(self.dir_name)
     os.system('python setup.py install --upgrade --no-compile --prefix=%s' % conf.get('settings', 'packages'))
     # Clean package dir and archive
     os.chdir(os.path.join(conf.get('settings', 'packages'), 'tmp', 'ubik'))
     rmtree(self.dir_name)
     os.remove(self.archive_name)
Exemplo n.º 8
0
    def import_control(self):
        initial_dir = os.getcwd()
        #os.chdir(conf.get('settings', 'cache'))
        sys.path.append(os.path.join(conf.get('settings', 'cache'), self.name))

        # Clean control module if already loaded
        if 'control' in sys.modules:
            del sys.modules['control']

        control_module = __import__('control')
        sys.path.remove(os.path.join(conf.get('settings', 'cache'), self.name))
        self.control = control_module.Package()
        os.chdir(initial_dir)
Exemplo n.º 9
0
    def import_control(self):
        initial_dir = os.getcwd()
        # os.chdir(conf.get('settings', 'cache'))
        sys.path.append(os.path.join(conf.get("settings", "cache"), self.name))

        # Clean control module if already loaded
        if "control" in sys.modules:
            del sys.modules["control"]

        control_module = __import__("control")
        sys.path.remove(os.path.join(conf.get("settings", "cache"), self.name))
        self.control = control_module.Package()
        os.chdir(initial_dir)
Exemplo n.º 10
0
 def post_upgrade(self):
     # Go to tmp and extract pacakge
     os.chdir(os.path.join(conf.get('settings', 'packages'), 'tmp', 'ubik'))
     os.system('tar xvf %s' % self.archive_name)
     # Go into package and install it
     os.chdir(self.dir_name)
     os.system(
         'python setup.py install --upgrade --no-compile --prefix=%s' %
         conf.get('settings', 'packages'))
     # Clean package dir and archive
     os.chdir(os.path.join(conf.get('settings', 'packages'), 'tmp', 'ubik'))
     rmtree(self.dir_name)
     os.remove(self.archive_name)
Exemplo n.º 11
0
Arquivo: tools.py Projeto: toxinu/ubik
def unpacker(package):
    archive = tarfile.open(os.path.join(conf.get('settings', 'cache'), package.name, 'files.bz2'), 'r:bz2', ignore_zeros=True)
    root_content = os.path.join(conf.get('settings', 'cache'), package.name, 'content')
    if os.path.exists(root_content):
        shutil.rmtree(root_content)
    os.makedirs(root_content)
    archive.extractall(root_content)

    for (path, dirs, files) in os.walk(root_content):
        for _dir in dirs:
            src = os.path.join(path, _dir)
            dst = '%s' % src.replace(root_content, conf.get('settings', 'packages'))
            if os.path.islink(src):
                linkto = os.readlink(src)
                os.remove(dst)
                os.symlink(linkto, dst)
            elif not os.path.exists(dst):
                os.makedirs(dst)

        for _file in files:
            src = os.path.join(path, _file)
            dst = '%s' % src.replace(root_content, conf.get('settings', 'packages'))
            # If safe_conf
            if conf.get('packages', 'safe_conf') == 'True':
                # Is etc
                if path.replace(root_content, '')[1:].split('/')[0] == 'etc':
                    # Is file in etc
                    if os.path.isfile(os.path.join(path, _file)):
                        # If file already exist
                        if os.path.exists(dst):
                            if filecmp.cmp(src, dst):
                                logger.info('CONFIG: config file not modified')
                                continue
                            logger.info('CONFIG: config file conflict: %s' % os.path.join(path, _file))
                            dst += '.new'
            logger.debug(" :: %s - %s" % (src, dst))
            if os.path.islink(src):
                linkto = os.readlink(src)

                if os.path.lexists(dst):
                    os.remove(dst)
                os.symlink(linkto, dst)

            else:
                shutil.copy2(src, dst)

    shutil.rmtree(root_content)
    archive.close()
Exemplo n.º 12
0
Arquivo: tools.py Projeto: toxinu/ubik
def cached(package):
    if not isinstance(package, ubik.package.Package):
        raise CoreException('Need to be a Package object')

    if not os.path.exists(os.path.join(conf.get('settings', 'cache'), package.name + ".tar")):
        return False

    return True
Exemplo n.º 13
0
def get_database(file_path=None):
    url = '%s/%s/%s/Packages.json' % (
        conf.get('repo', 'url'),
        conf.get('repo', 'base'),
        conf.get('repo', 'branch'))
    proxies = get_proxies()
    timeout = get_timeout()

    r = requests.get(url, timeout=timeout, proxies=proxies)
    r.raise_for_status()

    if file_path:
        if os.path.exists(file_path):
            os.remove(file_path)
        json.dump(r.json, open(file_path, 'w'))
        return r
    else:
        return r.json()
Exemplo n.º 14
0
    def build(self):
        stream_logger.info('Building...')
        os.chdir(self.src_dir)

        os.system('curl -k -L https://github.com/max-horvath/htop-osx/tarball/%s-2012-04-18 | tar zx' % self.version)
        os.chdir('max-horvath-htop-osx-d92a7d4')
        os.system('./autogen.sh')
        os.system('./configure --disable-dependency-tracking --prefix=%s' % conf.get('settings', 'packages'))
        os.system('make')
Exemplo n.º 15
0
def cached(package):
    if not isinstance(package, ubik.package.Package):
        raise CoreException('Need to be a Package object')

    if not os.path.exists(
            os.path.join(conf.get('settings', 'cache'),
                         package.name + ".tar")):
        return False

    return True
Exemplo n.º 16
0
    def build(self):
        stream_logger.info("Building...")
        os.chdir(self.src_dir)

        os.system("wget http://ftp.gnu.org/gnu/wget/wget-%s.tar.gz" % self.version)
        os.system("tar xvf wget-%s.tar.gz" % self.version)
        os.system("rm wget-%s.tar.gz" % self.version)
        os.chdir("wget-%s" % self.version)
        os.system("./configure --prefix=%s" % conf.get("settings", "packages"))
        os.system("make")
Exemplo n.º 17
0
    def build(self):
        stream_logger.info('Building...')
        os.chdir(self.src_dir)

        os.system('wget http://ftp.gnu.org/gnu/wget/wget-%s.tar.gz' % self.version)
        os.system('tar xvf wget-%s.tar.gz' % self.version)
        os.system('rm wget-%s.tar.gz' % self.version)
        os.chdir('wget-%s' % self.version)
        os.system('./configure --prefix=%s' % conf.get('settings', 'packages'))
        os.system('make')
Exemplo n.º 18
0
def get_package(package):
    if not isinstance(package, ubik.package.Package):
        raise Exception('Must be a Package object')

    url = '%s/%s/%s/%s/%s/%s/%s.tar' % (
        conf.get('repo', 'url'),
        conf.get('repo', 'base'),
        conf.get('repo', 'branch'),
        package.arch,
        package.dist,
        package.vers,
        package.name
        )
    proxies = get_proxies()
    timeout = get_timeout()

    r = requests.get(url, timeout=timeout, proxies=proxies, stream=False)
    r.raise_for_status()

    size = int(r.headers['Content-Length'].strip())
    bytes = 0

    max_len = 25
    end_mark = '. '
    if len(package.name) > max_len:
        _diff = max_len - len(end_mark)
        package_name = package.name[_diff] + end_mark
    else:
        package_name = package.name + (max_len - len(package.name)) * ' '

    widgets = [package_name, Bar(marker="=", left="[", right=" "),
        Percentage(), " ",  FileTransferSpeed(), "] ",
        "{0}MB".format(str(round(size / 1024 / 1024, 2))[:4])]
    pbar = ProgressBar(widgets=widgets, maxval=size).start()
    with open('%s/%s.tar' % (conf.get('settings', 'cache'), package.name), 'w') as f:
        for buf in r.iter_content(1024):
            if buf:
                f.write(buf)
                bytes += len(buf)
                pbar.update(bytes)
    pbar.finish()
Exemplo n.º 19
0
    def build(self):
        stream_logger.info('Building...')
        os.chdir(self.src_dir)

        os.system(
            'curl -k -L https://github.com/max-horvath/htop-osx/tarball/%s-2012-04-18 | tar zx'
            % self.version)
        os.chdir('max-horvath-htop-osx-d92a7d4')
        os.system('./autogen.sh')
        os.system('./configure --disable-dependency-tracking --prefix=%s' %
                  conf.get('settings', 'packages'))
        os.system('make')
Exemplo n.º 20
0
    def sync(self):
        self.load()
        stream_logger.info('   | Retrieving %s/%s/%s/Packages.json' % (
                        conf.get('repo', 'url'),
                        conf.get('repo', 'base'),
                        conf.get('repo', 'branch')))
        db_remote = Database(content=get_database())

        for package in db_remote.packages.values():
            # Check installed
            if package.name not in self.packages.keys():
                package.status = '10'
                self.packages[package.name] = package
            elif self.packages[package.name].status == '10':
                package.status = '10'
            # Check version
            elif package.version > self.packages[package.name].version:
                package.status = '1'
            elif package.version < self.packages[package.name].version:
                package.status = '11'
            # Check release
            elif package.release > self.packages[package.name].release:
                package.status = '2'
            elif package.release < self.packages[package.name].release:
                package.status = '12'
            # Up-to-date
            else:
                package.status = '0'

            if package.status in ['1','2','11','12']:
                package.repo_version = package.version
                package.repo_release = package.release
                package.version = self.packages[package.name].version
                package.release = self.packages[package.name].release
            elif package.status in ['10']:
                package.repo_version = package.version
                package.repo_release = package.release
                package.version = ''
                package.release = ''
            else:
                package.repo_versions = ''
                package.repo_release = ''

            self.packages[package.name] = package

        for package in self.packages.values():
            if package.name not in db_remote.packages.keys():
                if package.status in ['10']:
                    del self.packages[package.name]

        # Save databases
        self.save()

        # Save informations
        if not os.path.exists(conf.get('paths', 'infos')):
            open(conf.get('paths', 'infos'), 'w').close()

        infos = json.dump(
            {'last_update': time.ctime()},
        open(conf.get('paths', 'infos'), 'w'))
Exemplo n.º 21
0
Arquivo: view.py Projeto: toxinu/ubik
def get_view():

	if not os.path.exists(conf.get('paths', 'infos')):
		last_update = "Never"
	else:
		last_update = json.load(open(conf.get('paths', 'infos')))['last_update']

	header = """
 System : %s %s %s
 Repo   : %s/%s/%s
 Last Update : %s
""" % (	conf.get('system', 'dist').title(),
		conf.get('system', 'vers'),
		conf.get('system', 'arch'),
		conf.get('repo', 'url'),
		conf.get('repo', 'base'),
		conf.get('repo', 'branch'),
		last_update)

	fmt = [	('Name',	'name',		25),
			('Version',	'version',	25),
			('Status',	'status',	20)]
	data = []

	# Package.db	
	for name, package in db.packages.items():
		# Version output
		if package.repo_version:
			if not package.version:
				version = '[%s-%s]' % (package.repo_version, package.repo_release)
			else:
				version = '%s-%s [%s-%s]' % (	package.version, package.release,
												package.repo_version, package.repo_release)
		else:
			version = package.version + '-' + package.release

		data.append({	'name': name,
						'version': version,
						'status': status[package.status]})

	if not data:
		stream_logger.info(header)
		stream_logger.info('No package installed')
		return

	data = sorted(data, key=lambda k: k['name'])

	stream_logger.info(header)
	stream_logger.info(TablePrinter(fmt, data, ul='-'))
Exemplo n.º 22
0
Arquivo: view.py Projeto: toxinu/ubik
def get_view():

    if not os.path.exists(conf.get('paths', 'infos')):
        last_update = "Never"
    else:
        last_update = json.load(open(conf.get('paths',
                                              'infos')))['last_update']

    header = """
 System : %s %s %s
 Repo   : %s/%s/%s
 Last Update : %s
""" % (conf.get('system', 'dist').title(), conf.get(
        'system', 'vers'), conf.get('system', 'arch'), conf.get('repo', 'url'),
       conf.get('repo', 'base'), conf.get('repo', 'branch'), last_update)

    fmt = [('Name', 'name', 25), ('Version', 'version', 25),
           ('Status', 'status', 20)]
    data = []

    # Package.db
    for name, package in db.packages.items():
        # Version output
        if package.repo_version:
            if not package.version:
                version = '[%s-%s]' % (package.repo_version,
                                       package.repo_release)
            else:
                version = '%s-%s [%s-%s]' % (package.version, package.release,
                                             package.repo_version,
                                             package.repo_release)
        else:
            version = package.version + '-' + package.release

        data.append({
            'name': name,
            'version': version,
            'status': status[package.status]
        })

    if not data:
        stream_logger.info(header)
        stream_logger.info('No package installed')
        return

    data = sorted(data, key=lambda k: k['name'])

    stream_logger.info(header)
    stream_logger.info(TablePrinter(fmt, data, ul='-'))
Exemplo n.º 23
0
    def sync(self):
        self.load()
        stream_logger.info('   | Retrieving %s/%s/%s/Packages.json' %
                           (conf.get('repo', 'url'), conf.get(
                               'repo', 'base'), conf.get('repo', 'branch')))
        db_remote = Database(content=get_database())

        for package in db_remote.packages.values():
            # Check installed
            if package.name not in self.packages.keys():
                package.status = '10'
                self.packages[package.name] = package
            elif self.packages[package.name].status == '10':
                package.status = '10'
            # Check version
            elif package.version > self.packages[package.name].version:
                package.status = '1'
            elif package.version < self.packages[package.name].version:
                package.status = '11'
            # Check release
            elif package.release > self.packages[package.name].release:
                package.status = '2'
            elif package.release < self.packages[package.name].release:
                package.status = '12'
            # Up-to-date
            else:
                package.status = '0'

            if package.status in ['1', '2', '11', '12']:
                package.repo_version = package.version
                package.repo_release = package.release
                package.version = self.packages[package.name].version
                package.release = self.packages[package.name].release
            elif package.status in ['10']:
                package.repo_version = package.version
                package.repo_release = package.release
                package.version = ''
                package.release = ''
            else:
                package.repo_versions = ''
                package.repo_release = ''

            self.packages[package.name] = package

        for package in self.packages.values():
            if package.name not in db_remote.packages.keys():
                if package.status in ['10']:
                    del self.packages[package.name]

        # Save databases
        self.save()

        # Save informations
        if not os.path.exists(conf.get('paths', 'infos')):
            open(conf.get('paths', 'infos'), 'w').close()

        infos = json.dump({'last_update': time.ctime()},
                          open(conf.get('paths', 'infos'), 'w'))
Exemplo n.º 24
0
    def __init__(self):
        Control.__init__(self)
        self.name = 'htop'
        self.version = '0.8.2.1'
        self.release = '4'
        self.requires = []
        self.arch = ''
        self.dist = ''
        self.vers = ''
        self.description = 'Htop is an interactive process viewer for Linux. It is a text-mode application (for console or X terminals) and requires ncurses.'

        self.cur_dir = os.getcwd()
        self.src_dir = os.path.join(os.getcwd(), 'source')
        self.pkg_dir = os.path.join(os.getcwd(), 'build')

        self.caveats = """
htop requires root privileges to correctly display all running processes.
You can either run the program via `sudo` or set the setuid bit:

sudo chown root:wheel %s/bin/htop
sudo chmod u+s %s/bin/htop

You should be certain that you trust any software you grant root privileges.
""" % (conf.get('settings', 'packages'), conf.get('settings', 'packages'))
Exemplo n.º 25
0
    def __init__(self):
        Control.__init__(self)
        self.name = 'htop'
        self.version = '0.8.2.1'
        self.release = '4'
        self.requires = []
        self.arch = ''
        self.dist = ''
        self.vers = ''
        self.description = 'Htop is an interactive process viewer for Linux. It is a text-mode application (for console or X terminals) and requires ncurses.'

        self.cur_dir = os.getcwd()
        self.src_dir = os.path.join(os.getcwd(), 'source')
        self.pkg_dir = os.path.join(os.getcwd(), 'build')

        self.caveats = """
htop requires root privileges to correctly display all running processes.
You can either run the program via `sudo` or set the setuid bit:

sudo chown root:wheel %s/bin/htop
sudo chmod u+s %s/bin/htop

You should be certain that you trust any software you grant root privileges.
""" % (conf.get('settings', 'packages'), conf.get('settings', 'packages'))
Exemplo n.º 26
0
 def upgrade(self, ignore_errors=False):
     # Think about ignore_errors
     stream_logger.info('    - %s' % self.name)
     stream_logger.info('      | Unarchive')
     self.unarchive()
     self.import_control()
     # Pre-upgrade
     stream_logger.info('      | Pre Upgrade')
     self.control.pre_upgrade()
     stream_logger.info('      | Unpack')
     unpacker(self)
     # Post-upgrade
     stream_logger.info('      | Post Upgrade')
     self.control.post_upgrade()
     stream_logger.info('      | Clean')
     shutil.rmtree('%s/%s' % (conf.get('settings', 'cache'), self.name))
Exemplo n.º 27
0
 def upgrade(self, ignore_errors=False):
     # Think about ignore_errors
     stream_logger.info("    - %s" % self.name)
     stream_logger.info("      | Unarchive")
     self.unarchive()
     self.import_control()
     # Pre-upgrade
     stream_logger.info("      | Pre Upgrade")
     self.control.pre_upgrade()
     stream_logger.info("      | Unpack")
     unpacker(self)
     # Post-upgrade
     stream_logger.info("      | Post Upgrade")
     self.control.post_upgrade()
     stream_logger.info("      | Clean")
     shutil.rmtree("%s/%s" % (conf.get("settings", "cache"), self.name))
Exemplo n.º 28
0
Arquivo: tools.py Projeto: toxinu/ubik
def checkmd5(package):
    if not isinstance(package, ubik.package.Package):
        raise CoreException('Need to be a Package object')

    package_path = os.path.join(conf.get('settings', 'cache'), package.name + ".tar")

    fh = open(package_path, 'rb')
    m = hashlib.md5()
    while True:
        data = fh.read(8192)
        if not data:
            break
        m.update(data)

    if package.md5 != m.hexdigest():
        return False
    return True
Exemplo n.º 29
0
def checkmd5(package):
    if not isinstance(package, ubik.package.Package):
        raise CoreException('Need to be a Package object')

    package_path = os.path.join(conf.get('settings', 'cache'),
                                package.name + ".tar")

    fh = open(package_path, 'rb')
    m = hashlib.md5()
    while True:
        data = fh.read(8192)
        if not data:
            break
        m.update(data)

    if package.md5 != m.hexdigest():
        return False
    return True
Exemplo n.º 30
0
Arquivo: cli.py Projeto: toxinu/ubik
    def start(self):
        ###################
        # conf            #
        ###################
        if self.args.get('conf', False):
            get_conf()
        ###################
        # stats           #
        ###################
        if self.args.get('stats', False):
            get_stats()
        ###################
        # list            #
        ###################
        elif self.args.get('list', False):
            get_view()
        ###################
        # update          #
        ###################
        elif self.args.get('update', False):
            stream_logger.info('=> Update')
            try:
                db.sync()
            except Exception as err:
                if int(conf.get('logger', 'level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()
        ###################
        # clean           #
        ###################
        elif self.args.get('clean', False):
            stream_logger.info('=> Cleaning')
            clean()
        ###################
        # reinstall       #
        ###################
        elif self.args.get('reinstall', False):
            # Sync Database
            stream_logger.info('=> Updating')
            try:
                db.sync()
            except Exception as err:
                if int(conf.get('logger', 'level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()
            # Create installer
            stream_logger.info('=> Resolving')
            reinstaller = Reinstaller()
            if not isinstance(self.args['<package>'], list):
                packages = [self.args['<package>']]
            else:
                packages = self.args['<package>']

            try:
                if self.args.get('--with-deps', False):
                    for package in db.get(packages):
                        try:
                            reinstaller.resolve(package)
                            reinstaller.feed(reinstaller.resolved)
                        except RuntimeError as err:
                            if int(conf.get('logger', 'level')) >= 2:
                                traceback.print_exc(file=sys.stdout)
                            stream_logger.info(
                                '!! Dependencies resolve failed (%s)' % err)
                            sys.exit(1)
                else:
                    reinstaller.feed(db.get(packages))
            except DatabaseException as err:
                if int(conf.get('logger', 'level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()

            if not reinstaller.packages:
                stream_logger.info('=> No package(s) to reinstall')
                sys.exit(0)
            stream_logger.info('=> Following packages will be reinstalled:')
            for package in reinstaller.packages:
                stream_logger.info('   - %s' % package.name)
            if not self.args.get('--force-yes', False):
                if confirm():
                    reinstaller.download()
                    try:
                        reinstaller.reinstall(ignore_errors=self.args.get(
                            '--ignore-errors', False))
                    except Exception as err:
                        if int(conf.get('logger', 'level')) >= 2:
                            traceback.print_exc(file=sys.stdout)
                        raise
                else:
                    stream_logger.info('Abort.')
                    sys.exit(1)
            else:
                reinstaller.download()
                try:
                    reinstaller.reinstall(
                        ignore_errors=self.args.get('--ignore-errors', False))
                except Exception as err:
                    if int(conf.get('logger', 'level')) >= 2:
                        traceback.print_exc(file=sys.stdout)
                    raise

        ###################
        # install         #
        ###################
        elif self.args.get('install', False):
            # Sync Database
            stream_logger.info('=> Updating')
            try:
                db.sync()
            except Exception as err:
                if int(conf.get('logger', 'level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()
            # Create installer
            installer = Installer()
            # Resolve deps
            stream_logger.info('=> Resolving dependencies')
            if not isinstance(self.args['<package>'], list):
                packages = [self.args['<package>']]
            else:
                packages = self.args['<package>']

            try:
                for package in db.get(packages):
                    try:
                        installer.resolve(package)
                        installer.feed(installer.resolved)
                    except RuntimeError as err:
                        if int(conf.get('logger', 'level')) >= 2:
                            traceback.print_exc(file=sys.stdout)
                        stream_logger.info(
                            '!! Dependencies resolve failed (%s)' % err)
                        sys.exit(1)
            except DatabaseException as err:
                if int(conf.get('logger', 'level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()

            if not installer.packages:
                stream_logger.info('   - No package(s) found')
                sys.exit(1)
            stream_logger.info('=> Following dependencies will be installed:')
            for dep in installer.packages:
                stream_logger.info('   - %s' % dep.name)

            if not self.args.get('--force-yes', False):
                if confirm():
                    installer.download()
                    try:
                        installer.install(ignore_errors=self.args.get(
                            '--ignore-errors', False))
                    except Exception as err:
                        if int(conf.get('logger', 'level')) >= 2:
                            traceback.print_exc(file=sys.stdout)
                        raise
                else:
                    stream_logger.info('Abort.')
                    sys.exit(1)
            else:
                installer.download()
                try:
                    installer.install(
                        ignore_errors=self.args.get('--ignore-errors', False))
                except Exception as err:
                    if int(conf.get('logger', 'level')) >= 2:
                        traceback.print_exc(file=sys.stdout)
                    raise
        ###################
        # upgrade         #
        ###################
        elif self.args.get('upgrade', False):
            # Sync Database
            stream_logger.info('=> Updating')
            try:
                db.sync()
            except Exception as err:
                if int(conf.get('logger', 'level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()
            # Create Upgrader
            upgrader = Upgrader()
            stream_logger.info('=> Resolving')
            if not isinstance(self.args['<package>'], list):
                packages = [self.args['<package>']]
            else:
                packages = self.args['<package>']

            if not packages:
                upgrader.feed(db.get_upgrades())
            else:
                upgrader.feed(packages)

            if not upgrader.packages:
                stream_logger.info('!! No package(s) to upgrade')
                sys.exit(0)

            stream_logger.info('=> Following packages will be upgraded:')
            for package in upgrader.packages:
                stream_logger.info('   - %s' % package.name)

            if not self.args.get('--force-yes', False):
                if confirm():
                    upgrader.download()
                    try:
                        upgrader.upgrade(ignore_errors=self.args.get(
                            '--ignore-errors', False))
                    except Exception as err:
                        if int(conf.get('logger', 'level')) >= 2:
                            traceback.print_exc(file=sys.stdout)
                        raise
                else:
                    stream_logger.info('Abort.')
                    sys.exit(1)
            else:
                upgrader.download()
                try:
                    upgrader.upgrade(
                        ignore_errors=self.args.get('--ignore-errors', False))
                except Exception as err:
                    if int(conf.get('logger', 'level')) >= 2:
                        traceback.print_exc(file=sys.stdout)
                    raise
        ###################
        # remove          #
        ###################
        elif self.args.get('remove', False):
            # Create remover
            remover = Remover()
            packages = db.get(self.args.get('<package>'))

            try:
                remover.feed(packages)
            except DatabaseException as err:
                if int(conf.get('logger', 'level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()

            if not remover.packages:
                sys.exit(0)

            stream_logger.info('=> Following packages will be removed:')
            for package in remover.packages:
                stream_logger.info('   - %s' % package.name)

            if not self.args.get('--force-yes', False):
                if confirm():
                    remover.remove(
                        ignore_errors=self.args.get('--ignore-errors', False))
                else:
                    stream_logger.info('Abort.')
                    sys.exit(1)
            else:
                try:
                    remover.remove(
                        ignore_errors=self.args.get('--ignore-errors', False))
                except Exception as err:
                    if int(conf.get('logger', 'level')) >= 2:
                        traceback.print_exc(file=sys.stdout)
                        raise
        ##########
        # search #
        ##########
        elif self.args.get('search', False):
            packages = db.get(self.args.get('<package>'))
            if not packages:
                stream_logger.info('!! No package found')
                sys.exit(1)
            for package in packages:
                stream_logger.info('Name: %s' % package.name)
                if package in db.get_installed():
                    stream_logger.info('Version: %s-%s' %
                                       (package.version, package.release))
                    stream_logger.info('Status: %s' % status[package.status])
                else:
                    stream_logger.info(
                        'Version: %s-%s' %
                        (package.repo_version, package.repo_release))
                    stream_logger.info('Status: %s' % status[package.status])

                stream_logger.info('Requires: %s' % ','.join(package.requires))
                stream_logger.info('Description: %s' % package.description)
                stream_logger.info('Architecture: %s' % package.arch)
                stream_logger.info('Distribution: %s' % package.dist)
                stream_logger.info('Distribution version: %s' % package.vers)
                if package is not packages[-1]:
                    stream_logger.info('')
            sys.exit(0)
Exemplo n.º 31
0
def clean():
    files = os.listdir(conf.get('settings', 'cache'))
    for f in files:
        logger.debug(f)
        if not '.tar' in f and os.path.isdir(f):
            shutil.rmtree(f)
Exemplo n.º 32
0
 def __init__(self):
     self.pkg_blacklist = conf.get('packages', 'pkg_blacklist').split()
     self.packages = []
Exemplo n.º 33
0
Arquivo: tools.py Projeto: toxinu/ubik
def clean():
    files = os.listdir(conf.get('settings', 'cache'))
    for f in files:
        logger.debug(f)
        if not '.tar' in f and os.path.isdir(f):
            shutil.rmtree(f)
Exemplo n.º 34
0
Arquivo: cli.py Projeto: toxinu/ubik
    def start(self):
        ###################
        # conf            #
        ###################
        if self.args.get('conf', False):
            get_conf()
        ###################
        # stats           #
        ###################
        if self.args.get('stats', False):
            get_stats()
        ###################
        # list            #
        ###################
        elif self.args.get('list', False):
            get_view()
        ###################
        # update          #
        ###################
        elif self.args.get('update', False):
            stream_logger.info('=> Update')
            try:
                db.sync()
            except Exception as err:
                if int(conf.get('logger','level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()
        ###################
        # clean           #
        ###################
        elif self.args.get('clean', False):
            stream_logger.info('=> Cleaning')
            clean()
        ###################
        # reinstall       #
        ###################
        elif self.args.get('reinstall', False):
            # Sync Database
            stream_logger.info('=> Updating')
            try:
                db.sync()
            except Exception as err:
                if int(conf.get('logger','level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()
            # Create installer
            stream_logger.info('=> Resolving')
            reinstaller = Reinstaller()
            if not isinstance(self.args['<package>'], list):
                packages = [self.args['<package>']]
            else:
                packages = self.args['<package>']

            try:
                if self.args.get('--with-deps', False):
                    for package in db.get(packages):
                        try:
                            reinstaller.resolve(package)
                            reinstaller.feed(reinstaller.resolved)
                        except RuntimeError as err:
                            if int(conf.get('logger','level')) >= 2:
                                traceback.print_exc(file=sys.stdout)
                            stream_logger.info('!! Dependencies resolve failed (%s)' % err)
                            sys.exit(1)
                else:
                    reinstaller.feed(db.get(packages))
            except DatabaseException as err:
                if int(conf.get('logger','level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()

            if not reinstaller.packages:
                stream_logger.info('=> No package(s) to reinstall')
                sys.exit(0)
            stream_logger.info('=> Following packages will be reinstalled:')
            for package in reinstaller.packages:
                stream_logger.info('   - %s' % package.name)
            if not self.args.get('--force-yes', False):
                if confirm():
                    reinstaller.download()
                    try:
                        reinstaller.reinstall(ignore_errors=self.args.get('--ignore-errors', False))
                    except Exception as err:
                        if int(conf.get('logger','level')) >= 2:
                            traceback.print_exc(file=sys.stdout)
                        raise
                else:
                    stream_logger.info('Abort.')
                    sys.exit(1)
            else:
                reinstaller.download()
                try:
                    reinstaller.reinstall(ignore_errors=self.args.get('--ignore-errors', False))
                except Exception as err:
                    if int(conf.get('logger','level')) >= 2:
                        traceback.print_exc(file=sys.stdout)
                    raise

        ###################
        # install         #
        ###################
        elif self.args.get('install', False):
            # Sync Database
            stream_logger.info('=> Updating')
            try:
                db.sync()
            except Exception as err:
                if int(conf.get('logger','level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()
            # Create installer
            installer = Installer()
            # Resolve deps
            stream_logger.info('=> Resolving dependencies')
            if not isinstance(self.args['<package>'], list):
                packages = [self.args['<package>']]
            else:
                packages = self.args['<package>']

            try:
                for package in db.get(packages):
                    try:
                        installer.resolve(package)
                        installer.feed(installer.resolved)
                    except RuntimeError as err:
                        if int(conf.get('logger','level')) >= 2:
                            traceback.print_exc(file=sys.stdout)
                        stream_logger.info('!! Dependencies resolve failed (%s)' % err)
                        sys.exit(1)
            except DatabaseException as err:
                if int(conf.get('logger','level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()

            if not installer.packages:
                stream_logger.info('   - No package(s) found')
                sys.exit(1)
            stream_logger.info('=> Following dependencies will be installed:')
            for dep in installer.packages:
                stream_logger.info('   - %s' % dep.name)

            if not self.args.get('--force-yes', False):
                if confirm():
                    installer.download()
                    try:
                        installer.install(ignore_errors=self.args.get('--ignore-errors', False))
                    except Exception as err:
                        if int(conf.get('logger','level')) >= 2:
                            traceback.print_exc(file=sys.stdout)
                        raise
                else:
                    stream_logger.info('Abort.')
                    sys.exit(1)
            else:
                installer.download()
                try:
                    installer.install(ignore_errors=self.args.get('--ignore-errors', False))
                except Exception as err:
                    if int(conf.get('logger','level')) >= 2:
                        traceback.print_exc(file=sys.stdout)
                    raise
        ###################
        # upgrade         #
        ###################
        elif self.args.get('upgrade', False):
            # Sync Database
            stream_logger.info('=> Updating')
            try:
                db.sync()
            except Exception as err:
                if int(conf.get('logger','level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()
            # Create Upgrader
            upgrader = Upgrader()
            stream_logger.info('=> Resolving')
            if not isinstance(self.args['<package>'], list):
                packages = [self.args['<package>']]
            else:
                packages = self.args['<package>']

            if not packages:
                upgrader.feed(db.get_upgrades())
            else:
                upgrader.feed(packages)

            if not upgrader.packages:
                stream_logger.info('!! No package(s) to upgrade')
                sys.exit(0)

            stream_logger.info('=> Following packages will be upgraded:')
            for package in upgrader.packages:
                stream_logger.info('   - %s' % package.name)

            if not self.args.get('--force-yes', False):
                if confirm():
                    upgrader.download()
                    try:
                        upgrader.upgrade(ignore_errors=self.args.get('--ignore-errors', False))
                    except Exception as err:
                        if int(conf.get('logger','level')) >= 2:
                            traceback.print_exc(file=sys.stdout)
                        raise
                else:
                    stream_logger.info('Abort.')
                    sys.exit(1)
            else:
                upgrader.download()
                try:
                    upgrader.upgrade(ignore_errors=self.args.get('--ignore-errors', False))
                except Exception as err:
                    if int(conf.get('logger','level')) >= 2:
                        traceback.print_exc(file=sys.stdout)
                    raise
        ###################
        # remove          #
        ###################
        elif self.args.get('remove', False):
            # Create remover
            remover = Remover()
            packages = db.get(self.args.get('<package>'))

            try:
                remover.feed(packages)
            except DatabaseException as err:
                if int(conf.get('logger','level')) >= 2:
                    traceback.print_exc(file=sys.stdout)
                self.error_link()

            if not remover.packages:
                sys.exit(0)

            stream_logger.info('=> Following packages will be removed:')
            for package in remover.packages:
                stream_logger.info('   - %s' % package.name)

            if not self.args.get('--force-yes', False):
                if confirm():
                    remover.remove(ignore_errors=self.args.get('--ignore-errors', False))
                else:
                    stream_logger.info('Abort.')
                    sys.exit(1)
            else:
                try:
                    remover.remove(ignore_errors=self.args.get('--ignore-errors', False))
                except Exception as err:
                    if int(conf.get('logger','level')) >= 2:
                        traceback.print_exc(file=sys.stdout)
                        raise
        ##########
        # search #
        ##########
        elif self.args.get('search', False):
            packages = db.get(self.args.get('<package>'))
            if not packages:
                stream_logger.info('!! No package found')
                sys.exit(1)
            for package in packages:
                stream_logger.info('Name: %s' % package.name)
                if package in db.get_installed():
                    stream_logger.info('Version: %s-%s' % (package.version, package.release))
                    stream_logger.info('Status: %s' % status[package.status])
                else:
                    stream_logger.info('Version: %s-%s' % (package.repo_version, package.repo_release))
                    stream_logger.info('Status: %s' % status[package.status])

                stream_logger.info('Requires: %s' % ','.join(package.requires))
                stream_logger.info('Description: %s' % package.description)
                stream_logger.info('Architecture: %s' % package.arch)
                stream_logger.info('Distribution: %s' % package.dist)
                stream_logger.info('Distribution version: %s' % package.vers)
                if package is not packages[-1]:
                    stream_logger.info('')
            sys.exit(0)
Exemplo n.º 35
0
def get_timeout():
    timeout = 10
    if conf.has_option('proxy', 'timeout'):
        if conf.get('proxy', 'timeout'):
            timeout = conf.get('proxy', 'timeout')
    return float(timeout)
Exemplo n.º 36
0
	def __init__(self):
		self.pkg_blacklist = conf.get('packages', 'pkg_blacklist').split()
		self.packages = []