kernel.spec 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. # _arch is undefined if /usr/lib/rpm/platform/*/macros was not included.
  2. %{!?_arch: %define _arch dummy}
  3. %{!?make: %define make make}
  4. %define makeflags %{?_smp_mflags} ARCH=%{ARCH}
  5. Name: kernel
  6. Summary: The Linux Kernel
  7. Version: %(echo %{KERNELRELEASE} | sed -e 's/-/_/g')
  8. Release: %{pkg_release}
  9. License: GPL
  10. Group: System Environment/Kernel
  11. Vendor: The Linux Community
  12. URL: https://www.kernel.org
  13. Source0: linux.tar.gz
  14. Source1: config
  15. Source2: diff.patch
  16. Provides: kernel-%{KERNELRELEASE}
  17. BuildRequires: bc binutils bison dwarves
  18. BuildRequires: (elfutils-devel or libdw-devel)
  19. BuildRequires: (elfutils-libelf-devel or libelf-devel) flex
  20. BuildRequires: gcc make openssl openssl-devel perl python3 rsync
  21. %description
  22. The Linux Kernel, the operating system core itself
  23. %package headers
  24. Summary: Header files for the Linux kernel for use by glibc
  25. Group: Development/System
  26. Obsoletes: kernel-headers < %{version}
  27. Provides: kernel-headers = %{version}
  28. %description headers
  29. Kernel-headers includes the C header files that specify the interface
  30. between the Linux kernel and userspace libraries and programs. The
  31. header files define structures and constants that are needed for
  32. building most standard programs and are also needed for rebuilding the
  33. glibc package.
  34. %if %{with_devel}
  35. %package devel
  36. Summary: Development package for building kernel modules to match the %{version} kernel
  37. Group: System Environment/Kernel
  38. AutoReqProv: no
  39. %description -n kernel-devel
  40. This package provides kernel headers and makefiles sufficient to build modules
  41. against the %{version} kernel package.
  42. %endif
  43. %if %{with_debuginfo_manual}
  44. %package debuginfo
  45. Summary: Debug information package for the Linux kernel
  46. Group: Development/Debug
  47. AutoReq: 0
  48. AutoProv: 1
  49. %description debuginfo
  50. This package provides debug information for the kernel image and modules from the
  51. %{version} package.
  52. %define install_mod_strip 1
  53. %endif
  54. %if %{with_debuginfo_rpm}
  55. # list of debuginfo-related options taken from distribution kernel.spec
  56. # files
  57. %undefine _include_minidebuginfo
  58. %undefine _find_debuginfo_dwz_opts
  59. %undefine _unique_build_ids
  60. %undefine _unique_debug_names
  61. %undefine _unique_debug_srcs
  62. %undefine _debugsource_packages
  63. %undefine _debuginfo_subpackages
  64. %global _find_debuginfo_opts -r
  65. %global _missing_build_ids_terminate_build 1
  66. %global _no_recompute_build_ids 1
  67. %{debug_package}
  68. # later, we make all modules executable so that find-debuginfo.sh strips
  69. # them up. but they don't actually need to be executable, so remove the
  70. # executable bit, taking care to do it _after_ find-debuginfo.sh has run
  71. %define __spec_install_post \
  72. %{?__debug_package:%{__debug_install_post}} \
  73. %{__arch_install_post} \
  74. %{__os_install_post} \
  75. find %{buildroot}/lib/modules/%{KERNELRELEASE} -name "*.ko" -type f \\\
  76. | xargs --no-run-if-empty chmod u-x
  77. %else
  78. %define __spec_install_post /usr/lib/rpm/brp-compress || :
  79. %endif
  80. # some (but not all) versions of rpmbuild emit %%debug_package with
  81. # %%install. since we've already emitted it manually, that would cause
  82. # a package redefinition error. ensure that doesn't happen
  83. %define debug_package %{nil}
  84. %prep
  85. %setup -q -n linux
  86. cp %{SOURCE1} .config
  87. patch -p1 < %{SOURCE2}
  88. %build
  89. %{make} %{makeflags} KERNELRELEASE=%{KERNELRELEASE} KBUILD_BUILD_VERSION=%{release}
  90. %install
  91. mkdir -p %{buildroot}/lib/modules/%{KERNELRELEASE}
  92. cp $(%{make} %{makeflags} -s image_name) %{buildroot}/lib/modules/%{KERNELRELEASE}/vmlinuz
  93. # DEPMOD=true makes depmod no-op. We do not package depmod-generated files.
  94. %{make} %{makeflags} INSTALL_MOD_PATH=%{buildroot} %{?install_mod_strip:INSTALL_MOD_STRIP=1} DEPMOD=true modules_install
  95. %{make} %{makeflags} INSTALL_HDR_PATH=%{buildroot}/usr headers_install
  96. cp System.map %{buildroot}/lib/modules/%{KERNELRELEASE}
  97. cp .config %{buildroot}/lib/modules/%{KERNELRELEASE}/config
  98. if %{make} %{makeflags} run-command KBUILD_RUN_COMMAND='test -d ${srctree}/arch/${SRCARCH}/boot/dts' 2>/dev/null; then
  99. %{make} %{makeflags} INSTALL_DTBS_PATH=%{buildroot}/lib/modules/%{KERNELRELEASE}/dtb dtbs_install
  100. fi
  101. ln -fns /usr/src/kernels/%{KERNELRELEASE} %{buildroot}/lib/modules/%{KERNELRELEASE}/build
  102. %if %{with_devel}
  103. %{make} %{makeflags} run-command KBUILD_RUN_COMMAND='${srctree}/scripts/package/install-extmod-build %{buildroot}/usr/src/kernels/%{KERNELRELEASE}'
  104. %endif
  105. {
  106. echo "/lib/modules/%{KERNELRELEASE}"
  107. for x in alias alias.bin builtin.alias.bin builtin.bin dep dep.bin \
  108. devname softdep symbols symbols.bin weakdep; do
  109. echo "%ghost /lib/modules/%{KERNELRELEASE}/modules.${x}"
  110. done
  111. for x in System.map config vmlinuz; do
  112. echo "%ghost /boot/${x}-%{KERNELRELEASE}"
  113. done
  114. if [ -d "%{buildroot}/lib/modules/%{KERNELRELEASE}/dtb" ];then
  115. find "%{buildroot}/lib/modules/%{KERNELRELEASE}/dtb" -printf "%%%ghost /boot/dtb-%{KERNELRELEASE}/%%P\n"
  116. fi
  117. echo "%exclude /lib/modules/%{KERNELRELEASE}/build"
  118. } > %{buildroot}/kernel.list
  119. %if 0%{with_debuginfo_manual}%{with_debuginfo_rpm} > 0
  120. # copying vmlinux directly to the debug directory means it will not get
  121. # stripped (but its source paths will still be collected + fixed up)
  122. mkdir -p %{buildroot}/usr/lib/debug/lib/modules/%{KERNELRELEASE}
  123. cp vmlinux %{buildroot}/usr/lib/debug/lib/modules/%{KERNELRELEASE}
  124. %endif
  125. %if %{with_debuginfo_rpm}
  126. # make modules executable so that find-debuginfo.sh strips them. this
  127. # will be undone later in %%__spec_install_post
  128. find %{buildroot}/lib/modules/%{KERNELRELEASE} -name "*.ko" -type f \
  129. | xargs --no-run-if-empty chmod u+x
  130. %endif
  131. %if %{with_debuginfo_manual}
  132. echo /usr/lib/debug/lib/modules/%{KERNELRELEASE}/vmlinux > %{buildroot}/debuginfo.list
  133. while read -r mod; do
  134. mod="${mod%.o}.ko"
  135. dbg="%{buildroot}/usr/lib/debug/lib/modules/%{KERNELRELEASE}/kernel/${mod}"
  136. buildid=$("${READELF:-readelf}" -n "${mod}" | sed -n 's@^.*Build ID: \(..\)\(.*\)@\1/\2@p')
  137. link="%{buildroot}/usr/lib/debug/.build-id/${buildid}.debug"
  138. mkdir -p "${dbg%/*}" "${link%/*}"
  139. "${OBJCOPY:-objcopy}" --only-keep-debug "${mod}" "${dbg}"
  140. ln -sf --relative "${dbg}" "${link}"
  141. echo "${dbg#%{buildroot}}" >> %{buildroot}/debuginfo.list
  142. echo "${link#%{buildroot}}" >> %{buildroot}/debuginfo.list
  143. done < modules.order
  144. %endif
  145. %clean
  146. rm -rf %{buildroot}
  147. %if %{with_debuginfo_rpm}
  148. rm -f debugfiles.list debuglinks.list debugsourcefiles.list debugsources.list \
  149. elfbins.list
  150. %endif
  151. %post
  152. if [ -x /usr/bin/kernel-install ]; then
  153. /usr/bin/kernel-install add %{KERNELRELEASE} /lib/modules/%{KERNELRELEASE}/vmlinuz
  154. fi
  155. for file in vmlinuz System.map config; do
  156. if ! cmp --silent "/lib/modules/%{KERNELRELEASE}/${file}" "/boot/${file}-%{KERNELRELEASE}"; then
  157. cp "/lib/modules/%{KERNELRELEASE}/${file}" "/boot/${file}-%{KERNELRELEASE}"
  158. fi
  159. done
  160. if [ -d "/lib/modules/%{KERNELRELEASE}/dtb" ] && \
  161. ! diff -rq "/lib/modules/%{KERNELRELEASE}/dtb" "/boot/dtb-%{KERNELRELEASE}" >/dev/null 2>&1; then
  162. rm -rf "/boot/dtb-%{KERNELRELEASE}"
  163. cp -r "/lib/modules/%{KERNELRELEASE}/dtb" "/boot/dtb-%{KERNELRELEASE}"
  164. fi
  165. if [ ! -e "/lib/modules/%{KERNELRELEASE}/modules.dep" ]; then
  166. /usr/sbin/depmod %{KERNELRELEASE}
  167. fi
  168. %preun
  169. if [ -x /usr/bin/kernel-install ]; then
  170. kernel-install remove %{KERNELRELEASE}
  171. fi
  172. %files -f %{buildroot}/kernel.list
  173. %defattr (-, root, root)
  174. %exclude /kernel.list
  175. %files headers
  176. %defattr (-, root, root)
  177. /usr/include
  178. %if %{with_devel}
  179. %files devel
  180. %defattr (-, root, root)
  181. /usr/src/kernels/%{KERNELRELEASE}
  182. /lib/modules/%{KERNELRELEASE}/build
  183. %endif
  184. %if %{with_debuginfo_manual}
  185. %files -f %{buildroot}/debuginfo.list debuginfo
  186. %defattr (-, root, root)
  187. %exclude /debuginfo.list
  188. %endif