Browse code

Added kernel macros

Change-Id: I5a21fb835f37cc031b823b7376422476c8b6e546
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/1248
Reviewed-by: Alexey Makhalov <amakhalov@vmware.com>
Tested-by: gerrit-photon <photon-checkins@vmware.com>

dthaluru authored on 2016/08/02 09:51:14
Showing 8 changed files
... ...
@@ -1,17 +1,16 @@
1
-%define LINUX_VERSION 4.4.8
2 1
 Summary:	initramfs
3 2
 Name:		initramfs
4 3
 Version:	1.0
5
-Release:	4%{?dist}
4
+Release:	4%{?kernelsubrelease}%{?dist}
6 5
 License:	Apache License
7 6
 Group:		System Environment/Base
8 7
 Vendor:		VMware, Inc.
9 8
 Distribution:	Photon
10 9
 Provides:	initramfs
11
-BuildRequires:       linux = %{LINUX_VERSION}
10
+BuildRequires:       linux = %{KERNEL_VERSION}-%{KERNEL_RELEASE}
12 11
 BuildRequires:       dracut
13 12
 BuildRequires:       ostree
14
-Requires:	     linux = %{LINUX_VERSION}
13
+Requires:	     linux = %{KERNEL_VERSION}-%{KERNEL_RELEASE}
15 14
 
16 15
 %description
17 16
 Photon release files such as yum configs and other /etc/ release related files
... ...
@@ -29,7 +28,7 @@ echo 'add_drivers+="tmem xen-acpi-processor xen-evtchn xen-gntalloc xen-gntdev x
29 29
 echo 'add_dracutmodules+=" ostree systemd "' > /etc/dracut.conf.d/ostree.conf
30 30
 
31 31
 %build
32
-dracut --force --kver %{LINUX_VERSION} initrd.img-no-kmods
32
+dracut --force --kver %{KERNEL_VERSION} initrd.img-no-kmods
33 33
 %install
34 34
 rm -rf $RPM_BUILD_ROOT
35 35
 install -d $RPM_BUILD_ROOT/boot
... ...
@@ -46,6 +45,8 @@ rm -rf $RPM_BUILD_ROOT
46 46
 /boot/initrd.img-no-kmods 
47 47
 
48 48
 %changelog
49
+*   Mon Aug 1 2016 Divya Thaluru <dthaluru@vmware.com> 1.0-4
50
+-   Added kernel macros
49 51
 *   Thu Jun 30 2016 Xiaolin Li <xiaolinl@vmware.com> 1.0-4
50 52
 -   Exapand setup macro and remove the source file.
51 53
 *	Tue May 24 2016 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 1.0-3
... ...
@@ -1,11 +1,7 @@
1
-# This package depends on exact version of kernel rpm
2
-# since it provides kernel modules 
3
-%define LINUX_VERSION 4.4.8
4
-
5 1
 Summary: A New Scripting Dynamic Tracing Tool For Linux
6 2
 Name:    ktap
7 3
 Version: 0.4
8
-Release: 3%{?dist}
4
+Release: 3%{?kernelsubrelease}%{?dist}
9 5
 License: GPLv2
10 6
 URL: https://github.com/ktap/ktap
11 7
 Source: %{name}-master.zip
... ...
@@ -15,11 +11,11 @@ Vendor:     VMware, Inc.
15 15
 Patch0:        linux-4.4-support.patch
16 16
 Distribution:  Photon
17 17
 BuildRequires: elfutils-devel
18
-BuildRequires: linux-dev = %{LINUX_VERSION}
19
-BuildRequires: linux = %{LINUX_VERSION}
18
+BuildRequires: linux-dev = %{KERNEL_VERSION}-%{KERNEL_RELEASE}
19
+BuildRequires: linux = %{KERNEL_VERSION}-%{KERNEL_RELEASE}
20 20
 BuildRequires: unzip
21 21
 Requires: kmod
22
-Requires: linux = %{LINUX_VERSION}
22
+Requires: linux = %{KERNEL_VERSION}-%{KERNEL_RELEASE}
23 23
 
24 24
 %description
25 25
 ktap is a new scripting dynamic tracing tool for Linux, it uses a scripting language and lets users trace the Linux kernel dynamically. ktap is designed to give operational insights with interoperability that allows users to tune, troubleshoot and extend the kernel and applications. It's similar to Linux Systemtap and Solaris Dtrace.
