def cmake_high( building_site, options, arguments, environment, environment_mode, source_subdir, build_in_separate_dir, log=None ): building_site = wayround_org.utils.path.abspath(building_site) own_log = False if log is None: own_log = True log = wayround_org.utils.log.Log(wayround_org.aipsetup.build.getDIR_BUILD_LOGS(building_site), "cmake") env = wayround_org.utils.osutils.env_vars_edit(environment, environment_mode) if len(environment) > 0: log.info("Environment modifications:\n{}".format(pprint.pformat(environment))) script_path = determine_abs_configure_dir(building_site, source_subdir) working_dir = determine_building_dir(building_site, source_subdir, build_in_separate_dir) ret = cmake_low( log=log, build_dir=working_dir, src_dir=script_path, working_dir=working_dir, opts=options, args=arguments, env=env, ) if own_log: log.close() return ret
def clean_packages_with_broken_files(command_name, opts, args, adds): """ Find packages with broken files """ import wayround_org.aipsetup.controllers config = adds['config'] pkg_client = \ wayround_org.aipsetup.controllers.pkg_client_by_config( config ) system = wayround_org.aipsetup.controllers.sys_ctl_by_config( config, pkg_client, basedir='/' ) r = system.list_installed_asps_and_their_sums(mute=False) logging.info("Checking Packages") asps = list(r.keys()) asps_c = len(asps) problems = {} b = 0 m = 0 for i in range(asps_c): asp_name = asps[i] asp = r[asp_name] if isinstance(asp, dict): problems[asp_name] = {'missing': [], 'broken': []} files = list(asp.keys()) fc = len(files) fi = 0 perc = 0 if i != 0: perc = (100.0 / (asps_c / i)) for j in files: if not os.path.exists(j): problems[asp_name]['missing'].append(j) m += 1 else: _sum = wayround_org.utils.checksum.make_file_checksum( j, method='sha512' ) if _sum != asp[j]: problems[asp_name]['broken'].append(j) b += 1 fi += 1 wayround_org.utils.terminal.progress_write( " ({perc:5.2f}%) {p} packages of {pc}, {f} files of " "{fc}. found {b} broken, {m} missing".format( perc=perc, p=i, pc=asps_c, f=fi, fc=fc, m=m, b=b ) ) for i in list(problems.keys()): if (len( problems[i]['missing'] ) == 0 and len(problems[i]['broken']) == 0): del problems[i] print() log = wayround_org.utils.log.Log( os.getcwd(), 'problems' ) log.info(pprint.pformat(problems)) log_name = log.log_filename log.close() logging.info("Log saved to {}".format(log_name)) return 0
def clean_find_garbage(command_name, opts, args, adds): """ Search system for garbage making log and cleaning script [-h=all|cpu-vend-os-triplet] [-a=all|cpu-vend-os-triplet] -b=BASENAME - system root path --script-type=bash - system cleaning script language (only bash supported) --so - look only for .so files garbage in /usr/lib directory """ import wayround_org.aipsetup.controllers import wayround_org.aipsetup.package_name_parser import wayround_org.aipsetup.client_pkg import wayround_org.aipsetup.system config = adds['config'] ret = 0 if wayround_org.utils.getopt.check_options( opts, opts_list=[ '-b=', '--script-type=', '--so', '-h=', '-a=' ] ) != 0: ret = 1 if ret == 0: timestamp = wayround_org.utils.time.currenttime_stamp() basedir = '/' script = 'system_garbage_remove_{}.sh'.format(timestamp) script_type = 'bash' only_lib = False down_script = 'get_required_sources_{}.sh'.format(timestamp) if '-b' in opts: basedir = opts['-b'] if '--script-type' in opts: script_type = opts['--script-type'] only_lib = '--so' in opts host, arch = _process_h_and_a_opts_specific(opts, config) log = wayround_org.utils.log.Log( os.getcwd(), 'system_garbage', timestamp=timestamp ) if not script_type in ['bash']: logging.error("Invalid --script-type value") ret = 1 else: pkg_client = \ wayround_org.aipsetup.controllers.pkg_client_by_config( config ) system = wayround_org.aipsetup.controllers.sys_ctl_by_config( config, pkg_client, basedir=basedir ) log.info("Searching for garbage") res = system.find_system_garbage( mute=False, only_lib=only_lib, host=host ) if not isinstance(res, list): log.error("Some error while searching for garbage") ret = 1 else: log.info("Garbage search complete") log.info( "Separating garbage .so files to know " "which packages depending on them" ) libs = wayround_org.utils.path.exclude_files_not_in_dirs( res, system.library_paths(host=host), ) libs = wayround_org.aipsetup.system.filter_so_files( libs, verbose=True ) if only_lib: res = libs libs = wayround_org.utils.path.bases(libs) asp_deps = system.load_asp_deps_all(mute=False) asps_lkd_to_garbage = {} log.info("Calculating garbage dependencies") for asp_name in list(asp_deps.keys()): if not asp_name in asps_lkd_to_garbage: asps_lkd_to_garbage[asp_name] = dict() for file_name in list(asp_deps[asp_name].keys()): file_name_with_dest_dir = \ wayround_org.utils.path.insert_base( file_name, basedir ) if (not file_name_with_dest_dir in asps_lkd_to_garbage[asp_name]): asps_lkd_to_garbage[ asp_name ][file_name_with_dest_dir] = set() asps_lkd_to_garbage[ asp_name ][file_name_with_dest_dir] |= \ (set(libs) & set(asp_deps[asp_name][file_name])) if len( asps_lkd_to_garbage[ asp_name][file_name_with_dest_dir] ) == 0: del asps_lkd_to_garbage[ asp_name][file_name_with_dest_dir] if len(asps_lkd_to_garbage[asp_name]) == 0: del asps_lkd_to_garbage[asp_name] s = open(script, 'w') s.write("""\ #!/bin/bash # This is fuse to ensure You are know what You are doing exit 1 """) log.info("Writing report and cleaning script") res.sort() for i in res: try: log.info(" {}".format(i), echo=False) except: log.error("Error logging {}".format(repr(i))) try: s.write("rm {}\n".format(shlex.quote(i))) except: log.error("Error writing {}".format(repr(i))) log.info( "Packages linked to garbage libraries:\n{}".format( pprint.pformat(asps_lkd_to_garbage) ), echo=False ) log.info("Generating download script") required_packages = set() for i in list(asps_lkd_to_garbage.keys()): p = wayround_org.aipsetup.package_name_parser.\ package_name_parse(i) if not p: log.error( "Can't parse ASP name `{}' to add it to download script".format( i) ) else: required_packages.add(p['groups']['name']) log.info("Writing download script") ds = open(down_script, 'w') ds.write( """\ #!/bin/bash aipsetup3 src getl {} """.format(' '.join(required_packages)) ) ds.close() s.close() logging.warning(""" Do not run cleaning script at once! Check everything is correct! Wrong cleaning can ruin your system """ ) log.close() return ret