On Wed, Feb 20, 2019 at 8:22 AM Ian Abbott <abbotti@mev.co.uk> wrote:
On 20/02/2019 13:17, Ian Abbott wrote:
> On 20/02/2019 00:59, Jon Ringle wrote:
>> I've got a strange permission problem when I build on our build server
>> that was recently updated from Ubuntu-14.04 to Ubuntu-16.04.
>>
>> On our Ubuntu-16.04 server, on most of the platform/packages/
>> subdirectories the packages are getting created with other having no
>> permissions at all:
>>
>> rootfs/platform-ec1c/packages$ tree -d -L 1 -p
>> .
>> ├── [drwxr-x---]  attr-2.4.47
>> ├── [drwxr-x---]  avahi-0.7
>> ├── [drwxr-x---]  bash-4.3.30
>> ├── [drwxr-x---]  boost_1_67_0
>> ├── [drwxr-x---]  busybox-1.29.3
>> ├── [drwxr-x---]  coreutils-8.29
>> ...
>>
>> This results in all files contained within those directories to also
>> have no perms for other, and get installed on my target in the same
>> way. This in turn then causes permission problems to occur.
>>
>> I'm at a loss as to what to look for to resolve this problem.
>>
>> Suggestions?
>
> I think you are building with umask 0027, so files are created with no
> permissions for 'other' users.  This should not affect the contents of
> the platform-ec1c/packages/*.ipk files, or the contents of the
> platform-ec1c/root/ directory, or the contents of the
> platform-ec1c/images/root.* images, which should all contain files with
> the correct permissions for the target.

Correction: The platform-ec1c/root/ directory contents do not have the
correct ownership for the target, but the file mode bits should be correct.


I also thought that perhaps it was a umask issue, but as you can see below, umask is 0022, which should be ok.
The permission problem that I am having on the target is that systemd-networkd.service won't start because it can't read the configuration files below. These files are installed in systemd.make via:
ifdef PTXCONF_SYSTEMD_NETWORK
        @$(call install_tree, systemd, 0, 0, -, /usr/lib/systemd/network)
        @$(call install_alternative_tree, systemd, 0, 0, /usr/lib/systemd/network)
endif
        @$(call install_alternative, systemd, 0, 0, 0644, \
                /usr/lib/systemd/network/99-default.link)

The install_tree code resolves the permissions to apply to the files installed in ptxd_install_generic() found in scripts/lib/ptxd_make_xpkg_pkg.sh by obtaining the file's permissions via stat -c:

    stat=( $(stat -c "%u:%g:%a:0x%t:0x%T:%F" "${file}") ) &&
    IFS="${orig_IFS}"
    local usr="${usr:-${stat[0]}}" &&
    local grp="${grp:-${stat[1]}}" &&
    local mod="${stat[2]}" &&
    local major="${stat[3]}" &&
    local minor="${stat[4]}" &&
    local type="${stat[5]}" &&

    case "${type}" in
...
        "regular file"|"regular empty file")
            ptxd_install_file "${file}" "${dst}" "${usr}" "${grp}" "${mod}" "${strip}"
            ;;

Here is the content of the systemd_239_armel.ipk package:

jringle@dev-atl-bamb01:/srv/gpec-build/rootfs/platform-ec1c/packages$ mkdir temp
jringle@dev-atl-bamb01:/srv/gpec-build/rootfs/platform-ec1c/packages$ cd temp/
jringle@dev-atl-bamb01:/srv/gpec-build/rootfs/platform-ec1c/packages/temp$ ar x ../systemd_239_armel.ipk 
jringle@dev-atl-bamb01:/srv/gpec-build/rootfs/platform-ec1c/packages/temp$ mkdir data
jringle@dev-atl-bamb01:/srv/gpec-build/rootfs/platform-ec1c/packages/temp$ cd data
jringle@dev-atl-bamb01:/srv/gpec-build/rootfs/platform-ec1c/packages/temp/data$ tar xf ../data.tar.gz 
jringle@dev-atl-bamb01:/srv/gpec-build/rootfs/platform-ec1c/packages/temp/data$ cd usr/lib/systemd/network/
jringle@dev-atl-bamb01:/srv/gpec-build/rootfs/platform-ec1c/packages/temp/data/usr/lib/systemd/network$ ll
total 28
drwxr-xr-x 2 jringle domain^users 4096 Jan  1 00:00 ./                                                                                                                                                             
drwxr-xr-x 5 jringle domain^users 4096 Jan  1 00:00 ../                                                                                                                                                            
-rw-r----- 1 jringle domain^users  645 Jan  1 00:00 80-container-host0.network                                                                                                                                     
-rw-r----- 1 jringle domain^users  718 Jan  1 00:00 80-container-ve.network                                                                                                                                        
-rw-r----- 1 jringle domain^users  704 Jan  1 00:00 80-container-vz.network                                                                                                                                        
-rw-r--r-- 1 jringle domain^users  412 Jan  1 00:00 99-default.link                                                                                                                                                
-rw-r--r-- 1 jringle domain^users   70 Jan  1 00:00 eth0.network                                                                                                                                                   
jringle@dev-atl-bamb01:/srv/gpec-build/rootfs/platform-ec1c/packages/temp/data/usr/lib/systemd/network$ umask                                                                                                      
0022                                                                                                                                                                                                               

The same files under platform-ec1c/root/ directory hierarchy have the same permissions as above.

-Jon