Skip to content

Commit c1c3500

Browse files
committed
improved logging, fixed mount path dependency addition
Signed-off-by: Zen <[email protected]>
1 parent 6e5abf6 commit c1c3500

File tree

7 files changed

+72
-67
lines changed

7 files changed

+72
-67
lines changed

ugrd/base/core.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
__author__ = 'desultory'
2-
__version__ = '1.1.1'
2+
__version__ = '1.1.2'
33

44
from pathlib import Path
55

@@ -109,6 +109,11 @@ def _process_paths_multi(self, path):
109109
if not isinstance(path, Path):
110110
path = Path(path)
111111

112+
# Make sure the path is relative
113+
if path.is_absolute():
114+
path = path.relative_to(path.anchor)
115+
self.logger.debug("Path was absolute, converted to relative: %s" % path)
116+
112117
self.logger.debug("Adding path: %s" % path)
113118
self['paths'].append(path)
114119

ugrd/base/cpio.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
__author__ = 'desultory'
2-
__version__ = '1.1.0'
2+
__version__ = '1.1.1'
33

44

55
from subprocess import run
@@ -128,4 +128,8 @@ def make_cpio_list(self):
128128

129129
packing_list = directory_list + file_list + symlink_list + node_list
130130

131-
self._write(self.out_dir / self.config_dict['cpio_list_name'], packing_list, in_build_dir=False)
131+
cpio_list_path = self.out_dir / self.config_dict['cpio_list_name']
132+
if cpio_list_path.exists():
133+
self._rotate_old(cpio_list_path)
134+
135+
self._write(cpio_list_path, packing_list, in_build_dir=False)

ugrd/crypto/cryptsetup.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
__author__ = 'desultory'
2-
32
__version__ = '0.9.1'
43

5-
__module_name__ = 'ugrd.crypto.cryptsetup'
6-
4+
_module_name = 'ugrd.crypto.cryptsetup'
75

86
CRYPTSETUP_PARAMETERS = ['key_type', 'partuuid', 'uuid', 'key_file', 'header_file', 'retries', 'key_command', 'reset_command', 'try_nokey']
97

@@ -52,7 +50,7 @@ def _process_cryptsetup_multi(self, mapped_name, config):
5250
config[parameter] = value.format(**config)
5351

5452
if not config.get('retries'):
55-
self.logger.info("[%s] No retries specified, using default: %s" % (__module_name__, self['cryptsetup_retries']))
53+
self.logger.info("[%s] No retries specified, using default: %s" % (_module_name, self['cryptsetup_retries']))
5654
config['retries'] = self['cryptsetup_retries']
5755

5856
self['cryptsetup'][mapped_name] = config

ugrd/fs/mounts.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def _process_mounts_multi(self, mount_name, mount_config):
4141

4242
self.logger.debug("[%s] Added mount: %s" % (mount_name, mount_config))
4343

44-
self['paths'].append(mount_config['destination'])
44+
self['paths'] = mount_config['destination']
4545

4646

4747
def _get_mount_source(self, mount, pad=False):

ugrd/initramfs_dict.py

Lines changed: 37 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
__author__ = "desultory"
3-
__version__ = "0.8.3"
3+
__version__ = "0.8.5"
44

