... | ... |
@@ -146,10 +146,14 @@ iso: check $(PHOTON_STAGE) $(PHOTON_PACKAGES) ostree-repo |
146 | 146 |
-f > \ |
147 | 147 |
$(PHOTON_LOGS_DIR)/installer.log 2>&1 |
148 | 148 |
|
149 |
-deptree: |
|
149 |
+pkgtree: |
|
150 | 150 |
@cd $(PHOTON_SPECDEPS_DIR) && \ |
151 | 151 |
$(PHOTON_SPECDEPS) -s $(PHOTON_SPECS_DIR) -i pkg -p $(pkg) |
152 | 152 |
|
153 |
+jsontree: |
|
154 |
+ @cd $(PHOTON_SPECDEPS_DIR) && \ |
|
155 |
+ $(PHOTON_SPECDEPS) -s $(PHOTON_SPECS_DIR) -i json -f $(PHOTON_DATA_DIR)/build_install_options_$(json).json |
|
156 |
+ |
|
153 | 157 |
who-needs: |
154 | 158 |
@cd $(PHOTON_SPECDEPS_DIR) && \ |
155 | 159 |
$(PHOTON_SPECDEPS) -s $(PHOTON_SPECS_DIR) -i who-needs -p $(pkg) |
... | ... |
@@ -169,12 +173,12 @@ packages: check $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTA |
169 | 169 |
-d $(PHOTON_DIST_TAG) \ |
170 | 170 |
-t ${THREADS} |
171 | 171 |
|
172 |
-build-updated-packages: check $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTAIN) generate-dep-lists |
|
172 |
+updated-packages: check $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTAIN) generate-dep-lists |
|
173 | 173 |
@echo "Building only updated RPMS..." |
174 | 174 |
@cd $(PHOTON_PKG_BUILDER_DIR) && \ |
175 | 175 |
$(PHOTON_PACKAGE_BUILDER) -o full \ |
176 | 176 |
-s $(PHOTON_SPECS_DIR) \ |
177 |
- -r $(PHOTON_RPMS_DIR) \ |
|
177 |
+ -r $(PHOTON_UPDATED_RPMS_DIR) \ |
|
178 | 178 |
-x $(PHOTON_SRCS_DIR) \ |
179 | 179 |
-b $(PHOTON_CHROOT_PATH) \ |
180 | 180 |
-l $(PHOTON_LOGS_DIR) \ |
... | ... |
@@ -252,6 +256,9 @@ $(PHOTON_STAGE): |
252 | 252 |
@echo "Building RPMS folders..." |
253 | 253 |
@test -d $(PHOTON_RPMS_DIR_NOARCH) || $(MKDIR) -p $(PHOTON_RPMS_DIR_NOARCH) |
254 | 254 |
@test -d $(PHOTON_RPMS_DIR_X86_64) || $(MKDIR) -p $(PHOTON_RPMS_DIR_X86_64) |
255 |
+ @echo "Building UPDATED_RPMS folders..." |
|
256 |
+ @test -d $(PHOTON_UPDATED_RPMS_DIR_NOARCH) || $(MKDIR) -p $(PHOTON_UPDATED_RPMS_DIR_NOARCH) |
|
257 |
+ @test -d $(PHOTON_UPDATED_RPMS_DIR_X86_64) || $(MKDIR) -p $(PHOTON_UPDATED_RPMS_DIR_X86_64) |
|
255 | 258 |
@echo "Building SOURCES folder..." |
256 | 259 |
@test -d $(PHOTON_SRCS_DIR) || $(MKDIR) -p $(PHOTON_SRCS_DIR) |
257 | 260 |
@echo "Building LOGS folder..." |
... | ... |
@@ -22,55 +22,55 @@ class SerializableSpecObject(object): |
22 | 22 |
|
23 | 23 |
class SerializedSpecObjects(object): |
24 | 24 |
|
25 |
- def __init__(self, inputDataDir, stageDir): |
|
26 |
- self.mapSerializableSpecObjects={} |
|
27 |
- self.mapPackageToSpec={} |
|
28 |
- self.jsonFilesOutPath = stageDir + "/common/data/" |
|
29 |
- self.inputDataDir = inputDataDir |
|
25 |
+ def __init__(self, inputDataDir, stageDir): |
|
26 |
+ self.mapSerializableSpecObjects={} |
|
27 |
+ self.mapPackageToSpec={} |
|
28 |
+ self.jsonFilesOutPath = stageDir + "/common/data/" |
|
29 |
+ self.inputDataDir = inputDataDir |
|
30 | 30 |
|
31 |
- def findTotalRequires(self, allDeps, depQue, parent, displayOption): |
|
32 |
- |
|
33 |
- while not depQue.empty(): |
|
34 |
- specPkg = depQue.get() |
|
35 |
- specName = self.getSpecName(specPkg) |
|
36 |
- specObj = self.mapSerializableSpecObjects[specName] |
|
37 |
- for depPkg in specObj.installRequiresPackages[specPkg]: |
|
38 |
- if True == allDeps.has_key(depPkg): |
|
39 |
- if(allDeps[depPkg] < allDeps[specPkg] + 1): |
|
31 |
+ def findTotalRequires(self, allDeps, depQue, parent, displayOption): |
|
32 |
+ while not depQue.empty(): |
|
33 |
+ specPkg = depQue.get() |
|
34 |
+ specName = self.getSpecName(specPkg) |
|
35 |
+ specObj = self.mapSerializableSpecObjects[specName] |
|
36 |
+ for depPkg in specObj.installRequiresPackages[specPkg]: |
|
37 |
+ if True == allDeps.has_key(depPkg): |
|
38 |
+ if(allDeps[depPkg] < allDeps[specPkg] + 1): |
|
39 |
+ allDeps[depPkg] = allDeps[specPkg] + 1 |
|
40 |
+ parent[depPkg] = specPkg |
|
41 |
+ self.updateLevels(allDeps, depPkg, parent, allDeps[depPkg]) |
|
42 |
+ else: |
|
40 | 43 |
allDeps[depPkg] = allDeps[specPkg] + 1 |
41 | 44 |
parent[depPkg] = specPkg |
42 |
- self.updateLevels(allDeps, depPkg, parent, allDeps[depPkg]) |
|
43 |
- else: |
|
44 |
- allDeps[depPkg] = allDeps[specPkg] + 1 |
|
45 |
- parent[depPkg] = specPkg |
|
46 |
- depQue.put(depPkg) |
|
45 |
+ depQue.put(depPkg) |
|
47 | 46 |
|
48 |
- def printTree(self, allDeps, children, curParent , depth): |
|
47 |
+ def printTree(self, allDeps, children, curParent , depth): |
|
49 | 48 |
if (children.has_key(curParent)): |
50 | 49 |
for child in children[curParent]: |
51 | 50 |
print "\t" * depth, child |
52 | 51 |
self.printTree(allDeps, children, child, depth+1) |
53 | 52 |
|
54 |
- def get_all_package_names(self, jsonFilePath): |
|
55 |
- base_path = os.path.dirname(jsonFilePath) |
|
56 |
- jsonData = open(jsonFilePath) |
|
57 |
- option_list_json = json.load(jsonData) |
|
58 |
- jsonData.close() |
|
59 |
- packages = option_list_json["packages"] |
|
60 |
- return packages |
|
53 |
+ def get_all_package_names(self, jsonFilePath): |
|
54 |
+ base_path = os.path.dirname(jsonFilePath) |
|
55 |
+ jsonData = open(jsonFilePath) |
|
56 |
+ option_list_json = json.load(jsonData) |
|
57 |
+ jsonData.close() |
|
58 |
+ packages = option_list_json["packages"] |
|
59 |
+ return packages |
|
61 | 60 |
|
62 |
- def updateLevels(self, allDeps, inPkg, parent, level): |
|
63 |
- specName = self.getSpecName(inPkg) |
|
64 |
- specObj = self.mapSerializableSpecObjects[specName] |
|
65 |
- for depPkg in specObj.installRequiresPackages[inPkg]: |
|
66 |
- if (allDeps.has_key(depPkg) and allDeps[depPkg] < level + 1): |
|
67 |
- allDeps[depPkg] = level + 1 |
|
68 |
- parent[depPkg] = inPkg |
|
61 |
+ def updateLevels(self, allDeps, inPkg, parent, level): |
|
62 |
+ specName = self.getSpecName(inPkg) |
|
63 |
+ specObj = self.mapSerializableSpecObjects[specName] |
|
64 |
+ for depPkg in specObj.installRequiresPackages[inPkg]: |
|
65 |
+ if (allDeps.has_key(depPkg) and allDeps[depPkg] < level + 1): |
|
66 |
+ allDeps[depPkg] = level + 1 |
|
67 |
+ parent[depPkg] = inPkg |
|
69 | 68 |
|
70 |
- def readSpecsAndConvertToSerializableObjects(self, specFilesPath, inputType, inputValue, displayOption): |
|
69 |
+ def readSpecsAndConvertToSerializableObjects(self, specFilesPath, inputType, inputValue, displayOption): |
|
71 | 70 |
children = {} |
72 | 71 |
listSpecFiles=[] |
73 | 72 |
whoNeedsList=[] |
73 |
+ independentRPMS=[] # list of all RPMS not built from photon and that must be blindly copied. |
|
74 | 74 |
allDeps={} |
75 | 75 |
parent={} |
76 | 76 |
depQue = Queue.Queue() |
... | ... |
@@ -92,124 +92,146 @@ class SerializedSpecObjects(object): |
92 | 92 |
specObj.securityHardening=spec.getSecurityHardeningOption() |
93 | 93 |
for specPkg in specObj.listPackages: |
94 | 94 |
specObj.installRequiresPackages[specPkg]=spec.getRequires(specPkg) |
95 |
- if( inputType == "pkg" and inputValue == specPkg): # all all the first level dependencies to a dictionary and queue |
|
96 |
- packageFound = True |
|
97 |
- for depPkg in specObj.installRequiresPackages[specPkg]: |
|
98 |
- if False == allDeps.has_key(depPkg): |
|
99 |
- allDeps[depPkg] = 0 |
|
100 |
- parent[depPkg] = "" |
|
101 |
- depQue.put(depPkg) |
|
102 |
- if (inputType == "who-needs"): |
|
103 |
- if (inputValue in specObj.installRequiresPackages[specPkg]): |
|
104 |
- whoNeedsList.append(specPkg) |
|
95 |
+ if (inputType == "pkg" and inputValue == specPkg): # all the first level dependencies to a dictionary and queue |
|
96 |
+ packageFound = True |
|
97 |
+ for depPkg in specObj.installRequiresPackages[specPkg]: |
|
98 |
+ if False == allDeps.has_key(depPkg): |
|
99 |
+ allDeps[depPkg] = 0 |
|
100 |
+ parent[depPkg] = "" |
|
101 |
+ depQue.put(depPkg) |
|
102 |
+ if (inputType == "who-needs" and (inputValue in specObj.installRequiresPackages[specPkg])): |
|
103 |
+ whoNeedsList.append(specPkg) |
|
105 | 104 |
self.mapPackageToSpec[specPkg]=specName |
106 | 105 |
self.mapSerializableSpecObjects[specName]=specObj |
106 |
+ |
|
107 |
+ # Generate dependencies for individual packages |
|
107 | 108 |
if (inputType == "pkg"): |
108 | 109 |
if (packageFound == True): |
109 | 110 |
self.findTotalRequires(allDeps, depQue, parent, displayOption) |
110 | 111 |
else: |
111 | 112 |
print "No spec file builds a package named",inputValue |
112 |
- return |
|
113 |
+ return |
|
114 |
+ |
|
115 |
+ # Generate dependencies for all packages in the given JSON input file |
|
113 | 116 |
elif (inputType == "json"): |
114 | 117 |
filePath = self.inputDataDir +"/"+ inputValue |
115 | 118 |
data = self.get_all_package_names(filePath) |
116 |
- #print data |
|
117 | 119 |
for pkg in data: |
118 | 120 |
if False == allDeps.has_key(pkg): |
119 |
- allDeps[pkg] = 0 |
|
120 |
- parent[pkg] = "" |
|
121 |
- depQue.put(pkg) |
|
122 |
- self.findTotalRequires(allDeps, depQue, parent, displayOption) |
|
121 |
+ spName = self.getSpecName(pkg) |
|
122 |
+ if(spName != None): |
|
123 |
+ allDeps[pkg] = 0 |
|
124 |
+ parent[pkg] = "" |
|
125 |
+ depQue.put(pkg) |
|
126 |
+ self.findTotalRequires(allDeps, depQue, parent, displayOption) |
|
127 |
+ else: |
|
128 |
+ independentRPMS.append(pkg); |
|
129 |
+ |
|
130 |
+ #Generating the list of packages that requires the given input package at install time |
|
123 | 131 |
elif (inputType == "who-needs"): |
124 | 132 |
print whoNeedsList |
133 |
+ return |
|
134 |
+ |
|
125 | 135 |
# construct the sorted list of all packages (sorted by dependency) |
126 | 136 |
sortedList = [] |
127 | 137 |
for elem in sorted(allDeps.items(), key=operator.itemgetter(1), reverse=True): |
128 | 138 |
sortedList.append(elem[0]) |
129 |
- # construct all children nodes |
|
139 |
+ sortedList.extend(independentRPMS) |
|
140 |
+ |
|
141 |
+ # construct all children nodes |
|
130 | 142 |
if (displayOption == "tree"): |
131 |
- #print "parent:" ,parent |
|
132 | 143 |
for k, v in parent.iteritems(): |
133 | 144 |
children.setdefault(v, []).append(k) |
134 | 145 |
if(inputType == "json"): |
135 |
- print "Dependency Mappings:\n", children |
|
146 |
+ print "Dependency Mappings for", inputValue, ":", "\n----------------------------------------------------",children |
|
147 |
+ print "----------------------------------------------------" |
|
136 | 148 |
if (children.has_key("")): |
137 | 149 |
for child in children[""]: |
138 | 150 |
print child |
139 | 151 |
self.printTree(allDeps, children, child, 1) |
152 |
+ for pkg in independentRPMS: |
|
153 |
+ print pkg |
|
154 |
+ print "******************",len(sortedList), "packages in total ******************" |
|
140 | 155 |
else: |
141 | 156 |
if (inputType == "pkg" and len(children) > 0): |
142 |
- print "cyclic dependency mappings: \n",children |
|
157 |
+ print "cyclic dependency detected, mappings: \n",children |
|
158 |
+ |
|
159 |
+ # To display a flat list of all packages |
|
143 | 160 |
elif(displayOption == "list"): |
144 | 161 |
print sortedList |
162 |
+ |
|
163 |
+ # To generate a new JSON file based on given input json file |
|
145 | 164 |
elif(displayOption == "json" and inputType == "json"): |
146 | 165 |
d = {} |
147 | 166 |
d['packages'] = sortedList |
148 | 167 |
outFilePath = self.jsonFilesOutPath + inputValue |
149 | 168 |
with open(outFilePath, 'wb') as outfile: |
150 |
- json.dump(d, outfile) |
|
169 |
+ json.dump(d, outfile) |
|
151 | 170 |
|
152 |
- def getListSpecFiles(self,listSpecFiles,path): |
|
153 |
- for dirEntry in os.listdir(path): |
|
154 |
- dirEntryPath = os.path.join(path, dirEntry) |
|
155 |
- if os.path.isfile(dirEntryPath) and dirEntryPath.endswith(".spec"): |
|
156 |
- listSpecFiles.append(dirEntryPath) |
|
157 |
- elif os.path.isdir(dirEntryPath): |
|
158 |
- self.getListSpecFiles(listSpecFiles,dirEntryPath) |
|
171 |
+ def getListSpecFiles(self,listSpecFiles,path): |
|
172 |
+ for dirEntry in os.listdir(path): |
|
173 |
+ dirEntryPath = os.path.join(path, dirEntry) |
|
174 |
+ if os.path.isfile(dirEntryPath) and dirEntryPath.endswith(".spec"): |
|
175 |
+ listSpecFiles.append(dirEntryPath) |
|
176 |
+ elif os.path.isdir(dirEntryPath): |
|
177 |
+ self.getListSpecFiles(listSpecFiles,dirEntryPath) |
|
159 | 178 |
|
160 |
- def getBuildRequiresForPackage(self, package): |
|
161 |
- specName=self.getSpecName(package) |
|
162 |
- return self.mapSerializableSpecObjects[specName].buildRequirePackages |
|
179 |
+ def getBuildRequiresForPackage(self, package): |
|
180 |
+ specName=self.getSpecName(package) |
|
181 |
+ return self.mapSerializableSpecObjects[specName].buildRequirePackages |
|
163 | 182 |
|
164 |
- def getRequiresForPackage(self, package): |
|
165 |
- specName=self.getSpecName(package) |
|
166 |
- if self.mapSerializableSpecObjects[specName].installRequiresPackages.has_key(package): |
|
167 |
- return self.mapSerializableSpecObjects[specName].installRequiresPackages[package] |
|
168 |
- return None |
|
183 |
+ def getRequiresForPackage(self, package): |
|
184 |
+ specName=self.getSpecName(package) |
|
185 |
+ if self.mapSerializableSpecObjects[specName].installRequiresPackages.has_key(package): |
|
186 |
+ return self.mapSerializableSpecObjects[specName].installRequiresPackages[package] |
|
187 |
+ return None |
|
169 | 188 |
|
170 |
- def getRelease(self, package): |
|
171 |
- specName=self.getSpecName(package) |
|
172 |
- return self.mapSerializableSpecObjects[specName].release |
|
189 |
+ def getRelease(self, package): |
|
190 |
+ specName=self.getSpecName(package) |
|
191 |
+ return self.mapSerializableSpecObjects[specName].release |
|
173 | 192 |
|
174 |
- def getVersion(self, package): |
|
175 |
- specName=self.getSpecName(package) |
|
176 |
- return self.mapSerializableSpecObjects[specName].version |
|
193 |
+ def getVersion(self, package): |
|
194 |
+ specName=self.getSpecName(package) |
|
195 |
+ return self.mapSerializableSpecObjects[specName].version |
|
177 | 196 |
|
178 |
- def getSpecFile(self, package): |
|
179 |
- specName=self.getSpecName(package) |
|
180 |
- return self.mapSerializableSpecObjects[specName].specFile |
|
197 |
+ def getSpecFile(self, package): |
|
198 |
+ specName=self.getSpecName(package) |
|
199 |
+ return self.mapSerializableSpecObjects[specName].specFile |
|
181 | 200 |
|
182 |
- def getPatches(self, package): |
|
183 |
- specName=self.getSpecName(package) |
|
184 |
- return self.mapSerializableSpecObjects[specName].listPatches |
|
201 |
+ def getPatches(self, package): |
|
202 |
+ specName=self.getSpecName(package) |
|
203 |
+ return self.mapSerializableSpecObjects[specName].listPatches |
|
185 | 204 |
|
186 |
- def getSources(self, package): |
|
187 |
- specName=self.getSpecName(package) |
|
188 |
- return self.mapSerializableSpecObjects[specName].listSources |
|
205 |
+ def getSources(self, package): |
|
206 |
+ specName=self.getSpecName(package) |
|
207 |
+ return self.mapSerializableSpecObjects[specName].listSources |
|
189 | 208 |
|
190 |
- def getPackages(self, package): |
|
191 |
- specName=self.getSpecName(package) |
|
192 |
- return self.mapSerializableSpecObjects[specName].listPackages |
|
209 |
+ def getPackages(self, package): |
|
210 |
+ specName=self.getSpecName(package) |
|
211 |
+ return self.mapSerializableSpecObjects[specName].listPackages |
|
193 | 212 |
|
194 |
- def getSpecName(self,package): |
|
195 |
- if self.mapPackageToSpec.has_key(package): |
|
196 |
- specName=self.mapPackageToSpec[package] |
|
197 |
- if self.mapSerializableSpecObjects.has_key(specName): |
|
198 |
- return specName |
|
199 |
- print "SpecDeps: Could not able to find "+package+" package from specs" |
|
200 |
- raise Exception("Invalid package:"+package) |
|
213 |
+ def getSpecName(self,package): |
|
214 |
+ if self.mapPackageToSpec.has_key(package): |
|
215 |
+ specName=self.mapPackageToSpec[package] |
|
216 |
+ if self.mapSerializableSpecObjects.has_key(specName): |
|
217 |
+ return specName |
|
218 |
+ else: |
|
219 |
+ print "SpecDeps: Could not able to find " + package + " package from specs" |
|
220 |
+ raise Exception("Invalid package:" + package) |
|
221 |
+ else: |
|
222 |
+ return None |
|
201 | 223 |
|
202 |
- def isRPMPackage(self,package): |
|
203 |
- if self.mapPackageToSpec.has_key(package): |
|
204 |
- specName=self.mapPackageToSpec[package] |
|
205 |
- if self.mapSerializableSpecObjects.has_key(specName): |
|
206 |
- return True |
|
207 |
- return False |
|
224 |
+ def isRPMPackage(self,package): |
|
225 |
+ if self.mapPackageToSpec.has_key(package): |
|
226 |
+ specName=self.mapPackageToSpec[package] |
|
227 |
+ if self.mapSerializableSpecObjects.has_key(specName): |
|
228 |
+ return True |
|
229 |
+ return False |
|
208 | 230 |
|
209 |
- def getSecurityHardeningOption(self, package): |
|
210 |
- specName=self.getSpecName(package) |
|
211 |
- return self.mapSerializableSpecObjects[specName].securityHardening |
|
231 |
+ def getSecurityHardeningOption(self, package): |
|
232 |
+ specName=self.getSpecName(package) |
|
233 |
+ return self.mapSerializableSpecObjects[specName].securityHardening |
|
212 | 234 |
|
213 |
- def getSpecDetails(self, name): |
|
214 |
- print self.mapSerializableSpecObjects[name].installRequiresAllPackages |
|
235 |
+ def getSpecDetails(self, name): |
|
236 |
+ print self.mapSerializableSpecObjects[name].installRequiresAllPackages |
|
215 | 237 |
|
... | ... |
@@ -29,30 +29,27 @@ def main(): |
29 | 29 |
parser.add_option("-a", "--input-data-dir", dest="input_data_dir", default="../../common/data/") |
30 | 30 |
(options, args) = parser.parse_args() |
31 | 31 |
|
32 |
- |
|
33 | 32 |
if(False == options.input_data_dir.endswith('/')): |
34 | 33 |
options.input_data_dir += '/' |
35 |
- |
|
36 |
- |
|
37 | 34 |
|
38 | 35 |
specDeps = SerializedSpecObjects(options.input_data_dir, options.stage_dir) |
39 | 36 |
displayOption = options.display_option |
40 | 37 |
abs_path = os.path.abspath(__file__) |
41 | 38 |
dir_name = os.path.dirname(abs_path) |
42 | 39 |
os.chdir(dir_name) |
43 |
- |
|
40 |
+ |
|
44 | 41 |
if(options.input_type == "pkg" or options.input_type == "who-needs"): # To display/print package dependencies on console |
45 | 42 |
targetName = options.pkg |
46 | 43 |
specDeps.readSpecsAndConvertToSerializableObjects(options.spec_dir, options.input_type, targetName, displayOption) |
47 |
- elif(options.input_type == "json"): |
|
48 |
- # Generate the expanded package dependencies json file based on package_list_file |
|
44 |
+ elif(options.input_type == "json"):# Generate the expanded package dependencies json file based on package_list_file |
|
49 | 45 |
json_wrapper_option_list = JsonWrapper(options.json_file) |
50 | 46 |
option_list_json = json_wrapper_option_list.read() |
51 | 47 |
options_sorted = option_list_json.items() |
52 | 48 |
for install_option in options_sorted: |
53 |
- if install_option[1]["file"] != "iso": |
|
54 |
- specDeps.readSpecsAndConvertToSerializableObjects(options.spec_dir, options.input_type, install_option[1]["file"], displayOption) |
|
55 |
- |
|
49 |
+ if displayOption == "tree" and install_option[1]["title"] == "ISO Packages": |
|
50 |
+ continue |
|
51 |
+ specDeps.readSpecsAndConvertToSerializableObjects(options.spec_dir, options.input_type, install_option[1]["file"], displayOption) |
|
52 |
+ |
|
56 | 53 |
sys.exit(0) |
57 | 54 |
|
58 | 55 |
if __name__=="__main__": |
... | ... |
@@ -21,6 +21,7 @@ MAKEROOT := $(realpath $(MAKEROOT)) |
21 | 21 |
PHOTON_STAGE?=$(SRCROOT)/stage |
22 | 22 |
PHOTON_LOGS_DIR=$(PHOTON_STAGE)/LOGS |
23 | 23 |
PHOTON_RPMS_DIR=$(PHOTON_STAGE)/RPMS |
24 |
+PHOTON_UPDATED_RPMS_DIR?=$(PHOTON_STAGE)/UPDATED_RPMS |
|
24 | 25 |
PHOTON_SPECS_DIR?=$(SRCROOT)/SPECS |
25 | 26 |
PHOTON_COMMON_DIR?=$(SRCROOT)/common |
26 | 27 |
PHOTON_DATA_DIR?=$(PHOTON_COMMON_DIR)/data |
... | ... |
@@ -44,6 +45,8 @@ PHOTON_CLOUD_IMAGE_BUILDER=$(PHOTON_CLOUD_IMAGE_BUILDER_DIR)/cloud-image-build.s |
44 | 44 |
PHOTON_CHROOT_CLEANER=$(PHOTON_PKG_BUILDER_DIR)/cleanup-build-root.sh |
45 | 45 |
PHOTON_RPMS_DIR_NOARCH=$(PHOTON_RPMS_DIR)/noarch |
46 | 46 |
PHOTON_RPMS_DIR_X86_64=$(PHOTON_RPMS_DIR)/x86_64 |
47 |
+PHOTON_UPDATED_RPMS_DIR_NOARCH?=$(PHOTON_UPDATED_RPMS_DIR)/noarch |
|
48 |
+PHOTON_UPDATED_RPMS_DIR_X86_64?=$(PHOTON_UPDATED_RPMS_DIR)/x86_64 |
|
47 | 49 |
PHOTON_PACKER_TEMPLATES=$(SRCROOT)/support/packer-templates |
48 | 50 |
|
49 | 51 |
PHOTON_CHROOT_PATH:=$(PHOTON_STAGE)/photonroot |