コード例 #1
0
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
コード例 #2
0
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
コード例 #3
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