55
from tomllib import load
66
from pathlib import Path
@@ -45,19 +45,18 @@ def __setitem__(self, key, value):
4545
if expected_type := self.builtin_parameters.get(key, self['custom_parameters'].get(key)):
4646
self.logger.log(5, "[%s] Expected type: %s" % (key, expected_type))
4747
if hasattr(self, f"_process_{key}"):
48-
self.logger.debug("Using builtin setitem for: %s" % key)
48+
self.logger.debug("[%s] Using builtin setitem: %s" % (key, f"_process_{key}"))
4949
getattr(self, f"_process_{key}")(value)
5050
elif func := self['custom_processing'].get(f"_process_{key}"):
51-
self.logger.debug("Using custom setitem for: %s" % key)
51+
self.logger.debug("[%s] Using custom setitem: %s" % (key, func.__name__))
5252
func(self, value)
5353
elif func := self['custom_processing'].get(f"_process_{key}_multi"):
54-
self.logger.debug("Using custom plural setitem for: %s" % key)
54+
self.logger.debug("[%s] Using custom plural setitem: %s" % (key, func.__name__))
5555
handle_plural(func)(self, value)
5656
elif expected_type in (list, NoDupFlatList):
57-
self.logger.debug("Using list setitem for: %s" % key)
57+
self.logger.log(5, "Using list setitem for: %s" % key)
5858
self[key].append(value)
5959
elif expected_type == dict:
60-
self.logger.debug("Using dict setitem for: %s" % key)
6160
if key not in self:
6261
self.logger.debug("Setting dict '%s' to: %s" % (key, value))
6362
super().__setitem__(key, value)
@@ -74,22 +73,11 @@ def __setitem__(self, key, value):
7473
else:
7574
raise ValueError("Detected undefined parameter type '%s' with value: %s" % (key, value))
7675

77-
@handle_plural
78-
def update_dict(self, name: str, key: str, value: dict):
79-
"""
80-
Updates a dict in the internal dictionary
81-
"""
82-
if key not in self[name]:
83-
self[name][key] = value
84-
self.logger.info("Set %s[%s] to: %s" % (name, key, value))
85-
else:
86-
self[name][key] = value
87-
self.logger.warning("%s[%s] already set" % (name, key))
88-
8976
@handle_plural
9077
def _process_custom_parameters(self, parameter_name, parameter_type):
9178
"""
92-
Updates the custom_parameters attribute
79+
Updates the custom_parameters attribute.
80+
Sets the initial value of the parameter based on the type.
9381
"""
9482
self['custom_parameters'][parameter_name] = eval(parameter_type)
9583
self.logger.debug("Registered custom parameter '%s' with type: %s" % (parameter_name, parameter_type))
@@ -108,19 +96,26 @@ def _process_imports(self, import_type: str, import_value: dict):
10896
"""
10997
Processes imports in a module, importing the functions and adding them to the appropriate list
11098
"""
99+
from importlib import import_module
100+
111101
self.logger.debug("Processing imports of type: %s" % import_type)
112102

113-
from importlib import import_module
114103
for module_name, function_names in import_value.items():
115104
self.logger.debug("Importing module: %s" % module_name)
116-
function_list = [getattr(import_module(f"{module_name}"), function_name) for function_name in function_names]
105+
106+
module = import_module(module_name)
107+
self.logger.debug("[%s] Imported module contents: %s" % (module_name, dir(module)))
108+
if '_module_name' in dir(module) and module._module_name != module_name:
109+
self.logger.warning("Module name mismatch: %s != %s" % (module._module_name, module_name))
110+
111+
function_list = [getattr(module, function_name) for function_name in function_names]
117112

118113
if import_type not in self['imports']:
119-
self.logger.debug("Creating import type: %s" % import_type)
114+
self.logger.log(5, "Creating import type: %s" % import_type)
120115
self['imports'][import_type] = NoDupFlatList(log_bump=10, logger=self.logger, _log_init=False)
121116

122117
self['imports'][import_type] += function_list
123-
self.logger.debug("Updated import '%s': %s" % (import_type, function_list))
118+
self.logger.debug("[%s] Updated import functions: %s" % (import_type, function_list))
124119

125120
if import_type == 'config_processing':
126121
for function in function_list:
@@ -138,25 +133,6 @@ def _process_mod_depends(self, module):
138133

139134
self['mod_depends'].append(module)
140135

