Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

poudriere-image generate wrong / owner with overlaydir option #1181

Open
4 tasks done
ocochard opened this issue Oct 21, 2024 · 2 comments
Open
4 tasks done

poudriere-image generate wrong / owner with overlaydir option #1181

ocochard opened this issue Oct 21, 2024 · 2 comments

Comments

@ocochard
Copy link
Member

ocochard commented Oct 21, 2024

Prerequisites

  • Have you checked for an existing issue describing your problem?
  • Are you running the latest version?
  • Is your ports tree recent?
  • Is your FreeBSD Host on a supported release?

Describe the bug

Generating a poudriere-image with option `-c overlaydir`, when this directory belongs to a local system user, broke permission on the generated filesystem.

How to reproduce

Steps to reproduce the behavior:

with a local simple user:

mkdir -p /tmp/overlay/root
mkdir -p /tmp/overlay/etc
touch /tmp/overlay/etc/dummy1.txt
touch /tmp/overlay/root/dummy2.txt
sudo poudriere image ... -c /tmp/overlay

The generated image will have all existing directories belonging to an unknown user (because host local user id doesn’t exist on generated image), in this example its /, /etc and /root.
These bug is due to the cp -fRpr used.

Expected behavior

We could not preserve original user owner when copying the overlay directory: There is no local user created by default on the targeted disk image, and an already existing directory should not have this owner overwrited.

@ocochard ocochard added the bug label Oct 21, 2024
@ocochard
Copy link
Member Author

ocochard commented Oct 22, 2024

A potential replacement of the cp could be something like (cd "${EXTRADIR}" && find . -print0 | cpio -pdm0 --no-preserve-owner ${WRKDIR}/world/)

@jlduran
Copy link
Member

jlduran commented Nov 23, 2024

What I have been doing to work around this issue is having the same uids/gids on the builder as on the target. This way the mapping is one-to-one. Pushing the overlay directory to a git repository, or provisioning form another builder may indeed be problematic.

However, there are times I need to have a specific uid/gid (/tmp/overlay/usr/local/etc/raddb, for example with a uid:gid of 133:133). Perhaps, another option could be an mtree-based solution, where the ownership "metadata" is stored.

EDIT: Note to self: see cust_install_files() from nanobsd/defaults.sh.

jlduran added a commit to jlduran/freebsd-src that referenced this issue Jan 31, 2025
Add a _populate_part(ition) function that mimics the current
populate_slice.  Note however, that this function is not
backward-compatible with populate_slice, hence the different name.  A
"_" is prepended to signal that it still experimental.

It can be used to populate the /cfg and /data partition using makefs(8).

Initially not wired.

TODO:

- Related: freebsd/poudriere#1181
  With this approach, an mtree file will be required if a mix of
  different users/groups is desired.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants