Ejemplo n.º 1
0
def create_rpm_list_to_copy_in_iso(build_install_option):
    base_path = os.path.dirname(build_install_option)
    json_wrapper_option_list = JsonWrapper(build_install_option)
    option_list_json = json_wrapper_option_list.read()
    options_sorted = option_list_json.items()
    packages = []
    for install_option in options_sorted:
        file_path = os.path.join(base_path, install_option[1]["file"])
        json_wrapper_package_list = JsonWrapper(file_path)
        package_list_json = json_wrapper_package_list.read()
        packages = packages + package_list_json["packages"]
    return packages
Ejemplo n.º 2
0
def create_pkg_list_to_copy_to_iso(build_install_option, output_data_path):
    json_wrapper_option_list = JsonWrapper(build_install_option)
    option_list_json = json_wrapper_option_list.read()
    options_sorted = option_list_json.items()
    packages = []
    for install_option in options_sorted:
        if install_option[0] != "iso":
            file_path = os.path.join(output_data_path, install_option[1]["file"])
            json_wrapper_package_list = JsonWrapper(file_path)
            package_list_json = json_wrapper_package_list.read()
            packages = packages + package_list_json["packages"]
    return packages
Ejemplo n.º 3
0
def create_rpm_list_to_copy_in_iso(build_install_option, output_data_path):
    json_wrapper_option_list = JsonWrapper(build_install_option)
    option_list_json = json_wrapper_option_list.read()
    options_sorted = option_list_json.items()
    packages = []
    for install_option in options_sorted:
        if install_option[0] != "iso":
            file_path = os.path.join(output_data_path, install_option[1]["file"])
            json_wrapper_package_list = JsonWrapper(file_path)
            package_list_json = json_wrapper_package_list.read()
            packages = packages + package_list_json["packages"]
    return packages
Ejemplo n.º 4
0
def main():
    usage = os.path.basename(__file__) + "--input-type=[json/pkg/who-needs] --pkg=[pkg_name] --file=<JSON_FILE_NAME> --disp=[tree/list/json]"
    parser = OptionParser(usage)
    parser.add_option("-i", "--input-type", dest="input_type", default=DEFAULT_INPUT_TYPE)
    parser.add_option("-p", "--pkg", dest="pkg")
    parser.add_option("-f", "--file", dest="json_file", default="packages_minimal.json")
    parser.add_option("-d", "--disp", dest="display_option", default=DEFAULT_DISPLAY_OPTION) 
    parser.add_option("-s", "--spec-dir", dest="spec_dir", default=SPEC_FILE_DIR)
    parser.add_option("-t", "--stage-dir", dest="stage_dir", default="../../stage")
    parser.add_option("-a", "--input-data-dir", dest="input_data_dir", default="../../common/data/")
    (options,  args) = parser.parse_args() 

    if(False == options.input_data_dir.endswith('/')):
        options.input_data_dir += '/'

    specDeps = SerializedSpecObjects(options.input_data_dir, options.stage_dir)
    displayOption = options.display_option
    abs_path = os.path.abspath(__file__)
    dir_name = os.path.dirname(abs_path)
    os.chdir(dir_name)

    if(options.input_type == "pkg" or options.input_type == "who-needs"): # To display/print package dependencies on console
        targetName = options.pkg
        specDeps.readSpecsAndConvertToSerializableObjects(options.spec_dir, options.input_type, targetName, displayOption)
    elif(options.input_type == "json"):# Generate the expanded package dependencies json file based on package_list_file 
        json_wrapper_option_list = JsonWrapper(options.json_file)
        option_list_json = json_wrapper_option_list.read()
        options_sorted = option_list_json.items()
        for install_option in options_sorted:
            if displayOption == "tree" and install_option[1]["title"] == "ISO Packages":
                continue
            specDeps.readSpecsAndConvertToSerializableObjects(options.spec_dir, options.input_type, install_option[1]["file"], displayOption)

    sys.exit(0)
Ejemplo n.º 5
0
    def _copy_rpms(self):
        """
        Prepare RPM list and copy rpms
        """
        # prepare the RPMs list
        json_pkg_to_rpm_map = JsonWrapper(self.install_config["pkg_to_rpm_map_file"])
        pkg_to_rpm_map = json_pkg_to_rpm_map.read()

        self.rpms_tobeinstalled = []
        selected_packages = self.install_config['packages']

        for pkg in selected_packages:
            versionindex = pkg.rfind("-")
            if versionindex == -1:
                raise Exception("Invalid pkg name: " + pkg)
            package = pkg[:versionindex]
            if pkg in pkg_to_rpm_map:
                if pkg_to_rpm_map[pkg]['rpm'] is not None:
                    name = pkg_to_rpm_map[pkg]['rpm']
                    basename = os.path.basename(name)
                    self.rpms_tobeinstalled.append({'filename': basename, 'path': name,
                                                    'package' : package})

        # Copy the rpms
        for rpm in self.rpms_tobeinstalled:
            shutil.copy(rpm['path'], self.photon_root + '/RPMS/')
Ejemplo n.º 6
0
def main():
	usage = os.path.basename(__file__) + "--input-type=[json/pkg/who-needs] --pkg=[pkg_name] --file=<JSON_FILE_NAME> --disp=[tree/list/json]"
	parser = OptionParser(usage)
	parser.add_option("-i", "--input-type", dest="input_type", default=DEFAULT_INPUT_TYPE)
	parser.add_option("-p", "--pkg", dest="pkg")
	parser.add_option("-f", "--file", dest="json_file", default="packages_minimal.json")
	parser.add_option("-d", "--disp", dest="display_option", default=DEFAULT_DISPLAY_OPTION) 
	parser.add_option("-s", "--spec-dir", dest="spec_dir", default=SPEC_FILE_DIR)
	parser.add_option("-t", "--stage-dir", dest="stage_dir", default="../../stage")
	parser.add_option("-a", "--input-data-dir", dest="input_data_dir", default="../../common/data/")
	(options,  args) = parser.parse_args() 

	if(False == options.input_data_dir.endswith('/')):
		options.input_data_dir += '/'

	specDeps = SerializedSpecObjects(options.input_data_dir, options.stage_dir)
	displayOption = options.display_option
	abs_path = os.path.abspath(__file__)
	dir_name = os.path.dirname(abs_path)
	os.chdir(dir_name)

	if(options.input_type == "pkg" or options.input_type == "who-needs"): # To display/print package dependencies on console
		targetName = options.pkg
		specDeps.readSpecsAndConvertToSerializableObjects(options.spec_dir, options.input_type, targetName, displayOption)
	elif(options.input_type == "json"):# Generate the expanded package dependencies json file based on package_list_file 
		json_wrapper_option_list = JsonWrapper(options.json_file)
		option_list_json = json_wrapper_option_list.read()
		options_sorted = option_list_json.items()
		for install_option in options_sorted:
			if displayOption == "tree" and install_option[1]["title"] == "ISO Packages":
				continue
			specDeps.readSpecsAndConvertToSerializableObjects(options.spec_dir, options.input_type, install_option[1]["file"], displayOption)

	sys.exit(0)
Ejemplo n.º 7
0
    def load_package_list(self, options_file):
        json_wrapper_option_list = JsonWrapper(options_file)
        option_list_json = json_wrapper_option_list.read()
        options_sorted = option_list_json.items()

        self.package_menu_items = []
        base_path = os.path.dirname(options_file)
        package_list = []

        default_selected = 0
        visible_options_cnt = 0
        for install_option in options_sorted:
            if install_option[1]["visible"] == True:
                package_list = PackageSelector.get_packages_to_install(install_option[1],
                                                                       base_path)
                additional_files = PackageSelector.get_additional_files_to_copy_in_iso(
                    install_option, base_path)
                self.package_menu_items.append((install_option[1]["title"],
                                                self.exit_function,
                                                [install_option[0],
                                                 package_list, additional_files]))
                if install_option[0] == 'minimal':
                    default_selected = visible_options_cnt
                visible_options_cnt = visible_options_cnt + 1


        self.package_menu = Menu(self.menu_starty, self.maxx, self.package_menu_items,
                                 default_selected=default_selected, tab_enable=False)
Ejemplo n.º 8
0
    def load_package_list(self, options_file):
        json_wrapper_option_list = JsonWrapper(options_file)
        option_list_json = json_wrapper_option_list.read()
        options_sorted = option_list_json.items()

        self.package_menu_items = []
        base_path = os.path.dirname(options_file)
        package_list = []

        default_selected = 0
        visible_options_cnt = 0
        for install_option in options_sorted:
            if install_option[1]["visible"] == True:
                package_list = PackageSelector.get_packages_to_install(options_sorted,
                                                                       install_option[0],
                                                                       base_path)
                additional_files = PackageSelector.get_additional_files_to_copy_in_iso(
                    options_sorted, base_path, install_option[0])
                self.package_menu_items.append((install_option[1]["title"],
                                                self.exit_function,
                                                [install_option[0],
                                                 package_list, additional_files]))
                if install_option[0] == 'minimal':
                    default_selected = visible_options_cnt
                visible_options_cnt = visible_options_cnt + 1


        self.package_menu = Menu(self.menu_starty, self.maxx, self.package_menu_items,
                                 default_selected=default_selected, tab_enable=False)
Ejemplo n.º 9
0
def create_rpm_list_to_be_copied_to_iso(pkg_to_rpm_map_file,
                                        build_install_option, copy_flags,
                                        output_data_path):
    packages = []
    if build_install_option is None:
        packages = []
    else:
        packages = create_pkg_list_to_copy_to_iso(build_install_option,
                                                  output_data_path)

    rpm_list = []
    json_pkg_to_rpm_map = JsonWrapper(pkg_to_rpm_map_file)
    pkg_to_rpm_map = json_pkg_to_rpm_map.read()
    for k in pkg_to_rpm_map:
        if build_install_option is None or k in packages:
            if not pkg_to_rpm_map[k]['rpm'] is None and bool(copy_flags & 1):
                filename = pkg_to_rpm_map[k]['rpm']
                rpm_list.append(get_file_name_with_last_folder(filename))
            if not pkg_to_rpm_map[k]['debugrpm'] is None and bool(copy_flags
                                                                  & 2):
                filename = pkg_to_rpm_map[k]['debugrpm']
                rpm_list.append(get_file_name_with_last_folder(filename))
            if not pkg_to_rpm_map[k]['sourcerpm'] is None and bool(copy_flags
                                                                   & 4):
                rpm_list.append(pkg_to_rpm_map[k]['sourcerpm'])
    return rpm_list
Ejemplo n.º 10
0
    def load_package_list(self):
        json_wrapper_package_list = JsonWrapper("packages_full.json");
        package_list_json = json_wrapper_package_list.read()

        for package in package_list_json["packages"]:
            self.menu_items.append((package, self.exit_function))
        self.package_menu = Menu(self.menu_starty,  self.maxx, self.menu_items, height = 18, selector_menu = True)
Ejemplo n.º 11
0
    def _copy_rpms(self):
        """
        Prepare RPM list and copy rpms
        """
        # prepare the RPMs list
        json_pkg_to_rpm_map = JsonWrapper(
            self.install_config["pkg_to_rpm_map_file"])
        pkg_to_rpm_map = json_pkg_to_rpm_map.read()

        self.rpms_tobeinstalled = []
        selected_packages = self.install_config['packages']

        for pkg in selected_packages:
            if pkg in pkg_to_rpm_map:
                if pkg_to_rpm_map[pkg]['rpm'] is not None:
                    name = pkg_to_rpm_map[pkg]['rpm']
                    basename = os.path.basename(name)
                    self.rpms_tobeinstalled.append({
                        'filename': basename,
                        'path': name,
                        'package': pkg
                    })

        # Copy the rpms
        for rpm in self.rpms_tobeinstalled:
            shutil.copy(rpm['path'], self.photon_root + '/RPMS/')
