b6134858 |
#!/usr/bin/env python3
import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), "support/package-builder"))
sys.path.insert(1, os.path.join(os.path.dirname(os.path.realpath(__file__)), "support/image-builder"))
from pathlib import PurePath
from constants import constants
from argparse import ArgumentParser
from CommandUtils import CommandUtils
from builder import Builder
from Logger import Logger
from utils import Utils
import subprocess
import json
import docker
import shutil
import traceback
import glob |
25423639 |
from subprocess import PIPE, Popen
from support.check_spec import check_specs
|
b6134858 |
configdict = {}
targetList = { |
b880a2c5 |
"image":["iso", "ami", "gce", "azure", "rpi", "ova", "ova_uefi", "all", "src-iso", "ls1012afrwy", |
b6134858 |
"photon-docker-image", "k8s-docker-images", "all-images", "minimal-iso", "rt-iso"],
"rpmBuild": ["packages", "packages-minimal", "packages-initrd", "packages-docker",
"updated-packages", "tool-chain-stage1", "tool-chain-stage2", "check",
"ostree-repo", "generate-yaml-files", "create-repo", "distributed-build"],
|
faf5f260 |
"buildEnvironment": ["packages-cached", "sources", "sources-cached", "publish-rpms", "publish-x-rpms",
"publish-rpms-cached", "publish-x-rpms-cached", "photon-stage","photon_builder_image"], |
b6134858 |
"cleanup": ["clean", "clean-install", "clean-chroot", "clean-stage-for-incremental-build"],
"tool-checkup": ["check-tools", "check-docker", "check-docker-service", "check-docker-py",
"check-bison", "check-texinfo", "check-g++", "check-gawk", "check-repo-tool",
"check-kpartx", "check-sanity", "start-docker", "install-photon-docker-image", |
23653512 |
"check-spec-files", "check-pyopenssl", "check-photon-installer"], |
b6134858 |
"utilities": ["generate-dep-lists", "pkgtree", "imgtree", "who-needs", "print-upward-deps"]
}
curDir = os.getcwd()
check_prerequesite = {
"vixdiskutil": False,
"tools-bin": False,
"contain": False,
"initialize-constants": False
}
def vixdiskutil():
check_prerequesite["vixdiskutil"] = True
if not check_prerequesite["tools-bin"]:
tools_bin()
if subprocess.Popen(["cd " + curDir + "/tools/src/vixDiskUtil && make"], shell=True).wait() != 0:
raise Exception("Not able to make vixDiskUtil")
def tools_bin():
check_prerequesite["tools-bin"] = True
if not os.path.isdir(os.path.join(curDir, "tools/bin")):
os.mkdir(os.path.join("tools","bin"))
def contain():
check_prerequesite["contain"] = True
if not check_prerequesite["tools-bin"]:
tools_bin()
if subprocess.Popen(["gcc -O2 -std=gnu99 -Wall -Wextra " + curDir + \
"/tools/src/contain/*.c -o tools/bin/contain_unpriv && sudo install -o root -g root \
-m 4755 tools/bin/contain_unpriv tools/bin/contain"], shell=True).wait() != 0:
raise Exception("contain failed")
class Build_Config:
buildThreads = 1
stagePath = ""
pkgJsonInput = None
rpmNoArchPath = ""
chrootPath = ""
generatedDataPath = ""
pullPublishRPMSDir = ""
pullPublishRPMS = ""
pullPublishXRPMS = ""
updatedRpmPath = ""
updatedRpmNoArchPath = ""
dockerEnv = "/.dockerenv"
updatedRpmArchPath = ""
pkgInfoFile = ""
rpmArchPath = ""
commonDir = ""
pkgBuildType = ""
dataDir = ""
packageListFile = "build_install_options_all.json"
pkgToBeCopiedConfFile = None
confFile = None
distributedBuildFile = "distributed_build_options.json"
@staticmethod
def setDockerEnv(dockerEnv):
Build_Config.dockerEnv = dockerEnv
@staticmethod
def setDistributedBuildFile(distributedBuildFile):
Build_Config.distributedBuildFile = distributedBuildFile
@staticmethod
def setPkgToBeCopiedConfFile(pkgToBeCopiedConfFile):
Build_Config.pkgToBeCopiedConfFile = pkgToBeCopiedConfFile
@staticmethod
def setRpmNoArchPath():
Build_Config.rpmNoArchPath = os.path.join(constants.rpmPath, "noarch")
@staticmethod
def setRpmArchPath():
Build_Config.rpmArchPath = os.path.join(constants.rpmPath, constants.buildArch)
@staticmethod
def setConfFile(confFile):
Build_Config.confFile = confFile
@staticmethod
def setPkgBuildType(pkgBuildType):
Build_Config.pkgBuildType = pkgBuildType
@staticmethod
def setBuildThreads(buildThreads):
Build_Config.buildThreads = buildThreads
@staticmethod
def setPkgJsonInput(pkgJsonInput):
Build_Config.pkgJsonInput = pkgJsonInput
@staticmethod
def setUpdatedRpmPath(updatedRpmPath):
Build_Config.updatedRpmPath = updatedRpmPath
Build_Config.updatedRpmNoArchPath = os.path.join(updatedRpmPath , "noarch")
Build_Config.updatedRpmArchPath = os.path.join(updatedRpmPath, constants.buildArch)
@staticmethod
def setStagePath(stagePath):
Build_Config.stagePath = stagePath
@staticmethod
def setPkgInfoFile(pkgInfoFile):
Build_Config.pkgInfoFile = pkgInfoFile
@staticmethod
def setChrootPath(chrootPath):
Build_Config.chrootPath = chrootPath
@staticmethod
def setGeneratedDataDir(generatedDataDir):
Build_Config.generatedDataPath = generatedDataDir
@staticmethod
def setCommonDir(commonDir):
Build_Config.commonDir = commonDir
@staticmethod
def setDataDir(dataDir):
Build_Config.dataDir = dataDir
Build_Config.packageListFile = os.path.join(Build_Config.dataDir, Build_Config.packageListFile)
@staticmethod
def setPullPublishRPMSDir(pullPublishRPMSDir):
Build_Config.pullPublishRPMSDir = pullPublishRPMSDir
@staticmethod
def setPullPublishXRPMS(pullPublishXRPMS):
Build_Config.pullPublishXRPMS = pullPublishXRPMS
@staticmethod
def setPullPublishRPMS(pullPublishRPMS):
Build_Config.pullPublishRPMS = pullPublishRPMS
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# class Utilities is used for generating spec dependency, priniting upward dependencies for package.. +
# +
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class Utilities:
global configdict
global check_prerequesite
def __init__(self):
from SpecDeps import SpecDependencyGenerator
cmdUtils = CommandUtils()
self.img = configdict.get("utility", {}).get("img", None)
self.json_file = configdict.get("utility", {}).get("file", "packages_*.json")
self.display_option = configdict.get("utility", {}).get("display-option", "json")
self.input_type = configdict.get("utility", {}).get("input-type", "json")
self.pkg = configdict.get("utility", {}).get("pkg", None)
self.logger = Logger.getLogger("SpecDeps", constants.logPath, constants.logLevel)
if not os.path.isdir(Build_Config.generatedDataPath):
cmdUtils.runCommandInShell("mkdir -p " + Build_Config.generatedDataPath)
|
84db2594 |
if configdict["targetName"] in ["pkgtree", "who_needs", "print_upward_deps"]:
if "pkg" not in os.environ:
raise Exception("Please provide environment variable pkg as make <target> pkg=<pkg-name>")
else:
self.pkg = os.environ["pkg"]
self.display_option = "tree" |
b6134858 |
if configdict["targetName"] == "imgtree" and "img" not in os.environ:
raise Exception("img not present in os.environ")
elif configdict["targetName"] == "imgtree":
self.json_file = "packages_" + os.environ["img"] + ".json"
self.specDepsObject = SpecDependencyGenerator(constants.logPath, constants.logLevel)
def generate_dep_lists(self):
check_prerequesite["generate-dep-lists"] = True
list_json_files = glob.glob(os.path.join(Build_Config.dataDir, self.json_file))
# Generate the expanded package dependencies json file based on package_list_file
self.logger.info("Generating the install time dependency list for all json files")
if list_json_files:
shutil.copy2(os.path.join(Build_Config.dataDir, "build_install_options_all.json"), Build_Config.generatedDataPath)
shutil.copy2(os.path.join(Build_Config.dataDir, "build_install_options_minimal.json"), Build_Config.generatedDataPath)
shutil.copy2(os.path.join(Build_Config.dataDir, "build_install_options_rt.json"), Build_Config.generatedDataPath)
for json_file in list_json_files:
output_file = None
if self.display_option == "json":
output_file = os.path.join(Build_Config.generatedDataPath, os.path.splitext(os.path.basename(json_file))[0]+"_expanded.json")
self.specDepsObject.process(self.input_type, json_file, self.display_option, output_file) |
cef0ce61 |
shutil.copyfile(json_file, os.path.join(Build_Config.generatedDataPath, os.path.basename(json_file))) |
b6134858 |
def pkgtree(self):
self.input_type = "pkg"
self.specDepsObject.process(self.input_type, self.pkg, self.display_option)
def who_needs(self):
self.input_type = "who-needs"
self.specDepsObject.process(self.input_type, self.pkg, self.display_option)
def imgtree(self):
self.input_type = "json"
self.generate_dep_lists()
def print_upward_deps(self):
whoNeedsList = self.specDepsObject.process("get-upward-deps", self.pkg, self.display_option)
self.logger.info("Upward dependencies: " + str(whoNeedsList))
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# class Buildenvironmentsetup does job like pulling toolchain RPMS and creating stage... +
# +
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class BuildEnvironmentSetup:
global configdict
global check_prerequesite
def packages_cached():
check_prerequesite["packages-cached"]=True
CommandUtils.runCommandInShell("rm -rf " + Build_Config.rpmNoArchPath + "/*")
CommandUtils.runCommandInShell("rm -rf " + Build_Config.rpmArchPath + "/*")
CommandUtils.runCommandInShell("cp -rf " + configdict["additional-path"]["photon-cache-path"] + "/RPMS/noarch/* " + Build_Config.rpmNoArchPath)
CommandUtils.runCommandInShell("cp -rf " + configdict["additional-path"]["photon-cache-path"] + \
"/RPMS/" + constants.currentArch + "/* " + Build_Config.rpmArchPath)
RpmBuildTarget.create_repo()
def sources():
if configdict['additional-path']['photon-sources-path'] is None:
check_prerequesite["sources"]=True
if not os.path.isdir(constants.sourcePath):
os.mkdir(constants.sourcePath)
else:
BuildEnvironmentSetup.sources_cached()
def sources_cached():
check_prerequesite["sources-cached"]=True
print("Using cached SOURCES...")
CommandUtils.runCommandInShell("ln -sf " + configdict["additional-path"]["photon-sources-path"] + " " + constants.sourcePath)
def publish_rpms():
if configdict['additional-path']['photon-publish-rpms-path'] is None:
check_prerequesite["publish-rpms"]=True
print("Pulling toolchain RPMS...")
if subprocess.Popen(["cd " + Build_Config.pullPublishRPMSDir + " && " \
+ Build_Config.pullPublishRPMS + " " + constants.prevPublishRPMRepo], shell=True).wait() != 0:
raise Exception("Cannot run publish-rpms")
else:
BuildEnvironmentSetup.publish_rpms_cached()
def publish_rpms_cached():
check_prerequesite["publish-rpms-cached"]=True
if not os.path.isdir(constants.prevPublishRPMRepo + "/" + constants.currentArch):
os.makedirs(constants.prevPublishRPMRepo + "/" + constants.currentArch)
if not os.path.isdir(constants.prevPublishRPMRepo + "/noarch"):
os.makedirs(constants.prevPublishRPMRepo + "/noarch")
if subprocess.Popen(["cd " + Build_Config.pullPublishRPMSDir + " && " + \
Build_Config.pullPublishRPMS + " " + constants.prevPublishRPMRepo + " " + \
configdict["additional-path"]["photon-publish-rpms-path"]], shell=True).wait() != 0:
raise Exception("Cannot run publish-rpms-cached")
def publish_x_rpms_cached(): |
f2b2401b |
check_prerequesite["publish-x-rpms-cached"] = True |
b6134858 |
if not os.path.isdir(constants.prevPublishXRPMRepo + "/" + constants.currentArch):
os.makedirs(constants.prevPublishXRPMRepo + "/" + constants.currentArch)
if not os.path.isdir(constants.prevPublishRPMRepo + "/noarch"):
os.makedirs(constants.prevPublishXRPMRepo + "/noarch")
if subprocess.Popen(["cd " + Build_Config.pullPublishRPMSDir + " && " + Build_Config.pullPublishXRPMS \
+ " " + constants.prevPublishXRPMRepo + " " + \
configdict["additional-path"]["photon-publish-x-rpms-path"]], shell=True).wait() != 0:
raise Exception("Cannot run publish-x-rpms-cached")
def publish_x_rpms():
if configdict['additional-path']['photon-publish-x-rpms-path'] is None:
check_prerequesite["publish-x-rpms"]=True |
f2b2401b |
print("\nPulling X toolchain RPMS from packages.vmware.com ...") |
b6134858 |
if subprocess.Popen(["cd " + Build_Config.pullPublishRPMSDir + " && " + Build_Config.pullPublishXRPMS \
+ " " + constants.prevPublishXRPMRepo], shell=True).wait() != 0:
raise Exception("Cannot run publishx-rpms")
else:
BuildEnvironmentSetup.publish_x_rpms_cached()
def photon_stage():
check_prerequesite["photon-stage"]=True
print("\nCreating staging folder and subitems...")
if not os.path.isdir(Build_Config.stagePath):
os.mkdir(Build_Config.stagePath)
if not os.path.isdir(constants.buildRootPath):
os.mkdir(constants.buildRootPath)
if not os.path.isdir(constants.rpmPath):
os.mkdir(constants.rpmPath)
if not os.path.isdir(Build_Config.rpmArchPath):
os.mkdir(Build_Config.rpmArchPath)
if not os.path.isdir(Build_Config.rpmNoArchPath):
os.mkdir(Build_Config.rpmNoArchPath)
if not os.path.isdir(constants.sourceRpmPath):
os.mkdir(constants.sourceRpmPath)
if not os.path.isdir(Build_Config.updatedRpmPath):
os.mkdir(Build_Config.updatedRpmPath)
if not os.path.isdir(Build_Config.updatedRpmNoArchPath):
os.mkdir(Build_Config.updatedRpmNoArchPath)
if not os.path.isdir(Build_Config.updatedRpmArchPath):
os.mkdir(Build_Config.updatedRpmArchPath)
if not os.path.isdir(constants.sourcePath):
os.mkdir(constants.sourcePath)
if not os.path.isdir(constants.logPath):
os.mkdir(constants.logPath)
if not os.path.isfile(Build_Config.stagePath + "/COPYING"):
CommandUtils.runCommandInShell("install -m 444 " + curDir + "/COPYING " + Build_Config.stagePath + "/COPYING")
if not os.path.isfile(Build_Config.stagePath + "/NOTICE-GPL2.0"):
CommandUtils.runCommandInShell("install -m 444 " + curDir + "/NOTICE-GPL2.0 " + Build_Config.stagePath + "/NOTICE-GPL2.0")
if not os.path.isfile(Build_Config.stagePath + "/NOTICE-Apachev2"):
CommandUtils.runCommandInShell("install -m 444 " + curDir + "/NOTICE-Apachev2 " + Build_Config.stagePath + "/NOTICE-Apachev2") |
23653512 |
if not os.path.isfile(Build_Config.stagePath + "/EULA.txt"):
CommandUtils.runCommandInShell("install -m 444 " + curDir + "/EULA.txt " + Build_Config.stagePath + "/EULA.txt") |
b6134858 |
|
faf5f260 |
def create_photon_builder_image():
# docker image with rpm preinstalled
check_prerequesite["photon_builder_image"] = True
import docker |
457c88cb |
import io |
faf5f260 |
dockerClient = docker.from_env(version="auto") |
457c88cb |
dockerfilePath=os.path.join(curDir, "support/package-builder/Dockerfile.photon_builder")
dfile=""
with open(dockerfilePath, 'r') as f:
tmpdfile=f.read()
if "photon-docker-image" in configdict["photon-build-param"]:
dfile=tmpdfile.replace("photon:latest",configdict["photon-build-param"]["photon-docker-image"])
else:
dfile = tmpdfile
|
faf5f260 |
print("Creating photon builder docker image ...")
try:
image = dockerClient.images.build(tag='photon_builder:latest', |
457c88cb |
fileobj=io.BytesIO(dfile.encode()),
rm=True)
|
faf5f260 |
print("Created Image {0}".format(image[0]))
except Exception as e:
print("Non-zero tdnf code? Try running `docker pull photon:latest`")
raise e
|
b6134858 |
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# class Cleanup does the job of cleaning up the stage directory... +
# +
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class CleanUp:
def clean():
CleanUp.clean_install()
CleanUp.clean_chroot()
print("Deleting Photon ISO...")
CommandUtils.runCommandInShell("rm -f " + Build_Config.stagePath + "/photon-*.iso")
print("Deleting stage dir...")
CommandUtils.runCommandInShell("rm -rf " + Build_Config.stagePath)
print("Deleting chroot path...")
CommandUtils.runCommandInShell("rm -rf " + constants.buildRootPath)
print("Deleting tools/bin...")
CommandUtils.runCommandInShell("rm -rf tools/bin")
def clean_install():
print("Cleaning installer working directory...")
if os.path.isdir(os.path.join(Build_Config.stagePath, "photon_iso")):
if subprocess.Popen(["support/package-builder/clean-up-chroot.py", os.path.join(Build_Config.stagePath, "photon_iso")]).wait() != 0:
raise Exception("Not able to clean chroot")
def clean_chroot():
print("Cleaning chroot path...")
if os.path.isdir(constants.buildRootPath):
if subprocess.Popen([curDir + "/support/package-builder/clean-up-chroot.py", constants.buildRootPath]).wait() != 0:
raise Exception("Not able to clean chroot")
def clean_stage_for_incremental_build(): |
2be0754f |
#cd /root/photon;test -z "$(git diff --name-only 84562de @ | grep SPECS)" || \
# /root/photon/support/package-builder/SpecDeps.py --spec-path SPECS/
# -i remove-upward-deps \
# -p "$(echo `git diff --name-only 84562de @ | grep .spec | xargs -n1 basename 2>/dev/null` | tr ' ' :)"
command = "cd %s; \
test -z \"$(git diff --name-only %s @ | grep SPECS)\" || \
%s --spec-path SPECS/ \
-i remove-upward-deps \
-p \"$(echo `git diff --name-only %s @ | grep .spec | xargs -n1 basename 2>/dev/null` | tr ' ' :)\"" % (configdict["photon-path"],
configdict["photon-build-param"]["base-commit"],
"%s/support/package-builder/SpecDeps.py" % (curDir),
configdict["photon-build-param"]["base-commit"]) |
b6134858 |
subprocess.Popen(command, shell=True).wait() |
5fd2d90b |
if subprocess.Popen(command, shell=True).wait() != 0:
raise Exception("Not able to run clean_stage_for_incremental_build") |
b6134858 |
|
2be0754f |
#test -n "$(git diff --name-only @~1 @ | grep '^support/\(make\|package-builder\|pullpublishrpms\)')" && \
# { echo "Remove all staged RPMs"; $(RM) -rf $(PHOTON_RPMS_DIR); } ||:
command = "test -n \"$(git diff --name-only @~1 @ | grep '^support/\(make\|package-builder\|pullpublishrpms\)')\" && \
{ cd %s; echo \"Remove all staged RPMs\"; /bin/rm -rf ./stage/RPMS; } ||:" % (configdict["photon-path"]) |
b6134858 |
if subprocess.Popen(command, shell=True).wait() != 0:
raise Exception("Not able to run clean_stage_for_incremental_build")
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# class Rpmbuildtarget does the job of building all the RPMs for the SPECS +
# It uses Builder class in builder.py in order to build packages. +
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class RpmBuildTarget:
global configdict
global check_prerequesite
def __init__(self):
from SpecData import SPECS
self.logger = Logger.getLogger("Main", constants.logPath, constants.logLevel)
if not check_prerequesite["check-docker-py"]:
CheckTools.check_docker_py()
if not check_prerequesite["check-tools"]:
CheckTools.check_tools()
if not check_prerequesite["photon-stage"]:
BuildEnvironmentSetup.photon_stage()
if configdict["additional-path"]["photon-publish-x-rpms-path"] is not None and not check_prerequesite["publish-x-rpms-cached"]:
BuildEnvironmentSetup.publish_x_rpms_cached()
else:
if not check_prerequesite["publish-x-rpms"]:
BuildEnvironmentSetup.publish_x_rpms()
if configdict["additional-path"]["photon-publish-rpms-path"] is not None and not check_prerequesite["publish-rpms-cached"]:
BuildEnvironmentSetup.publish_rpms_cached()
else:
if not check_prerequesite["publish-rpms"]:
BuildEnvironmentSetup.publish_rpms()
if configdict["additional-path"]["photon-sources-path"] is not None and not check_prerequesite["sources-cached"]:
BuildEnvironmentSetup.sources_cached()
else:
if not check_prerequesite["sources"]:
BuildEnvironmentSetup.sources()
if not check_prerequesite["contain"]:
contain()
if not check_prerequesite["check-spec-files"]:
CheckTools.check_spec_files()
a = Utilities()
a.generate_dep_lists()
if constants.buildArch != constants.targetArch:
CommandUtils.runCommandInShell("mkdir -p " + constants.rpmPath + "/" + constants.targetArch)
self.logger.debug("Source Path :" + constants.sourcePath)
self.logger.debug("Spec Path :" + constants.specPath)
self.logger.debug("Rpm Path :" + constants.rpmPath)
self.logger.debug("Log Path :" + constants.logPath)
self.logger.debug("Log Level :" + constants.logLevel)
self.logger.debug("Top Dir Path :" + constants.topDirPath)
self.logger.debug("Publish RPMS Path :" + constants.prevPublishRPMRepo)
self.logger.debug("Publish X RPMS Path :" + constants.prevPublishXRPMRepo)
Builder.get_packages_with_build_options(configdict['photon-build-param']['pkg-build-options'])
if not check_prerequesite["generate-dep-lists"]:
SPECS()
if constants.buildArch != constants.targetArch:
# It is cross compilation
# first build all native packages
Builder.buildPackagesForAllSpecs(Build_Config.buildThreads, Build_Config.pkgBuildType, Build_Config.pkgInfoFile, self.logger)
# Then do the build to the target
constants.currentArch = constants.targetArch
constants.crossCompiling = True
|
faf5f260 |
# if rpm doesnt have zstd support we will create and use photon_builder image with preinstalled rpm
command="rpm --showrc | grep -i 'rpmlib(PayloadIsZstd)'"
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
retval = process.wait()
if retval !=0 and not check_prerequesite["photon_builder_image"]:
constants.hostRpmIsNotUsable = True
self.logger.info('rpm doesnt have zstd support')
BuildEnvironmentSetup.create_photon_builder_image()
else:
self.logger.info('rpm has zstd support') |
b6134858 |
@staticmethod
def create_repo():
check_prerequesite["create-repo"]=True
if subprocess.Popen(["createrepo " + constants.rpmPath], shell=True).wait() != 0:
raise Exception("Not able to create repodata")
@staticmethod
def ostree_repo():
check_prerequesite["ostree-repo"]=True
if not check_prerequesite["start-docker"]:
CheckTools.start_docker() |
1c5b1b87 |
if constants.currentArch == "x86_64": |
f8fe3fcd |
ph_docker_image = "vmware/photon-build:rpm-ostree-3.0" |
1c5b1b87 |
else: |
f8fe3fcd |
ph_docker_image = "vmware/photon-build:rpm-ostree-aarch64-3.0" |
b6134858 |
if not os.path.isfile(os.path.join(Build_Config.stagePath, "ostree-repo.tar.gz")): |
1c5b1b87 |
process = subprocess.Popen([curDir + "/support/image-builder/ostree-tools/make-ostree-image.sh", curDir, Build_Config.stagePath, |
f8fe3fcd |
ph_docker_image]) |
b6134858 |
retval = process.wait()
if retval != 0:
print("Not able to execute make-ostree-image.sh")
else:
print("Creating OSTree repo from local RPMs in ostree-repo.tar.gz...")
def packages(self):
check_prerequesite["packages"]=True
if configdict['additional-path']['photon-cache-path'] is None:
Builder.buildPackagesForAllSpecs(Build_Config.buildThreads,
Build_Config.pkgBuildType,
Build_Config.pkgInfoFile,
self.logger)
RpmBuildTarget.create_repo()
else:
BuildEnvironmentSetup.packages_cached()
def package(self, pkgName):
check_prerequesite["package"] = True
self.logger.debug("Package to build:" + pkgName)
Builder.buildSpecifiedPackages([pkgName], Build_Config.buildThreads, Build_Config.pkgBuildType)
def packages_minimal(self):
check_prerequesite["packages-minimal"] = True
if configdict['additional-path']['photon-cache-path'] is None:
Builder.buildPackagesInJson(os.path.join(Build_Config.dataDir, "packages_minimal.json"), \
Build_Config.buildThreads, Build_Config.pkgBuildType, Build_Config.pkgInfoFile, self.logger)
else:
BuildEnvironmentSetup.packages_cached()
def packages_rt(self):
check_prerequesite["packages-rt"] = True
if configdict['additional-path']['photon-cache-path'] is None:
Builder.buildPackagesInJson(os.path.join(Build_Config.dataDir, "packages_rt.json"), \
Build_Config.buildThreads, Build_Config.pkgBuildType, Build_Config.pkgInfoFile, self.logger)
else:
BuildEnvironmentSetup.packages_cached()
def packages_initrd(self):
check_prerequesite["packages-initrd"] = True
Builder.buildPackagesInJson(os.path.join(Build_Config.dataDir, "packages_installer_initrd.json"), \
Build_Config.buildThreads, Build_Config.pkgBuildType, Build_Config.pkgInfoFile, self.logger)
def packages_docker(self):
check_prerequesite["packages-docker"] = True
Builder.buildPackagesForAllSpecs(Build_Config.buildThreads, Build_Config.pkgBuildType, Build_Config.pkgInfoFile, self.logger)
def updated_packages(self):
check_prerequesite["updated-packages"] = True
constants.setRpmPath(Build_Config.updatedRpmPath)
Builder.buildPackagesForAllSpecs(Build_Config.buildThreads, Build_Config.pkgBuildType, Build_Config.pkgInfoFile, self.logger)
def check(self):
check_prerequesite["check"] = True
constants.setRPMCheck(True)
constants.setRpmCheckStopOnError(True)
Builder.buildPackagesForAllSpecs(Build_Config.buildThreads, Build_Config.pkgBuildType, Build_Config.pkgInfoFile, self.logger)
def distributed_build(): |
452f4958 |
import DistributedBuilder
if not check_prerequesite["vixdiskutil"]:
vixdiskutil()
print("Distributed Building using kubernetes ...") |
b6134858 |
with open(Build_Config.distributedBuildFile, 'r') as configFile:
distributedBuildConfig = json.load(configFile)
|
452f4958 |
DistributedBuilder.main(distributedBuildConfig) |
b6134858 |
def tool_chain_stage1(self):
from PackageManager import PackageManager
check_prerequesite["tool-chain-stage1"] = True
pkgManager = PackageManager()
pkgManager.buildToolChain()
def tool_chain_stage2(self):
from PackageManager import PackageManager
check_prerequesite["tool-chain-stage2"] = True
pkgManager = PackageManager()
pkgManager.buildToolChainPackages(Build_Config.buildThreads)
def generate_yaml_files(self):
import GenerateOSSFiles
print("Generating yaml files for packages...")
check_prerequesite["generate-yaml-files"] = True
if not check_prerequesite["check-tools"]:
CheckTools.check_tools()
if not check_prerequesite["photon-stage"]:
BuildEnvironmentSetup.photon_stage()
if not check_prerequesite["packages"]:
rpmBuildTarget = RpmBuildTarget()
rpmBuildTarget.packages()
if "generate-pkg-list" in configdict["photon-build-param"] and configdict["photon-build-param"]["generate-pkg-list"]:
GenerateOSSFiles.buildPackagesList(os.path.join(Build_Config.stagePath, "packages_list.csv"))
else:
blackListPkgs = GenerateOSSFiles.readBlackListPackages(configdict.get("additional-path", {}).get("pkg-black-list-file", ""))
logger = Logger.getLogger("GenerateYamlFiles", constants.logPath, constants.logLevel)
GenerateOSSFiles.buildSourcesList(Build_Config.stagePath, blackListPkgs, logger)
GenerateOSSFiles.buildSRPMList(constants.sourceRpmPath, Build_Config.stagePath, blackListPkgs, constants.dist, logger)
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# class CheckTools does the job of checking weather all the tools required for starting build process are present on the system +
# +
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class CheckTools:
global configdict
global check_prerequesite
def check_tools():
check_prerequesite["check-tools"] = True
CheckTools.check_bison()
CheckTools.check_gplusplus()
CheckTools.check_gawk()
CheckTools.check_repo_tool()
CheckTools.check_texinfo()
CheckTools.check_sanity()
CheckTools.check_docker()
CheckTools.check_pyopenssl()
def check_bison():
check_prerequesite["check-bison"]=True
if shutil.which("bison") is None:
raise Exception("bison not present")
def check_gplusplus():
check_prerequesite["check-gplusplus"]=True
if shutil.which('g++') is None:
raise Exception("g++ not present")
def check_gawk():
check_prerequesite["check-gawk"]=True
if shutil.which('gawk') is None:
raise Exception("gawk not present")
def check_repo_tool():
check_prerequesite["check-repotool"]=True
if shutil.which('createrepo') is None:
raise Exception("createrepo not present")
def check_texinfo():
check_prerequesite["check-texinfo"]=True
if shutil.which('makeinfo') is None:
raise Exception("texinfo not present")
def check_sanity():
check_prerequesite["check-sanity"]=True
if subprocess.Popen([curDir + "/support/sanity_check.sh"], shell=True).wait() != 0:
raise Exception("Not able to run script sanity_check.sh")
def check_docker():
check_prerequesite["check-docker"]=True
if not glob.glob(Build_Config.dockerEnv) and shutil.which('docker') is None:
raise Exception("docker not present")
def check_docker_service():
check_prerequesite["check-docker-service"]=True
if not glob.glob(Build_Config.dockerEnv) and subprocess.Popen(["docker ps >/dev/null 2>&1"], shell=True).wait() != 0:
raise Exception("Docker service is not running. Aborting.")
def check_docker_py():
check_prerequesite["check-docker-py"]=True
if not glob.glob(Build_Config.dockerEnv) and docker.__version__ < "2.3.0":
raise Exception("Error: Python3 package docker-py3 2.3.0 not installed.\nPlease use: pip3 install docker==2.3.0")
def check_pyopenssl():
check_prerequesite["check-pyopenssl"]=True
try:
import OpenSSL
except Exception as e:
raise Exception(e)
def check_spec_files(): |
25423639 |
command = ("[ -z \"$(git diff-index --name-only HEAD --)\" ] && "
"git diff --name-only @~ || git diff --name-only")
|
b6134858 |
if "base-commit" in configdict["photon-build-param"]: |
25423639 |
commit_id = str(configdict["photon-build-param"].get("base-commit"))
if commit_id:
command = 'git diff --name-only %s' % commit_id
with Popen(command, stdout=PIPE, stderr=None, shell=True) as process:
files = process.communicate()[0].decode('utf-8').splitlines()
if process.returncode:
raise Exception("Something went wrong in check_spec_files")
check_prerequesite["check-spec-files"] = True
files = [fn for fn in files if fn.endswith('.spec')]
if not files:
print("No spec files to check for now")
return
if check_specs(files):
raise Exception("Spec file check failed") |
b6134858 |
def check_kpartx():
check_prerequesite["check-kpartx"]=True
if shutil.which('kpartx') is None:
raise Exception("Package kpartx not installed. Aborting.")
|
23653512 |
def check_photon_installer():
try:
import photon_installer
except:
raise Exception("Error: Python3 package photon-installer is not installed.\nPlease use: pip3 install git+https://github.com/vmware/photon-os-installer.git")
|
b6134858 |
def start_docker():
check_prerequesite["start-docker"]=True
CheckTools.check_docker()
if subprocess.Popen(["systemctl start docker"], shell=True).wait() != 0:
raise Exception("Not able to start docker")
def install_photon_docker_image():
if not check_prerequesite["photon-docker-image"]:
BuildImage.photon_docker_image()
if subprocess.Popen("sudo docker build -t photon:tdnf .").wait() != 0:
raise Exception("Not able to install photon docker image")
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
b880a2c5 |
# class BuildImage does the job of building all the images like iso, rpi, ami, gce, azure, ova ova_uefi and ls1012afrwy... + |
b6134858 |
# It uses class ImageBuilder to build different images. +
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class BuildImage:
global configdict
global check_prerequesite
def __init__(self, imgName):
self.src_root = configdict["photon-path"]
self.generated_data_path = Build_Config.dataDir
self.stage_path = Build_Config.stagePath
self.log_path = constants.logPath
self.log_level = constants.logLevel
self.config_file = configdict["additional-path"]["conf-file"]
self.img_name = imgName
self.rpm_path = constants.rpmPath
self.srpm_path = constants.sourceRpmPath
self.pkg_to_rpm_map_file = os.path.join(Build_Config.stagePath, "pkg_info.json") |
f8fe3fcd |
self.ph_docker_image = configdict["photon-build-param"]["photon-docker-image"] |
371ab10a |
self.ova_cloud_images = ["ami", "gce", "azure", "ova_uefi", "ova"] |
09c5ccbd |
self.photon_release_version = constants.releaseVersion |
b6134858 |
def set_Iso_Parameters(self, imgName):
self.generated_data_path = Build_Config.stagePath + "/common/data"
self.src_iso_path = None
if imgName == "iso":
self.iso_path = os.path.join(Build_Config.stagePath, "photon-"+constants.releaseVersion+"-"+constants.buildNumber+".iso")
self.debug_iso_path = self.iso_path.rpartition(".")[0]+".debug.iso" |
8ebabc6c |
if 'SKIP_DEBUG_ISO' in os.environ:
self.debug_iso_path = None |
b6134858 |
if imgName == "minimal-iso":
self.iso_path = os.path.join(Build_Config.stagePath, "photon-minimal-"+constants.releaseVersion+"-"+constants.buildNumber+".iso")
self.debug_iso_path = self.iso_path.rpartition(".")[0]+".debug.iso" |
8ebabc6c |
if 'SKIP_DEBUG_ISO' in os.environ:
self.debug_iso_path = None |
b6134858 |
self.package_list_file = os.path.join(Build_Config.dataDir, "build_install_options_minimal.json")
self.pkg_to_be_copied_conf_file = os.path.join(Build_Config.generatedDataPath, "build_install_options_minimal.json") |
8ebabc6c |
|
b6134858 |
elif imgName == "rt-iso":
self.iso_path = os.path.join(Build_Config.stagePath, "photon-rt-"+constants.releaseVersion+"-"+constants.buildNumber+".iso")
self.debug_iso_path = self.iso_path.rpartition(".")[0]+".debug.iso" |
8ebabc6c |
if 'SKIP_DEBUG_ISO' in os.environ:
self.debug_iso_path = None |
b6134858 |
self.package_list_file = os.path.join(Build_Config.dataDir, "build_install_options_rt.json")
self.pkg_to_be_copied_conf_file = os.path.join(Build_Config.generatedDataPath, "build_install_options_rt.json")
else:
self.pkg_to_be_copied_conf_file = Build_Config.pkgToBeCopiedConfFile
self.package_list_file = Build_Config.packageListFile
if imgName == "src-iso":
self.iso_path = None
self.debug_iso_path = None
self.src_iso_path = os.path.join(Build_Config.stagePath, "photon-"+constants.releaseVersion+"-"+constants.buildNumber+".src.iso")
def build_iso(self):
import imagebuilder
rpmBuildTarget = RpmBuildTarget()
if not check_prerequesite["check-tools"]:
CheckTools.check_tools()
if not check_prerequesite["photon-stage"]:
BuildEnvironmentSetup.photon_stage()
if self.img_name == "iso" and not check_prerequesite["packages"]:
rpmBuildTarget.packages()
elif self.img_name == "rt-iso":
rpmBuildTarget.packages_rt()
else:
rpmBuildTarget.packages_minimal() |
1cdb6d1d |
if self.img_name in ["rt-iso", "minimal-iso"] and not check_prerequesite["packages-initrd"]: |
b6134858 |
rpmBuildTarget.packages_initrd()
if not check_prerequesite["create-repo"]:
RpmBuildTarget.create_repo()
if self.img_name != "minimal-iso" and not check_prerequesite["ostree-repo"]:
RpmBuildTarget.ostree_repo()
self.generated_data_path = Build_Config.generatedDataPath
print("Building Full ISO...")
imagebuilder.createIso(self)
def build_image(self):
import imagebuilder
if not check_prerequesite["check-kpartx"]:
CheckTools.check_kpartx() |
23653512 |
if not check_prerequesite["check-photon-installer"]:
CheckTools.check_photon_installer() |
b6134858 |
if not check_prerequesite["photon-stage"]:
BuildEnvironmentSetup.photon_stage() |
452f4958 |
local_build = not configdict['photon-build-param']['start-scheduler-server']
if not check_prerequesite["vixdiskutil"] and constants.buildArch == "x86_64" and local_build: |
b6134858 |
vixdiskutil()
rpmBuildTarget = None
if not check_prerequesite["packages"]:
rpmBuildTarget = RpmBuildTarget()
rpmBuildTarget.packages() |
452f4958 |
if not check_prerequesite["ostree-repo"] and local_build: |
b6134858 |
RpmBuildTarget.ostree_repo() |
371ab10a |
print("Building " + self.img_name + " image") |
b6134858 |
imagebuilder.createImage(self)
@staticmethod
def photon_docker_image():
if not check_prerequesite["create-repo"]:
RpmBuildTarget.create_repo()
if subprocess.Popen(["cd " + configdict["photon-path"] + ";sudo docker build --no-cache --tag photon-build " + curDir + "/support/dockerfiles/photon && sudo docker run --rm --privileged --net=host -e PHOTON_BUILD_NUMBER="+constants.buildNumber + " -e PHOTON_RELEASE_VERSION="+constants.releaseVersion + " -v "+curDir+":/workspace -v "+Build_Config.stagePath+":/workspace/stage photon-build ./support/dockerfiles/photon/make-docker-image.sh tdnf"], shell=True).wait() != 0:
raise Exception("Not able to run photon-docker-image")
def k8s_docker_images(self):
if not check_prerequesite["start-docker"]:
CheckTools.start_docker() |
faf5f260 |
if not check_prerequesite["photon_builder_image"]:
BuildEnvironmentSetup.create_photon_builder_image() |
b6134858 |
if not check_prerequesite["photon-docker-image"]:
BuildImage.photon_docker_image()
if not os.path.isdir(os.path.join(Build_Config.stagePath, "docker_images")):
os.mkdir(os.path.join(Build_Config.stagePath, "docker_images"))
os.chdir(os.path.join(curDir, 'support/dockerfiles/k8s-docker-images'))
if subprocess.Popen(['./build-k8s-base-image.sh', constants.releaseVersion, constants.buildNumber, Build_Config.stagePath]).wait() == 0 and \
subprocess.Popen(['./build-k8s-docker-images.sh', configdict["photon-build-param"]["photon-dist-tag"], constants.releaseVersion, constants.specPath, Build_Config.stagePath]).wait() == 0 and \
subprocess.Popen(['./build-k8s-metrics-server-image.sh', configdict["photon-build-param"]["photon-dist-tag"], constants.releaseVersion, constants.specPath, Build_Config.stagePath]).wait() ==0 and \
subprocess.Popen(['./build-k8s-coredns-image.sh', configdict["photon-build-param"]["photon-dist-tag"], constants.releaseVersion, constants.specPath, Build_Config.stagePath]).wait() == 0 and \
subprocess.Popen(['./build-k8s-dns-docker-images.sh', configdict["photon-build-param"]["photon-dist-tag"], constants.releaseVersion, constants.specPath, Build_Config.stagePath]).wait() == 0 and \
subprocess.Popen(['./build-k8s-dashboard-docker-images.sh', configdict["photon-build-param"]["photon-dist-tag"], constants.releaseVersion, constants.specPath, Build_Config.stagePath]).wait() == 0 and \
subprocess.Popen(['./build-flannel-docker-image.sh', configdict["photon-build-param"]["photon-dist-tag"], constants.releaseVersion, constants.specPath, Build_Config.stagePath]).wait() == 0 and \
subprocess.Popen(['./build-calico-docker-images.sh', configdict["photon-build-param"]["photon-dist-tag"], constants.releaseVersion, constants.specPath, Build_Config.stagePath]).wait() == 0 and \
subprocess.Popen(['./build-k8s-heapster-image.sh', configdict["photon-build-param"]["photon-dist-tag"], constants.releaseVersion, constants.specPath, Build_Config.stagePath]).wait() == 0 and \
subprocess.Popen(['./build-k8s-nginx-ingress.sh', configdict["photon-build-param"]["photon-dist-tag"], constants.releaseVersion, constants.specPath, Build_Config.stagePath]).wait() == 0 and \
subprocess.Popen(['./build-wavefront-proxy-docker-image.sh', configdict["photon-build-param"]["photon-dist-tag"], constants.releaseVersion, constants.specPath, Build_Config.stagePath]).wait() == 0:
print("Successfully built all the docker images")
else:
raise Exception("k8s-docker-images build failed")
os.chdir(curDir)
def all_images(self): |
371ab10a |
for img in self.ova_cloud_images: |
b6134858 |
self.img_name = img
self.build_image()
def all(self):
images = ["iso", "photon-docker-image", "k8s-docker-images", "all-images", "src-iso", "minimal-iso"]
for img in images:
self.img_name = img
self.set_Iso_Parameters(img)
if img in ["iso", "src-iso"]:
self.build_iso()
else:
configdict["targetName"] = img.replace('-', '_')
getattr(self, configdict["targetName"])()
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# initialize_constants initialize all the paths like stage Path, spec path, rpm path, and other parameters +
# used by package-builder and imagebuilder... +
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
def initialize_constants():
global configdict
global check_prerequesite
check_prerequesite["initialize-constants"]=True
Build_Config.setStagePath(os.path.join(str(PurePath(configdict["photon-path"], configdict["stage-path"])), "stage"))
constants.setSpecPath(os.path.join(str(PurePath(configdict["photon-path"], configdict["spec-path"])), "SPECS"))
Build_Config.setBuildThreads(configdict["photon-build-param"]["threads"])
Build_Config.setPkgBuildType(configdict["photon-build-param"]["photon-build-type"])
Build_Config.setPkgJsonInput(configdict.get("additional-path", {}).get("pkg-json-input", None))
constants.setLogPath(os.path.join(Build_Config.stagePath ,"LOGS"))
constants.setLogLevel(configdict["photon-build-param"]["loglevel"])
constants.setDist(configdict["photon-build-param"]["photon-dist-tag"])
constants.setBuildNumber(configdict["photon-build-param"]["input-photon-build-number"])
constants.setReleaseVersion(configdict["photon-build-param"]["photon-release-version"])
constants.setPullSourcesURL(Builder.get_baseurl(configdict["pull-sources-config"]))
constants.setRPMCheck(configdict["photon-build-param"].get("rpm-check-flag", False))
constants.setRpmCheckStopOnError(configdict["photon-build-param"].get("rpm-check-stop-on-error", False))
constants.setPublishBuildDependencies(configdict["photon-build-param"].get("publish-build-dependencies", False))
constants.setRpmPath(os.path.join(Build_Config.stagePath ,"RPMS"))
Build_Config.setRpmNoArchPath()
Build_Config.setRpmArchPath()
constants.setSourceRpmPath(os.path.join(Build_Config.stagePath ,"SRPMS"))
Build_Config.setUpdatedRpmPath(os.path.join(Build_Config.stagePath ,"UPDATED_RPMS"))
constants.setSourcePath(os.path.join(Build_Config.stagePath ,"SOURCES"))
constants.setPrevPublishRPMRepo(os.path.join(Build_Config.stagePath , "PUBLISHRPMS"))
constants.setPrevPublishXRPMRepo(os.path.join(Build_Config.stagePath , "PUBLISHXRPMS"))
Build_Config.setPkgInfoFile(os.path.join(Build_Config.stagePath ,"pkg_info.json"))
constants.setBuildRootPath(os.path.join(Build_Config.stagePath ,"photonroot"))
Build_Config.setGeneratedDataDir(os.path.join(Build_Config.stagePath ,"common/data"))
constants.setTopDirPath("/usr/src/photon")
Build_Config.setCommonDir(os.path.join(curDir ,"common"))
Build_Config.setDataDir(os.path.join(curDir, "common/data"))
constants.setInputRPMSPath(configdict.get("input-rpms-path", os.path.join(curDir,"inputRPMS")))
Build_Config.setPullPublishRPMSDir(os.path.join(curDir, "support/pullpublishrpms"))
Build_Config.setPullPublishRPMS(os.path.join(Build_Config.pullPublishRPMSDir ,"pullpublishrpms.sh"))
Build_Config.setPullPublishXRPMS(os.path.join(Build_Config.pullPublishRPMSDir ,"pullpublishXrpms.sh"))
constants.setPackageWeightsPath(os.path.join(Build_Config.dataDir ,"packageWeights.json"))
constants.setKatBuild(configdict["photon-build-param"].get("kat-build", False))
Build_Config.setConfFile(configdict["additional-path"]["conf-file"])
Build_Config.setPkgToBeCopiedConfFile(configdict.get("additional-path", {}).get("pkg-to-be-copied-conf-file")) |
452f4958 |
Build_Config.setDistributedBuildFile(os.path.join(Build_Config.dataDir, "distributed_build_options.json")) |
b6134858 |
Builder.get_packages_with_build_options(configdict['photon-build-param']['pkg-build-options'])
Build_Config.setCommonDir(PurePath(curDir, "common", "data"))
constants.setStartSchedulerServer(configdict["photon-build-param"]['start-scheduler-server']) |
38726d7e |
constants.setCompressionMacro(configdict["photon-build-param"]["compression-macro"]) |
b6134858 |
constants.initialize()
def set_default_value_of_config():
global configdict
|
83541fa2 |
configdict["pull-sources-config"] = os.path.join(curDir , "support/package-builder/sources.conf") |
b6134858 |
configdict.setdefault("additional-path", {}).setdefault("photon-cache-path", None)
configdict["photon-build-param"]["input-photon-build-number"]=subprocess.check_output(["git rev-parse --short HEAD"], shell=True).decode('ASCII').rstrip()
configdict.setdefault('additional-path', {}).setdefault('photon-sources-path', None)
configdict.setdefault('additional-path', {}).setdefault('photon-publish-rpms-path', None)
configdict.setdefault('additional-path', {}).setdefault('photon-publish-x-rpms-path', None)
configdict['photon-build-param']['pkg-build-options'] = curDir + "/common/data/" + configdict['photon-build-param']['pkg-build-options']
configdict.setdefault("additional-path", {}).setdefault("conf-file", None)
configdict.setdefault("photon-build-param", {}).setdefault("start-scheduler-server", False) |
2df05358 |
configdict.setdefault("photon-build-param", {}).setdefault("base-commit", '') |
b6134858 |
def main():
parser = ArgumentParser()
parser.add_argument("-b", "--branch", dest="photonBranch", default=None)
parser.add_argument("-c", "--config", dest="configPath", default=None)
parser.add_argument("-t", "--target", dest="targetName", default=None)
options = parser.parse_args()
if options.photonBranch is None and options.configPath is None:
raise Exception("Either specify branchName or configpath...")
if options.photonBranch is not None and not os.path.isdir(os.path.join(curDir ,"photon-" + options.photonBranch)):
CommandUtils.runCommandInShell("git clone https://github.com/vmware/photon.git -b " + options.photonBranch + " photon-" + options.photonBranch)
elif options.photonBranch is not None:
print("Using already cloned repository...")
if options.configPath is None:
options.configPath = str(PurePath(curDir, "photon-" + options.photonBranch, "config.json"))
global configdict
global check_prerequesite
with open(options.configPath) as jsonData:
configdict = json.load(jsonData)
options.configPath = os.path.abspath(options.configPath)
set_default_value_of_config()
os.environ['PHOTON_RELEASE_VER']=configdict["photon-build-param"]["photon-release-version"]
os.environ['PHOTON_BUILD_NUM']=configdict["photon-build-param"]["input-photon-build-number"]
if configdict["photon-path"] == "":
configdict["photon-path"] = os.path.dirname(options.configPath)
|
23653512 |
|
b6134858 |
if 'INPUT_PHOTON_BUILD_NUMBER' in os.environ: |
f2b2401b |
configdict["photon-build-param"]["input-photon-build-number"] = os.environ['IMPUT_PHOTON_BUILD_NUMBER'] |
b6134858 |
|
2be0754f |
if 'BASE_COMMIT' in os.environ:
configdict["photon-build-param"]["base-commit"] = os.environ['BASE_COMMIT']
|
b6134858 |
if 'THREADS' in os.environ:
configdict["photon-build-param"]["threads"] = int(os.environ['THREADS'])
if 'LOGLEVEL' in os.environ:
configdict["photon-build-param"]["loglevel"] = os.environ["LOGLEVEL"]
if 'PHOTON_PULLSOURCES_CONFIG' in os.environ:
configdict['pull-sources-config'] = os.environ['PHOTON_PULLSOURCES_CONFIG']
if 'PHOTON_CACHE_PATH' in os.environ: |
f2b2401b |
configdict['additional-path']['photon-cache-path'] = os.environ['PHOTON_CACHE_PATH'] |
2be0754f |
|
b6134858 |
if 'PHOTON_SOURCES_PATH' in os.environ: |
f2b2401b |
configdict['additional-path']['photon-sources-path'] = os.environ['PHOTON_SOURCES_PATH'] |
b6134858 |
if 'PHOTON_PUBLISH_RPMS_PATH' in os.environ: |
f2b2401b |
configdict['additional-path']['photon-publish-rpms-path'] = os.environ['PHOTON_PUBLISH_RPMS_PATH'] |
b6134858 |
if 'PHOTON_PUBLISH_XRPMS_PATH' in os.environ: |
f2b2401b |
configdict['additional-path']['photon-publish-x-rpms-path'] = os.environ['PHOTON_PUBLISH_XRPMS_PATH'] |
b6134858 |
if "PHOTON_PKG_BLACKLIST_FILE" in os.environ:
configdict["additional-path"]["pkg-black-list-file"] = os.environ["PHOTON_PKG_BLACKLIST_FILE"]
if "DISTRIBUTED_BUILD_CONFIG" in os.environ:
configdict["additional-path"]["distributed-build-option-file"] = os.environ["DISTRIBUTED_BUILD_CONFIG"] |
2be0754f |
|
b6134858 |
if 'RPMCHECK' in os.environ:
if os.environ['RPMCHECK']=="enable":
configdict['photon-build-param']['rpm-check-flag'] = True
elif os.environ['RPMCHECK']=="enable_stop_on_error": |
f6f57f24 |
configdict['photon-build-param']['rpm-check-flag'] = True |
b6134858 |
configdict['photon-build-param']["rpm-check-stop-on-error"] = True
if 'KAT_BUILD' in os.environ and os.environ['KAT_BUILD'] == "enable":
configdict['photon-build-param']['kat-build'] = True
if 'BUILDDEPS' in os.environ and os.environ['BUILDDEPS']=="True":
configdict['photon-build-param']['publish-build-dependencies'] = True
if 'PKG_BUILD_OPTIONS' in os.environ:
configdict['photon-build-param']['pkg-build-options'] = os.environ['PKG_BUILD_OPTIONS']
if 'CROSS_TARGET' in os.environ:
configdict['photon-build-param']['tarsetdefaultArch'] = os.environ['CROSS_TARGET']
if 'CONFIG' in os.environ:
configdict['additional-path']['conf-file'] = os.path.abspath(os.environ['CONFIG'])
jsonData = Utils.jsonread(os.environ['CONFIG'])
options.targetName = jsonData['image_type']
if 'IMG_NAME' in os.environ:
options.targetName = os.environ['IMG_NAME']
if 'SCHEDULER_SERVER' in os.environ and os.environ['SCHEDULER_SERVER'] == "enable":
configdict['photon-build-param']['start-scheduler-server'] = True
if 'DOCKER_ENV' in os.environ:
Build_Config.setDockerEnv(os.environ['DOCKER_ENV'])
|
1c5b1b87 |
if 'PHOTON_DOCKER_IMAGE' in os.environ:
configdict['photon-build-param']['photon-docker-image'] = os.environ['PHOTON_DOCKER_IMAGE'] |
b6134858 |
initialize_constants()
configdict["packageName"]=None
for target in targetList:
for item in targetList[target]:
check_prerequesite[item]=False
if options.targetName is None:
options.targetName = configdict["photon-build-param"]["target"]
configdict["targetName"] = options.targetName.replace('-', '_')
try:
if options.targetName in targetList["image"]:
buildImage = BuildImage(options.targetName)
if options.targetName in ["iso", "src-iso", "minimal-iso", "rt-iso"]:
buildImage.set_Iso_Parameters(options.targetName)
buildImage.build_iso() |
371ab10a |
elif options.targetName in buildImage.ova_cloud_images + ["rpi", "ls1012afrwy"]: |
b6134858 |
buildImage.build_image()
else:
attr = getattr(buildImage, configdict["targetName"])
attr()
elif options.targetName in targetList["rpmBuild"]:
attr = None
if options.targetName != "distributed-build":
rpmBuildTarget = RpmBuildTarget()
attr = getattr(rpmBuildTarget, configdict["targetName"])
else:
attr = getattr(RpmBuildTarget, configdict["targetName"])
attr()
elif options.targetName in targetList["buildEnvironment"]:
attr = getattr(BuildEnvironmentSetup, configdict["targetName"])
attr()
elif options.targetName in targetList["cleanup"]:
attr = getattr(CleanUp, configdict["targetName"])
attr()
elif options.targetName in targetList["tool-checkup"]:
if options.targetName == "check-g++":
CheckTools.check_gplusplus()
else:
attr = getattr(CheckTools, configdict["targetName"])
attr()
elif options.targetName in targetList["utilities"]:
utility = Utilities()
attr = getattr(utility, configdict["targetName"])
attr()
else:
rpmBuildTarget = RpmBuildTarget()
rpmBuildTarget.package(options.targetName)
except Exception as e:
print(e)
traceback.print_exc()
sys.exit(1)
sys.exit(0)
if __name__ == "__main__":
main() |