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)
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())
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
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)
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)
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())
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())
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())
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) ]