Ejemplo n.º 12
0
    def load_package_list(self, options_file):
        json_wrapper_option_list = JsonWrapper(options_file)
        option_list_json = json_wrapper_option_list.read()
        options_sorted = option_list_json.items()

        self.package_menu_items = []
        base_path = os.path.dirname(options_file)
        package_list = []

        if len(options_sorted) == 1:
            if 'packagelist_file' not in self.install_config:
                self.install_config['packagelist_file'] = list(
                    options_sorted)[0][1]['packagelist_file']
                list(options_sorted)[0][1]['visible'] = True

        default_selected = 0
        visible_options_cnt = 0
        for install_option in options_sorted:
            if install_option[1]["visible"] == True:
                package_list = PackageSelector.get_packages_to_install(
                    install_option[1], base_path)
                self.package_menu_items.append(
                    (install_option[1]["title"], self.exit_function,
                     [install_option[0], package_list]))
                if install_option[0] == 'minimal':
                    default_selected = visible_options_cnt
                visible_options_cnt = visible_options_cnt + 1

        self.package_menu = Menu(self.menu_starty,
                                 self.maxx,
                                 self.package_menu_items,
                                 default_selected=default_selected,
                                 tab_enable=False)
Ejemplo n.º 13
0
def main():
    usage = "Usage: %prog [options]"
    parser = ArgumentParser(usage)
    parser.add_argument("-i", "--input-type", dest="input_type", default=DEFAULT_INPUT_TYPE)
    parser.add_argument("-p", "--pkg", dest="pkg")
    parser.add_argument("-f", "--file", dest="json_file", default="packages_minimal.json")
    parser.add_argument("-d", "--disp", dest="display_option", default=DEFAULT_DISPLAY_OPTION)
    parser.add_argument("-s", "--spec-dir", dest="spec_dir", default=SPEC_FILE_DIR)
    parser.add_argument("-l", "--log-dir", dest="log_dir", default=LOG_FILE_DIR)
    parser.add_argument("-t", "--stage-dir", dest="stage_dir", default="../../stage")
    parser.add_argument("-a", "--input-data-dir", dest="input_data_dir", default="../../common/data/")
    parser.add_argument("-o", "--output-dir", dest="output_dir", default="../../stage/common/data")
    options = parser.parse_args()

    constants.setSpecPath(options.spec_dir)
    constants.setLogPath(options.log_dir)
    constants.initialize()

    cmdUtils = CommandUtils()

    if not os.path.isdir(options.output_dir):
        cmdUtils.runCommandInShell2("mkdir -p "+options.output_dir)

    if not options.input_data_dir.endswith('/'):
        options.input_data_dir += '/'
    try:
        specDeps = SpecDependencyGenerator()

        # To display/print package dependencies on console
        if (options.input_type == "pkg" or
                options.input_type == "who-needs" or
                options.input_type == "who-needs-build"):
            specDeps.process(options.input_type, options.pkg, options.display_option)

        elif options.input_type == "json":
            list_json_files = options.json_file.split("\n")
            # Generate the expanded package dependencies json file based on package_list_file
            for json_file in list_json_files:
                shutil.copy2(json_file, options.output_dir)
                json_wrapper_option_list = JsonWrapper(json_file)
                option_list_json = json_wrapper_option_list.read()
                options_sorted = option_list_json.items()
                for install_option in options_sorted:
                    output_file = None
                    input_value = os.path.join(os.path.dirname(json_file), install_option[1]["file"])
                    if options.display_option == "tree" and install_option[1]["title"] == "ISO Packages":
                        continue
                    if options.display_option == "json":
                        output_file = os.path.join(options.output_dir, install_option[1]["file"])
                    print ("Generating the install time dependency list for " + json_file)
                    specDeps.process(options.input_type, input_value, options.display_option, output_file)
    except Exception as e:
        traceback.print_exc()
        sys.stderr.write(str(e))
        sys.stderr.write("Failed to generate dependency lists from spec files\n")
        sys.exit(1)

    sys.stderr.write("Successfully generated dependency lists from spec files\n")
    sys.exit(0)
Ejemplo n.º 14
0
def create_additional_file_list_to_copy_in_iso(base_path, build_install_option):
    json_wrapper_option_list = JsonWrapper(build_install_option)
    option_list_json = json_wrapper_option_list.read()
    options_sorted = option_list_json.items()
    file_list = []
    for install_option in options_sorted:
        if install_option[1].has_key("additional-files"):
            file_list = file_list + map(lambda filename: os.path.join(base_path, filename), install_option[1].get("additional-files")) 
    return file_list
Ejemplo n.º 15
0
    def exit_function(self,  selected_indexes):
        json_wrapper_package_list = JsonWrapper("packages_minimal.json");
        package_list_json = json_wrapper_package_list.read()
        selected_items = []
        for index in selected_indexes:
            selected_items.append(self.menu_items[index][0])

        self.install_config['packages'] = package_list_json["packages"] + selected_items
        return ActionResult(True, None)
Ejemplo n.º 16
0
def create_additional_file_list_to_copy_in_iso(base_path, build_install_option):
    json_wrapper_option_list = JsonWrapper(build_install_option)
    option_list_json = json_wrapper_option_list.read()
    options_sorted = option_list_json.items()
    file_list = []
    for install_option in options_sorted:
        if install_option[1].has_key("additional-files"):
            file_list = file_list + map(lambda filename: os.path.join(base_path, filename), install_option[1].get("additional-files"))
    return file_list
Ejemplo n.º 17
0
def get_live_cd_status_string(build_install_option):
    json_wrapper_option_list = JsonWrapper(build_install_option)
    option_list_json = json_wrapper_option_list.read()
    options_sorted = option_list_json.items()
    file_list = []
    for install_option in options_sorted:
        if install_option[1].has_key("live-cd"):
            if install_option[1].get("live-cd") == True:
                return "true"
    return "false"
