Browse code

Merge branch 'master' of https://github.com/vmware/photon

archive authored on 2018/08/10 23:30:23
Showing 12 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,63 @@
0
+%define debug_package %{nil}
1
+
2
+Summary:        CRI tools
3
+Name:           cri-tools
4
+Version:        1.11.1
5
+Release:        1%{?dist}
6
+License:        Apache License Version 2.0
7
+URL:            https://github.com/kubernetes-incubator/cri-tools/archive/%{name}-%{version}.tar.gz
8
+Source0:        %{name}-%{version}.tar.gz
9
+%define sha1    %{name}-%{version}.tar.gz=ba8064bcac65239a9c9e0e21c7d576c6b39f4089
10
+Group:          Development/Tools
11
+Vendor:         VMware, Inc.
12
+Distribution:   Photon
13
+BuildRequires:  go
14
+
15
+%description
16
+cri-tools aims to provide a series of debugging and validation tools for Kubelet CRI, which includes:
17
+crictl: CLI for kubelet CRI.
18
+critest: validation test suites for kubelet CRI.
19
+
20
+%prep
21
+%setup -qn %{name}-%{version}
22
+
23
+%build
24
+make %{?_smp_mflags}
25
+
26
+
27
+%install
28
+rm -rf %{buildroot}
29
+mkdir -p %{buildroot}%{_datadir}/%{name}
30
+mkdir -p %{buildroot}/usr/bin
31
+mkdir -p %{buildroot}/usr/lib/.build-id
32
+mkdir -p %{buildroot}/usr/share/doc/cri-tools
33
+mkdir -p %{buildroot}/usr/share/licenses/cri-tools
34
+mkdir -p %{buildroot}/man/man1
35
+
36
+make install DESTDIR=%{buildroot}
37
+cp /usr/local/bin/crictl %{buildroot}/usr/bin
38
+cp /usr/local/bin/critest %{buildroot}/usr/bin
39
+cp CHANGELOG.md %{buildroot}/usr/share/doc/cri-tools
40
+cp LICENSE %{buildroot}/usr/share/licenses/cri-tools
41
+cp CHANGELOG.md %{buildroot}/usr/share/doc/cri-tools
42
+cp CONTRIBUTING.md %{buildroot}/usr/share/doc/cri-tools
43
+cp OWNERS %{buildroot}/usr/share/doc/cri-tools
44
+cp README.md %{buildroot}/usr/share/doc/cri-tools
45
+cp code-of-conduct.md %{buildroot}/usr/share/doc/cri-tools
46
+cp docs/validation.md %{buildroot}/usr/share/doc/cri-tools
47
+cp docs/roadmap.md %{buildroot}/usr/share/doc/cri-tools
48
+
49
+%files
50
+%defattr(-,root,root)
51
+%{_datadir}/%{name}
52
+/usr/bin
53
+/usr/share/doc/*
54
+/usr/share/licenses/*
55
+/man/man1/
56
+
57
+%clean
58
+rm -rf %{buildroot}/*
59
+
60
+%changelog
61
+*    Thu Jul 26 2018 Tapas Kundu <tkundu@vmware.com> 1.11.1-1
62
+-    Initial build added for Photon.
0 63
new file mode 100644
... ...
@@ -0,0 +1,121 @@
0
+%define debug_package %{nil}
1
+
2
+Summary:        Elastic Serch
3
+Name:           elasticsearch
4
+Version:        6.3.0
5
+Release:        1%{?dist}
6
+License:        Apache License Version 2.0
7
+URL:            https://artifacts.elastic.co/downloads/elasticsearch/%{name}-%{version}.tar.gz
8
+Source0:        %{name}-%{version}.tar.gz
9
+%define sha1    %{name}-%{version}.tar.gz=3f356bf80bd31c0107622cf7213d0ee9f43536d8
10
+Source1:        cacerts
11
+%define sha1    cacerts=f584c7c1f48c552f39acfb5560a300a657d9f3bb
12
+Group:          Development/Daemons
13
+Vendor:         VMware, Inc.
14
+Distribution:   Photon
15
+BuildRequires:  openjdk10
16
+BuildRequires:  unzip
17
+BuildRequires:  curl
18
+BuildRequires:  which
19
+BuildRequires:  git
20
+BuildRequires:  make
21
+BuildRequires:  automake
22
+BuildRequires:  autoconf
23
+BuildRequires:  libtool
24
+BuildRequires:  tar
25
+BuildRequires:  wget
26
+BuildRequires:  patch
27
+BuildRequires:  texinfo
28
+Requires(pre):  /usr/sbin/useradd /usr/sbin/groupadd
29
+Requires(postun):/usr/sbin/userdel /usr/sbin/groupdel
30
+
31
+%description
32
+Elasticsearch is a highly distributed RESTful search engine built for the cloud.
33
+
34
+%prep
35
+%setup -qn %{name}-%{version}
36
+
37
+%build
38
+export LANG="en_US.UTF-8"
39
+export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8"
40
+export JAVA_HOME=/usr/lib/jvm/OpenJDK-%{JAVA10_VERSION}
41
+export PATH=$JAVA_HOME/bin:$PATH
42
+export _JAVA_OPTIONS="-Xmx10g"
43
+cp %{SOURCE1} /usr/lib/jvm/OpenJDK-%{JAVA10_VERSION}/lib/security/
44
+./gradlew assemble
45
+
46
+%install
47
+rm -rf %{buildroot}
48
+mkdir -p %{buildroot}%{_datadir}/%{name}
49
+mkdir -p %{buildroot}/etc/%{name}
50
+mkdir -p %{buildroot}/usr/lib/sysctl.d/
51
+mkdir -p %{buildroot}/usr/lib/systemd/system/
52
+mkdir -p %{buildroot}/usr/lib/tmpfiles.d/
53
+mkdir -p %{buildroot}/etc/init.d/elasticsearch
54
+mkdir -p %{buildroot}/etc/sysconfig/elasticsearch
55
+mkdir -p %{buildroot}/var/lib/elasticsearch
56
+mkdir -p %{buildroot}/var/log/elasticsearch
57
+mkdir -p %{buildroot}/var/run/elasticsearch
58
+mkdir -p %{buildroot}%{_datadir}/%{name}/data
59
+
60
+tar -xvf distribution/archives/oss-tar/build/distributions/elasticsearch-oss-6.3.0-SNAPSHOT.tar.gz
61
+cp elasticsearch-6.3.0-SNAPSHOT/LICENSE.txt %{buildroot}%{_datadir}/%{name}/
62
+cp elasticsearch-6.3.0-SNAPSHOT/NOTICE.txt %{buildroot}%{_datadir}/%{name}/
63
+cp elasticsearch-6.3.0-SNAPSHOT/README.textile %{buildroot}%{_datadir}/%{name}/
64
+cp -r elasticsearch-6.3.0-SNAPSHOT/* %{buildroot}%{_datadir}/%{name}/
65
+cp distribution/packages/build/packaging/oss-rpm/systemd/sysctl/elasticsearch.conf %{buildroot}/usr/lib/sysctl.d/
66
+cp distribution/packages/build/packaging/oss-rpm/systemd/elasticsearch.service %{buildroot}/usr/lib/systemd/system/
67
+cp distribution/packages/build/packaging/oss-rpm/systemd/elasticsearch.conf %{buildroot}/usr/lib/tmpfiles.d/
68
+cp elasticsearch-6.3.0-SNAPSHOT/config/log4j2.properties %{buildroot}/etc/%{name}/
69
+cp elasticsearch-6.3.0-SNAPSHOT/config/jvm.options %{buildroot}/etc/%{name}/
70
+
71
+chmod 755 %{buildroot}%{_datadir}/%{name}/
72
+chmod 755 %{buildroot}/etc/%{name}/
73
+chmod 755 %{buildroot}/var/log/%{name}/
74
+chmod 755 %{buildroot}/var/lib/%{name}/
75
+chmod 755 %{buildroot}/var/run/%{name}/
76
+chmod 755 %{buildroot}%{_datadir}/%{name}/data
77
+
78
+%pre
79
+
80
+getent group elasticsearch >/dev/null || /usr/sbin/groupadd -r elasticsearch
81
+getent passwd elasticsearch >/dev/null || /usr/sbin/useradd --comment "ElasticSearch" --shell /bin/bash -M -r --groups elasticsearch --home /usr/share/elasticsearch elasticsearch
82
+
83
+
84
+%post
85
+%systemd_post elasticsearch.service
86
+
87
+%preun
88
+%systemd_preun elasticsearch.service
89
+
90
+%postun
91
+%systemd_postun_with_restart elasticsearch.service
92
+if [ $1 -eq 0 ] ; then
93
+    /usr/sbin/userdel elasticsearch
94
+    /usr/sbin/groupdel elasticsearch
95
+fi
96
+
97
+
98
+%check
99
+
100
+%clean
101
+rm -rf %{buildroot}/*
102
+
103
+%files
104
+%defattr(-,root,root)
105
+%attr(755,elasticsearch,elasticsearch) /var/log/elasticsearch
106
+%attr(755,elasticsearch,elasticsearch) /usr/share/elasticsearch/data
107
+%attr(755,elasticsearch,elasticsearch) /var/lib/elasticsearch
108
+%attr(755,elasticsearch,elasticsearch) /var/run/elasticsearch
109
+%attr(755,elasticsearch,elasticsearch) /usr/share/elasticsearch
110
+%attr(755,elasticsearch,elasticsearch) /usr/share/elasticsearch/logs
111
+%dir %{_datadir}/%{name}
112
+%{_datadir}/%{name}
113
+%attr(755,elasticsearch,elasticsearch) /etc/%{name}
114
+%attr(755,elasticsearch,elasticsearch) /usr/lib/systemd/system/elasticsearch.service
115
+%attr(755,elasticsearch,elasticsearch) /usr/lib/sysctl.d/elasticsearch.conf
116
+%attr(755,elasticsearch,elasticsearch) /usr/lib/tmpfiles.d/elasticsearch.conf
117
+
118
+%changelog
119
+*    Mon Jul 09 2018 Tapas Kundu <tkundu@vmware.com> 6.3.0-1
120
+-    Initial build added for Photon.
... ...
@@ -19,13 +19,31 @@ MongoDB (from "humongous") is a scalable, high-performance, open source, documen
19 19
 %setup -qn mongo-r%{version}
20 20
 
21 21
 %build
22
+%ifarch x86_64
22 23
 scons %{?_smp_mflags} MONGO_VERSION=%{version} \
23 24
     --disable-warnings-as-errors
25
+%endif
26
+
27
+%ifarch aarch64
28
+scons %{?_smp_mflags} MONGO_VERSION=%{version} CCFLAGS="-march=armv8-a+crc" \
29
+    --disable-warnings-as-errors
30
+%endif
31
+
32
+
24 33
 
25 34
 %install
35
+%ifarch x86_64
26 36
 scons %{?_smp_mflags} MONGO_VERSION=%{version} install \
27 37
     --prefix=%{buildroot}%{_prefix} \
28 38
     --disable-warnings-as-errors
39
+%endif
40
+
41
+%ifarch aarch64
42
+scons %{?_smp_mflags} MONGO_VERSION=%{version} CCFLAGS="-march=armv8-a+crc" install \
43
+    --prefix=%{buildroot}%{_prefix} \
44
+    --disable-warnings-as-errors
45
+%endif
46
+
29 47
 install -d %{buildroot}/var/log/%{name}
30 48
 install -d %{buildroot}/var/lib/mongo
31 49
 install -d -m 755 %{buildroot}%{_unitdir}
32 50
new file mode 100644
... ...
@@ -0,0 +1,135 @@
0
+--- a/src/newgidmap.c	2018-07-31 05:56:46.642785135 +0530
1
+@@ -46,32 +46,36 @@
2
+  */
3
+ const char *Prog;
4
+ 
5
+-static bool verify_range(struct passwd *pw, struct map_range *range)
6
++static bool verify_range(struct passwd *pw, struct map_range *range, bool *allow_setgroups)
7
+ {
8
+ 	/* An empty range is invalid */
9
+ 	if (range->count == 0)
10
+ 		return false;
11
+ 
12
+-	/* Test /etc/subgid */
13
+-	if (have_sub_gids(pw->pw_name, range->lower, range->count))
14
++	/* Test /etc/subgid. If the mapping is valid then we allow setgroups. */
15
++	if (have_sub_gids(pw->pw_name, range->lower, range->count)) {
16
++		*allow_setgroups = true;
17
+ 		return true;
18
++	}
19
+ 
20
+ 	/* Allow a process to map it's own gid */
21
+-	if ((range->count == 1) && (pw->pw_gid == range->lower))
22
++	if ((range->count == 1) && (pw->pw_gid == range->lower)) {
23
++		/* noop -- if setgroups is enabled already we won't disable it. */
24
+ 		return true;
25
++	}
26
+ 
27
+ 	return false;
28
+ }
29
+ 
30
+ static void verify_ranges(struct passwd *pw, int ranges,
31
+-	struct map_range *mappings)
32
++	struct map_range *mappings, bool *allow_setgroups)
33
+ {
34
+ 	struct map_range *mapping;
35
+ 	int idx;
36
+ 
37
+ 	mapping = mappings;
38
+ 	for (idx = 0; idx < ranges; idx++, mapping++) {
39
+-		if (!verify_range(pw, mapping)) {
40
++		if (!verify_range(pw, mapping, allow_setgroups)) {
41
+ 			fprintf(stderr, _( "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"),
42
+ 				Prog,
43
+ 				mapping->upper,
44
+@@ -83,6 +87,70 @@ static void verify_ranges(struct passwd
45
+ 	}
46
+ }
47
+ 
48
++void write_setgroups(int proc_dir_fd, bool allow_setgroups)
49
++{
50
++	int setgroups_fd;
51
++	char *policy, policy_buffer[4096];
52
++
53
++	/*
54
++	 * Default is "deny", and any "allow" will out-rank a "deny". We don't
55
++	 * forcefully write an "allow" here because the process we are writing
56
++	 * mappings for may have already set themselves to "deny" (and "allow"
57
++	 * is the default anyway). So allow_setgroups == true is a noop.
58
++	 */
59
++	policy = "deny\n";
60
++	if (allow_setgroups)
61
++		return;
62
++
63
++	setgroups_fd = openat(proc_dir_fd, "setgroups", O_RDWR|O_CLOEXEC);
64
++	if (setgroups_fd < 0) {
65
++		/*
66
++		 * If it's an ENOENT then we are on too old a kernel for the setgroups
67
++		 * code to exist. Emit a warning and bail on this.
68
++		 */
69
++		if (ENOENT == errno) {
70
++			fprintf(stderr, _("%s: kernel doesn't support setgroups restrictions\n"), Prog);
71
++			goto out;
72
++		}
73
++		fprintf(stderr, _("%s: couldn't open process setgroups: %s\n"),
74
++			Prog,
75
++			strerror(errno));
76
++		exit(EXIT_FAILURE);
77
++	}
78
++
79
++	/*
80
++	 * Check whether the policy is already what we want. /proc/self/setgroups
81
++	 * is write-once, so attempting to write after it's already written to will
82
++	 * fail.
83
++	 */
84
++	if (read(setgroups_fd, policy_buffer, sizeof(policy_buffer)) < 0) {
85
++		fprintf(stderr, _("%s: failed to read setgroups: %s\n"),
86
++			Prog,
87
++			strerror(errno));
88
++		exit(EXIT_FAILURE);
89
++	}
90
++	if (!strncmp(policy_buffer, policy, strlen(policy)))
91
++		goto out;
92
++
93
++	/* Write the policy. */
94
++	if (lseek(setgroups_fd, 0, SEEK_SET) < 0) {
95
++		fprintf(stderr, _("%s: failed to seek setgroups: %s\n"),
96
++			Prog,
97
++			strerror(errno));
98
++		exit(EXIT_FAILURE);
99
++	}
100
++	if (dprintf(setgroups_fd, "%s", policy) < 0) {
101
++		fprintf(stderr, _("%s: failed to setgroups %s policy: %s\n"),
102
++			Prog,
103
++			policy,
104
++			strerror(errno));
105
++		exit(EXIT_FAILURE);
106
++	}
107
++
108
++out:
109
++	close(setgroups_fd);
110
++}
111
++
112
+ static void usage(void)
113
+ {
114
+ 	fprintf(stderr, _("usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"), Prog);
115
+@@ -103,6 +171,7 @@ int main(int argc, char **argv)
116
+ 	struct stat st;
117
+ 	struct passwd *pw;
118
+ 	int written;
119
++	bool allow_setgroups = false;
120
+ 
121
+ 	Prog = Basename (argv[0]);
122
+ 
123
+@@ -174,8 +243,9 @@ int main(int argc, char **argv)
124
+ 	if (!mappings)
125
+ 		usage();
126
+ 
127
+-	verify_ranges(pw, ranges, mappings);
128
++	verify_ranges(pw, ranges, mappings, &allow_setgroups);
129
+ 
130
++	write_setgroups(proc_dir_fd, allow_setgroups);
131
+ 	write_mapping(proc_dir_fd, ranges, mappings, "gid_map");
132
+ 	sub_gid_close();
133
+ 
... ...
@@ -1,7 +1,7 @@
1 1
 Summary:        Programs for handling passwords in a secure way
2 2
 Name:           shadow
3 3
 Version:        4.2.1
4
-Release:        15%{?dist}
4
+Release:        16%{?dist}
5 5
 URL:            http://pkg-shadow.alioth.debian.org/
6 6
 License:        BSD
7 7
 Group:          Applications/System
... ...
@@ -23,6 +23,7 @@ Source11:       system-session
23 23
 Patch0:         chkname-allowcase.patch
24 24
 Patch1:         shadow-4.2.1-CVE-2016-6252-fix.patch
25 25
 Patch2:         shadow-4.2.1-CVE-2017-12424.patch
26
+Patch3:         shadow-4.2.1-CVE-2018-7169.patch
26 27
 BuildRequires:  cracklib
27 28
 BuildRequires:  cracklib-devel
28 29
 Requires:       cracklib
... ...
@@ -53,6 +54,7 @@ These are the additional language files of shadow.
53 53
 %patch0 -p1
54 54
 %patch1 -p1
55 55
 %patch2 -p1
56
+%patch3 -p1
56 57
 sed -i 's/groups$(EXEEXT) //' src/Makefile.in
57 58
 find man -name Makefile.in -exec sed -i 's/groups\.1 / /' {} \;
58 59
 sed -i -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD SHA512@' \
... ...
@@ -169,6 +171,8 @@ make %{?_smp_mflags} check
169 169
 %defattr(-,root,root)
170 170
 
171 171
 %changelog
172
+*   Mon Jul 30 2018 Tapas Kundu <tkundu@vmware.com> 4.2.1-16
173
+-   Added fix for CVE-2018-7169
172 174
 *   Fri Apr 20 2018 Alexey Makhalov <amakhalov@vmware.com> 4.2.1-15
173 175
 -   Move pam.d config file to here for better tracking.
174 176
 -   Add pam_loginuid module as optional in a session.
... ...
@@ -41,7 +41,7 @@ class PackageBuildDataGenerator(object):
41 41
         return list(self.__buildDependencyGraph.keys())
42 42
 
43 43
     def _createSortListForPkg(self, pkg):
44
-        runTimeDepPkgList = self.__runTimeDependencyGraph[pkg]
44
+        runTimeDepPkgList = list(set(self.__runTimeDependencyGraph[pkg]))
45 45
         runTimeDepPkgList.append(pkg)
46 46
         sortListForPkg = []
47 47
 
... ...
@@ -135,7 +135,7 @@ class PackageBuildDataGenerator(object):
135 135
             dependentRpmPackages = SPECS.getData().getBuildRequiresForPackage(basePackage)
136 136
             dependentPackages = set()
137 137
             for rpmPkg in dependentRpmPackages:
138
-                basePkg = SPECS.getData().getSpecName(rpmPkg)
138
+                basePkg = SPECS.getData().getSpecName(rpmPkg.package)
139 139
                 dependentPackages.add(basePkg)
140 140
             self.__buildDependencyGraph[basePackage] = dependentPackages
141 141
             nextPackagesToConstructGraph.update(dependentPackages)
... ...
@@ -143,10 +143,13 @@ class PackageBuildDataGenerator(object):
143 143
         if addRunTimeGraph:
144 144
             rpmPackages = SPECS.getData().getPackages(basePackage)
145 145
             dependentPackages = set()
146
+            dependentRpmPackagesNames= set()
146 147
             for rpmPkg in rpmPackages:
147 148
                 dependentRpmPackages = SPECS.getData().getRequiresAllForPackage(rpmPkg)
148
-                self.__runTimeDependencyGraph[rpmPkg] = copy.copy(dependentRpmPackages)
149
-                for pkg in dependentRpmPackages:
149
+                for pkgName in dependentRpmPackages:
150
+                    dependentRpmPackagesNames.add(pkgName.package)
151
+                self.__runTimeDependencyGraph[rpmPkg] = copy.copy(dependentRpmPackagesNames)
152
+                for pkg in dependentRpmPackagesNames:
150 153
                     dependentPackages.add(SPECS.getData().getSpecName(pkg))
151 154
             nextPackagesToConstructGraph.update(dependentPackages)
152 155
 
... ...
@@ -91,48 +91,14 @@ class PackageBuilderBase(object):
91 91
     def _findBuildTimeCheckRequiredPackages(self, index=0):
92 92
         return SPECS.getData().getCheckBuildRequiresForPackage(self.package, index)
93 93
 
94
-    def _findRunTimeRequiredRPMPackagesParseObj(self,rpmPackage):
95
-        listRequiredPackages=SPECS.getData().getRequiresParseObjForPackage(rpmPackage)
96
-        return listRequiredPackages
97
-
98
-    def _findBuildTimeRequiredPackagesParseObj(self, index):
99
-        listRequiredPackages=SPECS.getData().getBuildRequiresParseObjForPackage(self.package, index)
100
-        return listRequiredPackages
101
-
102
-    def _findBuildTimeCheckRequiredPackagesParseObj(self, index):
103
-        listRequiredPackages=SPECS.getData().getCheckBuildRequiresParseObjForPackage(self.package, index)
104
-        return listRequiredPackages
105
-
106
-    def _getProperVersion(self,package,parseSpecObj):
107
-        listOfVersionObjs=self.getSpecObj(package)
108
-        for num in listOfVersionObjs:
109
-                if parseSpecObj.compare == 'gte':
110
-                       if LooseVersion(num.version) >= LooseVersion(parseSpecObj.version):
111
-                                return num.version
112
-                elif parseSpecObj.compare == 'lte':
113
-                        if LooseVersion(num.version) <= LooseVersion(parseSpecObj.version):
114
-                                return num.version
115
-                elif parseSpecObj.compare == 'eq':
116
-                        if LooseVersion(num.version) == LooseVersion(parseSpecObj.version):
117
-                                return num.version
118
-                elif parseSpecObj.compare == 'lt':
119
-                        if LooseVersion(num.version) < LooseVersion(parseSpecObj.version):
120
-                                return num.version
121
-                elif parseSpecObj.compare == 'gt':
122
-                        if LooseVersion(num.version) > LooseVersion(parseSpecObj.version):
123
-                                return num.version
124
-        return "*"
125
-
126
-
127 94
     def _installPackage(self, pkgUtils, package,packageVersion, instanceID, destLogPath,
128 95
                         listInstalledPackages, listInstalledRPMs):
129
-        latestRPM = os.path.basename(
130
-            pkgUtils.findRPMFileForGivenPackage(package)).replace(".rpm", "")
131
-        if package in listInstalledPackages and latestRPM in listInstalledRPMs:
132
-            return
96
+        specificRPM = os.path.basename(pkgUtils.findRPMFileForGivenPackage(package,packageVersion)).replace(".rpm", "")
97
+        if package in listInstalledPackages:
98
+                return
133 99
         # mark it as installed -  to avoid cyclic recursion
134 100
         listInstalledPackages.append(package)
135
-        listInstalledRPMs.append(latestRPM)
101
+        listInstalledRPMs.append(specificRPM)
136 102
         self._installDependentRunTimePackages(pkgUtils, package, instanceID, destLogPath,
137 103
                                               listInstalledPackages, listInstalledRPMs)
138 104
         noDeps = False
... ...
@@ -148,7 +114,6 @@ class PackageBuilderBase(object):
148 148
     def _installDependentRunTimePackages(self, pkgUtils, package, instanceID, destLogPath,
149 149
                                          listInstalledPackages, listInstalledRPMs):
150 150
         listRunTimeDependentPackages = self._findRunTimeRequiredRPMPackages(package)
151
-        listRunTimeDependentPackagesParseObj=self._findRunTimeRequiredRPMPackagesParseObj(package)
152 151
         if listRunTimeDependentPackages:
153 152
             for pkg in listRunTimeDependentPackages:
154 153
                 if pkg in self.mapPackageToCycles:
... ...
@@ -157,40 +122,26 @@ class PackageBuilderBase(object):
157 157
                     pkgUtils.findRPMFileForGivenPackage(pkg)).replace(".rpm", "")
158 158
                 if pkg in listInstalledPackages and latestPkgRPM in listInstalledRPMs:
159 159
                     continue
160
-                flag = False
161
-                for objName in listRunTimeDependentPackagesParseObj:
162
-                    if objName.package == pkg:
163
-                        properVersion=self._getProperVersion(pkg,objName)
164
-                        self._installPackage(pkgUtils, pkg,properVersion, instanceID, destLogPath,listInstalledPackages, listInstalledRPMs)
165
-                        flag = True
166
-                        break;
167
-                if flag == False:
168
-                        self._installPackage(pkgUtils, pkg,"*", instanceID, destLogPath,listInstalledPackages, listInstalledRPMs)
160
+                self._installPackage(pkgUtils, pkg,"*", instanceID, destLogPath,listInstalledPackages, listInstalledRPMs)
169 161
 
170 162
     def _findDependentPackagesAndInstalledRPM(self, instanceID, index=0):
171 163
         listInstalledPackages, listInstalledRPMs = self._findInstalledPackages(instanceID)
172 164
         self.logger.info(listInstalledPackages)
173 165
         listDependentPackages = self._findBuildTimeRequiredPackages(index)
174
-        listDependentPackagesParseObj=self._findBuildTimeRequiredPackagesParseObj(index)
166
+        listTestPackages=[]
175 167
         if constants.rpmCheck and self.package in constants.testForceRPMS:
176 168
             listDependentPackages.extend(self._findBuildTimeCheckRequiredPackages(index))
177
-            listDependentPackagesParseObj.extend(self._findBuildTimeCheckRequiredPackagesParseObj(index))
178 169
             testPackages = (set(constants.listMakeCheckRPMPkgtoInstall) -
179 170
                             set(listInstalledPackages) -
180 171
                             set([self.package]))
181
-            listDependentPackages.extend(testPackages)
172
+            listTestPackages=list(set(testPackages))
182 173
             listDependentPackages = list(set(listDependentPackages))
183
-            listDependentPackagesParseObj=list(set(listDependentPackagesParseObj))
184
-        return listDependentPackages, listDependentPackagesParseObj,listInstalledPackages, listInstalledRPMs
174
+        return listDependentPackages, listTestPackages, listInstalledPackages, listInstalledRPMs
185 175
 
186 176
     @staticmethod
187 177
     def getNumOfVersions(package):
188 178
         return SPECS.getData().getNumberOfVersions(package)
189 179
 
190
-    @staticmethod
191
-    def getSpecObj(package):
192
-        return SPECS.getData().getSpecObj(package)
193
-
194 180
 class PackageBuilderContainer(PackageBuilderBase):
195 181
     def __init__(self, mapPackageToCycles, pkgBuildType):
196 182
         self.buildContainerImage = "photon_build_container:latest"
... ...
@@ -298,7 +249,7 @@ class PackageBuilderContainer(PackageBuilderBase):
298 298
                     constants.perPackageToolChain[self.package].get(platform.machine(), []),
299 299
                     self.package)
300 300
 
301
-            listDependentPackages,listDependentPackagesParseObj, listInstalledPackages, listInstalledRPMs = (
301
+            listDependentPackages, listTestPackages, listInstalledPackages, listInstalledRPMs = (
302 302
                 self._findDependentPackagesAndInstalledRPM(containerID, index))
303 303
 
304 304
             pkgUtils = PackageUtils(self.logName, self.logPath)
... ...
@@ -307,10 +258,13 @@ class PackageBuilderContainer(PackageBuilderBase):
307 307
                                  "Installing dependent packages..")
308 308
                 self.logger.info(listDependentPackages)
309 309
                 for pkg in listDependentPackages:
310
+                    properVersion=pkgUtils._getProperVersion(pkg.package,pkg)
311
+                    self._installPackage(pkgUtils, pkg.package,properVersion, containerID, destLogPath,listInstalledPackages, listInstalledRPMs)
312
+                for pkg in listTestPackages:
310 313
                     flag = False
311
-                    for objName in listDependentPackagesParseObj:
312
-                        if objName.package == pkg:
313
-                                properVersion=self._getProperVersion(pkg,objName)
314
+                    for lineContent in listDependentPackages:
315
+                        if lineContent.package == pkg:
316
+                                properVersion=pkgUtils._getProperVersion(pkg,lineContent)
314 317
                                 self._installPackage(pkgUtils, pkg,properVersion, containerID, destLogPath,listInstalledPackages, listInstalledRPMs)
315 318
                                 flag = True
316 319
                                 break;
... ...
@@ -385,7 +339,7 @@ class PackageBuilderChroot(PackageBuilderBase):
385 385
         chrootID = None
386 386
         try:
387 387
             chrootID = self._prepareBuildRoot()
388
-            listDependentPackages,listDependentPackagesParseObj, listInstalledPackages, listInstalledRPMs = (
388
+            listDependentPackages, listTestPackages, listInstalledPackages, listInstalledRPMs = (
389 389
                 self._findDependentPackagesAndInstalledRPM(chrootID, index))
390 390
 
391 391
             pkgUtils = PackageUtils(self.logName, self.logPath)
... ...
@@ -393,10 +347,13 @@ class PackageBuilderChroot(PackageBuilderBase):
393 393
             if listDependentPackages:
394 394
                 self.logger.info("Installing the build time dependent packages......")
395 395
                 for pkg in listDependentPackages:
396
+                    properVersion=pkgUtils._getProperVersion(pkg.package, pkg)
397
+                    self._installPackage(pkgUtils, pkg.package,properVersion, chrootID, self.logPath,listInstalledPackages, listInstalledRPMs)
398
+                for pkg in listTestPackages:
396 399
                     flag = False
397
-                    for objName in listDependentPackagesParseObj:
398
-                        if objName.package == pkg:
399
-                                properVersion=self._getProperVersion(pkg,objName)
400
+                    for lineContent in listDependentPackages:
401
+                        if lineContent.package == pkg:
402
+                                properVersion=pkgUtils._getProperVersion(pkg,lineContent)
400 403
                                 self._installPackage(pkgUtils, pkg,properVersion, chrootID, self.logPath,listInstalledPackages, listInstalledRPMs)
401 404
                                 flag = True
402 405
                                 break;
... ...
@@ -9,6 +9,7 @@ from Logger import Logger
9 9
 from constants import constants
10 10
 import PullSources
11 11
 from SpecData import SPECS
12
+from distutils.version import LooseVersion
12 13
 
13 14
 class PackageUtils(object):
14 15
 
... ...
@@ -431,6 +432,26 @@ class PackageUtils(object):
431 431
         rpmDestDir = rpmDir + "/" + arch
432 432
         return rpmDestDir
433 433
 
434
+    def _getProperVersion(self,package,parseSpecObj):
435
+        listOfVersionObjs=SPECS.getData().getSpecObj(package)
436
+        for num in listOfVersionObjs:
437
+                if parseSpecObj.compare == 'gte':
438
+                       if LooseVersion(num.version) >= LooseVersion(parseSpecObj.version):
439
+                                return num.version
440
+                elif parseSpecObj.compare == 'lte':
441
+                        if LooseVersion(num.version) <= LooseVersion(parseSpecObj.version):
442
+                                return num.version
443
+                elif parseSpecObj.compare == 'eq':
444
+                        if LooseVersion(num.version) == LooseVersion(parseSpecObj.version):
445
+                                return num.version
446
+                elif parseSpecObj.compare == 'lt':
447
+                        if LooseVersion(num.version) < LooseVersion(parseSpecObj.version):
448
+                                return num.version
449
+                elif parseSpecObj.compare == 'gt':
450
+                        if LooseVersion(num.version) > LooseVersion(parseSpecObj.version):
451
+                                return num.version
452
+        return "*"
453
+
434 454
     def _copyRPM(self, rpmFile, destDir):
435 455
         cmdUtils = CommandUtils()
436 456
         rpmName = os.path.basename(rpmFile)
... ...
@@ -105,7 +105,7 @@ class Scheduler(object):
105 105
         listRequiredPackages = []
106 106
 
107 107
         for pkg in listRequiredRPMPackages:
108
-            basePkg = SPECS.getData().getSpecName(pkg)
108
+            basePkg = SPECS.getData().getSpecName(pkg.package)
109 109
             if basePkg not in listRequiredPackages:
110 110
                 listRequiredPackages.append(basePkg)
111 111
 
... ...
@@ -205,7 +205,7 @@ class Scheduler(object):
205 205
         listRequiredPackages = []
206 206
 
207 207
         for pkg in listRequiredRPMPackages:
208
-            basePkg = SPECS.getData().getSpecName(pkg)
208
+            basePkg = SPECS.getData().getSpecName(pkg.package)
209 209
             if basePkg not in listRequiredPackages:
210 210
                 listRequiredPackages.append(basePkg)
211 211
 
... ...
@@ -21,9 +21,6 @@ class SpecObject(object):
21 21
         self.checkBuildRequirePackages = []
22 22
         self.installRequiresAllPackages = []
23 23
         self.installRequiresPackages = {}
24
-        self.specParseObjBuildRequirePackages = []
25
-        self.specParseObjInstallRequiresPackages=[]
26
-        self.specParseObjCheckBuildRequirePackages=[]
27 24
         self.specFile = ""
28 25
         self.listSources = []
29 26
         self.checksums = {}
... ...
@@ -50,9 +47,9 @@ class SpecObjectsUtils(object):
50 50
             specName = spec.getBasePackageName()
51 51
             specObj = SpecObject()
52 52
             specObj.name = specName
53
-            specObj.buildRequirePackages,specObj.specParseObjBuildRequirePackages = spec.getBuildRequiresAllPackages()
54
-            specObj.installRequiresAllPackages,specObj.specParseObjInstallRequiresPackages = spec.getRequiresAllPackages()
55
-            specObj.checkBuildRequirePackages,specObj.specParseObjCheckBuildRequirePackages = spec.getCheckBuildRequiresAllPackages()
53
+            specObj.buildRequirePackages = spec.getBuildRequiresAllPackages()
54
+            specObj.installRequiresAllPackages = spec.getRequiresAllPackages()
55
+            specObj.checkBuildRequirePackages = spec.getCheckBuildRequiresAllPackages()
56 56
             specObj.listPackages = spec.getPackageNames()
57 57
             specObj.specFile = specFile
58 58
             specObj.version = spec.getVersion()
... ...
@@ -110,22 +107,18 @@ class SpecObjectsUtils(object):
110 110
         specName = self.getSpecName(package)
111 111
         return self.mapSpecObjects[specName][index].checkBuildRequirePackages
112 112
 
113
-    def getBuildRequiresParseObjForPackage(self, package, index=0):
114
-        specName=self.getSpecName(package)
115
-        return self.mapSpecObjects[specName][index].specParseObjBuildRequirePackages
116
-
117
-    def getRequiresParseObjForPackage(self, package, index=0):
118
-        specName=self.getSpecName(package)
119
-        return self.mapSpecObjects[specName][index].specParseObjInstallRequiresPackages
120
-
121
-    def getCheckBuildRequiresParseObjForPackage(self, package, index=0):
122
-        specName=self.getSpecName(package)
123
-        return self.mapSpecObjects[specName][index].specParseObjCheckBuildRequirePackages
124
-
125 113
     def getSpecObj(self, package):
126 114
         specName=self.getSpecName(package)
127 115
         return self.mapSpecObjects[specName]
128 116
 
117
+    def getPkgNamesFromObj(self, objlist):
118
+        listPkgName=[]
119
+        listPkgNames=list(set(objlist))
120
+        for name in listPkgNames:
121
+                listPkgName.append(name.package)
122
+        listPkgName=list(set(listPkgName))
123
+        return listPkgName
124
+
129 125
     def getRelease(self, package, index=0):
130 126
         specName = self.getSpecName(package)
131 127
         return self.mapSpecObjects[specName][index].release
... ...
@@ -225,11 +218,11 @@ class SpecObjectsUtils(object):
225 225
             self.logger.info(" ")
226 226
             self.logger.info(" ")
227 227
             self.logger.info("Build require packages")
228
-            self.logger.info(specObj.buildRequirePackages)
228
+            self.logger.info(self.getPkgNamesFromObj(specObj.buildRequirePackages))
229 229
             self.logger.info(" ")
230 230
             self.logger.info(" ")
231 231
             self.logger.info("install require packages")
232
-            self.logger.info(specObj.installRequiresAllPackages)
232
+            self.logger.info(self.getPkgNamesFromObj(specObj.installRequiresAllPackages))
233 233
             self.logger.info(" ")
234 234
             self.logger.info(specObj.installRequiresPackages)
235 235
             self.logger.info("security_hardening: " + specObj.securityHardening)
... ...
@@ -265,6 +258,19 @@ class SPECS(object):
265 265
         java8version = spec.getVersion()
266 266
         constants.addMacro("JAVA8_VERSION", java8version)
267 267
 
268
+        # adding openjre9 version rpm macro
269
+        if platform.machine() == "x86_64":
270
+            spec = Specutils(constants.specPath + "/openjdk9/openjdk9.spec")
271
+            java9version = spec.getVersion()
272
+            constants.addMacro("JAVA9_VERSION", java9version)
273
+
274
+
275
+        # adding openjre10 version rpm macro
276
+        if platform.machine() == "x86_64":
277
+            spec = Specutils(constants.specPath + "/openjdk10/openjdk10.spec")
278
+            java10version = spec.getVersion()
279
+            constants.addMacro("JAVA10_VERSION", java10version)
280
+
268 281
         # adding kernelversion rpm macro
269 282
         spec = Specutils(constants.specPath + "/linux/linux.spec")
270 283
         kernelversion = spec.getVersion()
... ...
@@ -92,52 +92,39 @@ class Specutils(object):
92 92
 
93 93
     def getRequiresAllPackages(self):
94 94
         dependentPackages = []
95
-        specParseObjDependentPackages=[]
96 95
         for pkg in self.spec.packages.values():
97 96
             for dpkg in pkg.requires:
98
-                dependentPackages.append(dpkg.package)
99
-                specParseObjDependentPackages.append(dpkg)
100
-        dependentPackages = list(set(dependentPackages))
101
-        specParseObjDependentPackages = list(set(specParseObjDependentPackages))
102
-        specParseObjDependentPackagesTemp = specParseObjDependentPackages[:]
97
+                dependentPackages.append(dpkg)
98
+        listDependentPackages = list(set(dependentPackages))
103 99
         packageNames = self.getPackageNames()
104 100
         for pkgName in packageNames:
105
-            if pkgName in dependentPackages:
106
-                dependentPackages.remove(pkgName)
107
-            for objName in specParseObjDependentPackagesTemp:
101
+            for objName in listDependentPackages:
108 102
                 if objName.package == pkgName:
109
-                        specParseObjDependentPackages.remove(objName)
110
-        return dependentPackages,specParseObjDependentPackages
103
+                        dependentPackages.remove(objName)
104
+        dependentPackages = list(set(dependentPackages))
105
+        return dependentPackages
111 106
 
112 107
     def getBuildRequiresAllPackages(self):
113 108
         dependentPackages = []
114
-        specParseObjDependentPackages=[]
115 109
         for pkg in self.spec.packages.values():
116 110
             for dpkg in pkg.buildrequires:
117
-                dependentPackages.append(dpkg.package)
118
-                specParseObjDependentPackages.append(dpkg)
119
-        dependentPackages = list(set(dependentPackages))
120
-        specParseObjDependentPackages = list(set(specParseObjDependentPackages))
121
-        specParseObjDependentPackagesTemp = specParseObjDependentPackages[:]
111
+                dependentPackages.append(dpkg)
112
+        listDependentPackages = list(set(dependentPackages))
122 113
         packageNames = self.getPackageNames()
123 114
         for pkgName in packageNames:
124
-            if pkgName in dependentPackages:
125
-                dependentPackages.remove(pkgName)
126
-            for objName in specParseObjDependentPackagesTemp:
115
+            for objName in listDependentPackages:
127 116
                 if objName.package == pkgName:
128
-                        specParseObjDependentPackages.remove(objName)
129
-        return dependentPackages,specParseObjDependentPackages
117
+                        dependentPackages.remove(objName)
118
+        dependentPackages = list(set(dependentPackages))
119
+        return dependentPackages
130 120
 
131 121
     def getCheckBuildRequiresAllPackages(self):
132 122
         dependentPackages = []
133
-        specParseObjDependentPackages=[]
134 123
         for pkg in self.spec.packages.values():
135 124
             for dpkg in pkg.checkbuildrequires:
136
-                dependentPackages.append(dpkg.package)
137
-                specParseObjDependentPackages.append(dpkg)
125
+                dependentPackages.append(dpkg)
138 126
         dependentPackages = list(set(dependentPackages))
139
-        specParseObjDependentPackages = list(set(specParseObjDependentPackages))
140
-        return dependentPackages,specParseObjDependentPackages
127
+        return dependentPackages
141 128
 
142 129
     def getRequires(self, pkgName):
143 130
         dependentPackages = []
... ...
@@ -196,8 +183,8 @@ def main():
196 196
     print("requires {}".format(spec.getRequires('libtool')))
197 197
 
198 198
     print("provides {}".format(spec.getProvides('libtool')))
199
-    print("all-requires {}".format(spec.getRequiresAllPackages()))
200
-    print("all-build-requires {}".format(spec.getBuildRequiresAllPackages()))
199
+    print("all-requires {}".format(spec.getPkgNamesFromObj(spec.getRequiresAllPackages())))
200
+    print("all-build-requires {}".format(spec.getPkgNamesFromObj(spec.getBuildRequiresAllPackages())))
201 201
 
202 202
 if __name__ == '__main__':
203 203
     main()
... ...
@@ -7,6 +7,7 @@ from ChrootUtils import ChrootUtils
7 7
 from Logger import Logger
8 8
 from PackageUtils import PackageUtils
9 9
 from constants import constants
10
+from SpecData import SPECS
10 11
 
11 12
 class ToolChainUtils(object):
12 13
 
... ...
@@ -112,7 +113,13 @@ class ToolChainUtils(object):
112 112
             raise e
113 113
         return pkgCount
114 114
 
115
-    def installToolChainRPMS(self, chrootID, packageName, logPath=None):
115
+    def getListDependentPackageLineContent(self, index):
116
+        listBuildRequiresPkgLineContent=SPECS.getData().getBuildRequiresForPackage(self.package, index)
117
+        listBuildRequiresPkgLineContent.extend(SPECS.getData().getCheckBuildRequiresForPackage(self.package, index))
118
+        listBuildRequiresPkgLineContent=list(set(listBuildRequiresPkgLineContent))
119
+        return listBuildRequiresPkgLineContent
120
+
121
+    def installToolChainRPMS(self, chrootID, packageName, logPath=None,index=0):
116 122
         if logPath is None:
117 123
             logPath = self.logPath
118 124
         cmdUtils = CommandUtils()
... ...
@@ -120,16 +127,22 @@ class ToolChainUtils(object):
120 120
         self.logger.info("Installing Tool Chain RPMS.......")
121 121
         rpmFiles = ""
122 122
         packages = ""
123
+        self.package=packageName
124
+        listBuildRequiresPackageLineContent = self.getListDependentPackageLineContent(index)
123 125
         for package in constants.listToolChainRPMsToInstall:
124 126
             pkgUtils = PackageUtils(self.logName, self.logPath)
125 127
             rpmFile = None
128
+            version = "*"
129
+            for depPkg in listBuildRequiresPackageLineContent:
130
+                if depPkg.package == package:
131
+                        version=pkgUtils._getProperVersion(package,depPkg)
126 132
             if constants.rpmCheck:
127
-                rpmFile = pkgUtils.findRPMFileForGivenPackage(package)
133
+                rpmFile = pkgUtils.findRPMFileForGivenPackage(package, version)
128 134
             else:
129 135
                 if (packageName not in constants.listToolChainRPMsToInstall or
130 136
                         constants.listToolChainRPMsToInstall.index(packageName) >
131 137
                         constants.listToolChainRPMsToInstall.index(package)):
132
-                    rpmFile = pkgUtils.findRPMFileForGivenPackage(package)
138
+                    rpmFile = pkgUtils.findRPMFileForGivenPackage(package, version)
133 139
             if rpmFile is None:
134 140
                 # sqlite-autoconf package was renamed, but it still published as sqlite-autoconf
135 141
                 if (package == "sqlite") and (platform.machine() == "x86_64"):