Browse code

Adding logic to parallel build toolchain

Divya Thaluru authored on 2015/06/04 09:41:58
Showing 14 changed files
... ...
@@ -1,13 +1,14 @@
1 1
 Summary:	The package automatically configure source code
2 2
 Name:		autoconf
3 3
 Version:	2.69
4
-Release:	1
4
+Release:	2
5 5
 License:	GPLv2
6 6
 URL:		http://www.gnu.org/software/autoconf
7 7
 Group:		System Environment/Base
8 8
 Vendor:		VMware, Inc.
9
-Distribution: Photon
10
-Source0:		http://ftp.gnu.org/gnu/autoconf/%{name}-%{version}.tar.xz
9
+Distribution: 	Photon
10
+Source0:	http://ftp.gnu.org/gnu/autoconf/%{name}-%{version}.tar.xz
11
+Requires:	perl
11 12
 %description
12 13
 The package contains programs for producing shell scripts that can
13 14
 automatically configure source code.
... ...
@@ -27,5 +28,7 @@ rm -rf %{buildroot}%{_infodir}
27 27
 %{_mandir}/*/*
28 28
 %{_datarootdir}/autoconf/*
29 29
 %changelog
30
+*	Wed Jun 3 2015 Divya Thaluru <dthaluru@vmware.com> 2.69-2
31
+-	Adding perl packages to required packages
30 32
 *	Wed Nov 5 2014 Divya Thaluru <dthaluru@vmware.com> 2.69-1
31 33
 -	Initial build.	First version
... ...
@@ -1,13 +1,14 @@
1 1
 Summary:	Programs for generating Makefiles
2 2
 Name:		automake
3 3
 Version:	1.14.1
4
-Release:	1
4
+Release:	2
5 5
 License:	GPLv2+
6 6
 URL:		http://www.gnu.org/software/automake/
7 7
 Group:		System Environment/Base
8 8
 Vendor:		VMware, Inc.
9
-Distribution: Photon
10
-Source0:		http://ftp.gnu.org/gnu/automake/%{name}-%{version}.tar.xz
9
+Distribution: 	Photon
10
+Source0:	http://ftp.gnu.org/gnu/automake/%{name}-%{version}.tar.xz
11
+BuildRequires:	autoconf
11 12
 %description
12 13
 Contains programs for generating Makefiles for use with Autoconf.
13 14
 %prep
... ...
@@ -33,5 +34,7 @@ rm -rf %{buildroot}%{_infodir}
33 33
 %{_defaultdocdir}/%{name}-%{version}/*
34 34
 %{_mandir}/*/*
35 35
 %changelog
36
+*	Wed Jun 3 2015 Divya Thaluru <dthaluru@vmware.com> 1.14.1-2
37
+-	Adding autoconf package to build time requires packages
36 38
 *	Wed Nov 5 2014 Divya Thaluru <dthaluru@vmware.com> 1.14.1-1
37 39
 -	Initial build. First version
... ...
@@ -1,13 +1,14 @@
1 1
 Summary:	Programs that show the differences between files or directories
2 2
 Name:		diffutils
3 3
 Version:	3.3
4
-Release:	1
4
+Release:	2
5 5
 License:	GPLv3+
6 6
 URL:		http://www.gnu.org/software/diffutils
7 7
 Group:		System Environment/Base
8 8
 Vendor:		VMware, Inc.
9
-Distribution: Photon
10
-Source0:		http://ftp.gnu.org/gnu/diffutils/%{name}-%{version}.tar.xz
9
+Distribution:	Photon
10
+Source0:	http://ftp.gnu.org/gnu/diffutils/%{name}-%{version}.tar.xz
11
+BuildRequires:	coreutils
11 12
 %description
12 13
 The Diffutils package contains programs that show the
13 14
 differences between files or directories.