Ejemplo n.º 18
0
    def exit_function(self, selected_indexes):
        json_wrapper_package_list = JsonWrapper("packages_minimal.json")
        package_list_json = json_wrapper_package_list.read()
        selected_items = []
        for index in selected_indexes:
            selected_items.append(self.menu_items[index][0])

        self.install_config[
            'packages'] = package_list_json["packages"] + selected_items
        return ActionResult(True, None)
Ejemplo n.º 19
0
 def get_packages_to_install(option, output_data_path):
     if 'packagelist_file' in option:
         json_wrapper_package_list = JsonWrapper(os.path.join(output_data_path,
                                             option['packagelist_file']))
         package_list_json = json_wrapper_package_list.read()
         return package_list_json["packages"]
     elif 'packages' in option:
         return option["packages"]
     else:
         raise Exception("Install option '" + option['title'] + "' must have 'packagelist_file' or 'packages' property")
Ejemplo n.º 20
0
def get_live_cd_status_string(build_install_option):
    json_wrapper_option_list = JsonWrapper(build_install_option)
    option_list_json = json_wrapper_option_list.read()
    options_sorted = option_list_json.items()
    file_list = []
    for install_option in options_sorted:
        if install_option[1].has_key("live-cd"):
            if install_option[1].get("live-cd") == True:
                return "true"
    return "false"
Ejemplo n.º 21
0
def get_packages_to_install(options, config_type):
    package_list = []
    install_option = options[config_type]
    for include_type in install_option["include"]:
        package_list = package_list + get_packages_to_install(options, include_type)
    json_wrapper_package_list = JsonWrapper(install_option["file"])
    package_list_json = json_wrapper_package_list.read()
    package_list = package_list + package_list_json["packages"]

    return package_list
Ejemplo n.º 22
0
    def ks_install(self, options_file, rpm_path, ks_config):
        install_config = ks_config
        install_config['iso_system'] = False
        if self.is_vmware_virtualization(
        ) and 'install_linux_esx' not in install_config:
            install_config['install_linux_esx'] = True

        json_wrapper_option_list = JsonWrapper(
            "build_install_options_all.json")
        option_list_json = json_wrapper_option_list.read()
        options_sorted = option_list_json.items()

        base_path = os.path.dirname("build_install_options_all.json")
        package_list = []

        package_list = PackageSelector.get_packages_to_install(
            options_sorted, install_config['type'], base_path)
        if 'additional_packages' in install_config:
            package_list.extend(install_config['additional_packages'])
        install_config['packages'] = package_list

        if 'partitions' in install_config:
            partitions = install_config['partitions']
        else:
            partitions = modules.commons.default_partitions

        install_config['disk'] = modules.commons.partition_disk(
            install_config['disk'], partitions)

        if "hostname" in install_config:
            evalhostname = os.popen(
                'printf ' + install_config["hostname"].strip(" ")).readlines()
            install_config['hostname'] = evalhostname[0]
        if "hostname" not in install_config or install_config['hostname'] == "":
            random_id = '%12x' % random.randrange(16**12)
            install_config['hostname'] = "photon-" + random_id.strip()

        # crypt the password if needed
        if install_config['password']['crypted']:
            install_config['password'] = install_config['password']['text']
        else:
            install_config['password'] = crypt.crypt(
                install_config['password']['text'], "$6$" + "".join([
                    random.choice(string.ascii_letters + string.digits)
                    for _ in range(16)
                ]))

        installer = InstallerContainer(install_config,
                                       self.maxy,
                                       self.maxx,
                                       True,
                                       rpm_path=rpm_path,
                                       log_path="/var/log")

        installer.install(None)
Ejemplo n.º 23
0
    def load_package_list(self):
        json_wrapper_package_list = JsonWrapper("package_list.json");
        self.package_list_json = json_wrapper_package_list.read()

        self.package_menu_items =   [
                                        ('1. Photon OS (Micro)', self.exit_function, ['micro', self.package_list_json["micro_packages"]]),
                                        ('2. Photon Container OS (Minimal)', self.exit_function, ['minimal', self.package_list_json["minimal_packages"]]),
                                        ('3. Photon Full OS (All)', self.exit_function, ['full', self.package_list_json["minimal_packages"] + self.package_list_json["optional_packages"]]),
                                        ('4. Photon Custom OS', self.custom_packages, ['custom', None])
                                    ]
        self.package_menu = Menu(self.menu_starty,  self.maxx, self.package_menu_items)
Ejemplo n.º 24
0
def get_packages_to_install(options, config_type):
    package_list = []
    install_option = options[config_type]
    for include_type in install_option["include"]:
        package_list = package_list + get_packages_to_install(
            options, include_type)
    json_wrapper_package_list = JsonWrapper(install_option["file"])
    package_list_json = json_wrapper_package_list.read()
    package_list = package_list + package_list_json["packages"]

    return package_list
Ejemplo n.º 25
0
 def get_packages_to_install(options, config_type, output_data_path):
     package_list = []
     for install_option in options:
         if install_option[0] == config_type:               
             for include_type in install_option[1]["include"]:
                 package_list = package_list + PackageSelector.get_packages_to_install(options, include_type, output_data_path)
             json_wrapper_package_list = JsonWrapper(os.path.join(output_data_path, install_option[1]["file"]))
             package_list_json = json_wrapper_package_list.read()
             package_list = package_list + package_list_json["packages"]
             break
     return package_list
Ejemplo n.º 26
0
 def get_packages_to_install(options, config_type, output_data_path):
     package_list = []
     for install_option in options:
         if install_option[0] == config_type:
             for include_type in install_option[1]["include"]:
                 package_list = package_list + PackageSelector.get_packages_to_install(options, include_type, output_data_path)
             json_wrapper_package_list = JsonWrapper(os.path.join(output_data_path, install_option[1]["file"]))
             package_list_json = json_wrapper_package_list.read()
             package_list = package_list + package_list_json["packages"]
             break
     return package_list
