|
1 | 1 | __author__ = 'desultory' |
2 | 2 |
|
3 | | -__version__ = '0.4.5' |
| 3 | +__version__ = '0.4.7' |
4 | 4 |
|
5 | 5 | from pathlib import Path |
6 | 6 |
|
@@ -153,7 +153,34 @@ def resolve_kmod(self, module_name): |
153 | 153 | self.logger.warning("[%s] Kernel module has no dependencies." % module_name) |
154 | 154 |
|
155 | 155 |
|
156 | | -def get_all_modules(self): |
| 156 | +def get_lspci_modules(self): |
| 157 | + """ |
| 158 | + Gets the name of all kernel modules being used by hardware visible in lspci -k |
| 159 | + """ |
| 160 | + try: |
| 161 | + cmd = self._run(['lspci', '-k']) |
| 162 | + except RuntimeError as e: |
| 163 | + raise DependencyResolutionError("Failed to get list of kernel modules") from e |
| 164 | + |
| 165 | + raw_modules = set() |
| 166 | + # Iterate over all output lines |
| 167 | + for line in cmd.stdout.decode('utf-8').split('\n'): |
| 168 | + # If the line contains the string 'Kernel modules:' or 'Kernel driver in use:', it contains the name of a kernel module |
| 169 | + if 'Kernel modules:' in line or 'Kernel driver in use:' in line: |
| 170 | + module = line.split(':')[1] |
| 171 | + if ',' in module: |
| 172 | + # If there are multiple modules, split them and add them to the module set |
| 173 | + for module in module.split(','): |
| 174 | + raw_modules.add(module.strip()) |
| 175 | + else: |
| 176 | + # Add the single module to the module set |
| 177 | + raw_modules.add(module.strip()) |
| 178 | + |
| 179 | + self.logger.debug("Kernel modules in use by hardware: %s" % raw_modules) |
| 180 | + return list(raw_modules) |
| 181 | + |
| 182 | + |
| 183 | +def get_lsmod_modules(self): |
157 | 184 | """ |
158 | 185 | Gets the name of all currently installed kernel modules |
159 | 186 | """ |
@@ -215,10 +242,14 @@ def calculate_modules(self): |
215 | 242 | Adds the contents of _kmod_depend if specified. |
216 | 243 | If kernel_modules is empty, pulls all currently loaded kernel modules. |
217 | 244 | """ |
218 | | - if self.config_dict['kmod_autodetect']: |
219 | | - self.logger.info("Autodetecting kernel modules") |
220 | | - autodetected_modules = get_all_modules(self) |
221 | | - self.logger.info("Autodetected kernel modules: %s" % autodetected_modules) |
| 245 | + if self.config_dict['kmod_autodetect_lsmod']: |
| 246 | + autodetected_modules = get_lsmod_modules(self) |
| 247 | + self.logger.info("Autodetected kernel modules from lsmod: %s" % autodetected_modules) |
| 248 | + self.config_dict['kernel_modules'] = autodetected_modules |
| 249 | + |
| 250 | + if self.config_dict['kmod_autodetect_lspci']: |
| 251 | + autodetected_modules = get_lspci_modules(self) |
| 252 | + self.logger.info("Autodetected kernel modules from lscpi -k: %s" % autodetected_modules) |
222 | 253 | self.config_dict['kernel_modules'] = autodetected_modules |
223 | 254 |
|
224 | 255 | if self.config_dict['_kmod_depend']: |
|
0 commit comments