|
14 | 14 | from lisa.tools import Cp, Echo, Git, Make, Sed, Uname
|
15 | 15 | from lisa.tools.gcc import Gcc
|
16 | 16 | from lisa.tools.lscpu import Lscpu
|
17 |
| -from lisa.util import LisaException, field_metadata, subclasses |
| 17 | +from lisa.util import LisaException, VersionInfo, field_metadata, subclasses, parse_version |
18 | 18 | from lisa.util.logger import Logger, get_logger
|
19 | 19 |
|
20 | 20 | from .kernel_installer import BaseInstaller, BaseInstallerSchema
|
@@ -158,28 +158,39 @@ def install(self) -> str:
|
158 | 158 | # modify code
|
159 | 159 | self._modify_code(node=node, code_path=self._code_path)
|
160 | 160 |
|
| 161 | + |
| 162 | + result = node.execute( |
| 163 | + "make kernelversion 2>/dev/null", |
| 164 | + cwd=self._code_path, |
| 165 | + shell=True, |
| 166 | + ) |
| 167 | + result.assert_exit_code( |
| 168 | + 0, |
| 169 | + f"failed on get kernel version: {result.stdout}", |
| 170 | + ) |
| 171 | + kernel_version = parse_version(result.stdout) |
| 172 | + |
161 | 173 | kconfig_file = runbook.kernel_config_file
|
162 | 174 | self._build_code(
|
163 |
| - node=node, code_path=self._code_path, kconfig_file=kconfig_file |
| 175 | + node=node, code_path=self._code_path, kconfig_file=kconfig_file, |
| 176 | + kernel_version=kernel_version |
164 | 177 | )
|
165 |
| - |
166 | 178 | self._install_build(node=node, code_path=self._code_path)
|
167 | 179 |
|
168 | 180 | result = node.execute(
|
169 | 181 | "make kernelrelease 2>/dev/null",
|
170 | 182 | cwd=self._code_path,
|
171 | 183 | shell=True,
|
172 | 184 | )
|
173 |
| - |
174 |
| - kernel_version = result.stdout |
175 | 185 | result.assert_exit_code(
|
176 | 186 | 0,
|
177 |
| - f"failed on get kernel version: {kernel_version}", |
| 187 | + f"failed on get kernel release: {result.stdout}", |
178 | 188 | )
|
| 189 | + kernel_release = result.stdout |
179 | 190 |
|
180 | 191 | # copy current config back to system folder.
|
181 | 192 | result = node.execute(
|
182 |
| - f"cp .config /boot/config-{kernel_version}", |
| 193 | + f"cp .config /boot/config-{kernel_release}", |
183 | 194 | cwd=self._code_path,
|
184 | 195 | sudo=True,
|
185 | 196 | )
|
@@ -227,7 +238,7 @@ def _modify_code(self, node: Node, code_path: PurePath) -> None:
|
227 | 238 | self._log.debug(f"modifying code by {modifier.type_name()}")
|
228 | 239 | modifier.modify()
|
229 | 240 |
|
230 |
| - def _build_code(self, node: Node, code_path: PurePath, kconfig_file: str) -> None: |
| 241 | + def _build_code(self, node: Node, code_path: PurePath, kconfig_file: str, kernel_version: VersionInfo) -> None: |
231 | 242 | self._log.info("building code...")
|
232 | 243 |
|
233 | 244 | uname = node.tools[Uname]
|
@@ -287,7 +298,8 @@ def _build_code(self, node: Node, code_path: PurePath, kconfig_file: str) -> Non
|
287 | 298 | result.assert_exit_code()
|
288 | 299 |
|
289 | 300 | # the gcc version of Redhat 7.x is too old. Upgrade it.
|
290 |
| - if isinstance(node.os, Redhat) and node.os.information.version < "8.0.0": |
| 301 | + if kernel_version > "3.10.0" and isinstance(node.os, Redhat) and node.os.information.version < "8.0.0": |
| 302 | + node.os.install_packages(["centos-release-scl"]) |
291 | 303 | node.os.install_packages(["devtoolset-8"])
|
292 | 304 | node.tools[Mv].move("/bin/gcc", "/bin/gcc_back", overwrite=True, sudo=True)
|
293 | 305 | result.assert_exit_code()
|
|
0 commit comments