141-
def verify_deps(self):
142-
""" Verifies that all module dependencies are met """
143-
for module in self['mod_depends']:
144-
if module not in self['modules']:
145-
raise KeyError(f"Required module '{module}' not found in config")
146-
147-
self.logger.info("Verified module depndencies: %s" % self['mod_depends'])
148-
149-
def verify_mask(self):
150-
"""
151-
Processes masked imports
152-
"""
153-
for mask_hook, mask_items in self['mask'].items():
154-
if self['imports'].get(mask_hook):
155-
for function in self['imports'][mask_hook]:
156-
if function.__name__ in mask_items:
157-
self.logger.warning("Masking import: %s" % function.__name__)
158-
self['imports'][mask_hook].remove(function)
159-
160136
@handle_plural
161137
def _process_modules(self, module):
162138
"""
@@ -196,5 +172,24 @@ def _process_modules(self, module):
196172

197173
self['modules'].append(module)
198174

175+
def verify_deps(self):
176+
""" Verifies that all module dependencies are met """
177+
for module in self['mod_depends']:
178+
if module not in self['modules']:
179+
raise KeyError(f"Required module '{module}' not found in config")
180+
181+
self.logger.info("Verified module depndencies: %s" % self['mod_depends'])
182+
183+
def verify_mask(self):
184+
"""
185+
Processes masked imports
186+
"""
187+
for mask_hook, mask_items in self['mask'].items():
188+
if self['imports'].get(mask_hook):
189+
for function in self['imports'][mask_hook]:
190+
if function.__name__ in mask_items:
191+
self.logger.warning("Masking import: %s" % function.__name__)
192+
self['imports'][mask_hook].remove(function)
193+
199194
def __str__(self):
200195
return pretty_print(self)

ugrd/initramfs_generator.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
__author__ = "desultory"
3-
__version__ = "0.8.1"
3+
__version__ = "0.8.2"
44

55
from tomllib import load
66
from pathlib import Path
@@ -55,9 +55,11 @@ def clean_build_dir(self):
5555
"""
5656
from shutil import rmtree
5757

58+
# Disallow cleaning unless clean is set
5859
if not self.clean:
5960
raise ValueError("Clean is not set, not cleaning build dir: %s" % self.build_dir)
6061

62+
# Clean if the directory exists
6163
if self.build_dir.is_dir():
6264
self.logger.warning("Cleaning build dir: %s" % self.build_dir)
6365
rmtree(self.build_dir)
@@ -72,8 +74,6 @@ def build_structure(self):
7274
# If clean is set, clear the target build dir
7375
if self.clean:
7476
self.clean_build_dir()
75-
else:
76-
self.logger.debug("Not cleaning build dir: %s" % self.build_dir)
7777

7878
self._run_hook('build_pre', return_output=False)
7979
self._run_hook('build_tasks', return_output=False)
@@ -99,7 +99,7 @@ def _run_func(self, function, external=False, return_output=True):
9999
self.logger.debug("[%s] Function returned output: %s" % (function.__name__, function_output))
100100
return function_output
101101
else:
102-
self.logger.warning("[%s] Function returned no output" % function.__name__)
102+
self.logger.debug("[%s] Function returned no output" % function.__name__)
103103
return []
104104

105105
def _run_funcs(self, functions, external=False, return_output=True):
@@ -155,7 +155,7 @@ def generate_init_main(self):
155155
if len(hook) > 1:
156156
out.extend(hook)
157157
else:
158-
self.logger.warning("No output from init hook: %s" % init_type)
158+
self.logger.debug("No output from init hook: %s" % init_type)
159159
return out
160160

161161
def generate_init(self):
@@ -165,7 +165,6 @@ def generate_init(self):
165165
self.logger.info("Running init generator functions")
166166

167167
init = [self.config_dict['shebang']]
168-
169168
init += ["# Generated by initramfs_generator.py v%s" % __version__]
170169

171170
init.extend(self._run_init_hook('init_pre'))
@@ -177,11 +176,9 @@ def generate_init(self):
177176
init.extend(self.generate_init_main())
178177

179178
init.extend(self._run_init_hook('init_final'))
180-
181179
init += ["\n\n# END INIT"]
182180

183181
self._write('init', init, 0o755)
184-
185182
self.logger.debug("Final config:\n%s" % pretty_print(self.config_dict))
186183

