Exemplo n.º 1
0
def build_rpm(version, downloaded_modules, revision):
    """
    Сборка rpm пакета
    :param version:
    :param downloaded_modules:
    :param revision:
    :return:
    """
    logger.info("Building .rpm package")
    modules_dir = os.path.join(config.SRC_PATH, "modules")
    response, rc = common_utils.execute_command("rpm --eval '%{_topdir}'",
                                                os.getcwd())
    top_dir = response.rstrip("\n")
    scripts_dir = os.path.join(top_dir, "SOURCES")
    specs_dir = os.path.join(top_dir, "SPECS")
    rpms_dir = os.path.join(top_dir, "RPMS")

    shutil.move(modules_dir, scripts_dir)
    prepare_rules_rpm(specs_dir, downloaded_modules,
                      os.path.join(scripts_dir, "modules"), revision)
    common_utils.execute_command("rpmbuild -bb nginx.spec", specs_dir)
    package_name = None
    for file in os.listdir(os.path.join(rpms_dir, config.PLATFORM_ARCH)):
        if file.startswith(
                "nginx-{}".format(version)) and file.endswith(".rpm"):
            package_name = file
    return os.path.join(rpms_dir, config.PLATFORM_ARCH, package_name)
Exemplo n.º 2
0
def install_rpm_packages(all_deps):
    """
    Установка rpm пакетов
    :param all_deps:
    :return:
    """

    install_command = ['yum', 'install', '--assumeyes']
    install_command.extend(all_deps)
    common_utils.execute_command(" ".join(install_command), os.getcwd())
Exemplo n.º 3
0
def download_package_scripts_rpm():
    """
    Загрузка вспомогательных скриптов для сборки rpm пакета
    :return file_name:
    """
    common_utils.ensure_directory(config.SRC_PATH)

    file_name = None
    logger.info("Download scripts for build rpm package")
    common_utils.execute_command("rpmdev-setuptree", os.getcwd())
    return file_name
Exemplo n.º 4
0
def apply_patch(source_dir, patches):
    """
    Применение патча
    :param source_dir:
    :param patches:
    :return:
    """
    for patch in patches:
        logger.info("Apply patch {}".format(patch))
        patch_command = "patch -p1 < {}".format(patch)
        common_utils.execute_command(patch_command, source_dir)
Exemplo n.º 5
0
def build_deb(version, src_archive_name, downloaded_modules,
              scripts_archive_name, control_file_params, revision,
              configure_params, patches):
    """
    Сборка deb пакета
    :param version:
    :param src_archive_name:
    :param downloaded_modules:
    :param scripts_archive_name:
    :param control_file_params:
    :param revision:
    :param configure_params:
    :param patches:
    :return:
    """
    logger.info("Building .deb package")
    common_utils.extract_archive(src_archive_name, config.SRC_PATH)
    common_utils.extract_archive(scripts_archive_name, config.SRC_PATH)

    source_dir = os.path.join(config.SRC_PATH, "nginx-{}".format(version))
    modules_dir = os.path.join(config.SRC_PATH, "modules")
    scripts_dir = os.path.join(config.SRC_PATH, "debian")
    shutil.move(modules_dir, scripts_dir)
    shutil.move(scripts_dir, source_dir)

    scripts_dir = os.path.join(source_dir, "debian")
    modules_dir = os.path.join(scripts_dir, "modules")

    apply_patch(modules_dir, source_dir, patches)
    prepare_changelog(scripts_dir, version, revision)
    prepare_rules(scripts_dir, downloaded_modules, configure_params)
    prepare_nginx_dirs(scripts_dir)

    change_control(scripts_dir, control_file_params)

    logger.info("Running 'dh_make'...")
    dh_make_command = "dh_make --copyright {} -e {} --createorig -s -y -p nginx_{}".format(
        config.LICENSE_TYPE, config.EMAIL_CREATOR, version)
    common_utils.execute_command(dh_make_command, source_dir)

    logger.info("Running 'dpkg-buildpackage'...")
    build_package = "dpkg-buildpackage -b -us -uc"
    response, rc = common_utils.execute_command(build_package, source_dir)
    if rc == config.DPKG_FAIL_EXIT_CODE:
        sys.exit(1)

    package_name = None
    for file in os.listdir(config.SRC_PATH):
        if file.startswith(
                "nginx_{}".format(version)) and file.endswith(".deb"):
            package_name = file

    return os.path.join(config.SRC_PATH, package_name)
