> On 17 Jul 2018, at 10:50 pm, Ben Parees <[email protected]> wrote:
> 
> 
> 
> On Tue, Jul 17, 2018 at 5:06 AM, Ahmed Ossama <[email protected] 
> <mailto:[email protected]>> wrote:
> For option #1, I granted the sa/builder the anyuid scc, and added the 
> serviceAccount: builder in the buildconfig. I thought this might make the 
> build run with root (Yes, it's not a good idea to run builds using root, I 
> was just trying it), but it didn't work anyway.
> 
> For option #2, I've created the secret with:
> 
> $ oc create secret generic root-certificate 
> --from-file=RootCertificate-2048-SHA256.crt=RootCertificate-2048-SHA256.crt
> 
> Then edited the bc to:
> 
>   source:
>     git:
>       ref: c967a614ca0429ef219e884ae1b2ff6e447449d8
>       uri: http://gitlab.example.com/public-projects/java-blueprint.git 
> <http://gitlab.example.com/public-projects/java-blueprint.git>
>     secrets:
>     - destinationDir: /etc/ssl/certs
>       secret:
>         name: root-certificate
>     type: Git
> 
> So this causes the build to fail with the error:
> 
> error: Uploading to container failed: Error response from daemon: 
> {"message":"Error processing tar file(exit status 1): mkdir 
> /certs/..2018_07_17_00_07_32.144170643: no such file or directory"}
> ERROR: The destination directory for 
> "/var/run/secrets/openshift.io/build/root-certificate 
> <http://openshift.io/build/root-certificate>" injection must exist in 
> container ("/etc/ssl/certs")
> 
> 
> the docs make this behavior clear:
> 
> "The destinationDir must exist or an error will occur. No directory paths are 
> created during the copy process."
> 
> https://docs.openshift.org/latest/dev_guide/builds/build_inputs.html#using-secrets-s2i-strategy
>  
> <https://docs.openshift.org/latest/dev_guide/builds/build_inputs.html#using-secrets-s2i-strategy>
That documentation is misleading as I understand it.

The destination directory does not need to exist.

The requirement is that all parent directories down to the destination 
directory need to exist.

So:

        "source": {
            "binary": {},
            "secrets": [
                {
                    "destinationDir": "/tmp/build",
                    "secret": {
                        "name": "mysecret"
                    }
                }
            ],
            "type": "Binary"
        },

is okay as /tmp exists, even though /tmp/build doesn't.

It yields:

+ ls -las /tmp/build
total 0
0 drwxr-xr-x. 3 root root 70 Jul 17 22:01 .
0 drwxrwxrwt. 1 root root 66 Jul 17 22:01 ..
0 drwxrwxrwx. 2 root root 17 Jul 17 22:01 ..2018_07_17_22_01_08.125432697
0 lrwxrwxrwx. 1 root root 31 Jul 17 22:01 ..data -> 
..2018_07_17_22_01_08.125432697
0 lrwxrwxrwx. 1 root root 10 Jul 17 22:01 key -> ..data/key

But:

        "source": {
            "binary": {},
            "secrets": [
                {
                    "destinationDir": "/tmp/build/subdir",
                    "secret": {
                        "name": "mysecret"
                    }
                }
            ],
            "type": "Binary"
        },

will fail as /tmp/build doesn't exist.

error: Uploading to container failed: Error response from daemon: 
{"message":"lstat 
/var/lib/docker/overlay2/38b6aa3a51dd7f3d6d8dd4fe58025562e81086d78d88cff347a4ce1c76d868da/merged/tmp/build:
 no such file or directory"}

ERROR: The destination directory for 
"/var/run/secrets/openshift.io/build/mysecret" injection must exist in 
container ("/tmp/build/subdir")

Graham
> I tried changing the destinationDir to  /etc/certs, and the build passed the 
> above error but yet failed to connect to the repositories.
> 
> 
> presumably this created a directory named "/etc/certs" containing a file for 
> each key in your secret.  Your build logic would need to reference 
> /etc/certs/<keyname> as the CA input file.
> 
> 
> Is there another way to inject the CA during the builds? Or this is the only 
> way?
> 
> 
> On 07/16/2018 09:49 PM, Graham Dumpleton wrote:
>> The first will not work because you aren't root when a build occurs so can't 
>> copy files to locations which require root access.
>> 
>> For the second option, how has the build secret been set up in the build 
>> config? Specifically, what does the spec.source.secrets part of the build 
>> config look like, and what keys are defined in the secret?
>> 
>> $ oc explain bc.spec.source.secrets
>> RESOURCE: secrets <[]Object>
>> 
>> DESCRIPTION:
>>      secrets represents a list of secrets and their destinations that will be
>>      used only for the build.
>> 
>>      SecretBuildSource describes a secret and its destination directory that
>>      will be used only at the build time. The content of the secret 
>> referenced
>>      here will be copied into the destination directory instead of mounting.
>> 
>> FIELDS:
>>    destinationDir    <string>
>>      destinationDir is the directory where the files from the secret should 
>> be
>>      available for the build time. For the Source build strategy, these will 
>> be
>>      injected into a container where the assemble script runs. Later, when 
>> the
>>      script finishes, all files injected will be truncated to zero length. 
>> For
>>      the Docker build strategy, these will be copied into the build 
>> directory,
>>      where the Dockerfile is located, so users can ADD or COPY them during
>>      docker build.
>> 
>>    secret    <Object> -required-
>>      secret is a reference to an existing secret that you want to use in your
>>      build.
>> 
>> $ oc explain bc.spec.source.secrets.secret
>> RESOURCE: secret <Object>
>> 
>> DESCRIPTION:
>>      secret is a reference to an existing secret that you want to use in your
>>      build.
>> 
>>      LocalObjectReference contains enough information to let you locate the
>>      referenced object inside the same namespace.
>> 
>> FIELDS:
>>    name      <string>
>>      Name of the referent. More info:
>>      
>> https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
>>  
>> <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
>> 
>> Graham
>> 
>>> On 17 Jul 2018, at 9:16 am, Ahmed Ossama <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> 
>>> Hi Everyone,
>>> 
>>> I have an OpenShift installation which is sitting behind an appliance which 
>>> intercepts outbound SSL traffic. Regular machines have the SSL certificate 
>>> of the appliance installed on them and they are able to access the internet 
>>> without any issues.
>>> 
>>> My issue is with during the build; Because OpenShift builds images in 
>>> containers, thus the container which is building the code doesn't have the 
>>> SSL certificate of the interceptor installed in it. So grabbing code 
>>> dependencies from npm, maven or pypi during a build fails because the build 
>>> tries to connect to the repo manager via HTTPs, but since the CA of the 
>>> interceptor is not installed in the build container it fails.
>>> 
>>> My question is: How can I inject the CA certificate of the interceptor in 
>>> the build container so that the traffic from the interceptor is trusted?
>>> 
>>> So far I've tried two options but they failed:
>>> 
>>> Option #1, have customized .s2i/bin/assemble script which downloads the 
>>> certificate in /etc/pki/ca-trust/source/anchors/ and running 
>>> update-ca-trust. But this option fails with:
>>> 
>>> $ oc logs dsqc-4-build
>>>   % Total    % Received % Xferd  Average Speed   Time Time     Time  Current
>>>                                  Dload  Upload   Total Spent    Left  Speed
>>>   0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--    
>>>  0Warning: Failed to create the file
>>> Warning: 
>>> /etc/pki/ca-trust/source/anchors/ZscalerRootCertificate-2048-SHA256.cr
>>> Warning: t: Permission denied
>>>  52  1732   52   901    0     0  14515      0 --:--:-- --:--:-- --:--:-- 
>>> 14770
>>> curl: (23) Failed writing body (0 != 901)
>>> p11-kit: couldn't create file: 
>>> /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt: Permission denied
>>> p11-kit: couldn't create file: 
>>> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem: Permission denied
>>> p11-kit: couldn't create file: 
>>> /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem: Permission denied
>>> p11-kit: couldn't create file: 
>>> /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem: Permission denied
>>> p11-kit: couldn't create file: /etc/pki/ca-trust/extracted/java/cacerts: 
>>> Permission denied
>>> /tmp/scripts/assemble: line 14: /tmp/scripts/s2i-setup: No such file or 
>>> directory
>>> error: build error: non-zero (13) exit code from 
>>> registry.access.redhat.com/redhat-openjdk-18/openjdk18-openshift@sha256:6c009f430da02bdcff618a7dcd085d7d22547263eeebfb8d6377a4cf6f58769d
>>>  
>>> <http://registry.access.redhat.com/redhat-openjdk-18/openjdk18-openshift@sha256:6c009f430da02bdcff618a7dcd085d7d22547263eeebfb8d6377a4cf6f58769d>
>>> 
>>> Option #2: following the steps detailed in 
>>> https://docs.openshift.com/container-platform/3.9/dev_guide/builds/build_inputs.html#using-secrets-during-build
>>>  
>>> <https://docs.openshift.com/container-platform/3.9/dev_guide/builds/build_inputs.html#using-secrets-during-build>
>>>  but it fails with the error:
>>> 
>>> $ oc logs po/dsqc-5-build
>>> error: Uploading to container failed: Error response from daemon: 
>>> {"message":"Error processing tar file(exit status 1): mkdir 
>>> /certs/..2018_07_16_23_14_03.650131122: no such file or directory"}
>>> ERROR: The destination directory for 
>>> "/var/run/secrets/openshift.io/build/root-certificate 
>>> <http://openshift.io/build/root-certificate>" injection must exist in 
>>> container ("/etc/ssl/certs")
>>> 
>>> Any help is extremely appreciated.
>>> 
>>> -- 
>>> Regards,
>>> Ahmed Ossama
>>> 
>>> _______________________________________________
>>> users mailing list
>>> [email protected] <mailto:[email protected]>
>>> http://lists.openshift.redhat.com/openshiftmm/listinfo/users 
>>> <http://lists.openshift.redhat.com/openshiftmm/listinfo/users>
>> 
> 
> -- 
> Regards,
> Ahmed Ossama
> 
> _______________________________________________
> users mailing list
> [email protected] <mailto:[email protected]>
> http://lists.openshift.redhat.com/openshiftmm/listinfo/users 
> <http://lists.openshift.redhat.com/openshiftmm/listinfo/users>
> 
> 
> 
> 
> -- 
> Ben Parees | OpenShift

_______________________________________________
users mailing list
[email protected]
http://lists.openshift.redhat.com/openshiftmm/listinfo/users

Reply via email to