... ...
@@ -33,11 +29,11 @@ make ktap
33 33
 # ugly hack: disable security hardening to build kernel module
34 34
 # we need to remove sec hard specs file for that.
35 35
 rm -f `dirname $(gcc --print-libgcc-file-name)`/../specs
36
-make KVERSION=%{LINUX_VERSION} mod
36
+make KVERSION=%{KERNEL_VERSION} mod
37 37
 
38 38
 %install
39 39
 mkdir -p %{buildroot}%{_bindir}
40
-make install DESTDIR=%{buildroot} KVERSION=%{LINUX_VERSION}
40
+make install DESTDIR=%{buildroot} KVERSION=%{KERNEL_VERSION}
41 41
 
42 42
 %post
43 43
 /sbin/depmod -a
... ...
@@ -49,9 +45,11 @@ make install DESTDIR=%{buildroot} KVERSION=%{LINUX_VERSION}
49 49
 %defattr(-, root, root, 0755)
50 50
 %doc README.md
51 51
 %{_bindir}/ktap
52
-/lib/modules/%{LINUX_VERSION}/extra/ktapvm.ko
52
+/lib/modules/%{KERNEL_VERSION}/extra/ktapvm.ko
53 53
 
54 54
 %changelog
55
+*   Mon Aug 1 2016 Divya Thaluru <dthaluru@vmware.com> 0.4-3
56
+-   Added kernel macros
55 57
 *	Tue May 24 2016 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 0.4-3
56 58
 -	GA - Bump release of all rpms
57 59
 *   Thu Apr 28 2016 Alexey Makhalov <amakhalov@vmware.com> 0.4-2
... ...
@@ -1,9 +1,8 @@
1 1
 %global security_hardening none
2
-%define LINUX_VERSION 4.4.8
3 2
 Summary:	Sysdig is a universal system visibility tool with native support for containers.
4 3
 Name:		sysdig
5 4
 Version:	0.10.1
6
-Release:	2%{?dist}
5
+Release:	2%{?kernelsubrelease}%{?dist}
7 6
 License:	GPLv2	  
8 7
 URL:		http://www.sysdig.org/
9 8
 Group:		Applications/System	
... ...
@@ -12,11 +11,12 @@ Distribution:	Photon
12 12
 Source0:	https://github.com/draios/sysdig/archive/%{name}-%{version}.tar.gz
13 13
 %define sha1 sysdig=272b95ad02be4d194bba66d360ff935084d9c842
14 14
 BuildRequires:	cmake 
15
-BuildRequires:  linux-dev = %{LINUX_VERSION}
15
+BuildRequires:  linux-dev = %{KERNEL_VERSION}-%{KERNEL_RELEASE}
16 16
 BuildRequires:	openssl-devel
17 17
 BuildRequires:	curl
18 18
 BuildRequires:	zlib-devel
19 19
 BuildRequires:	ncurses-devel
20
+Requires:   linux = %{KERNEL_VERSION}-%{KERNEL_RELEASE}
20 21
 Requires:	zlib
21 22
 Requires:	ncurses
22 23
 Requires:	openssl
... ...
@@ -39,17 +39,17 @@ cmake \
39 39
 	-DUSE_BUNDLED_ZLIB=OFF \
40 40
 	-DUSE_BUNDLED_NCURSES=OFF ..
41 41
 
42
-make KERNELDIR="/lib/modules/%{LINUX_VERSION}/build" 
42
+make KERNELDIR="/lib/modules/%{KERNEL_VERSION}/build" 
43 43
 
44 44
 %install
45 45
 cd build
46
-make install DESTDIR=%{buildroot} KERNELDIR="/lib/modules/%{LINUX_VERSION}/build"
46
+make install DESTDIR=%{buildroot} KERNELDIR="/lib/modules/%{KERNEL_VERSION}/build"
47 47
 mv %{buildroot}/usr/src/sysdig* %{buildroot}/usr/src/sysdig-%{version}
48 48
 mkdir -p %{buildroot}/etc/
49 49
 mv %{buildroot}/usr/etc/bash_completion.d %{buildroot}/etc/
50 50
 rm -rf %{buildroot}/usr/share/zsh/
51
-mkdir -p %{buildroot}/lib/modules/%{LINUX_VERSION}/extra
52
-mv driver/sysdig-probe.ko %{buildroot}/lib/modules/%{LINUX_VERSION}/extra
51
+mkdir -p %{buildroot}/lib/modules/%{KERNEL_VERSION}/extra
52
+mv driver/sysdig-probe.ko %{buildroot}/lib/modules/%{KERNEL_VERSION}/extra
53 53
 