Exemplo n.º 6
0
def download_source_rpm(src_version):
    """
    Загрузка пакета с исходным кодом требуемой версии nginx
    :param src_version:
    :return:
    """
    logger.info("Downloading nginx src...")
    file_name = get_src_rpm_filename(config.NGINX_SRPM_URL, src_version)

    common_utils.execute_command(
        "rpm --upgrade --verbose --hash {}/{}".format(config.NGINX_SRPM_URL,
                                                      file_name), os.getcwd())
Exemplo n.º 7
0
def download_source_rpm(src_version):
    """
    Загрузка пакета с исходным кодом требуемой версии nginx
    :param src_version:
    :return:
    """
    logger.info("Downloading nginx src...")
    nginx_srpm_url = config.NGINX_SRPM_URL_MAINLINE
    if version.parse(src_version).release[1] % 2 == 0:
        nginx_srpm_url = config.NGINX_SRPM_URL_STABLE

    file_name = get_src_rpm_filename(nginx_srpm_url, src_version)
    common_utils.execute_command(
        "rpm --upgrade --verbose --hash {}/{}".format(nginx_srpm_url,
                                                      file_name), os.getcwd())
Exemplo n.º 8
0
def download_source_rpm(src_version):
    """
    Загрузка пакета с исходным кодом требуемой версии nginx
    :param src_version:
    :return:
    """
    logger.info("Downloading nginx src...")
    file_name = "nginx-{}-1.el{}.ngx.src.rpm".format(src_version, config.OS_VERSION)
    if version.parse("1.13.5") < version.parse(src_version):
        file_name = "nginx-{}-1.el{}_4.ngx.src.rpm".format(src_version, config.OS_VERSION)

    common_utils.execute_command("rpm --upgrade --verbose --hash {}/{}".format(
        config.NGINX_SRPM_URL,
        file_name
    ), os.getcwd())
Exemplo n.º 9
0
def build_rpm(version, downloaded_modules, revision, configure_params,
              patches):
    """
    Сборка rpm пакета
    :param version:
    :param downloaded_modules:
    :param revision:
    :param configure_params:
    :return:
    """
    logger.info("Building .rpm package")
    modules_dir = os.path.join(config.SRC_PATH, "modules")
    response, rc = common_utils.execute_command("rpm --eval '%{_topdir}'",
                                                os.getcwd())
    top_dir = response.rstrip("\n")
    scripts_dir = os.path.join(top_dir, "SOURCES")
    specs_dir = os.path.join(top_dir, "SPECS")
    rpms_dir = os.path.join(top_dir, "RPMS")

    spec_file = "nginx.spec"

    if not patches is None:
        # Patch spec file
        spec_path = os.path.join(specs_dir, spec_file)
        spec_path_patched = os.path.join(specs_dir, "nginx_patched.spec")
        with open(os.path.join(specs_dir, spec_path_patched), 'w') as outfile:
            i = 0
            for patch in patches:
                patch_file = patch.replace("/", "_")
                shutil.move(os.path.join(modules_dir, patch),
                            os.path.join(scripts_dir, patch_file))
                outfile.write("Patch{}: {}\n".format(i, patch_file))
                i += 1

            with open(spec_path) as infile:
                for line in infile:
                    outfile.write(line)

        # replace spec file with patched version
        os.unlink(spec_path)
        os.rename(spec_path_patched, spec_path)

    shutil.move(modules_dir, scripts_dir)
    modules_dir = os.path.join(scripts_dir, "modules")

    prepare_rules_rpm(specs_dir, downloaded_modules, modules_dir, revision,
                      configure_params)
    common_utils.execute_command("rpmbuild -bb {}".format(spec_file),
                                 specs_dir)
    package_name = None
    package_debuginfo_name = None
    for file in os.listdir(os.path.join(rpms_dir, config.PLATFORM_ARCH)):
        if file.startswith(
                "nginx-{}".format(version)) and file.endswith(".rpm"):
            package_name = file
        elif file.startswith("nginx-debuginfo-{}".format(
                version)) and file.endswith(".rpm"):
            package_debuginfo_name = file
    return [
        os.path.join(rpms_dir, config.PLATFORM_ARCH, package_name),
        os.path.join(rpms_dir, config.PLATFORM_ARCH, package_debuginfo_name)
    ]