187184
def generate_structure(self):
@@ -192,6 +189,7 @@ def generate_structure(self):
192189
self._mkdir(self.build_dir)
193190

194191
for subdir in set(self.config_dict['paths']):
192+
# Get the relative path of each path, create the directory in the build dir
195193
subdir_relative_path = subdir.relative_to(subdir.anchor)
196194
target_dir = self.build_dir / subdir_relative_path
197195

@@ -213,8 +211,7 @@ def _mkdir(self, path):
213211
from os.path import isdir
214212
from os import mkdir
215213

216-
self.logger.debug("Creating directory for: %s" % path)
217-
214+
self.logger.log(5, "Creating directory: %s" % path)
218215
if path.is_dir():
219216
path_dir = path.parent
220217
self.logger.debug("Directory path: %s" % path_dir)

ugrd/kmod/kmod.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
__author__ = 'desultory'
22

3-
__version__ = '0.4.7'
3+
__version__ = '0.5.0'
4+
5+
__module_name__ = 'ugrd.kmod.kmod'
46

57
from pathlib import Path
68

@@ -53,7 +55,7 @@ def resolve_kmod_path(self, module_name):
5355
if module_path == '(builtin)':
5456
raise BuiltinKernelModule(module_name)
5557

56-
self.logger.debug(f'Kernel module {module_name} is located at {module_path}')
58+
self.logger.debug("[%s] Kernel module is located at: %s" % (module_name, module_path))
5759

5860
return Path(module_path)
5961

@@ -99,7 +101,7 @@ def resolve_kmod_harddeps(self, module_name):
99101
dependencies = cmd.stdout.decode().strip().split(',')
100102

101103
if dependencies[0]:
102-
self.logger.debug("Kernel module '%s' has hard dependencies: %s" % (module_name, dependencies))
104+
self.logger.debug("[%s] Kernel module has hard dependencies: %s" % (module_name, dependencies))
103105
return dependencies
104106

105107

@@ -137,20 +139,20 @@ def resolve_kmod(self, module_name):
137139
dependency_paths.append(resolve_kmod_path(self, dependency))
138140
self.config_dict['kernel_modules'] = dependency
139141
except BuiltinKernelModule:
140-
self.logger.warning("[%s] Kernel module dependency is built-in: %s" % (module_name, dependency))
142+
self.logger.debug("[%s] Kernel module dependency is built-in: %s" % (module_name, dependency))
141143
self.config_dict['kmod_ignore'] = module_name
142144

143145
try:
144146
dependency_paths.append(resolve_kmod_path(self, module_name))
145147
self.logger.debug("[%s] Calculated kernel module dependencies: %s" % (module_name, dependency_paths))
146148
except BuiltinKernelModule:
147-
self.logger.warning("[%s] Kernel module is built-in." % module_name)
149+
self.logger.debug("[%s] Kernel module is built-in." % module_name)
148150
self.config_dict['kmod_ignore'] = module_name
149151

150152
if dependency_paths:
151153
return dependency_paths
152154
else:
153-
self.logger.warning("[%s] Kernel module has no dependencies." % module_name)
155+
self.logger.debug("[%s] Kernel module has no dependencies." % module_name)
154156

155157

156158
def get_lspci_modules(self):
@@ -263,7 +265,11 @@ def calculate_modules(self):
263265
self.config_dict['dependencies'] = module_paths
264266
self.logger.debug("Resolved dependency paths for kernel module '%s': %s" % (module, module_paths))
265267
else:
266-
self.logger.warning("Failed to resolve dependency paths for kernel module '%s'" % module)
268+
# Make internal dependencies quieter
269+
if module in self.config_dict['_kmod_depend']:
270+
self.logger.debug("Failed to resolve dependency paths for internal dependency: %s" % module)
271+
else:
272+
self.logger.warning("Failed to resolve dependency paths for kernel module: %s" % module)
267273
except IgnoredKernelModule:
268274
self.logger.warning("Ignoring kernel module: %s" % module)
269275
self.config_dict['kernel_modules'].remove(module)

0 commit comments

Comments
 (0)