Ejemplo n.º 27
0
    def load_package_list(self):
        json_wrapper_package_list = JsonWrapper("package_list.json")
        self.package_list_json = json_wrapper_package_list.read()

        for package in self.package_list_json["optional_packages"]:
            self.menu_items.append((package, self.exit_function))
        self.package_menu = Menu(self.menu_starty,
                                 self.maxx,
                                 self.menu_items,
                                 height=18,
                                 selector_menu=True)
Ejemplo n.º 28
0
 def get_packages_to_install(options, base_path, config_type):
     package_list = []
     for install_option in options:
         if install_option[0] == config_type:
             if install_option[1]["include"] != "none":
                 for include_type in install_option[1]["include"].split(','):
                     package_list = package_list + PackageSelector.get_packages_to_install(options, base_path, include_type)
             json_wrapper_package_list = JsonWrapper(os.path.join(base_path, install_option[1]["file"]))
             package_list_json = json_wrapper_package_list.read()
             package_list = package_list + package_list_json["packages"]
             break
     return package_list
Ejemplo n.º 29
0
    def load_package_list(self, options_file):
        json_wrapper_option_list = JsonWrapper(options_file)
        option_list_json = json_wrapper_option_list.read()
        options_sorted = option_list_json.items()

        self.package_menu_items = []
        base_path = os.path.dirname(options_file)
        package_list = []

        for install_option in options_sorted:
            if install_option[1]["visible"] == True:
                package_list = PackageSelector.get_packages_to_install(options_sorted, base_path, install_option[0])
                self.package_menu_items.append((install_option[1]["title"], self.exit_function, [install_option[0], package_list] ))

        self.package_menu = Menu(self.menu_starty,  self.maxx, self.package_menu_items)
Ejemplo n.º 30
0
    def load_package_list(self):
        json_wrapper_package_list = JsonWrapper("package_list.json")
        self.package_list_json = json_wrapper_package_list.read()

        self.package_menu_items = [
            ('1. Photon OS (Micro)', self.exit_function,
             ['micro', self.package_list_json["micro_packages"]]),
            ('2. Photon Container OS (Minimal)', self.exit_function,
             ['minimal', self.package_list_json["minimal_packages"]]),
            ('3. Photon Full OS (All)', self.exit_function, [
                'full', self.package_list_json["minimal_packages"] +
                self.package_list_json["optional_packages"]
            ]), ('4. Photon Custom OS', self.custom_packages, ['custom', None])
        ]
        self.package_menu = Menu(self.menu_starty, self.maxx,
                                 self.package_menu_items)
Ejemplo n.º 31
0
    def ks_config(self, options_file, ks_config):
        """Load configuration from file"""
        del options_file
        install_config = ks_config
        install_config['iso_system'] = False
        if self.is_vmware_virtualization() and 'install_linux_esx' not in install_config:
            install_config['install_linux_esx'] = True

        json_wrapper_option_list = JsonWrapper("build_install_options_all.json")
        option_list_json = json_wrapper_option_list.read()
        options_sorted = option_list_json.items()

        base_path = os.path.dirname("build_install_options_all.json")
        package_list = []

        package_list = PackageSelector.get_packages_to_install(options_sorted,
                                                               install_config['type'],
                                                               base_path)
        if 'additional_packages' in install_config:
            package_list.extend(install_config['additional_packages'])
        install_config['packages'] = package_list

        if 'partitions' in install_config:
            partitions = install_config['partitions']
        else:
            partitions = modules.commons.default_partitions

        install_config['disk'] = modules.commons.partition_disk(install_config['disk'], partitions)

        if "hostname" in install_config:
            evalhostname = os.popen('printf ' + install_config["hostname"].strip(" ")).readlines()
            install_config['hostname'] = evalhostname[0]
        if "hostname" not in install_config or install_config['hostname'] == "":
            install_config['hostname'] = "photon-" + self.random_id.strip()

        # crypt the password if needed
        if install_config['password']['crypted']:
            install_config['password'] = install_config['password']['text']
        else:
            install_config['password'] = crypt.crypt(
                install_config['password']['text'],
                "$6$" + "".join([random.choice(
                    string.ascii_letters + string.digits) for _ in range(16)]))
        return install_config
Ejemplo n.º 32
0
def create_rpm_list_to_be_copied_to_iso(pkg_to_rpm_map_file, build_install_option, copy_flags, output_data_path):
    packages = []
    if build_install_option is None:
        packages = []
    else:
        packages = create_pkg_list_to_copy_to_iso(build_install_option, output_data_path)

    rpm_list = []
    json_pkg_to_rpm_map = JsonWrapper(pkg_to_rpm_map_file)
    pkg_to_rpm_map = json_pkg_to_rpm_map.read()
    for k in pkg_to_rpm_map:
        if build_install_option is None or k in packages:
            if not pkg_to_rpm_map[k]['rpm'] is None and bool(copy_flags & 1):
                filename = pkg_to_rpm_map[k]['rpm']
                rpm_list.append(get_file_name_with_last_folder(filename))
            if not pkg_to_rpm_map[k]['debugrpm'] is None and bool(copy_flags & 2):
                filename = pkg_to_rpm_map[k]['debugrpm']
                rpm_list.append(pkg_to_rpm_map[k]['debugrpm'])
            if not pkg_to_rpm_map[k]['sourcerpm'] is None and bool(copy_flags & 4):
                rpm_list.append(pkg_to_rpm_map[k]['sourcerpm'])
    return rpm_list
Ejemplo n.º 33
0
    def _create_installrpms_list(self):
        """
        Prepare RPM list and copy rpms
        """
        # prepare the RPMs list
        json_pkg_to_rpm_map = JsonWrapper(self.install_config["pkg_to_rpm_map_file"])
        pkg_to_rpm_map = json_pkg_to_rpm_map.read()

        self.rpms_tobeinstalled = []
        selected_packages = self.install_config['packages']

        for pkg in selected_packages:
            versionindex = pkg.rfind("-")
            if versionindex == -1:
                raise Exception("Invalid pkg name: " + pkg)
            package = pkg[:versionindex]
            if pkg in pkg_to_rpm_map:
                if pkg_to_rpm_map[pkg]['rpm'] is not None:
                    name = pkg_to_rpm_map[pkg]['rpm']
                    basename = os.path.basename(name)
                    self.rpms_tobeinstalled.append({'filename': basename, 'path': name,
                                                    'package' : package})
Ejemplo n.º 34
0
    def _copy_rpms(self):
        """
        Prepare RPM list and copy rpms
        """
        # prepare the RPMs list
        json_pkg_to_rpm_map = JsonWrapper(self.install_config["pkg_to_rpm_map_file"])
        pkg_to_rpm_map = json_pkg_to_rpm_map.read()

        self.rpms_tobeinstalled = []
        selected_packages = self.install_config['packages']

        for pkg in selected_packages:
            if pkg in pkg_to_rpm_map:
                if pkg_to_rpm_map[pkg]['rpm'] is not None:
                    name = pkg_to_rpm_map[pkg]['rpm']
                    basename = os.path.basename(name)
                    self.rpms_tobeinstalled.append({'filename': basename, 'path': name,
                                                    'package' : pkg})

        # Copy the rpms
        for rpm in self.rpms_tobeinstalled:
            shutil.copy(rpm['path'], self.photon_root + '/RPMS/')
Ejemplo n.º 35
0
    def load_package_list(self, options_file):
        json_wrapper_option_list = JsonWrapper(options_file)
        option_list_json = json_wrapper_option_list.read()
        options_sorted = option_list_json.items()

        self.package_menu_items = []
        base_path = os.path.dirname(options_file)
        package_list = []

        if len(options_sorted) == 1:
            self.inactive_screen = True
            list(options_sorted)[0][1]['visible'] = True

        if platform.machine() == "aarch64" and 'realtime' in dict(
                options_sorted):
            dict(options_sorted)['realtime']['visible'] = False

        default_selected = 0
        visible_options_cnt = 0
        for install_option in options_sorted:
            if install_option[1]["visible"] == True:
                package_list = PackageSelector.get_packages_to_install(
                    install_option[1], base_path)
                self.package_menu_items.append(
                    (install_option[1]["title"], self.exit_function,
                     [install_option[0], package_list]))
                if install_option[0] == 'minimal':
                    default_selected = visible_options_cnt
                visible_options_cnt = visible_options_cnt + 1

        if self.inactive_screen:
            self.exit_function(self.package_menu_items[0][2])
        else:
            self.package_menu = Menu(self.menu_starty,
                                     self.maxx,
                                     self.package_menu_items,
                                     default_selected=default_selected,
                                     tab_enable=False)
