summaryrefslogtreecommitdiffstats
path: root/mcp/patches/0011-system.repo-Debian-Add-keyserver-proxy-support.patch
blob: 87cd219cdd37fc0eabe78ef10520e44b4669d8c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

@media only all and (prefers-color-scheme: dark) {
.highlight .hll { background-color: #49483e }
.highlight .c { color: #75715e } /* Comment */
.highlight .err { color: #960050; background-color: #1e0010 } /* Error */
.highlight .k { color: #66d9ef } /* Keyword */
.highlight .l { color: #ae81ff } /* Literal */
.highlight .n { color: #f8f8f2 } /* Name */
.highlight .o { color: #f92672 } /* Operator */
.highlight .p { color: #f8f8f2 } /* Punctuation */
.highlight .ch { color: #75715e } /* Comment.Hashbang */
.highlight .cm { color: #75715e } /* Comment.Multiline */
.highlight .cp { color: #75715e } /* Comment.Preproc */
.highlight .cpf { color: #75715e } /* Comment.PreprocFile */
.highlight .c1 { color: #75715e } /* Comment.Single */
.highlight .cs { color: #75715e } /* Comment.Special */
.highlight .gd { color: #f92672 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gi { color: #a6e22e } /* Generic.Inserted */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #75715e } /* Generic.Subheading */
.highlight .kc { color: #66d9ef } /* Keyword.Constant */
.highlight .kd { color: #66d9ef } /* Keyword.Declaration */
.highlight .kn { color: #f92672 } /* Keyword.Namespace */
.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */
.highlight .kr { color: #66d9ef } /* Keyword.Reserved */
.highlight .kt { color: #66d9ef } /* Keyword.Type */
.highlight .ld { color: #e6db74 } /* Literal.Date */
.highlight .m { color: #ae81ff } /* Literal.Number */
.highlight .s { color: #e6db74 } /* Literal.String */
.highlight .na { color: #a6e22e } /* Name.Attribute */
.highlight .nb { color: #f8f8f2 } /* Name.Builtin */
.highlight .nc { color: #a6e22e } /* Name.Class */
.highlight .no { color: #66d9ef } /* Name.Constant */
.highlight .nd { color: #a6e22e } /* Name.Decorator */
.highlight .ni { color: #f8f8f2 } /* Name.Entity */
.highlight .ne { color: #a6e22e } /* Name.Exception */
.highlight .nf { color: #a6e22e } /* Name.Function */
.highlight .nl { color: #f8f8f2 } /* Name.Label */
.highlight .nn { color: #f8f8f2 } /* Name.Namespace */
.highlight .nx { color: #a6e22e } /* Name.Other */
.highlight .py { color: #f8f8f2 } /* Name.Property */
.highlight .nt { color: #f92672 } /* Name.Tag */
.highlight .nv { color: #f8f8f2 } /* Name.Variable */
.highlight .ow { color: #f92672 } /* Operator.Word */
.highlight .w { color: #f8f8f2 } /* Text.Whitespace */
.highlight .mb { color: #ae81ff } /* Literal.Number.Bin */
.highlight .mf { color: #ae81ff } /* Literal.Number.Float */
.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */
.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */
.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */
.highlight .sa { color: #e6db74 } /* Literal.String.Affix */
.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */
.highlight .sc { color: #e6db74 } /* Literal.String.Char */
.highlight .dl { color: #e6db74 } /* Literal.String.Delimiter */
.highlight .sd { color: #e6db74 } /* Literal.String.Doc */
.highlight .s2 { color: #e6db74 } /* Literal.String.Double */
.highlight .se { color: #ae81ff } /* Literal.String.Escape */
.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */
.highlight .si { color: #e6db74 } /* Literal.String.Interpol */
.highlight .sx { color: #e6db74 } /* Literal.String.Other */
.highlight .sr { color: #e6db74 } /* Literal.String.Regex */
.highlight .s1 { color: #e6db74 } /* Literal.String.Single */
.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */
.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #a6e22e } /* Name.Function.Magic */
.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */
.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */
.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */
.highlight .vm { color: #f8f8f2 } /* Name.Variable.Magic */
.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */
}
@media (prefers-color-scheme: light) {
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.h
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
: Copyright (c) 2018 Mirantis Inc., Enea AB and others.
:
: All rights reserved. This program and the accompanying materials
: are made available under the terms of the Apache License, Version 2.0
: which accompanies this distribution, and is available at
: http://www.apache.org/licenses/LICENSE-2.0
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
From: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
Date: Sun, 3 Jun 2018 19:28:18 +0200
Subject: [PATCH] system.repo: Debian: Use proxy for keyservers

Previously, when fetching GPG keys for APT keyring, either using
public key download & import (as for default repos) or via keyserver,
we relied on simple `curl` calls or passed it down to Salt aptpkg
module.
To be able to retrieve APT keys behind a proxy, one used to have to
configure the proxy for the Salt minion, which does not yet have
`no_proxy` support (either *all* or *no* traffic hits the proxy).

When `linux:system:proxy` http(s) proxies are set:
- no longer pass key configuration to Salt aptpkg (until it properly
  supports `no_proxy`);
- handle all keys explicitly with `curl` and `apt-key`;
- set 'http(s)_proxy' env vars for `cmd.wait` calls;

If `linux:system:proxy` is not defined, the behavior is
unchanged for backwards compatibility.

NOTE: If present, per-repo proxies are also used for keyserver access.

system.repo: Fix conditions order for Debian proxy

Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
---
 linux/system/repo.sls | 65 +++++++++++++++++++++++++++++++++++--------
 1 file changed, 53 insertions(+), 12 deletions(-)

diff --git a/linux/system/repo.sls b/linux/system/repo.sls
index 303ea9c..5dfc4c1 100644
--- a/linux/system/repo.sls
+++ b/linux/system/repo.sls
@@ -5,9 +5,15 @@ linux_repo_prereq_pkgs:
   pkg.installed:
   - pkgs: {{ system.pkgs }}

+{%- set proxies = {'system': {}, 'repo': {}} %}
+
 # global proxy setup
-{%- if system.proxy.get('pkg', {}).get('enabled', False) %}
 {%- if grains.os_family == 'Debian' %}
+{%- if system.proxy.get('pkg', {}).get('enabled', False) %}
+
+{%- do proxies.system.update({'https': system.proxy.get('pkg', {}).get('https', None) | default(system.proxy.get('https', None), true)}) %}
+{%- do proxies.system.update({'http': system.proxy.get('pkg', {}).get('http', None) | default(system.proxy.get('http', None), true)}) %}
+{%- do proxies.system.update({'ftp': system.proxy.get('pkg', {}).get('ftp', None) | default(system.proxy.get('ftp', None), true)}) %}

 /etc/apt/apt.conf.d/99proxies-salt:
   file.managed:
@@ -15,9 +21,9 @@ linux_repo_prereq_pkgs:
   - source: salt://linux/files/apt.conf.d_proxies
   - defaults:
       external_host: False
-      https: {{ system.proxy.get('pkg', {}).get('https', None) | default(system.proxy.get('https', None), true) }}
-      http: {{ system.proxy.get('pkg', {}).get('http', None) | default(system.proxy.get('http', None), true) }}
-      ftp: {{ system.proxy.get('pkg', {}).get('ftp', None) | default(system.proxy.get('ftp', None), true) }}
+      https: {{ proxies.system.https }}
+      http: {{ proxies.system.http }}
+      ftp: {{ proxies.system.ftp }}

 {%- else %}

@@ -25,9 +31,6 @@ linux_repo_prereq_pkgs:
   file.absent

 {%- endif %}
-{%- endif %}
-
-{% set default_repos = {} %}

 {%- if system.purge_repos|default(False) %}

@@ -38,6 +41,10 @@ purge_sources_list_d_repos:

 {%- endif %}

+{%- endif %}
+
+{% set default_repos = {} %}
+
 {%- for name, repo in system.repo.items() %}
 {%- set name=repo.get('name', name) %}
 {%- if grains.os_family == 'Debian' %}
@@ -45,16 +52,20 @@ purge_sources_list_d_repos:
 # per repository proxy setup
 {%- if repo.get('proxy', {}).get('enabled', False) %}
 {%- set external_host = repo.proxy.get('host', None) or repo.source.split('/')[2] %}
+{%- do proxies.repo.update({'https': repo.proxy.get('https', None) or system.proxy.get('pkg', {}).get('https', None) | default(system.proxy.get('https', None), true)}) %}
+{%- do proxies.repo.update({'http': repo.proxy.get('http', None) or system.proxy.get('pkg', {}).get('http', None) | default(system.proxy.get('http', None), true)}) %}
+{%- do proxies.repo.update({'ftp': repo.proxy.get('ftp', None) or system.proxy.get('pkg', {}).get('ftp', None) | default(system.proxy.get('ftp', None), true)}) %}
 /etc/apt/apt.conf.d/99proxies-salt-{{ name }}:
   file.managed:
   - template: jinja
   - source: salt://linux/files/apt.conf.d_proxies
   - defaults:
       external_host: {{ external_host }}
-      https: {{ repo.proxy.get('https', None) or system.proxy.get('pkg', {}).get('https', None) | default(system.proxy.get('https', None), True) }}
-      http: {{ repo.proxy.get('http', None) or system.proxy.get('pkg', {}).get('http', None) | default(system.proxy.get('http', None), True) }}
-      ftp: {{ repo.proxy.get('ftp', None) or system.proxy.get('pkg', {}).get('ftp', None) | default(system.proxy.get('ftp', None), True) }}
+      https: {{ proxies.repo.https }}
+      http: {{ proxies.repo.http }}
+      ftp: {{ proxies.repo.ftp }}
 {%- else %}
+{%- do proxies.repo.update({'https': None, 'http': None, 'ftp': None}) %}
 /etc/apt/apt.conf.d/99proxies-salt-{{ name }}:
   file.absent
 {%- endif %}
@@ -110,6 +121,13 @@ linux_repo_{{ name }}_key:
     {% else %}
       - pkgrepo: linux_repo_{{ name }}
     {% endif %}
+    - env:
+{%- if proxies.repo.get('https', None) or proxies.system.get('https', None) %}
+      - https_proxy: {{ proxies.repo.get('https', None) or proxies.system.get('https', None) }}
+{%- endif %}
+{%- if proxies.repo.get('http', None) or proxies.system.get('http', None) %}
+      - http_proxy: {{ proxies.repo.get('http', None) or proxies.system.get('http', None) }}
+{%- endif %}

 {%- endif %} {# 2 #}

@@ -120,6 +138,10 @@ linux_repo_{{ name }}_key:

 {%- if repo.get('enabled', True) %}

+{%- set use_proxy = ( ( proxies.repo.get('https', None) or proxies.system.get('https', None) or
+                        proxies.repo.get('http', None) or proxies.system.get('http', None) ) and
+                        repo.key_id is defined and repo.key_server is defined ) %}
+
 linux_repo_{{ name }}:
   pkgrepo.managed:
   {%- if repo.ppa is defined %}
@@ -132,10 +154,10 @@ linux_repo_{{ name }}:
   {%- endif %}
   - file: /etc/apt/sources.list.d/{{ name }}.list
   - clean_file: {{ repo.clean|default(True) }}
-  {%- if repo.key_id is defined %}
+  {%- if not use_proxy and repo.key_id is defined %}
   - keyid: {{ repo.key_id }}
   {%- endif %}
-  {%- if repo.key_server is defined %}
+  {%- if not use_proxy and repo.key_server is defined %}
   - keyserver: {{ repo.key_server }}
   {%- endif %}
   {%- if repo.key_url is defined and (grains['saltversioninfo'] >= [2017, 7] or repo.key_url.startswith('salt://')) %}
@@ -157,6 +179,25 @@ linux_repo_{{ name }}:
   {%- endif %}
   {%- endif %}

+{%- if use_proxy and repo.key_id is defined and repo.key_server is defined %}
+
+linux_repo_{{ name }}_key:
+  cmd.run:
+    - name: "apt-key adv --keyserver {{ repo.key_server }} --recv {{ repo.key_id }}"
+    - unless: 'test -e /etc/apt/sources.list.d/{{ name }}.list'
+    - require_in:
+      - pkgrepo: linux_repo_{{ name }}
+    - env:
+{%- if proxies.repo.get('https', None) or proxies.system.get('https', None) %}
+      - https_proxy: {{ proxies.repo.get('https', None) or proxies.system.get('https', None) }}
+{%- endif %}
+{%- if proxies.repo.get('http', None) or proxies.system.get('http', None) %}
+      - http_proxy: {{ proxies.repo.get('http', None) or proxies.system.get('http', None) }}
+{%- endif %}
+
+{%- endif %}
+
+{#- repo.enabled is false #}
 {%- else %}

 linux_repo_{{ name }}_absent: