Example #1
0
 def _get_package_version(self):
     own_version = utils.get_package_version('contrail-nodemgr')
     if own_version is None:
         self.msg_log('Error getting %s package version' % (
             'contrail-nodemgr'), SandeshLevel.SYS_ERR)
         own_version = "package-version-unknown"
     return own_version
 def _get_package_version(self):
     pkg_version = utils.get_package_version('contrail-nodemgr')
     if pkg_version is None:
         self.msg_log('Error getting %s package version' % (
             'contrail-nodemgr'), SandeshLevel.SYS_ERR)
         pkg_version = "unknown"
     return pkg_version
def clear_partition(partition):
    unmount_partition(partition)
    enc_key = '-pbkdf2'
    openssl_version = get_package_version('openssl')
    if compare_package_versions(openssl_version, '1.1.1') == 'smaller':
        # deprecated key derivation in openssl 1.1.1+
        enc_key = '-aes-256-ctr'
    shell_exec(
        "openssl enc {0} -pass pass:\"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)\" -nosalt < /dev/zero > {1}"
        .format(enc_key, partition.enc_status['device']))
def status():
    version = utils.get_package_version() or "Not Installed"
    last_sync = utils.get_appliance_config("last_sync_time") or "None"
    last_discovery = utils.get_appliance_config("last_discovery_time") or "None"
    cpu_load_average = " ".join(map(str, utils.get_cpu_load_average()))
    mem_stats = utils.get_memory_stats()
    used = mem_stats["used"] - mem_stats["buffers"] - mem_stats["cached"]
    memory_usage = "%s MB of %s MB (%s%%)" % (used, mem_stats["total"], used * 100 / mem_stats["total"])
    disc_stats = utils.get_disk_stats()
    disc_usage = "%.1f GB of %.1f GB (%s%%)" % (disc_stats["used"] / 1024.0**2, disc_stats["total"] / 1024.0**2, disc_stats["usage_percent"])
    agent_enabled = utils.is_agent_proxy_enabled()
    if agent_enabled: agent_url = utils.get_agent_proxy_url()
    return render_template('status.html', **locals())
Example #5
0
    def run(self):
        if self.setThemePath is None:
            self.write_log('Plymouth not installed - exiting', 'warning')
            return

        try:
            if not exists(self.modulesPath):
                shell_exec("touch {}".format(self.modulesPath))

            # Cleanup first
            self.queue_progress()
            shell_exec("sed -i -e 's/^ *//; s/ *$//' %s" %
                       self.modulesPath)  # Trim all lines
            shell_exec("sed -i -e '/^.*KMS$/d' %s" % self.modulesPath)
            shell_exec("sed -i -e '/^intel_agp$/d' %s" % self.modulesPath)
            shell_exec("sed -i -e '/^drm$/d' %s" % self.modulesPath)
            shell_exec("sed -i -e '/^nouveau modeset.*/d' %s" %
                       self.modulesPath)
            shell_exec("sed -i -e '/^radeon modeset.*/d' %s" %
                       self.modulesPath)
            shell_exec("sed -i -e '/^i915 modeset.*/d' %s" % self.modulesPath)
            shell_exec("sed -i -e '/^uvesafb\s*mode_option.*/d' %s" %
                       self.modulesPath)
            if self.boot is not None:
                shell_exec("sed -i -e '/^GRUB_GFXPAYLOAD_LINUX.*/d' %s" %
                           self.boot)
            splashFile = '/etc/initramfs-tools/conf.d/splash'
            if exists(splashFile):
                os.remove(splashFile)

            # Set/Unset splash
            self.queue_progress()
            if self.boot is not None:
                cmd = "sed -i -e 's/\s*[a-z]*splash//' {}".format(self.boot)
                shell_exec(cmd)
                if self.theme is None:
                    self.write_log("Set nosplash")
                    cmd = "sed -i -e '/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/\"$/ nosplash\"/' {}".format(
                        self.boot)
                    shell_exec(cmd)
                    # Comment the GRUB_GFXMODE line if needed
                    cmd = "sed -i '/GRUB_GFXMODE=/s/^/#/' %s" % self.boot
                    shell_exec(cmd)
                else:
                    self.write_log("Set splash")
                    cmd = "sed -i -e '/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/\"$/ splash\"/' {}".format(
                        self.boot)
                    shell_exec(cmd)
                    # Set resolution
                    if self.resolution is not None:
                        self.write_log("GRUB_GFXMODE={}".format(
                            self.resolution))
                        cmd = "sed -i -e '/GRUB_GFXMODE=/ c GRUB_GFXMODE={0}' {1}".format(
                            self.resolution, self.boot)
                        shell_exec(cmd)

            # Only for plymouth version older than 9
            self.queue_progress()
            if self.theme is not None and self.resolution is not None:
                plymouthVersion = str_to_nr(
                    get_package_version("plymouth").replace('.', '')[0:2],
                    True)
                self.write_log("plymouthVersion={}".format(plymouthVersion))
                if plymouthVersion < 9:
                    # Write uvesafb command to modules file
                    self.write_log("> Use uvesafb to configure Plymouth")
                    line = "\nuvesafb mode_option=%s-24 mtrr=3 scroll=ywrap\ndrm\n" % self.resolution
                    with open(self.modulesPath, 'a') as f:
                        f.write(line)

                    # Use framebuffer
                    line = "FRAMEBUFFER=y"
                    with open('/etc/initramfs-tools/conf.d/splash', 'w') as f:
                        f.write(line)

            if self.boot is not None:
                # Read grub for debugging purposes
                with open(self.boot, 'r') as f:
                    content = f.read()
                    self.write_log("\nNew grub:\n{}\n".format(content))

                # Update grub
                self.queue_progress()
                if 'grub' in self.boot:
                    shell_exec('update-grub')
                else:
                    shell_exec('update-burg')

            # Set the theme and update initramfs
            self.queue_progress()
            if self.theme is not None:
                shell_exec("{0} -R {1}".format(self.setThemePath, self.theme))

        except Exception as detail:
            self.write_log(detail, 'exception')