... ...
@@ -30,5 +31,7 @@ make -k check |& tee %{_specdir}/%{name}-check-log || %{nocheck}
30 30
 %{_bindir}/*
31 31
 %{_mandir}/*/*
32 32
 %changelog
33
+*	Wed Jun 3 2015 Divya Thaluru <dthaluru@vmware.com> 3.3-2
34
+-	Adding coreutils package to build requires
33 35
 *	Wed Nov 5 2014 Divya Thaluru <dthaluru@vmware.com> 3.3-1
34 36
 -	Initial build.	First version
... ...
@@ -1,7 +1,7 @@
1 1
 Summary:	A high-level scripting language
2 2
 Name:		python2
3 3
 Version:	2.7.9
4
-Release:	1
4
+Release:	2
5 5
 License:	PSF
6 6
 URL:		http://www.python.org/
7 7
 Group:		System Environment/Programming
... ...
@@ -31,6 +31,7 @@ Requires:	sqlite-autoconf
31 31
 Requires:	expat >= 2.1.0
32 32
 Requires:	libffi >= 3.0.13
33 33
 Requires:	ncurses
34
+Requires:	coreutils
34 35
 BuildRequires:	expat >= 2.1.0
35 36
 BuildRequires:	libffi >= 3.0.13
36 37
 BuildRequires:	sqlite-autoconf