Ejemplo n.º 36
0
            config['vmdk_install'] = False

        if 'password' in config:
            # crypt the password if needed
            if config['password']['crypted']:
                config['password'] = config['password']['text']
            else:
                config['password'] = crypt.crypt(
                    config['password']['text'], "$6$" + "".join([
                        random.choice(string.ascii_letters + string.digits)
                        for _ in range(16)
                    ]))

        # Check the installation type
        json_wrapper_option_list = JsonWrapper(options.package_list_file)
        option_list_json = json_wrapper_option_list.read()
        options_sorted = option_list_json.items()

        packages = []
        packages = PackageSelector.get_packages_to_install(
            options_sorted, config['type'], options.output_data_path)

        config['packages'] = packages

        if (os.path.isdir(options.working_directory)):
            process = subprocess.Popen(
                ['rm', '-rf', options.working_directory])
            retval = process.wait()

        process = subprocess.Popen([
            'mkdir', '-p',
Ejemplo n.º 37
0
def main():
    usage = "Usage: %prog [options]"
    parser = ArgumentParser(usage)
    parser.add_argument("-i", "--input-type", dest="input_type", default=DEFAULT_INPUT_TYPE)
    parser.add_argument("-p", "--pkg", dest="pkg")
    parser.add_argument("-f", "--file", dest="json_file", default="packages_minimal.json")
    parser.add_argument("-d", "--display-option", dest="display_option", default=DEFAULT_DISPLAY_OPTION)
    parser.add_argument("-s", "--spec-path", dest="spec_path", default=SPEC_FILE_DIR)
    parser.add_argument("-l", "--log-path", dest="log_path", default=LOG_FILE_DIR)
    parser.add_argument("-y", "--log-level", dest="log_level", default="info")
    parser.add_argument("-t", "--stage-dir", dest="stage_dir", default="../../stage")
    parser.add_argument("-a", "--input-data-dir", dest="input_data_dir", default="../../common/data/")
    parser.add_argument("-o", "--output-dir", dest="output_dir", default="../../stage/common/data")
    options = parser.parse_args()

    constants.setSpecPath(options.spec_path)
    constants.setLogPath(options.log_path)
    constants.setLogLevel(options.log_level)
    constants.initialize()

    cmdUtils = CommandUtils()
    logger = Logger.getLogger("SpecDeps", options.log_path, options.log_level)

    if not os.path.isdir(options.output_dir):
        cmdUtils.runCommandInShell2("mkdir -p "+options.output_dir)

    if not options.input_data_dir.endswith('/'):
        options.input_data_dir += '/'
    try:
        specDeps = SpecDependencyGenerator(options.log_path, options.log_level)

        if options.input_type == "remove-upward-deps":
            whoNeedsList = specDeps.process("get-upward-deps", options.pkg, options.display_option)
            logger.info("Removing upward dependencies: " + str(whoNeedsList))
            for pkg in whoNeedsList:
                package, version = StringUtils.splitPackageNameAndVersion(pkg)
                release = SPECS.getData().getRelease(package, version)
                for p in SPECS.getData().getPackages(package,version):
                    buildarch=SPECS.getData().getBuildArch(p, version)
                    rpmFile = "stage/RPMS/" + buildarch + "/" + p + "-" + version + "-" + release + ".*" + buildarch+".rpm"
                    cmdUtils.runCommandInShell2("rm -f "+rpmFile)
        elif options.input_type == "print-upward-deps":
            whoNeedsList = specDeps.process("get-upward-deps", options.pkg, options.display_option)
            logger.info("Upward dependencies: " + str(whoNeedsList))
        # To display/print package dependencies on console
        elif (options.input_type == "pkg" or
                options.input_type == "who-needs"):
            specDeps.process(options.input_type, options.pkg, options.display_option)

        elif options.input_type == "json":
            list_json_files = options.json_file.split("\n")
            # Generate the expanded package dependencies json file based on package_list_file
            logger.info("Generating the install time dependency list for all json files")
            for json_file in list_json_files:
                shutil.copy2(json_file, options.output_dir)
                json_wrapper_option_list = JsonWrapper(json_file)
                option_list_json = json_wrapper_option_list.read()
                options_sorted = option_list_json.items()
                for install_option in options_sorted:
                    output_file = None
                    input_value = os.path.join(os.path.dirname(json_file), install_option[1]["file"])
                    if options.display_option == "tree" and install_option[1]["title"] == "ISO Packages":
                        continue
                    if options.display_option == "json":
                        output_file = os.path.join(options.output_dir, install_option[1]["file"])
                    specDeps.process(options.input_type, input_value, options.display_option, output_file)
    except Exception as e:
        traceback.print_exc()
        sys.stderr.write(str(e))
        sys.stderr.write("Failed to generate dependency lists from spec files\n")
        sys.exit(1)

    sys.exit(0)
Ejemplo n.º 38
0
def main():
    usage = "Usage: %prog [options]"
    parser = ArgumentParser(usage)
    parser.add_argument("-i",
                        "--input-type",
                        dest="input_type",
                        default=DEFAULT_INPUT_TYPE)
    parser.add_argument("-p", "--pkg", dest="pkg")
    parser.add_argument("-f",
                        "--file",
                        dest="json_file",
                        default="packages_minimal.json")
    parser.add_argument("-d",
                        "--disp",
                        dest="display_option",
                        default=DEFAULT_DISPLAY_OPTION)
    parser.add_argument("-s",
                        "--spec-dir",
                        dest="spec_dir",
                        default=SPEC_FILE_DIR)
    parser.add_argument("-t",
                        "--stage-dir",
                        dest="stage_dir",
                        default="../../stage")
    parser.add_argument("-a",
                        "--input-data-dir",
                        dest="input_data_dir",
                        default="../../common/data/")
    options = parser.parse_args()

    if not options.input_data_dir.endswith('/'):
        options.input_data_dir += '/'
    try:
        specDeps = SerializedSpecObjects(options.input_data_dir,
                                         options.stage_dir)
        displayOption = options.display_option
        abs_path = os.path.abspath(__file__)
        dir_name = os.path.dirname(abs_path)
        os.chdir(dir_name)

        # To display/print package dependencies on console
        if (options.input_type == "pkg" or options.input_type == "who-needs"
                or options.input_type == "who-needs-build"):
            targetName = options.pkg
            specDeps.readSpecsAndConvertToSerializableObjects(
                options.spec_dir, options.input_type, targetName,
                displayOption)
        elif options.input_type == "json":
            # Generate the expanded package dependencies json file based on package_list_file
            json_wrapper_option_list = JsonWrapper(options.json_file)
            option_list_json = json_wrapper_option_list.read()
            options_sorted = option_list_json.items()
            for install_option in options_sorted:
                if displayOption == "tree" and install_option[1][
                        "title"] == "ISO Packages":
                    continue
                specDeps.readSpecsAndConvertToSerializableObjects(
                    options.spec_dir, options.input_type,
                    install_option[1]["file"], displayOption)
    except Exception as _:
        sys.stderr.write(
            "Failed to generate dependency lists from spec files\n")
        sys.exit(1)

    sys.stderr.write(
        "Successfully generated dependency lists from spec files\n")
    sys.exit(0)
Ejemplo n.º 39
0
        # Read the conf file
        config = (JsonWrapper(args[0])).read()

        config['iso_system'] = False

    if 'password' in config:
        # crypt the password if needed
        if config['password']['crypted']:
            config['password'] = config['password']['text']
        else:
            config['password'] = crypt.crypt(config['password']['text'], "$6$" + "".join([random.choice(string.ascii_letters + string.digits) for _ in range(16)]))

    # Check the installation type
    json_wrapper_option_list = JsonWrapper(options.package_list_file)
    option_list_json = json_wrapper_option_list.read()
    options_sorted = option_list_json.items()
    base_path = os.path.dirname(options.package_list_file)

    packages = []
    if config['iso_system'] == True:
        for install_option in options_sorted:
            if install_option[0] == "iso":
                json_wrapper_package_list = JsonWrapper(os.path.join(base_path, install_option[1]["file"]))
                package_list_json = json_wrapper_package_list.read()
                packages = package_list_json["packages"]
    else:
        packages = PackageSelector.get_packages_to_install(options_sorted, base_path, config['type'])

    config['packages'] = packages
Ejemplo n.º 40
0
            config = (JsonWrapper(options.configfile)).read()

            config['iso_system'] = False
            config['vmdk_install'] = False

        config["pkg_to_rpm_map_file"] = options.pkg_to_rpm_map_file
        if 'password' in config:
            # crypt the password if needed
            if config['password']['crypted']:
                config['password'] = config['password']['text']
            else:
                config['password'] = crypt.crypt(config['password']['text'], "$6$" + "".join([random.choice(string.ascii_letters + string.digits) for _ in range(16)]))

        # Check the installation type
        json_wrapper_option_list = JsonWrapper(options.package_list_file)
        option_list_json = json_wrapper_option_list.read()
        options_sorted = option_list_json.items()

        packages = []
        packages = PackageSelector.get_packages_to_install(options_sorted, config['type'], options.output_data_path)

        config['packages'] = packages

        if (os.path.isdir(options.working_directory)):
            process = subprocess.Popen(['rm', '-rf', options.working_directory])
            retval = process.wait()

        process = subprocess.Popen(['mkdir', '-p', os.path.join(options.working_directory, "photon-chroot")])
        retval = process.wait()

        config['working_directory'] = options.working_directory
Ejemplo n.º 41
0
        # Read the conf file
        config = (JsonWrapper(args[0])).read()

        config['iso_system'] = False
        config['vmdk_install'] = False

    if 'password' in config:
        # crypt the password if needed
        if config['password']['crypted']:
            config['password'] = config['password']['text']
        else:
            config['password'] = crypt.crypt(config['password']['text'], "$6$" + "".join([random.choice(string.ascii_letters + string.digits) for _ in range(16)]))

    # Check the installation type
    json_wrapper_option_list = JsonWrapper(options.package_list_file)
    option_list_json = json_wrapper_option_list.read()
    options_sorted = option_list_json.items()
    base_path = os.path.dirname(options.package_list_file)

    packages = []
    additional_files_to_copy_from_stage_to_iso = []
    if config['iso_system'] == True:
        for install_option in options_sorted:
            if install_option[0] == "iso":
                json_wrapper_package_list = JsonWrapper(os.path.join(base_path, install_option[1]["file"]))
                package_list_json = json_wrapper_package_list.read()
                packages = package_list_json["packages"]
    else:
        packages = PackageSelector.get_packages_to_install(options_sorted, config['type'], options.output_data_path)

    config['packages'] = packages
Ejemplo n.º 42
0
        config['iso_system'] = False

    if 'password' in config:
        # crypt the password if needed
        if config['password']['crypted']:
            config['password'] = config['password']['text']
        else:
            config['password'] = crypt.crypt(
                config['password']['text'], "$6$" + "".join([
                    random.choice(string.ascii_letters + string.digits)
                    for _ in range(16)
                ]))

    # Check the installation type
    json_wrapper_option_list = JsonWrapper(options.package_list_file)
    option_list_json = json_wrapper_option_list.read()
    options_sorted = option_list_json.items()
    base_path = os.path.dirname(options.package_list_file)

    packages = []
    additional_files_to_copy_from_stage_to_iso = []
    if config['iso_system'] == True:
        for install_option in options_sorted:
            if install_option[0] == "iso":
                json_wrapper_package_list = JsonWrapper(
                    os.path.join(base_path, install_option[1]["file"]))
                package_list_json = json_wrapper_package_list.read()
                packages = package_list_json["packages"]
    else:
        packages = PackageSelector.get_packages_to_install(
            options_sorted, config['type'], options.output_data_path)
Ejemplo n.º 43
0
 def get_packages_to_install(packagelist_file, output_data_path):
     json_wrapper_package_list = JsonWrapper(
         os.path.join(output_data_path, packagelist_file))
     package_list_json = json_wrapper_package_list.read()
     return package_list_json["packages"]
Ejemplo n.º 44
0
def main():
    usage = "Usage: %prog [options]"
    parser = ArgumentParser(usage)
    parser.add_argument("-i",
                        "--input-type",
                        dest="input_type",
                        default=DEFAULT_INPUT_TYPE)
    parser.add_argument("-p", "--pkg", dest="pkg")
    parser.add_argument("-f",
                        "--file",
                        dest="json_file",
                        default="packages_minimal.json")
    parser.add_argument("-d",
                        "--disp",
                        dest="display_option",
                        default=DEFAULT_DISPLAY_OPTION)
    parser.add_argument("-s",
                        "--spec-dir",
                        dest="spec_dir",
                        default=SPEC_FILE_DIR)
    parser.add_argument("-l",
                        "--log-dir",
                        dest="log_dir",
                        default=LOG_FILE_DIR)
    parser.add_argument("-t",
                        "--stage-dir",
                        dest="stage_dir",
                        default="../../stage")
    parser.add_argument("-a",
                        "--input-data-dir",
                        dest="input_data_dir",
                        default="../../common/data/")
    parser.add_argument("-o",
                        "--output-dir",
                        dest="output_dir",
                        default="../../stage/common/data")
    options = parser.parse_args()

    constants.setSpecPath(options.spec_dir)
    constants.setLogPath(options.log_dir)
    constants.initialize()

    cmdUtils = CommandUtils()

    if not os.path.isdir(options.output_dir):
        cmdUtils.runCommandInShell2("mkdir -p " + options.output_dir)

    if not options.input_data_dir.endswith('/'):
        options.input_data_dir += '/'
    try:
        specDeps = SpecDependencyGenerator()

        # To display/print package dependencies on console
        if (options.input_type == "pkg" or options.input_type == "who-needs"
                or options.input_type == "who-needs-build"):
            specDeps.process(options.input_type, options.pkg,
                             options.display_option)

        elif options.input_type == "json":
            list_json_files = options.json_file.split("\n")
            # Generate the expanded package dependencies json file based on package_list_file
            for json_file in list_json_files:
                shutil.copy2(json_file, options.output_dir)
                json_wrapper_option_list = JsonWrapper(json_file)
                option_list_json = json_wrapper_option_list.read()
                options_sorted = option_list_json.items()
                for install_option in options_sorted:
                    output_file = None
                    input_value = os.path.join(os.path.dirname(json_file),
                                               install_option[1]["file"])
                    if options.display_option == "tree" and install_option[1][
                            "title"] == "ISO Packages":
                        continue
                    if options.display_option == "json":
                        output_file = os.path.join(options.output_dir,
                                                   install_option[1]["file"])
                    print("Generating the install time dependency list for " +
                          json_file)
                    specDeps.process(options.input_type, input_value,
                                     options.display_option, output_file)
    except Exception as e:
        traceback.print_exc()
        sys.stderr.write(str(e))
        sys.stderr.write(
            "Failed to generate dependency lists from spec files\n")
        sys.exit(1)

    sys.stderr.write(
        "Successfully generated dependency lists from spec files\n")
    sys.exit(0)