54 54
 %clean
55 55
 rm -rf %{buildroot}/*
... ...
@@ -66,9 +66,11 @@ rm -rf %{buildroot}/*
66 66
 %{_bindir}
67 67
 /usr/src 
68 68
 %{_datadir}
69
-/lib/modules/%{LINUX_VERSION}/extra/sysdig-probe.ko
69
+/lib/modules/%{KERNEL_VERSION}/extra/sysdig-probe.ko
70 70
 
71 71
 %changelog
72
+*   Mon Aug 1 2016 Divya Thaluru <dthaluru@vmware.com> 0.10.1-2
73
+-   Added kernel macros
72 74
 *	Thu Jul 14 2016 Harish Udaiya Kumar <hudaiyakumar@vmware.com> 0.10.1-2
73 75
 -	Updated sysdig to build the kernel module 
74 76
 *       Tue Jun 28 2016 Anish Swaminathan <anishs@vmware.com> 0.10.1-1
... ...
@@ -27,8 +27,6 @@ class PackageUtils(object):
27 27
         
28 28
         self.rpmbuildBinary = "rpmbuild"
29 29
         self.rpmbuildBuildallOption = "-ba --clean"
30
-        self.rpmbuildBuildNum = '--define \\\"photon_build_number %s\\\"' % constants.buildNumber
31
-        self.rpmbuildReleaseVer = '--define \\\"photon_release_version %s\\\"' % constants.releaseVersion
32 30
         self.rpmbuildNocheckOption = "--nocheck"
33 31
         self.rpmbuildDistOption = '--define \\\"dist %s\\\"' % constants.dist
34 32
         self.queryRpmPackageOptions = "-qa"
... ...
@@ -185,6 +183,11 @@ class PackageUtils(object):
185 185
             
186 186
             self.copyAdditionalBuildFiles(listAdditionalFiles,chrootID)
187 187
 
188
+        #Adding rpm macros
189
+        listRPMMacros = constants.specData.getRPMMacros()
190
+        for macroName in listRPMMacros.keys():
191
+            macros.append(macroName+" "+listRPMMacros[macroName])
192
+
188 193
         listRPMFiles=[]
189 194
         listSRPMFiles=[]
190 195
         try:
... ...
@@ -215,7 +218,6 @@ class PackageUtils(object):
215 215
             rpmBuildcmd+=" "+self.rpmbuildNocheckOption
216 216
         for macro in macros:
217 217
             rpmBuildcmd+=' --define \\\"%s\\\"' % macro
218
-        rpmBuildcmd+=" "+self.rpmbuildBuildNum+" "+self.rpmbuildReleaseVer
219 218
         rpmBuildcmd+=" "+specFile
220 219
         
221 220
         cmdUtils = CommandUtils()
... ...
@@ -25,6 +25,7 @@ class SerializableSpecObjectsUtils(object):
25 25
         self.mapSerializableSpecObjects={}
26 26
         self.mapPackageToSpec={}
27 27
         self.logger=Logger.getLogger("Serializable Spec objects", logPath )
28
+        self.userDefinedMacros={}
28 29
     
29 30
     def readSpecsAndConvertToSerializableObjects(self,specFilesPath):
30 31
         listSpecFiles=[]
... ...
@@ -79,10 +80,35 @@ class SerializableSpecObjectsUtils(object):
79 79
         if self.mapSerializableSpecObjects[specName].installRequiresPackages.has_key(package):
80 80
             return self.mapSerializableSpecObjects[specName].installRequiresPackages[package]
81 81
         return None
82
-    
82
+
83
+    def addMacro(self, macroName, macroValue):
84
+        if macroName == "":
85
+            self.logger.error("Given invalid macro: name:"+macroName+" value:"+macroValue)
86
+            return
87
+        self.userDefinedMacros[macroName]=macroValue
88
+
89
+    def getRPMMacros(self):
90
+        return self.userDefinedMacros
91
+
92
+    def processData(self, data):
93
+        for macroName in self.userDefinedMacros.keys():
94
+            value = self.userDefinedMacros[macroName]
95
+            macro="%{?"+macroName+"}"
96
+            if data.find(macro) != -1:
97
+                data = data.replace(macro,value)
98
+                continue
99
+            macro="%{"+macroName+"}"
100
+            if data.find(macro) != -1:
101
+                data = data.replace(macro,value)
102
+                continue
103
+            macro="%"+macroName
104
+            if data.find(macro) != -1:
105
+                data = data.replace(macro,value)
106
+        return data
107
+
83 108
     def getRelease(self, package):
84 109
         specName=self.getSpecName(package)
85
-        return self.mapSerializableSpecObjects[specName].release
110
+        return self.processData(self.mapSerializableSpecObjects[specName].release)
86 111
         
87 112
     def getVersion(self, package):
88 113
         specName=self.getSpecName(package)
... ...
@@ -1,5 +1,3 @@
1
-import constants
2
-
3 1
 class rpmMacro(object):
4 2
 
5 3
     def __init__(self):
... ...
@@ -76,12 +74,6 @@ class Package(object):
76 76
         if content.find("%{version}") != -1:
77 77
             content = content.replace('%{version}',self.version)
78 78
         
79
-        if content.find("%{?dist}") != -1:
80
-            content = content.replace('%{?dist}',constants.constants.dist)
81
-
82
-        if content.find("%{dist}") != -1:
83
-            content = content.replace('%{dist}',constants.constants.dist)
84
-        
85 79
         return content
86 80
     
87 81
     def updatePackageMacro(self,macro):
... ...
@@ -46,7 +46,7 @@ class ToolChainUtils(object):
46 46
         rpmFile=pkgUtils.findRPMFileForGivenPackage(package)
47 47
         if rpmFile is None:
48 48
             specFile=constants.specData.getSpecFile(package)
49
-            cmd=self.rpmbuildCommand+" -ba --nocheck --define \'_topdir "+chrootID+constants.topDirPath+"\' --define \'_dbpath "+chrootID+"/var/lib/rpm\' --define \'dist "+constants.dist+"\' --define \'photon_build_number "+constants.buildNumber+"\' --define \'photon_release_version "+constants.releaseVersion+"\' "+specFile
49
+            cmd=self.rpmbuildCommand+" -ba --nocheck --define \'_topdir "+chrootID+constants.topDirPath+"\' --define \'_dbpath "+chrootID+"/var/lib/rpm\' --define \'dist "+constants.dist+"\' "+specFile
50 50
             self.logger.info(cmd)
51 51
             cmdUtils.runCommandInShell(cmd,self.logPath+"/filesystem.log")
52 52
             filesystemrpmFile = cmdUtils.findFile(package+"-[0-9]*.rpm", chrootID+constants.topDirPath+"/RPMS")
... ...
@@ -270,8 +270,33 @@ class constants(object):
270 270
         constants.pullsourcesConfig = options.pullsourcesConfig
271 271
         constants.inputRPMSPath=options.inputRPMSPath
272 272
         constants.rpmCheck = options.rpmCheck
273
+        constants.updateRPMMacros()
273 274
         
275
+    @staticmethod
276
+    def updateRPMMacros():
277
+        #adding distribution rpm macro
278
+        constants.specData.addMacro("dist",constants.dist)
274 279
 
280
+        #adding buildnumber rpm macro
281
+        constants.specData.addMacro("photon_build_number",constants.buildNumber)
282
+
283
+        #adding releasenumber rpm macro
284
+        constants.specData.addMacro("photon_release_version",constants.releaseVersion)
285
+
286
+        #adding kernelversion rpm macro
287
+        kernelversion = constants.specData.getVersion("linux")
288
+        constants.specData.addMacro("KERNEL_VERSION",kernelversion)
289
+
290
+        #adding kernelrelease rpm macro
291
+        kernelrelease = constants.specData.getRelease("linux")
292
+        constants.specData.addMacro("KERNEL_RELEASE",kernelrelease)
275 293
         
276
-        
277
-    
294
+        #adding kernelsubrelease rpm macro
295
+        kernelversion = kernelversion.replace(".","")
296
+        if kernelversion.isdigit():
297
+            kernelversion = int(kernelversion) << 8
298
+        kernelsubrelease = str(kernelversion)+kernelrelease
299
+        kernelsubrelease = kernelsubrelease.replace(constants.dist,"")
300
+        if kernelsubrelease:
301
+            kernelsubrelease = "."+kernelsubrelease
302
+            constants.specData.addMacro("kernelsubrelease",kernelsubrelease)