Example #6
0
fix_progs = [['apache2', '/var/log/apache2', 'root:adm', 0],
             ['mysql-client', '/var/log/mysql', 'mysql:adm', 0],
             ['clamav', '/var/log/clamav', 'clamav:clamav', 0],
             ['lightdm', '/var/lib/lightdm/data', 'lightdm:lightdm', 0],
             ['v86d', 'v86d', 'purge', 0],
             ['usb-creator', 'solydxk-usb-creator', 'purge', 0],
             ['solydk-system-adjustments-8', 'solydk-system-adjustments', 'purge', 0],
             ['solydx-system-adjustments-8', 'solydx-system-adjustments', 'purge', 0],
             ['solydk-system-adjustments-9', 'solydk-system-adjustments', 'purge', 0],
             ['solydx-system-adjustments-9', 'solydx-system-adjustments', 'purge', 0],
             ['firefox-solydxk-adjustments', 'firefox-esr-solydxk-adjustments', 'purge', 0]]

ver = get_debian_version()
for prog in fix_progs:
    if ver >= prog[3] or prog[3] == 0:
        if get_package_version(prog[0]) != '':
            if prog[2] == 'purge' or prog[2] == 'install':
                if get_apt_cache_locked_program() == '':
                    os.system("apt-get %s %s %s" % (prog[2], force, prog[1]))
            elif ':' in prog[2] and not isdir(prog[1]):
                os.system("mkdir -p %s" % prog[1])
                os.system("chown %s %s" % (prog[2], prog[1]))


try:
    adjustment_directory = "/usr/share/solydxk/system-adjustments/"
    array_preserves = []
    overwrites = {}

    # Perform file execution adjustments
    for filename in sorted(os.listdir(adjustment_directory)):
