[ 
https://issues.apache.org/jira/browse/MASSEMBLY-918?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Marat Abrarov updated MASSEMBLY-918:
------------------------------------
    Description: 
This is new feature request similar to MASSEMBLY-668 and MASSEMBLY-442 (I 
cannot reopen existing JIRA issues - I have no required permissions in JIRA).

Below is description of my case when I need Maven Assembly Plugin to provide 
ability to specify owner and group for files and directories (I need 
{{root:root}} actually). I need this ability (new feature) for TAR files 
created by Maven Assembly Plugin.

I use Maven Assembly Plugin to prepare TAR, because
 # I use TARs with [{{ADD}} Dockerfile 
directive|https://docs.docker.com/engine/reference/builder/#add] because I have 
Linux and Windows build systems so TAR is the only option to add files into 
Docker image with specific Unix file permissions (thanks to {{fileMode}} and 
{{directoryMode}} options of Maven Assembly Plugin)
 # I have old Docker 1.13.1 (I'm limited to Red Hat Docker images and RHEL 7, I 
cannot use [Podman|https://podman.io/] because it lacks remote access which I 
need because of Windows is used on some development environments) and cannot 
use {{ADD --chown}} Dockerfile directive or multi-stage Dockerfile because of 
version of Docker
 # I cannot use {{RUN}} Dockerfile directive to change Unix file permissions 
and / or owner / group because it duplicates files added with {{ADD}} or 
{{COPY}} Dockerfile directives (the only simple way to add results of build 
into Docker image). Refer to [The backlash of chmod/chown/mv in your 
Dockerfile|https://medium.com/@lmakarov/the-backlash-of-chmod-chown-mv-in-your-dockerfile-f12fe08c0b55]
 for details.

When I build on Windows - refer to 
[dockerfile-test|https://github.com/mabrarov/dockerfile-test] test project - 
then files are added with {{root:root}} owner (that's acceptable for my case). 
This can be tested with below commands (launche Docker container, so require 
Docker):
{code:java}
$ docker run --rm abrarov/dockerfile-test/app-image ls -lha /app
$ docker run --rm abrarov/dockerfile-test/app-image ls -lha /app/bin
{code}
It looks like this new feature requires changing of 
[Plexus-archiver|https://github.com/codehaus-plexus/plexus-archiver] which is 
used by Maven Assembly Plugin.

I created PoC which works with some minor notes:
 # Changes in 
[Plexus-archiver|https://github.com/codehaus-plexus/plexus-archiver] can be 
found in 
[feature/MASSEMBLY-668|https://github.com/codehaus-plexus/plexus-archiver/compare/master...mabrarov:feature/MASSEMBLY-668]
 branch of 
[mabrarov/plexus-archiver|https://github.com/mabrarov/plexus-archiver] GitHub 
repository
 ## Tests for new code are missing
 ## JavaDoc and comments for new code are missing
 ## Only TAR implementation is extended and tested manually
 # Changes in Maven Assembly Plugin can be found in 
[feature/MASSEMBLY-668|https://github.com/apache/maven-assembly-plugin/compare/master...mabrarov:feature/MASSEMBLY-668]
 branch
 ## Tests for new code are missing
 ## Only TAR format, {{fileSets}} and {{dependencySets}} sections of Maven 
Assembly descriptor are tested manually
 ## Existing tests are broken because of mocking and verification which need to 
be adopted - build works only with {{-DskipTests}}
 ## JavaDoc and comments for new code are missing
 # Changes in test project utilizing this new feature can be found in 
[feature/root_owner_in_docker_image|https://github.com/mabrarov/dockerfile-test/compare/feature/root_owner_in_docker_image]
 branch of 
[mabrarov/dockerfile-test|https://github.com/mabrarov/dockerfile-test] GitHub 
repository
 ## I had to add each directory (where I need to specify owner and group) 
separately because TAR format supports this information only if TAR directory 
entries are added. This is true for permissions too, so it's existing issue of 
Maven Assembly Plugin - when you need to store permissions for directories in 
TAR then you have to add directories explicitly to ensure that TAR directory 
entries are created - so I find this workaround acceptable, i.e I don't see a 
need to change smth in 
[Plexus-archiver|https://github.com/codehaus-plexus/plexus-archiver] or Maven 
Assembly Plugin to create TAR directory entries implicitly - one may not need 
these at all - i.e. if it's acceptable to create directories with default 
permissions then one may want to omit TAR directory entries and keep just TAR 
file entries and so optimize TAR.

  was:
This is new feature request similar to MASSEMBLY-668 and MASSEMBLY-442 (I 
cannot reopen existing JIRA issues - I have no required permissions in JIRA).

Below is description of my case when I need Maven Assembly Plugin to provide 
ability to specify owner and group for files and directories (I need 
{{root:root}} actually). I need this ability (new feature) for TAR files 
created by Maven Assembly Plugin.

I use Maven Assembly Plugin to prepare TAR, because
 # I use TARs with [{{ADD}} Dockerfile 
directive|https://docs.docker.com/engine/reference/builder/#add] because I have 
Linux and Windows build systems so TAR is the only option to add files into 
Docker image with specific Unix file permissions (thanks to {{fileMode}} and 
{{directoryMode}} options of Maven Assembly Plugin)
 # I have old Docker 1.13.1 (I'm limited to Red Hat Docker images and RHEL 7, I 
cannot use [Podman|https://podman.io/] because it lacks remote access which I 
need because of Windows is used on some of development environments) and cannot 
use {{ADD --chown}} Dockerfile directive or multi-stage Dockerfile because of 
version of Docker
 # I cannot use {{RUN}} Dockerfile directive to change Unix file permissions 
and / or owner / group because it duplicates files added with {{ADD}} or 
{{COPY}} Dockerfile directives (the only simple way to add results of build 
into Docker image). Refer to [The backlash of chmod/chown/mv in your 
Dockerfile|https://medium.com/@lmakarov/the-backlash-of-chmod-chown-mv-in-your-dockerfile-f12fe08c0b55]
 for details.

When I build on Windows - refer to 
[dockerfile-test|https://github.com/mabrarov/dockerfile-test] test project - 
then files are added with {{root:root}} owner (that's acceptable for my case). 
This can be tested with below commands (launche Docker container, so require 
Docker):
{code:java}
$ docker run --rm abrarov/dockerfile-test/app-image ls -lha /app
$ docker run --rm abrarov/dockerfile-test/app-image ls -lha /app/bin
{code}
It looks like this new feature requires changing of 
[Plexus-archiver|https://github.com/codehaus-plexus/plexus-archiver] which is 
used by Maven Assembly Plugin.

I created PoC which works with some minor notes:
 # Changes in 
[Plexus-archiver|https://github.com/codehaus-plexus/plexus-archiver] can be 
found in 
[feature/MASSEMBLY-668|https://github.com/codehaus-plexus/plexus-archiver/compare/master...mabrarov:feature/MASSEMBLY-668]
 branch of 
[mabrarov/plexus-archiver|https://github.com/mabrarov/plexus-archiver] GitHub 
repository
 ## Tests for new code are missing
 ## JavaDoc and comments for new code are missing
 ## Only TAR implementation is extended and tested manually
 # Changes in Maven Assembly Plugin can be found in 
[feature/MASSEMBLY-668|https://github.com/apache/maven-assembly-plugin/compare/master...mabrarov:feature/MASSEMBLY-668]
 branch
 ## Tests for new code are missing
 ## Only TAR format, {{fileSets}} and {{dependencySets}} sections of Maven 
Assembly descriptor are tested manually
 ## Existing tests are broken because of mocking and verification which need to 
be adopted - build works only with {{-DskipTests}}
 ## JavaDoc and comments for new code are missing
 # Changes in test project utilizing this new feature can be found in 
[feature/root_owner_in_docker_image|https://github.com/mabrarov/dockerfile-test/compare/feature/root_owner_in_docker_image]
 branch of 
[mabrarov/dockerfile-test|https://github.com/mabrarov/dockerfile-test] GitHub 
repository
 ## I had to add each directory (where I need to specify owner and group) 
separately because TAR format supports this information only if TAR directory 
entries are added. This is true for permissions too, so it's existing issue of 
Maven Assembly Plugin - when you need to store permissions for directories in 
TAR then you have to add directories explicitly to ensure that TAR directory 
entries are created - so I find this workaround acceptable, i.e I don't see a 
need to change smth in 
[Plexus-archiver|https://github.com/codehaus-plexus/plexus-archiver] or Maven 
Assembly Plugin to create TAR directory entries implicitly - one may not need 
these at all - i.e. if it's acceptable to create directories with default 
permissions then one may want to omit TAR directory entries and keep just TAR 
file entries and so optimize TAR.


> Owner and group of files and directories
> ----------------------------------------
>
>                 Key: MASSEMBLY-918
>                 URL: https://issues.apache.org/jira/browse/MASSEMBLY-918
>             Project: Maven Assembly Plugin
>          Issue Type: New Feature
>          Components: component descriptor
>    Affects Versions: 3.1.1
>         Environment: I used different build environments for testing 
> https://github.com/mabrarov/dockerfile-test project.
> Windows build environment:
> 1. MS Windows 10 Pro 1703
> 2. Oracle JDK 1.8 update 162
> 3. Apache Maven 3.6.0
> 4. Virtual machine (VMware Workstation 12 Pro ) with 
> 4.1. CentOS 7
> 4.2. Docker 1.12.3 (accessible remotely via 2375 TCP port)
> Linux build environment:
> 1. CentOS 7
> 2. OpenJDK 1.8 update 212
> 3. Apache Maven 3.0.5 (Red Hat .0.5-17)
> 4. Docker 1.13.1
>            Reporter: Marat Abrarov
>            Priority: Minor
>
> This is new feature request similar to MASSEMBLY-668 and MASSEMBLY-442 (I 
> cannot reopen existing JIRA issues - I have no required permissions in JIRA).
> Below is description of my case when I need Maven Assembly Plugin to provide 
> ability to specify owner and group for files and directories (I need 
> {{root:root}} actually). I need this ability (new feature) for TAR files 
> created by Maven Assembly Plugin.
> I use Maven Assembly Plugin to prepare TAR, because
>  # I use TARs with [{{ADD}} Dockerfile 
> directive|https://docs.docker.com/engine/reference/builder/#add] because I 
> have Linux and Windows build systems so TAR is the only option to add files 
> into Docker image with specific Unix file permissions (thanks to {{fileMode}} 
> and {{directoryMode}} options of Maven Assembly Plugin)
>  # I have old Docker 1.13.1 (I'm limited to Red Hat Docker images and RHEL 7, 
> I cannot use [Podman|https://podman.io/] because it lacks remote access which 
> I need because of Windows is used on some development environments) and 
> cannot use {{ADD --chown}} Dockerfile directive or multi-stage Dockerfile 
> because of version of Docker
>  # I cannot use {{RUN}} Dockerfile directive to change Unix file permissions 
> and / or owner / group because it duplicates files added with {{ADD}} or 
> {{COPY}} Dockerfile directives (the only simple way to add results of build 
> into Docker image). Refer to [The backlash of chmod/chown/mv in your 
> Dockerfile|https://medium.com/@lmakarov/the-backlash-of-chmod-chown-mv-in-your-dockerfile-f12fe08c0b55]
>  for details.
> When I build on Windows - refer to 
> [dockerfile-test|https://github.com/mabrarov/dockerfile-test] test project - 
> then files are added with {{root:root}} owner (that's acceptable for my 
> case). This can be tested with below commands (launche Docker container, so 
> require Docker):
> {code:java}
> $ docker run --rm abrarov/dockerfile-test/app-image ls -lha /app
> $ docker run --rm abrarov/dockerfile-test/app-image ls -lha /app/bin
> {code}
> It looks like this new feature requires changing of 
> [Plexus-archiver|https://github.com/codehaus-plexus/plexus-archiver] which is 
> used by Maven Assembly Plugin.
> I created PoC which works with some minor notes:
>  # Changes in 
> [Plexus-archiver|https://github.com/codehaus-plexus/plexus-archiver] can be 
> found in 
> [feature/MASSEMBLY-668|https://github.com/codehaus-plexus/plexus-archiver/compare/master...mabrarov:feature/MASSEMBLY-668]
>  branch of 
> [mabrarov/plexus-archiver|https://github.com/mabrarov/plexus-archiver] GitHub 
> repository
>  ## Tests for new code are missing
>  ## JavaDoc and comments for new code are missing
>  ## Only TAR implementation is extended and tested manually
>  # Changes in Maven Assembly Plugin can be found in 
> [feature/MASSEMBLY-668|https://github.com/apache/maven-assembly-plugin/compare/master...mabrarov:feature/MASSEMBLY-668]
>  branch
>  ## Tests for new code are missing
>  ## Only TAR format, {{fileSets}} and {{dependencySets}} sections of Maven 
> Assembly descriptor are tested manually
>  ## Existing tests are broken because of mocking and verification which need 
> to be adopted - build works only with {{-DskipTests}}
>  ## JavaDoc and comments for new code are missing
>  # Changes in test project utilizing this new feature can be found in 
> [feature/root_owner_in_docker_image|https://github.com/mabrarov/dockerfile-test/compare/feature/root_owner_in_docker_image]
>  branch of 
> [mabrarov/dockerfile-test|https://github.com/mabrarov/dockerfile-test] GitHub 
> repository
>  ## I had to add each directory (where I need to specify owner and group) 
> separately because TAR format supports this information only if TAR directory 
> entries are added. This is true for permissions too, so it's existing issue 
> of Maven Assembly Plugin - when you need to store permissions for directories 
> in TAR then you have to add directories explicitly to ensure that TAR 
> directory entries are created - so I find this workaround acceptable, i.e I 
> don't see a need to change smth in 
> [Plexus-archiver|https://github.com/codehaus-plexus/plexus-archiver] or Maven 
> Assembly Plugin to create TAR directory entries implicitly - one may not need 
> these at all - i.e. if it's acceptable to create directories with default 
> permissions then one may want to omit TAR directory entries and keep just TAR 
> file entries and so optimize TAR.



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)

Reply via email to