truenas/apps

tftpd crashes

Closed this issue · 3 comments

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/middlewared/job.py", line 488, in run
await self.future
File "/usr/lib/python3/dist-packages/middlewared/job.py", line 535, in __run_body
rv = await self.middleware.run_in_thread(self.method, *args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1364, in run_in_thread
return await self.run_in_executor(io_thread_pool_executor, method, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1361, in run_in_executor
return await loop.run_in_executor(pool, functools.partial(method, *args, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/service/crud_service.py", line 268, in nf
rv = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/schema/processor.py", line 55, in nf
res = f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/schema/processor.py", line 183, in nf
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/plugins/apps/crud.py", line 203, in do_create
return self.create_internal(job, app_name, version, data['values'], complete_app_details)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/plugins/apps/crud.py", line 248, in create_internal
raise e from None
File "/usr/lib/python3/dist-packages/middlewared/plugins/apps/crud.py", line 233, in create_internal
update_app_config(app_name, version, new_values)
File "/usr/lib/python3/dist-packages/middlewared/plugins/apps/ix_apps/lifecycle.py", line 59, in update_app_config
render_compose_templates(
File "/usr/lib/python3/dist-packages/middlewared/plugins/apps/ix_apps/lifecycle.py", line 50, in render_compose_templates
raise CallError(f'Failed to render compose templates: {cp.stderr}')
middlewared.service_exception.CallError: [EFAULT] Failed to render compose templates: Traceback (most recent call last):
File "/usr/bin/apps_render_app", line 33, in
sys.exit(load_entry_point('apps-validation==0.1', 'console_scripts', 'apps_render_app')())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/catalog_templating/scripts/render_compose.py", line 47, in main
render_templates_from_path(args.path, args.values)
File "/usr/lib/python3/dist-packages/catalog_templating/scripts/render_compose.py", line 19, in render_templates_from_path
rendered_data = render_templates(
^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/catalog_templating/render.py", line 36, in render_templates
).render({'ix_lib': template_libs, 'values': test_values})
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 1301, in render
self.environment.handle_exception()
File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 936, in handle_exception
raise rewrite_traceback_stack(source=source)
File "/mnt/.ix-apps/app_configs/tftpd-hpa/versions/1.1.0/templates/docker-compose.yaml", line 23, in top-level template code
{% do c1.add_storage("/tftpboot", tftpboot_store) %}
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/.ix-apps/app_configs/tftpd-hpa/versions/1.1.0/templates/library/base_v2_0_29/container.py", line 196, in add_storage
self._storage.add(mount_path, config)
File "/mnt/.ix-apps/app_configs/tftpd-hpa/versions/1.1.0/templates/library/base_v2_0_29/storage.py", line 91, in add
volume_mount = VolumeMount(self._render_instance, mount_path, config)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/.ix-apps/app_configs/tftpd-hpa/versions/1.1.0/templates/library/base_v2_0_29/volume_mount.py", line 35, in init
source = HostPathSource(self._render_instance, mount_config).get()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/.ix-apps/app_configs/tftpd-hpa/versions/1.1.0/templates/library/base_v2_0_29/volume_sources.py", line 32, in init
path = valid_fs_path_or_raise(config.get("path", ""))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/.ix-apps/app_configs/tftpd-hpa/versions/1.1.0/templates/library/base_v2_0_29/validations.py", line 127, in valid_fs_path_or_raise
path = _valid_path_or_raise(path)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/.ix-apps/app_configs/tftpd-hpa/versions/1.1.0/templates/library/base_v2_0_29/validations.py", line 133, in _valid_path_or_raise
raise RenderError(f"Path [{path}] cannot be empty")
base_v2_0_29.error.RenderError: Path [] cannot be empty

i mount host path.

so, i can confirm. it's happens only when I mount host path. but problem is not permission, my tftp boot folder have permission
9069:9069... not sure if it's right. but as I can see it's OK.

usually for tftp we use standard users and groups: 116:121

Maybe it's a good idea to add UID and GID as a parameter in a blueprint?

The container is configured to start the tftpd service as 9069
https://github.com/truenas/containers/blob/fee0fdb2fe101dbede347a7864bd5616b903a310/apps/tftpd-hpa/Dockerfile#L6-L7

The container itself runs as root tho. It needs changes on the container to adjust the running user.
Its not just a matter of adding the option on the ui