Example #7
0
def main():
	args = docopt.docopt(__doc__, version=__version__)
	log_level = 'DEBUG' if args['--debug'] else 'INFO'
	if sys.platform == 'win32':
		log_fn = 'c:/atxpkg/atxpkg.log'
	else:
		log_fn = '/tmp/atxpkg/atxpkg.log'
	utils.logging_setup(log_level, log_fn, print_=True)
	logging.info('*' * 40)
	logging.info('starting atxpkg v%s' % __version__)
	logging.debug('args: %s' % dict(args))
	if sys.platform == 'win32':
		logging.debug('detected win32')
		db_fn = 'c:/atxpkg/installed.json'
		repos_fn = 'c:/atxpkg/repos.txt'
		prefix = 'c:'
		cache_dir = 'c:/atxpkg/cache'
	else:
		logging.debug('detected non-win32')
		db_fn = '/tmp/atxpkg/installed.json'
		repos_fn = '/tmp/atxpkg/repos.txt'
		prefix = ''
		cache_dir = '/tmp/atxpkg/cache'
	repos = utils.get_repos(repos_fn)
	repos.append(cache_dir)
	#logging.debug(str(args))
	prefix = args['--prefix'] if args['--prefix'] else ''
	if not os.path.isfile(db_fn):
		logging.info('%s not found, creating empty one' % db_fn)
		with open(db_fn, 'w') as f:
			f.write('{}')
	if not os.path.isdir(cache_dir):
		logging.info('%s not found, creating empty one' % cache_dir)
		os.makedirs(cache_dir)
	installed_packages = utils.get_installed_packages(db_fn)
	force = args['--force']
	yes, no = args['--yes'], args['--no']
	if args['install']:
		available_packages = utils.get_available_packages(repos)
		for package in args['<package>']:
			package_name = utils.get_package_name(package)
			if package_name not in available_packages:
				raise Exception('unable to find package %s' % package_name)
			if package_name in installed_packages and not force:
				raise Exception('package %s already installed' % package_name)
		for package in args['<package>']:
			package_name = utils.get_package_name(package)
			package_version = utils.get_package_version(package)
			if package_version:
				url = utils.get_specific_version_url(available_packages[package_name], package_version)
			else:
				url = utils.get_max_version_url(available_packages[package_name])
			ver = utils.get_package_version(utils.get_package_fn(url))
			print('install %s-%s' % (package_name, ver))
		if no or not (yes or utils.yes_no('continue?', default='y')):
			return
		for package in args['<package>']:
			package_name = utils.get_package_name(package)
			package_version = utils.get_package_version(package)
			if package_version:
				url = utils.get_specific_version_url(available_packages[package_name], package_version)
			else:
				url = utils.get_max_version_url(available_packages[package_name])
			local_fn = utils.download_package(url, cache_dir)
			if not args['--downloadonly']:
				package_info = utils.install_package(local_fn, prefix, force)
				installed_packages[package_name] = package_info
				utils.save_installed_packages(installed_packages, db_fn)
	elif args['update']:
		available_packages = utils.get_available_packages(repos)
		if args['<package>']:
			packages = args['<package>']
			for package in packages:
				if '..' in package:
					package_old, package_new = package.split('..')
					package_name_old = utils.get_package_name(package_old)
					package_name_new = utils.get_package_name(package_new)
				else:
					package_name_old = package_name_new = utils.get_package_name(package)

				if package_name_old not in installed_packages:
					raise Exception('package %s not installed' % package_name_old)
		else:
			packages = installed_packages.keys()
		packages_to_update = set()
		for package in packages:
			if '..' in package:
				package_old, package_new = package.split('..')
				package_name_old = utils.get_package_name(package_old)
				package_name_new = utils.get_package_name(package_new)
				package_version = utils.get_package_version(package_new)
			else:
				package_name_old = package_name_new = utils.get_package_name(package)
				package_version = utils.get_package_version(package)
			if package_name_new not in available_packages:
				logging.warning('%s not available in any repository' % package_name_new)
				continue
			if package_version:
				url = utils.get_specific_version_url(available_packages[package_name_new], package_version)
			else:
				url = utils.get_max_version_url(available_packages[package_name_new])
			ver_cur = installed_packages[package_name_old]['version']
			ver_avail = utils.get_package_version(utils.get_package_fn(url))
			if package_name_old != package_name_new or ver_avail != ver_cur or force:
				print('update %s-%s -> %s-%s' % (package_name_old, ver_cur, package_name_new, ver_avail))
				packages_to_update.add(package)
		if not packages_to_update:
			print('nothing to update')
			return
		if no or not (yes or utils.yes_no('continue?', default='y')):
			return
		for package in packages_to_update:
			if '..' in package:
				package_old, package_new = package.split('..')
				package_name_old = utils.get_package_name(package_old)
				package_name_new = utils.get_package_name(package_new)
				package_version = utils.get_package_version(package_new)
			else:
				package_name_old = package_name_new = utils.get_package_name(package)
				package_version = utils.get_package_version(package)
			if package_version:
				url = utils.get_specific_version_url(available_packages[package_name_new], package_version)
			else:
				url = utils.get_max_version_url(available_packages[package_name_new])
			ver_cur = installed_packages[package_name_old]['version']
			ver_avail = utils.get_package_version(utils.get_package_fn(url))
			if package_name_old != package_name_new or ver_avail != ver_cur or force:
				local_fn = utils.download_package(url, cache_dir)
				if not args['--downloadonly']:
					package_info = utils.update_package(local_fn, package_name_old, installed_packages[package_name_old], prefix, force)
					del installed_packages[package_name_old]
					installed_packages[package_name_new] = package_info
					utils.save_installed_packages(installed_packages, db_fn)
	elif args['merge_config']:
		if args['<package>']:
			packages = args['<package>']
			for package in packages:
				package_name = utils.get_package_name(package)
				if package_name not in installed_packages:
					raise Exception('package %s not installed' % package_name)
		else:
			packages = installed_packages.keys()
		for package in packages:
			package_name = utils.get_package_name(package)
			if package_name not in installed_packages:
				raise Exception('package %s not installed' % package_name)
		for package in packages:
			utils.mergeconfig_package(package, installed_packages, prefix)
	elif args['remove']:
		for package_name in args['<package>']:
			if package_name not in installed_packages:
				raise Exception('package %s not installed' % package_name)
		for package_name in args['<package>']:
			package_version = installed_packages[package_name]['version']
			print('remove %s-%s' % (package_name, package_version))
		if no or not (yes or utils.yes_no('continue?', default='n')):
			return
		for package_name in args['<package>']:
			utils.remove_package(package_name, installed_packages, prefix)
			del installed_packages[package_name]
			utils.save_installed_packages(installed_packages, db_fn)
	elif args['list_available']:
		available_packages = utils.get_available_packages(repos)
		for package_name in sorted(available_packages.keys()):
			print(package_name)
	elif args['list_installed']:
		for package_name, package_info in installed_packages.items():
			package_version = package_info['version']
			print('%s-%s' % (package_name, package_version))
	elif args['show_untracked']:
		recursive = args['--recursive']
		fn_to_package_name = utils.gen_fn_to_package_name_mapping(installed_packages, prefix)
		if args['<path>']:
			paths = set([args['<path>'], ])
		else:
			paths = set()
			for fn in fn_to_package_name.keys():
				paths.add(os.path.dirname(fn))
		while paths:
			for path in paths.copy():
				for fn in os.listdir(path):
					if os.path.isdir('%s/%s' % (path, fn)) and not os.path.islink('%s/%s' % (path, fn)):
						if recursive:
							paths.add('%s/%s' % (path, fn))
						else:
							continue
					if '%s/%s' % (path, fn) in fn_to_package_name:
						continue
					print('%s/%s' % (path, fn))
				paths.remove(path)
	elif args['clean_cache']:
		utils.clean_cache(cache_dir)
	logging.debug('exit')
	return 0