... ...
@@ -182,5 +183,7 @@ rm -rf %{buildroot}/*
182 182
 %{_bindir}/idle*
183 183
 
184 184
 %changelog
185
+*	Wed Jun 3 2015 Divya Thaluru <dthaluru@vmware.com> 2.7.9-2
186
+-	Adding coreutils package to run time required package
185 187
 *	Mon Apr 6 2015 Divya Thaluru <dthaluru@vmware.com> 2.7.9-1
186 188
 -	Initial build.	First version
... ...
@@ -1,7 +1,7 @@
1 1
 Summary:	Command-line editing and history capabilities
2 2
 Name:		readline
3 3
 Version:	6.3
4
-Release:	1
4
+Release:	2
5 5
 License:	GPLv3+
6 6
 URL:		http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html
7 7
 Group:		Applications/System
... ...
@@ -10,6 +10,7 @@ Distribution: 	Photon
10 10
 Source0:	http://ftp.gnu.org/gnu/readline/%{name}-%{version}.tar.gz
11 11
 Patch:		http://www.linuxfromscratch.org/patches/lfs/development/readline-6.3-upstream_fixes-3.patch
12 12
 BuildRequires:	ncurses-devel
13
+Requires:	ncurses
13 14
 %description
14 15
 The Readline package is a set of libraries that offers command-line
15 16
 editing and history capabilities.
... ...
@@ -92,5 +93,7 @@ rm -rf %{buildroot}%{_infodir}
92 92
 %{_libdir}/libhistory.so
93 93
 %{_libdir}/libreadline.so
94 94
 %changelog
95
+*	Wed Jun 3 2015 Divya Thaluru <dthaluru@vmware.com> 6.3-2
96
+-	Adding ncurses to run time require package
95 97
 *	Wed Oct 22 2014 Divya Thaluru <dthaluru@vmware.com> 6.3-1
96 98
 -	Initial build.	First version
... ...
@@ -1,7 +1,7 @@
1 1
 Summary:	Package manager
2 2
 Name:		rpm
3 3
 Version:	4.11.2
4
-Release:	1
4
+Release:	2
5 5
 License:	GPLv2+
6 6
 URL:		http://rpm.org
7 7
 Group:		Applications/System
... ...
@@ -13,7 +13,6 @@ Source2:	rpm-system-configuring-scripts.tar.gz
13 13
 #Requires: nspr
14 14
 Requires: 	nss
15 15
 Requires: 	popt
16
-Requires: 	perl-Module-ScanDeps
17 16
 Requires: 	lua
18 17
 Requires:	elfutils-libelf
19 18
 BuildRequires:	python2
... ...
@@ -108,5 +107,7 @@ rm -rf %{buildroot}
108 108
 %{_libdir}/librpm.so
109 109
 
110 110
 %changelog
111
+*	Wed Jun 3 2015 Divya Thaluru <dthaluru@vmware.com> 4.11.2-2
112
+-	Removing perl-module-scandeps package from run time required packages
111 113
 *	Tue Jan 13 2015 Divya Thaluru <dthaluru@vmware.com> 4.11.2-1
112 114
 -	Initial build. First version
... ...
@@ -1,14 +1,13 @@
1 1
 Summary:	Reading, writing, and converting info pages
2 2
 Name:		texinfo
3 3
 Version:	5.2
4
-Release:	1
4
+Release:	2
5 5
 License:	GPLv3+
6 6
 URL:		http://www.gnu.org/software/texinfo/
7 7
 Group:		Applications/System
8 8
 Vendor:		VMware, Inc.
9 9
 Distribution: 	Photon
10 10
 Source0:	%{name}-%{version}.tar.xz
11
-Requires:	perl-libintl
12 11
 %description
13 12
 The Texinfo package contains programs for reading, writing,
14 13
 and converting info pages.
... ...
@@ -46,5 +45,7 @@ make -k check |& tee %{_specdir}/%{name}-check-log || %{nocheck}
46 46
 %lang(pt.us-ascii) %{_datarootdir}/locale/pt.us-ascii/LC_MESSAGES/texinfo_document.mo
47 47
 %lang(pt_BR.us-ascii) %{_datarootdir}/locale/pt_BR.us-ascii/LC_MESSAGES/texinfo_document.mo
48 48
 %changelog
49
+*	Wed Jun 3 2015 Divya Thaluru <dthaluru@vmware.com> 5.2-2
50
+-	Removing perl-libintl package from run-time required packages
49 51
 *	Wed Nov 5 2014 Divya Thaluru <dthaluru@vmware.com> 5.2-1
50 52
 -	Upgrade version
... ...
@@ -21,7 +21,7 @@ class CommandUtils(object):
21 21
         if logfilePath is None:
22 22
             logfilePath=os.devnull
23 23
         logfile=open(logfilePath,"w")
24
-        process = subprocess.Popen("%s" %cmd,shell=True,stdout=logfile)
24
+        process = subprocess.Popen("%s" %cmd,shell=True,stdout=logfile,stderr=logfile)
25 25
         retval = process.wait()
26 26
         logfile.close()
27 27
         if retval==0:
... ...
@@ -20,7 +20,7 @@ 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
-    def prepareBuildRoot(self,chrootName):
23
+    def prepareBuildRoot(self,chrootName,isToolChainPackage=False):
24 24
         chrootID=None
25 25
         try:
26 26
             chrUtils = ChrootUtils(self.logName,self.logPath)
... ...
@@ -28,7 +28,10 @@ class PackageBuilder(object):
28 28
             if not returnVal:
29 29
                 raise Exception("Unable to prepare build root")
30 30
             tUtils=ToolChainUtils(self.logName,self.logPath)
31
-            tUtils.installToolChain(chrootID)
31
+            if isToolChainPackage:
32
+                tUtils.installCoreToolChainPackages(chrootID)
33
+            else:
34
+                tUtils.installToolChain(chrootID)
32 35
         except Exception as e:
33 36
             if chrootID is not None:
34 37
                 chrUtils.destroyChroot(chrootID)
... ...
@@ -58,7 +61,7 @@ class PackageBuilder(object):
58 58
                 listInstalledPackages.append(packageName)
59 59
         return listInstalledPackages
60 60
     
61
-    def buildPackageThreadAPI(self,package,outputMap, threadName):
61
+    def buildPackageThreadAPI(self,package,outputMap, threadName,):
62 62
         try:
63 63
             self.buildPackage(package)
64 64
             outputMap[threadName]=True
... ...
@@ -71,8 +74,11 @@ class PackageBuilder(object):
71 71
         chrUtils = ChrootUtils(self.logName,self.logPath)
72 72
         chrootName="build-"+package
73 73
         chrootID=None
74
+        isToolChainPackage=False
75
+        if package in constants.listToolChainPackages:
76
+            isToolChainPackage=True
74 77
         try:
75
-            chrootID = self.prepareBuildRoot(chrootName)
78
+            chrootID = self.prepareBuildRoot(chrootName,isToolChainPackage)
76 79
             destLogPath=constants.logPath+"/build-"+package
77 80
             if not os.path.isdir(destLogPath):
78 81
                 cmdUtils = CommandUtils()
... ...
@@ -118,6 +124,8 @@ class PackageBuilder(object):
118 118
             noDeps = True
119 119
         if package in self.listNodepsPackages:
120 120
             noDeps=True
121
+        if package in constants.noDepsPackageList:
122
+            noDeps=True
121 123
         pkgUtils.installRPM(package,chrootID,noDeps,destLogPath)
122 124
         listInstalledPackages.append(package)
123 125
         self.logger.info("Installed the package:"+package)
... ...
@@ -86,7 +86,7 @@ class PackageManager(object):
86 86
     def buildToolChain(self):
87 87
         try:
88 88
             tUtils=ToolChainUtils()
89
-            tUtils.buildToolChain()
89
+            tUtils.buildCoreToolChainPackages()
90 90
         except Exception as e:
91 91
             self.logger.error("Unable to build tool chain")
92 92
             self.logger.error(e)
... ...
@@ -107,32 +107,43 @@ class PackageManager(object):
107 107
         self.logger.info("Possible number of worker threads:"+str(numChroots))
108 108
         return numChroots
109 109
     
110
-    def buildPackages (self, listPackages):
111
-
110
+    def buildToolChainPackages(self):
112 111
         if not self.buildToolChain():
113 112
             return False
114
-
115
-        returnVal=self.calculateParams(listPackages)
116
-        if not returnVal:
117
-            self.logger.error("Unable to set paramaters. Terminating the package manager.")
118
-            return False
113
+        return self.buildGivenPackages(constants.listToolChainPackages)
119 114
         
120
-        statusEvent=threading.Event()
115
+    def buildPackages(self,listPackages):
116
+        if not self.buildToolChainPackages():
117
+            return False
118
+        return self.buildGivenPackages(listPackages)
119
+    
120
+    def initializeThreadPool(self,statusEvent):
121
+        ThreadPool.clear()
122
+        ThreadPool.mapPackageToCycle=self.mapPackageToCycle
123
+        ThreadPool.listAvailableCyclicPackages=self.listAvailableCyclicPackages
124
+        ThreadPool.logger=self.logger
125
+        ThreadPool.statusEvent=statusEvent
121 126
         
127
+    def initializeScheduler(self,statusEvent):
122 128
         Scheduler.setLog(self.logName, self.logPath)
123 129
         Scheduler.setParams(self.sortedPackageList, self.listOfPackagesAlreadyBuilt)
124 130
         Scheduler.setEvent(statusEvent)
131
+    
132
+    def buildGivenPackages (self, listPackages):
133
+        returnVal=self.calculateParams(listPackages)
134
+        if not returnVal:
135
+            self.logger.error("Unable to set paramaters. Terminating the package manager.")
136
+            return False
125 137
         
138
+        statusEvent=threading.Event()
126 139
         numWorkerThreads=self.calculatePossibleNumWorkerThreads()
140
+        if numWorkerThreads > 8:
141
+            numWorkerThreads = 8
127 142
         if numWorkerThreads == 0:
128 143
             return False
129 144
          
130
-        ThreadPool.clear()
131
-        ThreadPool.mapPackageToCycle=self.mapPackageToCycle
132
-        ThreadPool.listAvailableCyclicPackages=self.listAvailableCyclicPackages
133
-        ThreadPool.logger=self.logger
134
-        ThreadPool.statusEvent=statusEvent
135
-        
145
+        self.initializeScheduler(statusEvent)
146
+        self.initializeThreadPool(statusEvent)
136 147
         
137 148
         i=0
138 149
         while i < numWorkerThreads:
... ...
@@ -142,8 +153,12 @@ class PackageManager(object):
142 142
             i = i + 1
143 143
         
144 144
         statusEvent.wait()
145
-        
146 145
         Scheduler.stopScheduling=True
146
+        self.logger.info("Waiting for all remaining worker threads")
147
+        listWorkerObjs=ThreadPool.getAllWorkerObjects()
148
+        for w in listWorkerObjs:
149
+            w.join()
150
+            
147 151
         setFailFlag=False
148 152
         allPackagesBuilt=False
149 153
         
... ...
@@ -163,9 +178,4 @@ class PackageManager(object):
163 163
             else:
164 164
                 self.logger.error("Build stopped unexpectedly.Unknown error.")
165 165
         
166
-        self.logger.info("Waiting for all remaining worker threads")
167
-        listWorkerObjs=ThreadPool.getAllWorkerObjects()
168
-        for w in listWorkerObjs:
169
-            w.join()
170
-        
171 166
         self.logger.info("Terminated")
... ...
@@ -21,28 +21,6 @@ class ToolChainUtils(object):
21 21
         self.localegenConfig = "./locale-gen.conf"
22 22
         self.prepareBuildRootCmd="./prepare-build-root.sh"
23 23
         
24
-        self.listPkgsRequiredToBuildToolchain=["linux-api-headers", "glibc","glibc-devel",  "zlib","zlib-devel",  "file",
25
-            "binutils","binutils-devel",  "gmp","gmp-devel", "mpfr", "mpfr-devel", "mpc",
26
-            "libgcc","libgcc-devel","libstdc++","libstdc++-devel","libgomp","libgomp-devel","gcc",
27
-            "pkg-config", "ncurses", "bash", "bzip2", "sed","ncurses-devel","procps-ng","coreutils", "m4","grep",
28
-            "readline", "diffutils","gawk", "findutils", "gettext", "gzip","make",  "patch",
29
-            "util-linux", "tar", "xz","libtool", "flex",  "bison",
30
-            "readline-devel", "lua","lua-devel","popt","popt-devel","nspr","sqlite-autoconf","nss","nss-devel",
31
-            "bzip2-devel","elfutils-libelf","elfutils","elfutils-libelf-devel","elfutils-devel",
32
-            "expat","libffi","libpipeline", "gdbm","perl","texinfo","autoconf","automake",
33
-            "openssl","openssl-devel","python2","python2-libs","python2-devel","rpm",
34
-            "groff", "man-db", "man-pages","cpio"]
35
-
36
-        self.listPkgsToInstallToolChain=["linux-api-headers", "glibc","glibc-devel",  "zlib","zlib-devel",  "file",
37
-            "binutils","binutils-devel",  "gmp","gmp-devel", "mpfr", "mpfr-devel", "mpc",
38
-            "libgcc","libgcc-devel","libstdc++","libstdc++-devel","libgomp","libgomp-devel","gcc",
39
-            "pkg-config", "ncurses", "bash", "bzip2", "sed","procps-ng","coreutils", "m4","grep",
40
-            "readline","diffutils","gawk", "findutils", "gettext", "gzip","make",  "patch",
41
-            "util-linux", "tar", "xz","libtool", "flex",  "bison",
42
-            "lua","popt","nspr","sqlite-autoconf","nss","elfutils-libelf",
43
-            "libpipeline", "gdbm","perl","texinfo","rpm",
44
-            "autoconf","automake", "groff", "man-db", "man-pages","elfutils","cpio"]
45
-    
46 24
     def prepareChroot(self,chrootID,toolsArchive=None):
47 25
         cmdUtils=CommandUtils()
48 26
         prepareChrootCmd=self.prepareBuildRootCmd+" "+chrootID+" "+constants.specPath+" "+constants.rpmPath+" "+constants.toolsPath
... ...
@@ -60,18 +38,18 @@ class ToolChainUtils(object):
60 60
         cmdUtils.runCommandInShell("mkdir -p "+chrootID+constants.topDirPath+"/SPECS")
61 61
         self.logger.info("Successfully prepared chroot:"+chrootID)
62 62
     
63
-    def buildToolChain(self):
64
-        self.logger.info("Building Tool Chain .....")
63
+    def buildCoreToolChainPackages(self):
64
+        self.logger.info("Building core tool chain packages.....")
65 65
         chrootID=None
66 66
         chrUtils = ChrootUtils(self.logName,self.logPath)
67 67
         try:
68
-            chrootName="build-toolchain"
68
+            chrootName="build-core-toolchain"
69 69
             returnVal,chrootID = chrUtils.createChroot(chrootName)
70 70
             if not returnVal:
71 71
                 raise Exception("creating chroot failed")
72 72
             self.prepareChroot(chrootID)
73 73
             pkgUtils=PackageUtils(self.logName,self.logPath)
74
-            for package in self.listPkgsRequiredToBuildToolchain:
74
+            for package in constants.listCoreToolChainRPMPackages:
75 75
                 rpmPkg=pkgUtils.findRPMFileForGivenPackage(package)
76 76
                 if rpmPkg is None:
77 77
                     pkgUtils.buildRPMSForGivenPackage(package, chrootID)
... ...
@@ -91,7 +69,7 @@ class ToolChainUtils(object):
91 91
         self.logger.info("Installing toolchain.....")
92 92
         self.prepareChroot(chrootID,"minimal")
93 93
         pkgUtils= PackageUtils(self.logName,self.logPath)
94
-        for package in self.listPkgsToInstallToolChain:
94
+        for package in constants.listToolChainRPMPkgs:
95 95
             pkgUtils.installRPM(package, chrootID, True)
96 96
         cmdUtils=CommandUtils()
97 97
         cmdUtils.runCommandInShell("rm -rf "+ chrootID+"/tools")
... ...
@@ -111,7 +89,17 @@ class ToolChainUtils(object):
111 111
             raise Exception("Adjust tool chain script failed")
112 112
 
113 113
         
114
-        
114
+    def installCoreToolChainPackages(self,chrootID):
115
+        self.logger.info("Installing toolchain.....")
116
+        self.prepareChroot(chrootID)
117
+        pkgUtils= PackageUtils(self.logName,self.logPath)
118
+        for package in constants.listCoreToolChainRPMPackages:
119
+            pkgUtils.installRPM(package, chrootID, True)
120
+        cmdUtils=CommandUtils()
121
+        cmdUtils.runCommandInShell("rm "+ chrootID+"/"+constants.topDirPath+"/RPMS/x86_64/*")
122
+        cmdUtils.runCommandInShell("rm "+ chrootID+"/"+constants.topDirPath+"/RPMS/noarch/*")
123
+        self.logger.info("Installed core tool chain packages successfully on chroot:"+chrootID)    
124
+    
115 125
     
116 126
         
117 127
     
... ...
@@ -1,7 +1,6 @@
1 1
 from PackageBuilder import PackageBuilder
2 2
 import threading
3 3
 import Scheduler
4
-from constants import constants
5 4
 import ThreadPool
6 5
  
7 6
 class WorkerThread(threading.Thread):
... ...
@@ -13,8 +12,7 @@ class WorkerThread(threading.Thread):
13 13
         self.mapPackageToCycle=mapPackageToCycle
14 14
         self.listAvailableCyclicPackages=listAvailableCyclicPackages
15 15
         self.logger=logger
16
-    
17
-    
16
+        
18 17
     def run(self):
19 18
         buildThreadFailed=False
20 19
         ThreadPool.ThreadPool.makeWorkerThreadActive(self.name)
... ...
@@ -25,7 +23,7 @@ class WorkerThread(threading.Thread):
25 25
             if pkg is None:
26 26
                 break
27 27
             self.logger.info("Thread "+self.name+" is building package:"+ pkg)
28
-            pkgBuilder = PackageBuilder(self.mapPackageToCycle,self.listAvailableCyclicPackages,"build-"+pkg,constants.logPath)
28
+            pkgBuilder = PackageBuilder(self.mapPackageToCycle,self.listAvailableCyclicPackages,"build-"+pkg)
29 29
             t = threading.Thread(target=pkgBuilder.buildPackageThreadAPI,args=(pkg,outputMap,pkg))
30 30
             t.start()
31 31
             t.join()
... ...
@@ -66,10 +66,9 @@ def main():
66 66
     
67 67
     constants.initialize(options)
68 68
     
69
-    listPackages1=["nano","swig","wget"]
70
-
71 69
     pkgManager = PackageManager()
72 70
     pkgManager.buildPackages(listPackages)
71
+    
73 72
  
74 73
 if __name__=="__main__":
75 74
     main()
76 75
\ No newline at end of file
... ...
@@ -11,7 +11,29 @@ class constants(object):
11 11
     specData=None
12 12
     testPath="test"
13 13
     buildRootPath="/mnt"
14
+    noDepsPackageList=["texinfo","bzip2","gettext","man-db","nspr","xz","bison"]
15
+    listToolChainPackages=["linux-api-headers", "glibc","zlib", "file",
16
+        "binutils","gmp","mpfr", "mpc","gcc", "pkg-config", "ncurses", "bash", "bzip2", "sed","procps-ng","coreutils", "m4","grep",
17
+        "readline", "diffutils","gawk", "findutils", "gettext", "gzip","make",  "patch","util-linux", 
18
+        "tar", "xz","libtool", "flex",  "bison", "lua","popt","nspr","sqlite-autoconf","nss",
19
+        "elfutils", "expat","libffi","libpipeline", "gdbm","perl","texinfo","autoconf","automake",
20
+        "openssl","python2","rpm", "groff", "man-db", "man-pages","cpio"]
14 21
     
22
+    listCoreToolChainRPMPackages=["linux-api-headers", "glibc","glibc-devel",  "zlib","zlib-devel",  "file",
23
+        "binutils","binutils-devel",  "gmp","gmp-devel", "mpfr", "mpfr-devel", "mpc",
24
+        "libgcc","libgcc-devel","libstdc++","libstdc++-devel","libgomp","libgomp-devel","gcc",
25
+        "pkg-config","bash"]
26
+    
27
+    listToolChainRPMPkgs=["linux-api-headers", "glibc","glibc-devel",  "zlib","zlib-devel",  "file",
28
+        "binutils","binutils-devel",  "gmp","gmp-devel", "mpfr", "mpfr-devel", "mpc",
29
+        "libgcc","libgcc-devel","libstdc++","libstdc++-devel","libgomp","libgomp-devel","gcc",
30
+        "pkg-config", "ncurses", "bash", "bzip2", "sed","procps-ng","coreutils", "m4","grep",
31
+        "readline","diffutils","gawk", "findutils", "gettext", "gzip","make",  "patch",
32
+        "util-linux", "tar", "xz","libtool", "flex",  "bison",
33
+        "lua","popt","nspr","sqlite-autoconf","nss","elfutils-libelf",
34
+        "libpipeline", "gdbm","perl","texinfo","rpm",
35
+        "autoconf","automake", "groff", "man-db", "man-pages","elfutils","cpio"]
36
+
15 37
     
16 38
     @staticmethod
17 39
     def initialize(options):