Copy custom airootfs files with correct permissions and ownership
mkarchiso in _make_custom_airootfs
copies airootfs files from the profile directory to the working directory using cp -af --no-preserve=ownership
.
- Since the script is run as root, root becomes the owner of all files. This is an issue for custom files that should not be root owned, like those in user home directories. That's why a
chown
is used to fix it. - File permissions on the system where
mkarchiso
runs affect the permissions of the files in the resulting airootfs. This can be observed by settingumask 0027
before cloning archiso git repo or before copying a profile from/usr/share/archiso/configs/*
. For a few files like/etc/shadow
and/etc/gshadow
, this is corrected withchmod
.
Both of these things are ugly and I want to get rid of them. That requires some way to specify user and group ownership, and permissions when copying. My idea is to create a airootfs.filelist
in the profile directory which would list the UID, GID, mode and file name of each and every file in the custom airootfs
directory. E.g., something like this:
0:0:0640:/root/.zlogin
0:0:0750:/root/.automated_script.sh
Listed files would then be copied using install
by going over this list.
_make_customize_airootfs
also has a cp
command (cp -RdT --preserve=mode,timestamps,links
), but that preserves permissions and timestamps while copying files withing the confines of airootfs. Since install
cannot preserve permissions, it sadly cannot be used.
Now, the problem is the airootfs.filelist
file format. File paths can contain any character except NUL. That means entries cannot be newline separated, but using NUL as a separator will make the file hard to read and edit.