Example #8
0
def main():
    args = docopt.docopt(__doc__, version=__version__)
    log_level = 'DEBUG' if args['--debug'] else 'INFO'
    if sys.platform == 'win32':
        log_fn = 'c:/atxpkg/atxpkg.log'
    else:
        log_fn = '/tmp/atxpkg/atxpkg.log'
    utils.logging_setup(log_level, log_fn, print_=True)
    logging.info('*' * 40)
    logging.info('starting atxpkg v%s' % __version__)
    logging.debug('args: %s' % dict(args))
    if sys.platform == 'win32':
        logging.debug('detected win32')
        db_fn = 'c:/atxpkg/installed.json'
        repos_fn = 'c:/atxpkg/repos.txt'
        prefix = 'c:'
        cache_dir = 'c:/atxpkg/cache'
    else:
        logging.debug('detected non-win32')
        db_fn = '/tmp/atxpkg/installed.json'
        repos_fn = '/tmp/atxpkg/repos.txt'
        prefix = ''
        cache_dir = '/tmp/atxpkg/cache'
    repos = utils.get_repos(repos_fn)
    repos.append(cache_dir)
    #logging.debug(str(args))
    prefix = args['--prefix'] if args['--prefix'] else ''
    if not os.path.isfile(db_fn):
        logging.info('%s not found, creating empty one' % db_fn)
        with open(db_fn, 'w') as f:
            f.write('{}')
    if not os.path.isdir(cache_dir):
        logging.info('%s not found, creating empty one' % cache_dir)
        os.makedirs(cache_dir)
    installed_packages = utils.get_installed_packages(db_fn)
    force = args['--force']
    yes, no = args['--yes'], args['--no']
    if args['install']:
        available_packages = utils.get_available_packages(repos)
        for package in args['<package>']:
            package_name = utils.get_package_name(package)
            if package_name not in available_packages:
                raise Exception('unable to find package %s' % package_name)
            if package_name in installed_packages and not force:
                raise Exception('package %s already installed' % package_name)
        for package in args['<package>']:
            package_name = utils.get_package_name(package)
            package_version = utils.get_package_version(package)
            if package_version:
                url = utils.get_specific_version_url(
                    available_packages[package_name], package_version)
            else:
                url = utils.get_max_version_url(
                    available_packages[package_name])
            ver = utils.get_package_version(utils.get_package_fn(url))
            print('install %s-%s' % (package_name, ver))
        if no or not (yes or utils.yes_no('continue?', default='y')):
            return
        for package in args['<package>']:
            package_name = utils.get_package_name(package)
            package_version = utils.get_package_version(package)
            if package_version:
                url = utils.get_specific_version_url(
                    available_packages[package_name], package_version)
            else:
                url = utils.get_max_version_url(
                    available_packages[package_name])
            local_fn = utils.download_package(url, cache_dir)
            if not args['--downloadonly']:
                package_info = utils.install_package(local_fn, prefix, force)
                installed_packages[package_name] = package_info
                utils.save_installed_packages(installed_packages, db_fn)
                logging.info('%s-%s is now installed' %
                             (package_name, package_version))
    elif args['update']:
        available_packages = utils.get_available_packages(repos)
        if args['<package>']:
            packages = args['<package>']
            for package in packages:
                if '..' in package:
                    package_old, package_new = package.split('..')
                    package_name_old = utils.get_package_name(package_old)
                    package_name_new = utils.get_package_name(package_new)
                else:
                    package_name_old = package_name_new = utils.get_package_name(
                        package)

                if package_name_old not in installed_packages:
                    raise Exception('package %s not installed' %
                                    package_name_old)
        else:
            packages = installed_packages.keys()
        packages_to_update = set()
        for package in packages:
            if '..' in package:
                package_old, package_new = package.split('..')
                package_name_old = utils.get_package_name(package_old)
                package_name_new = utils.get_package_name(package_new)
                package_version = utils.get_package_version(package_new)
            else:
                package_name_old = package_name_new = utils.get_package_name(
                    package)
                package_version = utils.get_package_version(package)
            if package_name_new not in available_packages:
                logging.warning('%s not available in any repository' %
                                package_name_new)
                continue
            if package_version:
                url = utils.get_specific_version_url(
                    available_packages[package_name_new], package_version)
            else:
                url = utils.get_max_version_url(
                    available_packages[package_name_new])
            ver_cur = installed_packages[package_name_old]['version']
            ver_avail = utils.get_package_version(utils.get_package_fn(url))
            if package_name_old != package_name_new or ver_avail != ver_cur or force:
                print('update %s-%s -> %s-%s' %
                      (package_name_old, ver_cur, package_name_new, ver_avail))
                packages_to_update.add(package)
        if not packages_to_update:
            print('nothing to update')
            return
        if no or not (yes or utils.yes_no('continue?', default='y')):
            return
        for package in packages_to_update:
            if '..' in package:
                package_old, package_new = package.split('..')
                package_name_old = utils.get_package_name(package_old)
                package_name_new = utils.get_package_name(package_new)
                package_version = utils.get_package_version(package_new)
            else:
                package_name_old = package_name_new = utils.get_package_name(
                    package)
                package_version = utils.get_package_version(package)
            if package_version:
                url = utils.get_specific_version_url(
                    available_packages[package_name_new], package_version)
            else:
                url = utils.get_max_version_url(
                    available_packages[package_name_new])
            ver_cur = installed_packages[package_name_old]['version']
            ver_avail = utils.get_package_version(utils.get_package_fn(url))
            if package_name_old != package_name_new or ver_avail != ver_cur or force:
                local_fn = utils.download_package(url, cache_dir)
                if not args['--downloadonly']:
                    package_info = utils.update_package(
                        local_fn, package_name_old,
                        installed_packages[package_name_old], prefix, force)
                    del installed_packages[package_name_old]
                    installed_packages[package_name_new] = package_info
                    utils.save_installed_packages(installed_packages, db_fn)
                    logging.info('%s-%s updated to %s-%s' %
                                 (package_name_old, ver_cur, package_name_new,
                                  ver_avail))
    elif args['merge_config']:
        if args['<package>']:
            packages = args['<package>']
            for package in packages:
                package_name = utils.get_package_name(package)
                if package_name not in installed_packages:
                    raise Exception('package %s not installed' % package_name)
        else:
            packages = installed_packages.keys()
        for package in packages:
            package_name = utils.get_package_name(package)
            if package_name not in installed_packages:
                raise Exception('package %s not installed' % package_name)
        for package in packages:
            utils.mergeconfig_package(package, installed_packages, prefix)
    elif args['remove']:
        for package_name in args['<package>']:
            if package_name not in installed_packages:
                raise Exception('package %s not installed' % package_name)
        for package_name in args['<package>']:
            package_version = installed_packages[package_name]['version']
            print('remove %s-%s' % (package_name, package_version))
        if no or not (yes or utils.yes_no('continue?', default='n')):
            return
        for package_name in args['<package>']:
            utils.remove_package(package_name, installed_packages, prefix)
            del installed_packages[package_name]
            utils.save_installed_packages(installed_packages, db_fn)
    elif args['list_available']:
        available_packages = utils.get_available_packages(repos)
        for package_name in sorted(available_packages.keys()):
            print(package_name)
    elif args['list_installed']:
        for package_name, package_info in installed_packages.items():
            package_version = package_info['version']
            print('%s-%s' % (package_name, package_version))
    elif args['show_untracked']:
        recursive = args['--recursive']
        fn_to_package_name = utils.gen_fn_to_package_name_mapping(
            installed_packages, prefix)
        if args['<path>']:
            paths = set([
                args['<path>'],
            ])
        else:
            paths = set()
            for fn in fn_to_package_name.keys():
                paths.add(os.path.dirname(fn))
        while paths:
            for path in paths.copy():
                for fn in os.listdir(path):
                    if os.path.isdir(
                            '%s/%s' %
                        (path, fn)) and not os.path.islink('%s/%s' %
                                                           (path, fn)):
                        if recursive:
                            paths.add('%s/%s' % (path, fn))
                        else:
                            continue
                    if '%s/%s' % (path, fn) in fn_to_package_name:
                        continue
                    print('%s/%s' % (path, fn))
                paths.remove(path)
    elif args['clean_cache']:
        utils.clean_cache(cache_dir)
    elif args['check']:
        if args['<package>']:
            packages = args['<package>']
            for package in packages:
                if not package in installed_packages.keys():
                    packages = []
                    print('%s not installed' % package)
        else:
            packages = installed_packages.keys()
        if packages:
            for package in packages:
                for fn in installed_packages[package]['md5sums']:
                    if not os.path.isfile('%s/%s' % (prefix, fn)):
                        logging.info('%s/%s does not exist' % (prefix, fn))
                    else:
                        if utils.get_md5sum(
                                '%s/%s' % (prefix, fn)
                        ) != installed_packages[package]['md5sums'][fn]:
                            logging.info('sum of %s/%s differs' % (prefix, fn))
                print('check of %s complete' % package)
                logging.info('check of %s complete' % package)
    logging.debug('exit')
    return 0
Example #9
0
 def get_package_version(self):
     return utils.get_package_version(self.path_or_file)