... | ... |
@@ -1,21 +1,9 @@ |
1 |
-import subprocess |
|
2 | 1 |
from Logger import Logger |
3 | 2 |
from CommandUtils import CommandUtils |
4 |
-import os |
|
5 |
-import threading |
|
6 |
-import time |
|
7 | 3 |
from constants import constants |
8 |
- |
|
9 |
-chrootRootPath="/mnt" |
|
4 |
+import os.path |
|
10 | 5 |
|
11 | 6 |
class ChrootUtils(object): |
12 |
- counter=1 |
|
13 |
- lockForCounter=threading.Lock() |
|
14 |
- lockForTrackingChroots=threading.Lock() |
|
15 |
- lockForCreateChroot=threading.Lock() |
|
16 |
- activeChroots=[] |
|
17 |
- failureFlag=False |
|
18 |
- numChroots=1 |
|
19 | 7 |
|
20 | 8 |
def __init__(self,logName=None,logPath=None): |
21 | 9 |
if logName is None: |
... | ... |
@@ -26,124 +14,34 @@ class ChrootUtils(object): |
26 | 26 |
self.logPath=logPath |
27 | 27 |
self.logger=Logger.getLogger(logName,logPath) |
28 | 28 |
|
29 |
- def _getChrootUniqueID(self): |
|
30 |
- ChrootUtils.lockForCounter.acquire() |
|
31 |
- chrootID=chrootRootPath+"/photonroot"+str(ChrootUtils.counter) |
|
32 |
- while os.path.isdir(chrootID): |
|
33 |
- ChrootUtils.counter = ChrootUtils.counter +1 |
|
34 |
- chrootID=chrootRootPath+"/photonroot"+str(ChrootUtils.counter) |
|
35 |
- ChrootUtils.counter = ChrootUtils.counter +1 |
|
36 |
- ChrootUtils.lockForCounter.release() |
|
37 |
- return chrootID |
|
38 |
- |
|
39 |
- def updateParams(self): |
|
40 |
- process = subprocess.Popen(["df" ,chrootRootPath],shell=True,stdout=subprocess.PIPE) |
|
41 |
- retval = process.wait() |
|
42 |
- if retval != 0: |
|
43 |
- self.logger.error("Unable to check free space. Unknown error.") |
|
44 |
- return False |
|
45 |
- output = process.communicate()[0] |
|
46 |
- device, size, used, available, percent, mountpoint = output.split("\n")[1].split() |
|
47 |
- c = int(available)/600000 |
|
48 |
- ChrootUtils.numChroots=int(c) |
|
49 |
- self.logger.info("Updated number of chroots:"+str(ChrootUtils.numChroots)) |
|
50 |
- |
|
51 |
- def checkFreeSpace(self): |
|
52 |
- process = subprocess.Popen(["df" ,chrootRootPath],shell=True,stdout=subprocess.PIPE) |
|
53 |
- retval = process.wait() |
|
54 |
- if retval != 0: |
|
55 |
- self.logger.error("Unable to check free space. Unknown error.") |
|
56 |
- return False |
|
57 |
- output = process.communicate()[0] |
|
58 |
- device, size, used, available, percent, mountpoint = output.split("\n")[1].split() |
|
59 |
- if available > 600000: |
|
60 |
- self.logger.info("Free Space available "+ available) |
|
61 |
- return True |
|
62 |
- return False |
|
63 |
- |
|
64 |
- def createChroot(self): |
|
65 |
- if ChrootUtils.failureFlag: |
|
66 |
- return False |
|
67 |
- |
|
68 |
- ChrootUtils.lockForCreateChroot.acquire() |
|
69 |
- if ChrootUtils.failureFlag: |
|
70 |
- ChrootUtils.lockForCreateChroot.release() |
|
71 |
- return False |
|
72 |
- |
|
73 |
- startTime=currentTime=time.time() |
|
74 |
- timeOut=1800 |
|
75 |
- freeSpaceAvailable=False |
|
76 |
- while currentTime < startTime + timeOut: |
|
77 |
- #if self.checkFreeSpace(): |
|
78 |
- if len(ChrootUtils.activeChroots) < ChrootUtils.numChroots: |
|
79 |
- freeSpaceAvailable=True |
|
80 |
- break |
|
81 |
- time.sleep(100) |
|
82 |
- |
|
83 |
- if not freeSpaceAvailable: |
|
84 |
- self.logger.error("Unable to create chroot. No sufficient free space is available.") |
|
85 |
- ChrootUtils.lockForCreateChroot.release() |
|
86 |
- ChrootUtils.failureFlag=True |
|
87 |
- return False,None |
|
88 |
- |
|
89 |
- chrootID=self._getChrootUniqueID() |
|
29 |
+ def createChroot(self,chrootName): |
|
30 |
+ chrootID=constants.buildRootPath+"/"+chrootName |
|
31 |
+ if os.path.isdir(chrootID): |
|
32 |
+ if not self.destroyChroot(chrootID): |
|
33 |
+ self.logger.error("Given chroot "+chrootID+" is already exists. unable to destroy it ") |
|
34 |
+ return False,None |
|
90 | 35 |
# need to add timeout for this step |
91 | 36 |
# http://stackoverflow.com/questions/1191374/subprocess-with-timeout |
92 |
- process = subprocess.Popen("mkdir -p "+chrootID,shell=True,stdout=subprocess.PIPE) |
|
93 |
- retval = process.wait() |
|
94 |
- |
|
95 |
- ChrootUtils.lockForCreateChroot.release() |
|
96 |
- |
|
97 |
- if retval != 0: |
|
98 |
- self.logger.error("Unable to create chroot:"+ chrootID +".Unknown error.") |
|
99 |
- return False,None |
|
100 |
- |
|
101 |
- ChrootUtils.lockForTrackingChroots.acquire() |
|
102 |
- ChrootUtils.activeChroots.append(chrootID) |
|
103 |
- ChrootUtils.lockForTrackingChroots.release() |
|
104 |
- return True,chrootID |
|
105 |
- |
|
106 |
- def createChroot1(self,chrootID): |
|
107 |
- # need to add timeout for this step |
|
108 |
- # http://stackoverflow.com/questions/1191374/subprocess-with-timeout |
|
109 |
- process = subprocess.Popen("mkdir -p "+chrootID,shell=True,stdout=subprocess.PIPE) |
|
110 |
- retval = process.wait() |
|
111 |
- |
|
112 |
- if retval != 0: |
|
37 |
+ cmdUtils=CommandUtils() |
|
38 |
+ returnVal=cmdUtils.runCommandInShell("mkdir -p "+chrootID) |
|
39 |
+ if not returnVal: |
|
113 | 40 |
self.logger.error("Unable to create chroot:"+ chrootID +".Unknown error.") |
114 | 41 |
return False,None |
115 |
- |
|
116 | 42 |
return True,chrootID |
117 | 43 |
|
118 | 44 |
def destroyChroot(self,chrootID): |
119 |
- ''' |
|
120 |
- validChroot = True |
|
121 |
- ChrootUtils.lockForTrackingChroots.acquire() |
|
122 |
- if chrootID not in ChrootUtils.activeChroots: |
|
123 |
- validChroot = False |
|
124 |
- else: |
|
125 |
- ChrootUtils.activeChroots.remove(chrootID) |
|
126 |
- ChrootUtils.lockForTrackingChroots.release() |
|
127 |
- if not validChroot: |
|
128 |
- self.logger.error("Given chroot:"+chrootID+" is not a valid chroot. It is not created by ChrootUtils.") |
|
129 |
- return False |
|
130 |
- ''' |
|
131 | 45 |
# need to add timeout for this step |
132 | 46 |
# http://stackoverflow.com/questions/1191374/subprocess-with-timeout |
133 |
- process = subprocess.Popen("./cleanup-build-root.sh "+chrootID,shell=True,stdout=subprocess.PIPE) |
|
134 |
- retval = process.wait() |
|
135 |
- if retval != 0: |
|
47 |
+ cmdUtils=CommandUtils() |
|
48 |
+ returnVal=cmdUtils.runCommandInShell("./cleanup-build-root.sh "+chrootID) |
|
49 |
+ if not returnVal: |
|
50 |
+ self.logger.error("Unable to destroy chroot:"+ chrootID +".Unknown error.") |
|
51 |
+ return False |
|
52 |
+ |
|
53 |
+ returnVal=cmdUtils.runCommandInShell("rm -rf "+chrootID) |
|
54 |
+ if not returnVal: |
|
136 | 55 |
self.logger.error("Unable to destroy chroot:"+ chrootID +".Unknown error.") |
137 | 56 |
return False |
138 |
- cmdUtils=CommandUtils() |
|
139 |
- cmdUtils.runCommandInShell("rm -rf "+chrootID) |
|
140 | 57 |
self.logger.info("Successfully destroyed chroot:"+chrootID) |
141 | 58 |
return True |
142 |
- |
|
143 |
- def cleanUpActiveChroots(self): |
|
144 |
- ChrootUtils.lockForTrackingChroots.acquire() |
|
145 |
- listChroots=self.activeChroots[:] |
|
146 |
- ChrootUtils.lockForTrackingChroots.release() |
|
147 |
- for chrootID in listChroots: |
|
148 |
- self.destroyChroot(chrootID) |
|
149 |
- self.logger.info("Successfully destroyed all active chroots") |
|
59 |
+ |
|
150 | 60 |
\ No newline at end of file |
... | ... |
@@ -20,27 +20,11 @@ class PackageBuilder(object): |
20 | 20 |
self.listAvailableCyclicPackages = listAvailableCyclicPackages |
21 | 21 |
self.listNodepsPackages = ["glibc","gmp","zlib","file","binutils","mpfr","mpc","gcc","ncurses","util-linux","groff","perl","texinfo","rpm","openssl","go"] |
22 | 22 |
|
23 |
- #assumes tool chain is already built |
|
24 |
- def prepareBuildRoot(self): |
|
23 |
+ def prepareBuildRoot(self,chrootName): |
|
25 | 24 |
chrootID=None |
26 | 25 |
try: |
27 | 26 |
chrUtils = ChrootUtils(self.logName,self.logPath) |
28 |
- returnVal,chrootID = chrUtils.createChroot() |
|
29 |
- if not returnVal: |
|
30 |
- raise Exception("Unable to prepare build root") |
|
31 |
- tUtils=ToolChainUtils(self.logName,self.logPath) |
|
32 |
- tUtils.installToolChain(chrootID) |
|
33 |
- except Exception as e: |
|
34 |
- if chrootID is not None: |
|
35 |
- chrUtils.destroyChroot(chrootID) |
|
36 |
- raise e |
|
37 |
- return chrootID |
|
38 |
- |
|
39 |
- def prepareBuildRoot1(self,chrootID): |
|
40 |
- #chrootID=None |
|
41 |
- try: |
|
42 |
- chrUtils = ChrootUtils(self.logName,self.logPath) |
|
43 |
- returnVal,chrootID = chrUtils.createChroot1(chrootID) |
|
27 |
+ returnVal,chrootID = chrUtils.createChroot(chrootName) |
|
44 | 28 |
if not returnVal: |
45 | 29 |
raise Exception("Unable to prepare build root") |
46 | 30 |
tUtils=ToolChainUtils(self.logName,self.logPath) |
... | ... |
@@ -85,9 +69,10 @@ class PackageBuilder(object): |
85 | 85 |
def buildPackage(self,package): |
86 | 86 |
#should initialize a logger based on package name |
87 | 87 |
chrUtils = ChrootUtils(self.logName,self.logPath) |
88 |
- chrootID="build-"+package |
|
88 |
+ chrootName="build-"+package |
|
89 |
+ chrootID=None |
|
89 | 90 |
try: |
90 |
- chrootID = self.prepareBuildRoot1(chrootID) |
|
91 |
+ chrootID = self.prepareBuildRoot(chrootName) |
|
91 | 92 |
destLogPath=constants.logPath+"/build-"+package |
92 | 93 |
if not os.path.isdir(destLogPath): |
93 | 94 |
cmdUtils = CommandUtils() |
... | ... |
@@ -2,14 +2,11 @@ from PackageBuildDataGenerator import PackageBuildDataGenerator |
2 | 2 |
from Logger import Logger |
3 | 3 |
import threading |
4 | 4 |
from constants import constants |
5 |
-import time |
|
6 |
-from PackageBuilder import PackageBuilder |
|
7 | 5 |
import os |
8 | 6 |
from PackageUtils import PackageUtils |
9 | 7 |
from ToolChainUtils import ToolChainUtils |
10 | 8 |
from Scheduler import Scheduler |
11 | 9 |
from ThreadPool import ThreadPool |
12 |
-from WorkerThread import WorkerThread |
|
13 | 10 |
import subprocess |
14 | 11 |
|
15 | 12 |
class PackageManager(object): |
... | ... |
@@ -41,20 +38,6 @@ class PackageManager(object): |
41 | 41 |
return False |
42 | 42 |
return True |
43 | 43 |
|
44 |
- def getRequiredPackages(self,package): |
|
45 |
- listRequiredRPMPackages=[] |
|
46 |
- listRequiredRPMPackages.extend(constants.specData.getBuildRequiresForPackage(package)) |
|
47 |
- listRequiredRPMPackages.extend(constants.specData.getRequiresAllForPackage(package)) |
|
48 |
- |
|
49 |
- listRequiredPackages=[] |
|
50 |
- for pkg in listRequiredRPMPackages: |
|
51 |
- basePkg=constants.specData.getSpecName(pkg) |
|
52 |
- if basePkg not in listRequiredPackages: |
|
53 |
- listRequiredPackages.append(basePkg) |
|
54 |
- |
|
55 |
- return listRequiredPackages |
|
56 |
- |
|
57 |
- |
|
58 | 44 |
def readAlreadyAvailablePackages(self): |
59 | 45 |
listAvailablePackages=[] |
60 | 46 |
listRPMFiles=[] |
... | ... |
@@ -100,68 +83,6 @@ class PackageManager(object): |
100 | 100 |
|
101 | 101 |
return True |
102 | 102 |
|
103 |
- def checkIfAnyThreadsAreCompleted(self): |
|
104 |
- readyToLaunchMoreThreads = False |
|
105 |
- listThreadsObjToRemove=[] |
|
106 |
- for t in self.listThreads: |
|
107 |
- self.logger.debug("Checking thread "+t +", whether it is completed or not") |
|
108 |
- #check if any thread is completed. If completed, we can start more threads. |
|
109 |
- if self.mapOutputThread.has_key(t): |
|
110 |
- output = self.mapOutputThread[t] |
|
111 |
- self.logger.info("Output of thread "+t+" "+str(output)) |
|
112 |
- if not output: |
|
113 |
- self.logger.error("Thread "+ t+" is failed ") |
|
114 |
- self.logger.error("Unable to build package "+t) |
|
115 |
- raise Exception("Package builder failed") |
|
116 |
- else: |
|
117 |
- self.logger.debug("Still running, not completed yet") |
|
118 |
- readyToLaunchMoreThreads=True |
|
119 |
- self.listPackagesToBuild.remove(t) |
|
120 |
- self.listOfPackagesAlreadyBuilt.append(t) |
|
121 |
- listThreadsObjToRemove.append(t) |
|
122 |
- if self.mapPackageToCycle.has_key(t): |
|
123 |
- self.listAvailableCyclicPackages.append(t) |
|
124 |
- |
|
125 |
- if not readyToLaunchMoreThreads: |
|
126 |
- return False |
|
127 |
- |
|
128 |
- for k in listThreadsObjToRemove: |
|
129 |
- tObj=self.listThreads.pop(k) |
|
130 |
- if tObj.isAlive(): |
|
131 |
- self.logger.info("Thread is alive") |
|
132 |
- else: |
|
133 |
- self.logger.info("Thread is dead") |
|
134 |
- self.logger.info(tObj.isAlive()) |
|
135 |
- |
|
136 |
- return True |
|
137 |
- |
|
138 |
- #just to be safe, we have this method |
|
139 |
- def checkIfAnyThreadsAreHanged(self): |
|
140 |
- currentTime = time.time() |
|
141 |
- listThreadsHanged=[] |
|
142 |
- for t in self.listThreads: |
|
143 |
- self.logger.debug("Checking thread "+t +", whether it is hanged or not") |
|
144 |
- if not self.mapOutputThread.has_key(t): |
|
145 |
- self.logger.debug("Calculating running time for thread "+t) |
|
146 |
- launchTime = self.mapThreadsLaunchTime[t] |
|
147 |
- if (currentTime - launchTime) > 7200.0: |
|
148 |
- listThreadsHanged.append(t) |
|
149 |
- |
|
150 |
- if len(listThreadsHanged) > 0: |
|
151 |
- self.logger.info("Following threads are hanged") |
|
152 |
- self.logger.info(listThreadsHanged) |
|
153 |
- raise Exception("Threads are hanged") |
|
154 |
- |
|
155 |
- def waitTillNewThreadsCanBeSpawned(self): |
|
156 |
- if len(self.listThreads) == 0: |
|
157 |
- return |
|
158 |
- while True: |
|
159 |
- if self.checkIfAnyThreadsAreCompleted(): |
|
160 |
- break |
|
161 |
- self.checkIfAnyThreadsAreHanged() |
|
162 |
- self.logger.info("Sleeping for 10 seconds") |
|
163 |
- time.sleep(10) |
|
164 |
- |
|
165 | 103 |
def buildToolChain(self): |
166 | 104 |
try: |
167 | 105 |
tUtils=ToolChainUtils() |
... | ... |
@@ -174,7 +95,7 @@ class PackageManager(object): |
174 | 174 |
return True |
175 | 175 |
|
176 | 176 |
def calculatePossibleNumWorkerThreads(self): |
177 |
- process = subprocess.Popen(["df" ,"/mnt"],shell=True,stdout=subprocess.PIPE) |
|
177 |
+ process = subprocess.Popen(["df" ,constants.buildRootPath],shell=True,stdout=subprocess.PIPE) |
|
178 | 178 |
retval = process.wait() |
179 | 179 |
if retval != 0: |
180 | 180 |
self.logger.error("Unable to check free space. Unknown error.") |
... | ... |
@@ -183,7 +104,7 @@ class PackageManager(object): |
183 | 183 |
device, size, used, available, percent, mountpoint = output.split("\n")[1].split() |
184 | 184 |
c = int(available)/600000 |
185 | 185 |
numChroots=int(c) |
186 |
- self.logger.info("Updated number of chroots:"+str(numChroots)) |
|
186 |
+ self.logger.info("Possible number of worker threads:"+str(numChroots)) |
|
187 | 187 |
return numChroots |
188 | 188 |
|
189 | 189 |
def buildPackages (self, listPackages): |
... | ... |
@@ -211,6 +132,8 @@ class PackageManager(object): |
211 | 211 |
ThreadPool.listAvailableCyclicPackages=self.listAvailableCyclicPackages |
212 | 212 |
ThreadPool.logger=self.logger |
213 | 213 |
ThreadPool.statusEvent=statusEvent |
214 |
+ |
|
215 |
+ |
|
214 | 216 |
i=0 |
215 | 217 |
while i < numWorkerThreads: |
216 | 218 |
workerName="WorkerThread"+str(i) |
... | ... |
@@ -221,11 +144,12 @@ class PackageManager(object): |
221 | 221 |
statusEvent.wait() |
222 | 222 |
|
223 | 223 |
Scheduler.stopScheduling=True |
224 |
- |
|
225 | 224 |
setFailFlag=False |
226 | 225 |
allPackagesBuilt=False |
226 |
+ |
|
227 | 227 |
if Scheduler.isAnyPackagesFailedToBuild(): |
228 | 228 |
setFailFlag=True |
229 |
+ |
|
229 | 230 |
if Scheduler.isAllPackagesBuilt(): |
230 | 231 |
allPackagesBuilt=True |
231 | 232 |
|
... | ... |
@@ -245,87 +169,3 @@ class PackageManager(object): |
245 | 245 |
w.join() |
246 | 246 |
|
247 | 247 |
self.logger.info("Terminated") |
248 |
- |
|
249 |
- |
|
250 |
- |
|
251 |
- |
|
252 |
- |
|
253 |
- |
|
254 |
- |
|
255 |
- def buildPackages1 (self, listPackages): |
|
256 |
- |
|
257 |
- if not self.buildToolChain(): |
|
258 |
- return False |
|
259 |
- |
|
260 |
- returnVal=self.calculateParams(listPackages) |
|
261 |
- if not returnVal: |
|
262 |
- self.logger.error("Unable to set paramaters. Terminating the package manager.") |
|
263 |
- return False |
|
264 |
- |
|
265 |
- returnVal = True |
|
266 |
- try: |
|
267 |
- while len(self.listPackagesToBuild) > 0: |
|
268 |
- #Free some threads to launch next threads |
|
269 |
- self.waitTillNewThreadsCanBeSpawned() |
|
270 |
- |
|
271 |
- listOfPackagesCanBeBuild=self.findNextPackageToBuild() |
|
272 |
- if len(listOfPackagesCanBeBuild) == 0 and len(self.listPackagesToBuild) != 0: |
|
273 |
- self.logger.info("Waiting for current threads to complete to launch building new packages") |
|
274 |
- |
|
275 |
- for pkg in listOfPackagesCanBeBuild: |
|
276 |
- currentTime = time.time() |
|
277 |
- pkgBuilder = PackageBuilder(self.mapPackageToCycle,self.listAvailableCyclicPackages,"build-"+pkg,constants.logPath) |
|
278 |
- t = threading.Thread(target=pkgBuilder.buildPackageThreadAPI,args=(pkg,self.mapOutputThread,pkg)) |
|
279 |
- self.listThreads[pkg]=t |
|
280 |
- self.mapThreadsLaunchTime[pkg]=currentTime |
|
281 |
- self.logger.info("Launching thread for package:"+pkg) |
|
282 |
- t.start() |
|
283 |
- self.logger.info("Started the thread for "+pkg) |
|
284 |
- |
|
285 |
- if len(self.listThreads) == 0 and len(self.listPackagesToBuild) != 0: |
|
286 |
- self.logger.error("Following packages are waiting for unknown package") |
|
287 |
- self.logger.error(self.listPackagesToBuild) |
|
288 |
- raise Exception("Invalid Schedule order") |
|
289 |
- |
|
290 |
- self.logger.info( "Successfully built all the packages") |
|
291 |
- |
|
292 |
- except Exception as e: |
|
293 |
- self.logger.error(str(e)) |
|
294 |
- self.logger.error("Caught exception.") |
|
295 |
- self.logger.error("Failed and exited gracefully") |
|
296 |
- returnVal = False |
|
297 |
- finally: |
|
298 |
- self.waitForRemainingThreads() |
|
299 |
- return returnVal |
|
300 |
- |
|
301 |
- def waitForRemainingThreads(self): |
|
302 |
- self.logger.info("Waiting for all remaining threads to complete") |
|
303 |
- for t in self.listThreads: |
|
304 |
- self.listThreads[t].join() |
|
305 |
- return |
|
306 |
- |
|
307 |
- def findNextPackageToBuild(self): |
|
308 |
- listOfPackagesNextToBuild=[] |
|
309 |
- self.logger.info("Checking for next possible packages to build") |
|
310 |
- for pkg in self.listPackagesToBuild: |
|
311 |
- if self.listThreads.has_key(pkg): |
|
312 |
- continue |
|
313 |
- listRequiredPackages=self.getRequiredPackages(pkg) |
|
314 |
- canBuild=True |
|
315 |
- self.logger.info("Required packages for "+ pkg + " are:") |
|
316 |
- self.logger.info(listRequiredPackages) |
|
317 |
- for reqPkg in listRequiredPackages: |
|
318 |
- if reqPkg not in self.listOfPackagesAlreadyBuilt: |
|
319 |
- canBuild=False |
|
320 |
- self.logger.info(reqPkg+" is not available. So we cannot build "+ pkg +" at this moment.") |
|
321 |
- break |
|
322 |
- if canBuild: |
|
323 |
- listOfPackagesNextToBuild.append(pkg) |
|
324 |
- return listOfPackagesNextToBuild |
|
325 |
- |
|
326 |
- |
|
327 |
- |
|
328 |
- |
|
329 |
- |
|
330 |
- |
|
331 |
- |
... | ... |
@@ -4,7 +4,6 @@ from Logger import Logger |
4 | 4 |
from PackageUtils import PackageUtils |
5 | 5 |
import shutil |
6 | 6 |
from constants import constants |
7 |
-import subprocess |
|
8 | 7 |
|
9 | 8 |
class ToolChainUtils(object): |
10 | 9 |
__built_successfull=False |
... | ... |
@@ -44,14 +43,16 @@ class ToolChainUtils(object): |
44 | 44 |
"libpipeline", "gdbm","perl","texinfo","rpm", |
45 | 45 |
"autoconf","automake", "groff", "man-db", "man-pages","elfutils","cpio"] |
46 | 46 |
|
47 |
- def prepareChroot(self,chrootID,toolsArchive=""): |
|
48 |
- process = subprocess.Popen([self.prepareBuildRootCmd, chrootID, constants.specPath, constants.rpmPath, constants.toolsPath,toolsArchive]) |
|
49 |
- returnVal = process.wait() |
|
50 |
- if returnVal != 0: |
|
47 |
+ def prepareChroot(self,chrootID,toolsArchive=None): |
|
48 |
+ cmdUtils=CommandUtils() |
|
49 |
+ prepareChrootCmd=self.prepareBuildRootCmd+" "+chrootID+" "+constants.specPath+" "+constants.rpmPath+" "+constants.toolsPath |
|
50 |
+ if toolsArchive is not None: |
|
51 |
+ prepareChrootCmd=prepareChrootCmd+" "+toolsArchive |
|
52 |
+ returnVal=cmdUtils.runCommandInShell(prepareChrootCmd) |
|
53 |
+ if not returnVal: |
|
51 | 54 |
self.logger.error("Prepare build root script failed.Unable to prepare chroot.") |
52 | 55 |
raise Exception("Prepare build root script failed") |
53 | 56 |
|
54 |
- cmdUtils=CommandUtils() |
|
55 | 57 |
cmdUtils.runCommandInShell("mkdir -p "+chrootID+constants.topDirPath+"/RPMS") |
56 | 58 |
cmdUtils.runCommandInShell("mkdir -p "+chrootID+constants.topDirPath+"/RPMS/x86_64") |
57 | 59 |
cmdUtils.runCommandInShell("mkdir -p "+chrootID+constants.topDirPath+"/RPMS/noarch") |
... | ... |
@@ -64,7 +65,8 @@ class ToolChainUtils(object): |
64 | 64 |
chrootID=None |
65 | 65 |
chrUtils = ChrootUtils(self.logName,self.logPath) |
66 | 66 |
try: |
67 |
- returnVal,chrootID = chrUtils.createChroot() |
|
67 |
+ chrootName="build-toolchain" |
|
68 |
+ returnVal,chrootID = chrUtils.createChroot(chrootName) |
|
68 | 69 |
if not returnVal: |
69 | 70 |
raise Exception("creating chroot failed") |
70 | 71 |
self.prepareChroot(chrootID) |