From 1f41758372135cf2435795d34230a3690984a696 Mon Sep 17 00:00:00 2001 From: Nitesh Burnwal Date: Mon, 5 Feb 2024 17:23:39 +0530 Subject: [PATCH] CSCwi89338: Enhance published rpm build tool to replicate internal build rpm tool --- Makefile | 2 +- README.md | 103 +++++++- appmgr_build | 315 +++++++++++++----------- docker/Centos.Dockerfile | 7 +- examples/alpine/build.yaml | 81 ++++-- examples/alpine/config/certs/cert.pem | 21 ++ examples/alpine/config/certs/client.key | 28 +++ examples/alpine/config/certs/server.crt | 21 ++ examples/alpine/config/certs/server.key | 28 +++ examples/pscript/.gitignore | 4 + release_configs/24.1.1.ini | 12 + release_configs/7.10.1.ini | 12 + release_configs/7.3.6.ini | 12 + release_configs/ThinXR_7.3.15.ini | 1 + release_configs/eXR_7.3.1.ini | 1 + 15 files changed, 479 insertions(+), 169 deletions(-) create mode 100644 examples/alpine/config/certs/cert.pem create mode 100644 examples/alpine/config/certs/client.key create mode 100644 examples/alpine/config/certs/server.crt create mode 100644 examples/alpine/config/certs/server.key create mode 100644 examples/pscript/.gitignore create mode 100644 release_configs/24.1.1.ini create mode 100644 release_configs/7.10.1.ini create mode 100644 release_configs/7.3.6.ini diff --git a/Makefile b/Makefile index 01d9697..dd0be7e 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ arhashem/xr-wrl7: docker build docker -f docker/WRL7.Dockerfile -t arhashem/xr-wrl7 arhashem/xr-centos: - docker build docker -f docker/Centos.Dockerfile -t arhashem/xr-centos + docker build --platform=linux/x86_64 docker -f docker/Centos.Dockerfile -t arhashem/xr-centos images: wrl7 centos diff --git a/README.md b/README.md index 7674be9..44060e7 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,38 @@ # xr-appmgr-build Scripts to build RPMs for use with the XR appmgr. -# Building an RPM +# Building a native RPM -Create an `build.yaml` file and add entries for your app +Create a `build.yaml` file and add entries for your app ``` -packages: - name: "alpine" - release: "ThinXR_7.3.15" # Release should correspond to a file in release_configs dir - version: "0.1.0" # Application semantic version + release: "ThinXR_7.3.15" # Release is the release since when the support for this rpm has started and should correspond to a file in release_configs dir (Not editable) + target-release: "ThinXR_7.3.15" # Target release if present, RPM name will have this target-release name, else will have above release name (Editable) + version: "0.1.0" # Application semantic version (Editable) sources: - - name: alpine # Will correspond to the source name on the router - file: examples/alpine/alpine.tar.gz # Path from xr-appmgr-build root to image + - name: alpine # Will correspond to the source name on the router (Editable) + file: examples/alpine/swanagent.tar # Path from xr-appmgr-build root to image (Editable) + # Tar file must be built with "--platform=linux/x86_64" option specified during docker build config-dir: - - name: alpine-configs # The name of the directory for the app to mount in its docker run opts - dir: examples/alpine/config + - name: SwanAgent # The name of the directory for the app to mount in its docker run opts (Editable) + dir: examples/alpine/config #Not editable copy_hostname: true # Copy router hostname into config dir (only useful for eXR platforms) copy_ems_cert: true # Copy router ems certificate into config dir ``` + +# Building a TPA RPM +Create a `build.yaml` file and add entries for your app +``` +- name: "partner-alpine" # Prefix "owner-" or "partner-" for TPA apps (Not editable) + release: "7.10.1" # This is the release since when the support for this rpm has started and should correspond to a file in release_configs dir (Not editable) + target-release: "7.10.1" # If present, this is the release for rpms to be installed, else above release is used. (Editable) + version: "3.14" #Editable + partner-name: "radware" # Needed only for Partner rpms (Editable) + sources: + - name: alpine # Name should match source tar file (Editable) + file: examples/alpine/alpine.tar.gz # File must have "tar.gz" extension (Editable) + # Tar file must be built with "--platform=linux/x86_64" option specified during docker build +``` Build: `./appmgr_build -b examples/alpine/build.yaml` @@ -28,6 +43,8 @@ scp RPMS/x86_64/alpine-0.1.0-eXR_7.3.1.x86_64.rpm :/harddisk: ``` Note that if you specify `copy_ems_cert` you must install the RPM after gRPC is configured (see above). The post-install script requires the ems certificate to have been created at install time or the application will be unable to access it. +"grpc no-tls config should not be used if copy_ems_cert option is specified" + ``` appmgr package install rpm /harddisk:/alpine-0.1.0-eXR_7.3.1.x86_64.rpm @@ -43,6 +60,74 @@ You can uninstall the RPM with the following: appmgr package uninstall package alpine-0.1.0-eXR_7.3.1.x86_64 ``` +# Building a process-script RPM +Create a `build.yaml` file and add entries for your app +``` +- name: "pscript" #This should not be changed (Not editable) + release: "24.1.1" # This is the release since when the support for this rpm has started and should correspond to a file in release_configs dir (Not editable) + target-release: "24.1.1" # If present, RPM name will have this target-release name, else will have above release name (Editable) + version: "0.1.0" # Application semantic version (Editable) + sources: + - name: pscript # Update this with the rpm name to be built (Editable) + dir: examples/pscript # All the files in this direcotory to be copied to process-script rpm (Editable) + +``` +Build: +`./appmgr_build -b examples/alpine/build.yaml` + +Once the RPM is built, scp it to the router, and install. + +``` +scp RPMS/x86_64/pscript-0.1.0-24.1.1.x86_64.rpm :/harddisk: +``` +You can install the RPM with the following: +(As it's not a docker container, no need to activate this rpm) +``` +appmgr package install rpm /harddisk:/pscript-0.1.0-24.1.1.x86_64.rpm +``` + +Config: +You can uninstall the RPM with the following: +``` +appmgr package uninstall package pscript-0.1.0-24.1.1.x86_64.rpm +``` +The files in the rpm, will be copied to below location in the device +``` +/var/lib/docker/appmgr/ops-script-repo/exec/ +``` + +You can get rpm details using below commands +``` +rpm -qpl RPMS/x86_64/pscript-0.1.0-24.1.1.x86_64.rpm +warning: RPMS/x86_64/pscript-0.1.0-24.1.1.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 73f45f20: NOKEY +/ops-script-repo/exec +/ops-script-repo/exec/pscript +/ops-script-repo/exec/pscript/.gitignore + +rpm -qpi RPMS/x86_64/pscript-0.1.0-24.1.1.x86_64.rpm +warning: RPMS/x86_64/pscript-0.1.0-24.1.1.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 73f45f20: NOKEY +Name : pscript +Version : 0.1.0 +Release : 24.1.1 +Architecture: x86_64 +Install Date: (not installed) +Group : 3rd party application +Size : 71 +License : Copyright (c) 2020 Cisco Systems Inc. All rights reserved +Signature : DSA/SHA1, Thu 19 Oct 2023 03:59:30 PM IST, Key ID fd7228c573f45f20 +Source RPM : pscript-0.1.0-24.1.1.src.rpm +Build Date : Thu 19 Oct 2023 03:59:30 PM IST +Build Host : aa727e7f9b26 +Relocations : / +Packager : cisco +Summary : pscript 0.1.0 compiled for IOS-XR 24.1.1 +``` +We can optionally pass comma separated package name(s) in build command with -p option +``` +./appmgr_build -b examples/alpine/build.yaml -p alpine,pscript + +If we don't pass -p option, it will build for all the packages in build.yaml file. +``` # Build and Setup instructions diff --git a/appmgr_build b/appmgr_build index f1d3499..32fccdf 100755 --- a/appmgr_build +++ b/appmgr_build @@ -41,29 +41,20 @@ def pkg_config_dir(package, *args): def pkg_data_dir(package, *args): return archive_dir(package, "data", *args) - def key_dir(*args): return archive_dir("keys", *args) - -def get_build_version(): - try: - proc = subprocess.run( - "git rev-parse HEAD", - shell=True, - stdout=subprocess.PIPE, - check=True, - ) - except subprocess.CalledProcessError: - return "unknown" - else: - return proc.stdout.decode().strip() - +def list_of_strings(arg): + return arg.split(',') parser = argparse.ArgumentParser() group = parser.add_mutually_exclusive_group(required=True) + +parser.add_argument( + "-p", "--package_names", type=list_of_strings, help="Package name to be built" +) group.add_argument( "-b", "--build-config", dest="config", help="build configuration" ) @@ -92,44 +83,50 @@ with open(args.config) as f: release_conf = configparser.ConfigParser() -build_version = get_build_version() -print("Build version: {}".format(build_version)) - - def make_spec(package): - package_name = "{name}-{version}-{release}".format(**package) # Seperate out by section headers = [] prep = [] install = [] files = [] - pre = [] post = [] preun = [] # Header headers.append("Name: {}".format(package["name"])) headers.append("Version: {}".format(package["version"])) - headers.append("Release: {}".format(package["release"])) + if 'target-release' in package: + package_name = "{name}-{version}-{target-release}".format(**package) + headers.append("Release: {}".format(package["target-release"])) + else: + package_name = "{name}-{version}-{release}".format(**package) + headers.append("Release: {}".format(package["release"])) # TODO: is this ok? headers.append( - "License: Copyright (c) 2022 Cisco Systems Inc. All rights reserved" + "License: Copyright (c) 2020 Cisco Systems Inc. All rights reserved" ) headers.append("Packager: cisco") headers.append("SOURCE0 : {}.tar.gz".format(package_name)) headers.append("Group: 3rd party application") - headers.append( - "Summary: {name} {version} compiled for IOS-XR {release}".format( - **package + if 'target-release' in package: + headers.append( + "Summary: {name} {version} compiled for IOS-XR {target-release}".format( + **package + ) + ) + else: + headers.append( + "Summary: {name} {version} compiled for IOS-XR {release}".format( + **package + ) ) - ) headers.append("") headers.append("Prefix: /") headers.append("") headers.append("%description") - headers.append("RPM built for use with IOS-XR appmgr.") - headers.append("") - headers.append("XR-appmgr-build version: {}".format(build_version)) + headers.append( + "This packages the artifacts required to run a 3rd party app" + ) # init prep section prep.append("") @@ -137,10 +134,6 @@ def make_spec(package): prep.append("%setup -q -n {}".format(package_name)) prep.append("") - # init pre section - pre.append("") - pre.append("%pre") - # init post section post.append("") post.append("%post") @@ -159,48 +152,92 @@ def make_spec(package): files.append("%files") install.append("# Sources") - source_dest = release_conf["paths"]["appmgr_source"] + if package["name"].startswith('owner-pscript'): + source_dest = os.path.join(release_conf["paths"]["appmgr_source"], "exec") + elif package["name"].startswith('pscript'): + source_dest = os.path.join(release_conf["paths"]["appmgr_source"], "exec") + elif package["name"].startswith('owner-'): + source_dest = os.path.join(release_conf["paths"]["appmgr_source"], "owner") + elif package["name"].startswith('partner-'): + source_dest = os.path.join(release_conf["paths"]["appmgr_source"], "partner", package["partner-name"]) + else: + source_dest = release_conf["paths"]["appmgr_source"] install.append("mkdir -p %{{buildroot}}{}".format(source_dest)) for source in package["sources"]: - files.append( + if package["name"].startswith('pscript') : + files.append("%defattr(-,root,root)") + files.append(source_dest) + files.append( + "%dir {}".format(os.path.join(source_dest, source["name"])) + ) + elif package["name"].startswith('owner-pscript') : + files.append("%defattr(-,root,root)") + files.append(source_dest) + files.append( + "%dir {}".format(os.path.join(source_dest, source["name"])) + ) + elif package["name"].startswith('partner-'): + files.append("%defattr(-,root,root)") + files.append(source_dest) + files.append( + "%dir {}".format(os.path.join(source_dest, source["name"])) + ) + files.append( + os.path.join( + source_dest, source["name"], os.path.basename(source["file"]) + ) + ) + elif package["name"].startswith('owner-'): + files.append("%defattr(-,root,root)") + files.append("{}".format(os.path.join(source_dest, source["name"]))) + files.append( + "%dir {}".format(os.path.join(source_dest, source["name"])) + ) + files.append( + os.path.join( + source_dest, source["name"], os.path.basename(source["file"]) + ) + ) + else: + files.append( "%dir {}".format(os.path.join(source_dest, source["name"])) - ) - files.append( - os.path.join( - source_dest, source["name"], os.path.basename(source["file"]) ) - ) + files.append( + os.path.join( + source_dest, source["name"], os.path.basename(source["file"]) + ) + ) install.append( "cp -ar {} %{{buildroot}}{}".format( os.path.join("sources", source["name"]), source_dest ) ) - pre.append( - "rm -rf $RPM_INSTALL_PREFIX{}".format( - os.path.join(source_dest, source["name"]) - ) - ) - - def normjoin(path, *args): - return os.path.normpath(os.path.join(path, *args)) install.append("") install.append("# Config directory") + for dir in package.get("config-dir", []): - # Directory to copy + if package["name"].startswith('owner-pscript'): + conf_dest = os.path.join(release_conf["paths"]["appmgr_source"], release_conf["paths"]["appmgr_config"]) + elif package["name"].startswith('pscript'): + conf_dest = os.path.join(release_conf["paths"]["appmgr_source"], release_conf["paths"]["appmgr_config"]) + elif package["name"].startswith('owner'): + conf_dest = os.path.join(release_conf["paths"]["appmgr_source"], "owner", dir["name"],"config") + elif package["name"].startswith('partner'): + conf_dest = os.path.join(release_conf["paths"]["appmgr_source"], "partner", package["partner-name"], dir["name"],"config") + else: + conf_dest = os.path.join(release_conf["paths"]["appmgr_config"],dir["name"]) + conf_dir = os.path.join("configs", dir["name"]) - # Destination directory - conf_dest = os.path.join( - release_conf["paths"]["appmgr_config"], - dir["name"], - ) - pre.append("rm -rf $RPM_INSTALL_PREFIX{}".format(conf_dest)) install.append("mkdir -p %{{buildroot}}{}".format(conf_dest)) files.append("%dir {}".format(conf_dest)) install.append( "cp -arT {} %{{buildroot}}{}".format(conf_dir, conf_dest) ) + def normjoin(path, *args): + return os.path.normpath(os.path.join(path, *args)) + prefix = pkg_config_dir(package_name, dir["name"]) for root, subdirs, subfiles in os.walk(prefix): # Make path relative to pkg_conf_dir @@ -211,57 +248,15 @@ def make_spec(package): files.append("{}".format(normjoin(conf_dest, root, name))) if package.get("copy_ems_cert"): - post.append( - "cp /misc/config/grpc/ems.pem $RPM_INSTALL_PREFIX{}".format( - conf_dest - ) - ) - preun.append( - "rm -rf {}".format( - os.path.join("$RPM_INSTALL_PREFIX" + conf_dest, "ems.pem") - ) - ) + post.append("cp /misc/config/grpc/ems.pem $RPM_INSTALL_PREFIX{}".format(conf_dest)) + preun.append("rm {}".format(os.path.join("$RPM_INSTALL_PREFIX" + conf_dest, "ems.pem"))) if package.get("copy_hostname"): - post.append( - "cp /etc/hostname $RPM_INSTALL_PREFIX{}".format(conf_dest) - ) - preun.append( - "rm -rf {}".format( - os.path.join("$RPM_INSTALL_PREFIX" + conf_dest, "hostname") - ) - ) - - install.append("") - install.append("# Data directory") - for dir in package.get("data-dir", []): - # Directory to copy - data_dir = os.path.join("data", dir["name"]) - # Destination directory - data_dest = os.path.join( - release_conf["paths"]["appmgr_data"], - dir["name"], - ) - pre.append("rm -rf $RPM_INSTALL_PREFIX{}".format(data_dest)) - install.append("mkdir -p %{{buildroot}}{}".format(data_dest)) - files.append("%dir {}".format(data_dest)) - install.append( - "cp -arT {} %{{buildroot}}{}".format(data_dir, data_dest) - ) - - prefix = pkg_data_dir(package_name, dir["name"]) - for root, subdirs, subfiles in os.walk(prefix): - # Make path relative to pkg_data_dir - root = os.path.relpath(root, start=prefix) - for name in subdirs: - files.append("%dir {}".format(normjoin(data_dest, root, name))) - for name in subfiles: - files.append("{}".format(normjoin(data_dest, root, name))) + post.append("cp /etc/hostname $RPM_INSTALL_PREFIX{}".format(conf_dest)) + preun.append("rm {}".format(os.path.join("$RPM_INSTALL_PREFIX" + conf_dest, "hostname"))) if release_conf["build"].getboolean("script_support"): - sections = itertools.chain( - headers, prep, install, files, pre, post, preun - ) + sections = itertools.chain(headers, prep, install, files, post, preun) else: sections = itertools.chain(headers, prep, install, files) @@ -275,8 +270,19 @@ os.makedirs(SPEC_DIR, exist_ok=True) os.makedirs(RPM_SOURCE_DIR, exist_ok=True) os.makedirs(KEY_DIR, exist_ok=True) +package_found = False for package in config["packages"]: + if args.package_names: + if not package["name"] in args.package_names: + continue + print("Starting to build package:", package["name"]) + + if "sandbox" in package["name"]: + print("package name sandbox is not permitted") + continue + + package_found = True release_conf.read( os.path.join(RELEASE_CONF_DIR, package["release"] + ".ini") ) @@ -286,32 +292,71 @@ for package in config["packages"]: try: subprocess.run(["make", release_conf["build"]["image"]], cwd=dirname) except subprocess.CalledProcessError: - print( - "Could not build docker image {}".format( - release_conf["build"]["image"] - ) - ) + print("Could not build docker image {}".format(release_conf["build"]["image"])) sys.exit(1) print("Adding sources...") - package_name = "{name}-{version}-{release}".format(**package) + if 'target-release' in package: + package_name = "{name}-{version}-{target-release}".format(**package) + else: + package_name = "{name}-{version}-{release}".format(**package) for source in package.get("sources"): - print(" --->", source["name"]) + print(" --->", source["name"]) dest = pkg_source_dir(package_name, source["name"]) os.makedirs(dest, exist_ok=False) - shutil.copy(source["file"], dest) + if package["name"].startswith('partner-'): + if package["name"][len('partner-'):] != source["name"]: + print("Source name should match package name without prefix, omitting:", package["name"]) + sys.exit(1) + if os.path.basename(source["file"])[:-7] != source["name"] : + print("Tar file name should match source name, omitting:", package["name"]) + sys.exit(1) + shutil.copy(source["file"], dest) + elif package["name"].startswith('pscript'): + shutil.rmtree(dest, ignore_errors=True) + if not os.listdir(source["dir"]): + print("The pscript directory should not be empty ", source["dir"]) + sys.exit(1) + elif len(os.listdir(source["dir"])) == 1 and os.path.isfile(os.path.join(source["dir"] + "/.gitignore")): + print("Please add files to be added to pscript directory ", source["dir"]) + sys.exit(1) + shutil.copytree(source["dir"], dest) + elif package["name"].startswith('owner-pscript'): + shutil.rmtree(dest, ignore_errors=True) + if not os.listdir(source["dir"]): + print("The pscript directory should not be empty ", source["dir"]) + sys.exit(1) + elif len(os.listdir(source["dir"])) == 1 and os.path.isfile(os.path.join(source["dir"] + "/.gitignore")): + print("Please add files to be added to pscript directory ", source["dir"]) + sys.exit(1) + shutil.copytree(source["dir"], dest) + elif package["name"].startswith('owner-'): + if package["name"][len('owner-'):] != source["name"]: + print("Source name should match package name without prefix, omitting:", package["name"]) + sys.exit(1) + if os.path.basename(source["file"])[:-7] != source["name"] : + print("Tar file name should match source name, omitting:", package["name"]) + sys.exit(1) + shutil.copy(source["file"], dest) + else: + if os.path.basename(source["file"])[:-7] != source["name"] : + print("Tar file name should match source name, omitting:", package["name"]) + sys.exit(1) + shutil.copy(source["file"], dest) + + print("Adding configs...") os.makedirs(pkg_config_dir(package_name), exist_ok=False) for dir_info in package.get("config-dir", []): - print(" --->", dir_info["name"]) + print(" --->", dir_info["name"]) dest = pkg_config_dir(package_name, dir_info["name"]) shutil.copytree(dir_info["dir"], dest) print("Adding data...") os.makedirs(pkg_data_dir(package_name), exist_ok=False) for dir_info in package.get("data-dir", []): - print(" --->", dir_info["name"]) + print(" --->", dir_info["name"]) dest = pkg_data_dir(package_name, dir_info["name"]) shutil.copytree(dir_info["dir"], dest) @@ -332,7 +377,10 @@ for package in config["packages"]: cwd=ARCHIVE_DIR, ) - spec_name = "{name}-{version}-{release}.spec".format(**package) + if 'target-release' in package: + spec_name = "{name}-{version}-{target-release}.spec".format(**package) + else: + spec_name = "{name}-{version}-{release}.spec".format(**package) print("Generating spec file:", spec_name) spec = make_spec(package) with open(os.path.join(SPEC_DIR, spec_name), "w") as f: @@ -340,47 +388,34 @@ for package in config["packages"]: spec_file = os.path.join(release_conf["build"]["rpm_spec_dir"], spec_name) command = [ - "/usr/sbin/build_rpm.sh", - "--spec-file", - spec_file, - "--source-dir", - release_conf["build"]["rpm_source_dir"], - "--rpm-dir", - release_conf["build"]["rpm_rpm_dir"], - "--output-dir", - release_conf["build"]["rpm_output_dir"], - "--verbose", + "/usr/sbin/build_rpm.sh", + "--spec-file", spec_file, + "--source-dir", release_conf["build"]["rpm_source_dir"], + "--rpm-dir", release_conf["build"]["rpm_rpm_dir"], + "--output-dir", release_conf["build"]["rpm_output_dir"], + "--verbose" ] if gpg_key: - command.extend(["--gpg-key", "/root/keys/{}".format(package_name)]) + command.extend(["--gpg-key" , "/root/keys/{}".format(package_name)]) print("Building RPM...") print(" ".join(command)) - - os.makedirs(RPM_DIR, exist_ok=True) - subprocess.run( [ "docker", "run", + "-it", "--rm", "--name", "appmgr_rpm_builder", "-v", - "{}:{}".format( - os.path.abspath(SPEC_DIR), - release_conf["build"]["rpm_spec_dir"], - ), + "{}:{}".format(os.path.abspath(SPEC_DIR), release_conf["build"]["rpm_spec_dir"]), "-v", - "{}:{}".format( - os.path.abspath(RPM_SOURCE_DIR), - release_conf["build"]["rpm_source_dir"], - ), + "{}:{}".format(os.path.abspath(RPM_SOURCE_DIR), release_conf["build"]["rpm_source_dir"]), "-v", "{}:{}".format( - os.path.abspath(RPM_DIR), - release_conf["build"]["rpm_output_dir"], + os.path.join(os.path.abspath(dirname), "RPMS"), release_conf["build"]["rpm_output_dir"] ), # This one's for logs "-v", @@ -397,3 +432,7 @@ for package in config["packages"]: print() print("Done building package", package["name"]) print() + +if (package_found == False): + print("Please provide correct package name") + sys.exit(1) diff --git a/docker/Centos.Dockerfile b/docker/Centos.Dockerfile index e94c370..5e68ffa 100644 --- a/docker/Centos.Dockerfile +++ b/docker/Centos.Dockerfile @@ -1,6 +1,11 @@ -FROM centos:7 +FROM centos:8 +RUN cd /etc/yum.repos.d/ +RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* +RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* RUN yum install -y pinentry rpm-sign rpm-build COPY build_rpm.sh /usr/sbin/ +# FROM akshshar/xr-wrl7 +# COPY build_rpm.sh /usr/sbin/ diff --git a/examples/alpine/build.yaml b/examples/alpine/build.yaml index 2f4c869..b667f42 100644 --- a/examples/alpine/build.yaml +++ b/examples/alpine/build.yaml @@ -1,28 +1,69 @@ +#Refer README.md for more info packages: -- name: "alpine" - release: "ThinXR_7.3.15" - version: "0.1.0" +- name: "alpine" #Can be changed + release: "ThinXR_7.3.15" #Do not change + target-release: "ThinXR_7.3.15" #Can be changed + version: "0.1.0" #Can be changed sources: - - name: alpine - file: examples/alpine/alpine.tar.gz + - name: alpine #Can be changed + file: examples/alpine/alpine.tar.gz #Can be changed config-dir: - - name: alpine-configs - dir: examples/alpine/config - data-dir: - - name: alpine-data - dir: examples/alpine/data + - name: alpine #Can be changed + dir: examples/alpine/config #Do not change -- name: "alpine" - release: "eXR_7.3.1" - version: "0.1.0" +- name: "alpine" #Can be changed + release: "eXR_7.3.1" #Do not change + target-release: "eXR_7.3.1" #Can be changed + version: "0.1.0" #Can be changed sources: - - name: alpine - file: examples/alpine/alpine.tar.gz + - name: alpine #Can be changed + file: examples/alpine/alpine.tar.gz #Can be changed config-dir: - - name: alpine-configs - dir: examples/alpine/config - data-dir: - - name: alpine-data - dir: examples/alpine/data + - name: alpine #Can be changed + dir: examples/alpine/config #Do not change copy_hostname: true copy_ems_cert: true + +- name: "owner-alpine" #Do not change + release: "7.10.1" #Do not change + target-release: "7.10.1" #Can be changed + version: "3.14" #Can be changed + sources: + - name: alpine #Can be changed + file: examples/alpine/alpine.tar.gz #Can be changed + config-dir: + - name: alpine #Can be changed + dir: examples/alpine/config #Do not change + copy_hostname: true + copy_ems_cert: true + +- name: "partner-alpine" #Do not change + release: "7.10.1" #Do not change + target-release: "7.10.1" #Can be changed + version: "3.14" #Can be changed + partner-name: "radware" + sources: + - name: alpine #Can be changed + file: examples/alpine/alpine.tar.gz #Can be changed + config-dir: + - name: alpine #Can be changed + dir: examples/alpine/config #Do not change + copy_hostname: true + copy_ems_cert: true + +- name: "pscript" #Do not change + release: "24.1.1" #Do not change + target-release: "7.3.6" #Can be changed + version: "0.1.0" #Can be changed + sources: + - name: pscript #Can be changed + dir: examples/pscript #Can be changed + +- name: "owner-pscript" #Do not change + release: "7.3.6" #Do not change + target-release: "7.3.6" #Can be changed + + version: "0.1.0" #Can be changed + sources: + - name: pscript #Can be changed + dir: examples/pscript #Can be changed diff --git a/examples/alpine/config/certs/cert.pem b/examples/alpine/config/certs/cert.pem new file mode 100644 index 0000000..7ed5ec8 --- /dev/null +++ b/examples/alpine/config/certs/cert.pem @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDbjCCAlYCCQCrPAF5xfJMETANBgkqhkiG9w0BAQsFADB5MQswCQYDVQQGEwJV +UzETMBEGA1UECAwKQ2FsaWZvcm5pYTESMBAGA1UEBwwJU3Vubnl2YWxlMRIwEAYD +VQQKDAlNaWNyb3NvZnQxGTAXBgNVBAsMEEF6dXJlIE5ldHdvcmtpbmcxEjAQBgNV +BAMMCWxvY2FsaG9zdDAeFw0yMDExMjQwMTA4NTlaFw0zMDExMjIwMTA4NTlaMHkx +CzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRIwEAYDVQQHDAlTdW5u +eXZhbGUxEjAQBgNVBAoMCU1pY3Jvc29mdDEZMBcGA1UECwwQQXp1cmUgTmV0d29y +a2luZzESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEA1LNxj3+iALNiEctlj4H69UbhQlsDknfi+vil/CNDnGfbv6YTB9+8 +AeTM1rrp4QQRWnmFNb9UEY14fXQQ1lH705vIl3J1w+H79VxrSH5Iq+/qYvAyYgv1 +ob6ieIONTPIDc7CfdBfrRC6V7K2pgRq2v4bKB0gorpwjPM2OZ6zJkUAzilRLDcVV +Ym96tCLS6JPMXlNXSNdJPHDrCDPdPGQ/OYrXFl4vuTLMQ8bDtQoeQ0WALC0R1aGu +xgOyMjq5ImPijYLQHjeKjpok3Y1ZOrMFSK/OwpEtrxhwvvs42t3eC8GMLxJHjpTb +Dsw14w1FYcig83YHQaVQp3um9wGxU4KKvwIDAQABMA0GCSqGSIb3DQEBCwUAA4IB +AQBGx5SlE7UNL9u3wxYMHqf8vPMzAKVOJDzNdpT3b8YfgwIxGcOofuKxs+1Kd8op +Sm5ffcBzPNDrpQsO8FwijHhRGVacKh9IukODqi4+SSj4bXyoC97uq3/6dNKX54gg +GoxBgBFMhBygxndbxt2f89PBsIXA1GIf/5uuEkNAV3IsbMbWgjpaFSnecRIip+hF +bRmsx3+7rWCb7OdMwChiLlz8ye8z/q/UWYHboWof2UkVtuZ52BmEhzdTIpVcwmaI +FHT0gqr939HnTkjMAAS6Z85DRqeQl1RKDXwPM9htojEcE7ZrhDQLTgwBxrQZuigF +US7vExQ8QkeDoMCmgk7dqkgK +-----END CERTIFICATE----- diff --git a/examples/alpine/config/certs/client.key b/examples/alpine/config/certs/client.key new file mode 100644 index 0000000..c57a91b --- /dev/null +++ b/examples/alpine/config/certs/client.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDUs3GPf6IAs2IR +y2WPgfr1RuFCWwOSd+L6+KX8I0OcZ9u/phMH37wB5MzWuunhBBFaeYU1v1QRjXh9 +dBDWUfvTm8iXcnXD4fv1XGtIfkir7+pi8DJiC/WhvqJ4g41M8gNzsJ90F+tELpXs +ramBGra/hsoHSCiunCM8zY5nrMmRQDOKVEsNxVVib3q0ItLok8xeU1dI10k8cOsI +M908ZD85itcWXi+5MsxDxsO1Ch5DRYAsLRHVoa7GA7IyOrkiY+KNgtAeN4qOmiTd +jVk6swVIr87CkS2vGHC++zja3d4LwYwvEkeOlNsOzDXjDUVhyKDzdgdBpVCne6b3 +AbFTgoq/AgMBAAECggEAMp+a0ZqBBkWre6y7OVKoViROjKp4yS17elwftUj3WIxn +gs+WC/O2HYVFM349F+8N6kit6cLl0V+oY8NyFnBgzVZwgYseeEaa3yTl69USmsl5 +MZ8Vfrx1888ZgDFfOgcHx0ssSEdBGXM0/6W9iBrBkAgWoXENLbG/uUL7N7WqK8V6 +6D91PGmA5edl2D8cDgz6SP6P87TB/O1OLC886ifpdC0gjLV/JWXspStB7EtqJHkl +8QYvcsrKgW8PTc1ZyuGDlftnFvv+OeRbJT0UTvXVjuspEzz1I/tIM/K6RWj4WMWN +lSSZihSKGkE/mDsXrdmQQUdtNY1SQqOUViKw1zQRkQKBgQDsuIta/hRcX/knKeUW +CZ80gVliV8f5mxd74wMe6Y3Sx9zUaX601rZvjDFerD3yzECqef11HtCmr8YgRo/4 +Ah+3szl0v2pIs795LTWCCSbSWSejiKdFbRAiYlTT057nqCrTVtXJEF+8ggWh0oyy +Lwzi/vDOlejGMtmtLO1VjKwGmwKBgQDmBhn9jexMXH7daOAmSO31BSw6jvfH31WC +jZUrR15COuK/c/RCrJHtY/sI74Aj+5Ol91ARbDweCv0fer09ymAX9DOszVZx2LYF +cDMuzVTZFQGFnnSNe2+aO4O6ZzR+0BN7peFUI1CGZO/oPE/dVXEH/nBN06SEJ2YW +Ymb2WZ18rQKBgDbJf3dP1uaKT+AAkkTHdVFxnn5kUqQygPzrTY2aAHkISNPglrLD +/vVSPRrsQmovW8gY89BnkWMCy5gsvKVp2G1rzaB3rOGmuGoTTI8MDzAf8kynFA+9 +bj6HA5sDH4P+J+tB7bjbUU0Pyr3pPScAPLtMxe8KQxWcL0UlYMisBiSBAoGACmZO +OIN5In6wEayTLcfwUjqYpFEgbL3xLMTf8KP6Y/4rkEJa0cThmB0EFYRWg8n1A/Tp +ftAo66bNiOXQtoF21L5qs65Y8S6+FALdnYkVA/eKKRNf66GgCxYTv5K48d7Qcq+u +P1KVam4X1qUba0NYp+beBvbBomPxnqN2Sj8E+sUCgYEAtN8MgXPZNdSSyPCRbAca +7KmU3y5C6FM1PqEzdfx2abKbn9GxEpakfHu6f/s6u0owgtup3wO+zdn6HKeAfx8H +0ARZMu0X5zJSCWkc5DO8y6CslbizlKukB7T8Ljg5kEHOhNCrN5+Sp3kUu7oPawM+ +lLKODjU2oIKozIKdYwCOKlw= +-----END PRIVATE KEY----- diff --git a/examples/alpine/config/certs/server.crt b/examples/alpine/config/certs/server.crt new file mode 100644 index 0000000..0987e4d --- /dev/null +++ b/examples/alpine/config/certs/server.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDbjCCAlYCCQDZOZSdeOZksjANBgkqhkiG9w0BAQsFADB5MQswCQYDVQQGEwJV +UzETMBEGA1UECAwKQ2FsaWZvcm5pYTESMBAGA1UEBwwJU3Vubnl2YWxlMRIwEAYD +VQQKDAlNaWNyb3NvZnQxGTAXBgNVBAsMEEF6dXJlIE5ldHdvcmtpbmcxEjAQBgNV +BAMMCWxvY2FsaG9zdDAeFw0yMDExMjQwMTA4MjBaFw0zMDExMjIwMTA4MjBaMHkx +CzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRIwEAYDVQQHDAlTdW5u +eXZhbGUxEjAQBgNVBAoMCU1pY3Jvc29mdDEZMBcGA1UECwwQQXp1cmUgTmV0d29y +a2luZzESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAtsBvnXsbi838/oh/yqUjOVyvzaNjiICL67FmAthtOylQJP+EuIPv +fuz8Orn9DVblcIucZNQeEB+Gla4saG/YhnZpNjMQFOZgjCaNMxFNx+zw0zqtPSd9 +Bfx/Yme+qHxQm9DPypluca23R/dUsOtf5Jv2YAjFRKmE1zun3mpTS8AbEwjSYImT +aWGUU8x08yI6Dpwif8nVegl0iutg6Ai3OTGLXV9WbFn1QNW9KJh98IH/wfqIaGPK ++5+Q1pOgbt6IA2Qc7UX5LqkhCrNWRSWrI06F8NKepJrjbyrLgUG+Z6LaOjAffOsA +HyiGrzNxoBUKcqEc64sqb+1EuK+098pQGwIDAQABMA0GCSqGSIb3DQEBCwUAA4IB +AQCblvjgAlKyV/GocLhT83AcNntvahR/x9/tImkreO3EVJQlMHly0ahMnWk6XydK +e6n+K1hfT6u0KqaRsytgeaRtN6Uteh5dxrvi1MOKUSvegZMDS0WxLl2cvcU5nIQT +x26Stou6lv9FcfbcTA0PtfG1IN+Ghp+FTl880Mgwd+ISX9iQKPZHtsTOXU5+hhZH +U7Gs93Vr/82eHR2ls5iIeDHkdE3wBttkBQ3xHwN0MwVVnINc5vzTgxNBNfLYnyt0 +zQ0J5XuGtI/7cu6iUPnwMedpgIOhxN0px1EOOKMuct2ivbnFO/dkFxunUglsa95U +h68iyf/mMUaV88Nvm0H91YZj +-----END CERTIFICATE----- diff --git a/examples/alpine/config/certs/server.key b/examples/alpine/config/certs/server.key new file mode 100644 index 0000000..d5b6735 --- /dev/null +++ b/examples/alpine/config/certs/server.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC2wG+dexuLzfz+ +iH/KpSM5XK/No2OIgIvrsWYC2G07KVAk/4S4g+9+7Pw6uf0NVuVwi5xk1B4QH4aV +rixob9iGdmk2MxAU5mCMJo0zEU3H7PDTOq09J30F/H9iZ76ofFCb0M/KmW5xrbdH +91Sw61/km/ZgCMVEqYTXO6fealNLwBsTCNJgiZNpYZRTzHTzIjoOnCJ/ydV6CXSK +62DoCLc5MYtdX1ZsWfVA1b0omH3wgf/B+ohoY8r7n5DWk6Bu3ogDZBztRfkuqSEK +s1ZFJasjToXw0p6kmuNvKsuBQb5noto6MB986wAfKIavM3GgFQpyoRzriypv7US4 +r7T3ylAbAgMBAAECggEASxQLxrrIukrJ4RfayDnHms1FPEofnfiRgybCLfEUDvYO +AuUmdVdekNpzVP0LxOsqH257tcCfCSiqddu0SsOIRNVoq+eWd7+dcnZ0E8LMHZJt +7Zlximoqpsbw3lCYt0c7JohGlYkrInCnl1044eYQ4y5frVxtDqRF+tZ7RJiR19BG +jm1C6sHd2jb3mvy2wGyVqTrI+O8nql8CebiYGV8CM1joX1OGurwl4JYfZBOTm4++ +0eWRbqRWBpuyfJIkvgQtk9Gug0E9GHwS55YDL89nuOjMgxT+H6YN3Jy6K54xDlTN +tEB7JVZ8neFaUc2Z9Wz/dzDTvQI/pd7wY0GlXrTy4QKBgQDcZTPETcjzIxknHr5Q +bnymBYWLTsKV2MxmTwBKfGYaJjwgjocLw8crd2DI/E04lSyW9iYukyK37GJH10V4 +oSC0hFevWQPkeT0f7oSmj6kb5jVP+GscmyWjA4xQJ7RbCiqk+EtO5Qd0ihogPBKM +OfHJgvlZIt/7GkIieSihqL/BfQKBgQDURmwb9II/Bf/XpJpajVzW4Vbr5MVepnYs +T6qQ+2iKkVANb06XutcDedqUATZk0XhghwYuNQrfAJ5L/9TukAFWrAxxo8cnq7Zd +V+Kri8cbzjo1vkaPV6byRnlpR+bMGlyYg3EfzHkShRBMyRVzTyz7S8S30vTssyED +uY5fLmMLdwKBgQC0XB2BCCbq0k5DNWWJbOGU++/NkSasej7LettCGYt02tVZz0m0 +1wKnD4qk79RB+dIDuGyGsOI4obnMEN9JWJLrJ2KanL4SuyTKfOcRZ3981WfLigAd +6NlkDgNFlTiDSE6dspPufH8dX+cBeiezmbfEsOpdh6zEUTjN/VjC8tX6AQKBgA1Y +QAOh425C2kqcNnfq2yNHF0fNIftJS7SNbZOfunq7l+TAUpiHTm0RhAQ570l3QbIP +yvusqfpK96ifdKtqsirYtg+O1D5SNSy5Ea7nIqVE2bP3OkhYok4o0AkmVAQQxDFy +UfJF0Haxlsy893RATfueT8eeo3cd671oNOMW73MRAoGAGabxFSyLhWHf48rdtHig +7sBgi94N05sBd9nwqCDjO0YG0kRyDjyxwNhr97ZNNEY+n4AWhpgYVCxvW4ytlfKw +OXtg2XInoEMFJUK6Zx+yI2azbxrfcJXcauNcVjA43OATI0BG7EVzmN7uktAwxoV5 +0oXnkIvx0qj2N0fNb9YH6r0= +-----END PRIVATE KEY----- diff --git a/examples/pscript/.gitignore b/examples/pscript/.gitignore new file mode 100644 index 0000000..5e7d273 --- /dev/null +++ b/examples/pscript/.gitignore @@ -0,0 +1,4 @@ +# Ignore everything in this directory +* +# Except this file +!.gitignore diff --git a/release_configs/24.1.1.ini b/release_configs/24.1.1.ini new file mode 100644 index 0000000..318d996 --- /dev/null +++ b/release_configs/24.1.1.ini @@ -0,0 +1,12 @@ +#Shouldn't be modified +[build] +image = arhashem/xr-wrl7 +rpm_source_dir = /usr/src/rpm/SOURCES +rpm_rpm_dir = /usr/src/rpm/RPMS +rpm_spec_dir = /usr/src/rpm/SPECS +rpm_output_dir = /root/RPMS +script_support = yes +[paths] +appmgr_source = /ops-script-repo +appmgr_config = /config +appmgr_data = /data diff --git a/release_configs/7.10.1.ini b/release_configs/7.10.1.ini new file mode 100644 index 0000000..d38f225 --- /dev/null +++ b/release_configs/7.10.1.ini @@ -0,0 +1,12 @@ +#Shouldn't be modified +[build] +image = arhashem/xr-wrl7 +rpm_source_dir = /usr/src/rpm/SOURCES +rpm_rpm_dir = /usr/src/rpm/RPMS +rpm_spec_dir = /usr/src/rpm/SPECS +rpm_output_dir = /root/RPMS +script_support = yes +[paths] +appmgr_source = /opt +appmgr_config = /config +appmgr_data = /data diff --git a/release_configs/7.3.6.ini b/release_configs/7.3.6.ini new file mode 100644 index 0000000..f0bb0f5 --- /dev/null +++ b/release_configs/7.3.6.ini @@ -0,0 +1,12 @@ +#Shouldn't be modified +[build] +image = arhashem/xr-wrl7 +rpm_source_dir = /usr/src/rpm/SOURCES +rpm_rpm_dir = /usr/src/rpm/RPMS +rpm_spec_dir = /usr/src/rpm/SPECS +rpm_output_dir = /root/RPMS +script_support = yes +[paths] +appmgr_source = /opt/owner/ops-script-repo +appmgr_config = /config +appmgr_data = /data diff --git a/release_configs/ThinXR_7.3.15.ini b/release_configs/ThinXR_7.3.15.ini index b0cf62c..c9463ac 100644 --- a/release_configs/ThinXR_7.3.15.ini +++ b/release_configs/ThinXR_7.3.15.ini @@ -1,3 +1,4 @@ +#Shouldn't be modified [build] image = arhashem/xr-centos rpm_source_dir = /root/rpmbuild/SOURCES diff --git a/release_configs/eXR_7.3.1.ini b/release_configs/eXR_7.3.1.ini index 72972f6..1b0debd 100644 --- a/release_configs/eXR_7.3.1.ini +++ b/release_configs/eXR_7.3.1.ini @@ -1,3 +1,4 @@ +#Shouldn't be modified [build] image = arhashem/xr-wrl7 rpm_source_dir = /usr/src/rpm/SOURCES