reprepro: convert to Ansible

This converts the reprepro configuration from our existing puppet to
Ansible.

This takes a more direct approach; the templating done by the puppet
version started simple but over the years grew several different
options to handle various use-cases.  This means you not only had to
understand the rather obscure reprepro configuration, but then *also*
figure out how to translate that from our puppet template layers.

Here the configuration files are kept directly (they were copied from
the existing mirror-update.openstack.org) and deployed with some light
wrapper tasks in reprepro/tasks/utils which avoids most duplication.

Note the initial cron jobs are left disabled so we can run some manual
testing before letting it go automatically.

Change-Id: I96a9ff1efbf51c4164621028b7a3a1e2e1077d5c
This commit is contained in:
Ian Wienand 2020-10-13 12:15:10 +11:00
parent be8e13c139
commit 3eceba5749
62 changed files with 2117 additions and 2 deletions

View File

@ -0,0 +1,14 @@
import-gpg-key
Import a gpg ASCII armored public key to the local keystore.
**Role Variables**
.. zuul:rolevar:: gpg_key_id
The ID of the key to import. If it already exists, the file is not
imported.
.. zuul:rolevar:: gpg_key_asc
The path of the ASCII armored GPG key to import

View File

@ -0,0 +1,30 @@
- name: Check for input args
assert:
that: gpg_key_id is defined
- name: Check for existing key
command: |
gpg --list-keys {{ gpg_key_id }}
ignore_errors: true
register: _key_exists
- name: Install key
when: _key_exists.rc != 0
block:
- name: Look for gpg key
lineinfile:
path: '{{ gpg_key_asc }}'
regexp: '^-----BEGIN PGP PUBLIC KEY BLOCK-----$'
state: absent
check_mode: yes
changed_when: false
register: _out
- name: Check keyfile
assert:
that: _out.found
- name: Import key
command: |
gpg --import {{ gpg_key_asc }}

View File

@ -33,6 +33,10 @@
- name: Setup rsync mirror scripts
include_tasks: rsync.yaml
- name: Setup reprepro
include_role:
name: reprepro
- name: Setup periodic AFS release script
include_role:
name: afs-release
@ -41,4 +45,3 @@
include_role:
name: afsmon
# TODO: reprepro and other mirror components

View File

@ -0,0 +1,5 @@
reprepo
Install reprepo configuration for configuring various repositories.
Note that this role is only intended to be called from the
``mirror-update`` role.

View File

@ -0,0 +1,36 @@
Origin: Puppetlabs
Codename: xenial
Description: PuppetLabs Xenial mirror
Architectures: amd64
Components: puppet5
Contents: .gz
Update: puppetlabs-debs
Log: /var/log/reprepro/ubuntu-puppetlabs-xenial.log
Origin: Puppetlabs
Codename: stretch
Description: PuppetLabs Stretch mirror
Architectures: amd64
Components: puppet5 puppet6
Contents: .gz
Update: puppetlabs-debs
Log: /var/log/reprepro/ubuntu-puppetlabs-stretch.log
Origin: Puppetlabs
Codename: bionic
Description: PuppetLabs Bionic mirror
Architectures: amd64
Components: puppet5 puppet6
Contents: .gz
Update: puppetlabs-debs
Log: /var/log/reprepro/ubuntu-puppetlabs-bionic.log
Origin: Puppetlabs
Codename: focal
Description: PuppetLabs Focal mirror
Architectures: amd64
Components: puppet5 puppet6
Contents: .gz
Update: puppetlabs-debs
Log: /var/log/reprepro/ubuntu-puppetlabs-focal.log

View File

@ -0,0 +1,6 @@
basedir /afs/.openstack.org/mirror/apt-puppetlabs
keepunreferencedfiles
noskipold
export changed
spacecheck none
verbose

View File

@ -0,0 +1,7 @@
Name: puppetlabs-debs
Method: https://apt.puppetlabs.com/
Components: PC1 puppet5 puppet6
UDebComponents:
Architectures: amd64
GetInRelease: no
VerifyRelease: EF8D349F

View File

@ -0,0 +1,18 @@
Origin: Ceph Nautilus
Codename: stretch
Description: OpenStack Debian Ceph Nautilus Stretch mirror
Architectures: amd64
Components: main
Contents: .gz
Update: debian-ceph-nautilus
Log: /var/log/reprepro/debian-ceph-nautilus-stretch.log
Origin: Ceph Nautilus
Codename: bionic
Description: OpenStack Debian Ceph Nautilus Bionic mirror
Architectures: amd64
Components: main
Contents: .gz
Update: debian-ceph-nautilus
Log: /var/log/reprepro/debian-ceph-nautilus-bionic.log

View File

@ -0,0 +1,6 @@
basedir /afs/.openstack.org/mirror/ceph-deb-nautilus
keepunreferencedfiles
noskipold
export changed
spacecheck none
verbose

View File

@ -0,0 +1,7 @@
Name: debian-ceph-nautilus
Method: http://download.ceph.com/debian-nautilus/
Components: main
UDebComponents: main
Architectures: amd64
GetInRelease: no
VerifyRelease: 460f3994

View File

@ -0,0 +1,9 @@
Origin: Ceph Octopus
Codename: buster
Description: OpenStack Debian Ceph Octopus Buster mirror
Architectures: amd64
Components: main
Contents: .gz
Update: debian-ceph-octopus
Log: /var/log/reprepro/debian-ceph-octopus-buster.log

View File

@ -0,0 +1,6 @@
basedir /afs/.openstack.org/mirror/ceph-deb-octopus
keepunreferencedfiles
noskipold
export changed
spacecheck none
verbose

View File

@ -0,0 +1,7 @@
Name: debian-ceph-octopus
Method: http://download.ceph.com/debian-octopus/
Components: main
UDebComponents: main
Architectures: amd64
GetInRelease: no
VerifyRelease: 460f3994

View File

@ -0,0 +1,10 @@
Origin: Docker
Codename: bionic
Description: Docker Bionic mirror
Architectures: amd64 arm64 source
Components: stable
UDebComponents:
Contents: .gz
Update: debian-docker
Log: /var/log/reprepro/debian-docker-bionic.log

View File

@ -0,0 +1,6 @@
basedir /afs/.openstack.org/mirror/deb-docker/bionic
keepunreferencedfiles
noskipold
export changed
spacecheck none
verbose

View File

@ -0,0 +1,7 @@
Name: debian-docker
Method: https://download.docker.com/linux/ubuntu/
Components: stable
UDebComponents: stable
Architectures: amd64
GetInRelease: no
VerifyRelease: F273FCD8

View File

@ -0,0 +1,10 @@
Origin: Docker
Codename: focal
Description: Docker Focal mirror
Architectures: amd64 arm64 source
Components: stable
UDebComponents:
Contents: .gz
Update: debian-docker
Log: /var/log/reprepro/debian-docker-focal.log

View File

@ -0,0 +1,6 @@
basedir /afs/.openstack.org/mirror/deb-docker/focal
keepunreferencedfiles
noskipold
export changed
spacecheck none
verbose

View File

@ -0,0 +1,7 @@
Name: debian-docker
Method: https://download.docker.com/linux/ubuntu/
Components: stable
UDebComponents: stable
Architectures: amd64
GetInRelease: no
VerifyRelease: F273FCD8

View File

@ -0,0 +1,10 @@
Origin: Docker
Codename: xenial
Description: Docker Xenial mirror
Architectures: amd64 arm64 source
Components: stable
UDebComponents:
Contents: .gz
Update: debian-docker
Log: /var/log/reprepro/debian-docker-xenial.log

View File

@ -0,0 +1,6 @@
basedir /afs/.openstack.org/mirror/deb-docker/xenial
keepunreferencedfiles
noskipold
export changed
spacecheck none
verbose

View File

@ -0,0 +1,7 @@
Name: debian-docker
Method: https://download.docker.com/linux/ubuntu/
Components: stable
UDebComponents: stable
Architectures: amd64
GetInRelease: no
VerifyRelease: F273FCD8

View File

@ -0,0 +1,24 @@
Origin: Debian Security
Codename: stretch
Suite: updates
Description: OpenStack Debian Security Stretch mirror
Architectures: amd64 arm64 source
Components: main
UDebComponents: main
Contents: .gz
Update: debian-security
Log: /var/log/reprepro/debian-security-stretch.log
Origin: Debian Security
Codename: buster
Suite: updates
Description: OpenStack Debian Security Buster mirror
Architectures: amd64 arm64 source
Components: main
UDebComponents: main
Contents: .gz
Update: debian-security
Log: /var/log/reprepro/debian-security-buster.log

View File

@ -0,0 +1,6 @@
basedir /afs/.openstack.org/mirror/debian-security
keepunreferencedfiles
noskipold
export changed
spacecheck none
verbose

View File

@ -0,0 +1,6 @@
Name: debian-security
Method: http://security.debian.org/
Suite: */updates
Architectures: amd64 arm64
GetInRelease: no
VerifyRelease: EDA0D2388AE22BA9+|4DFAB270CAA96DFA+

View File

@ -0,0 +1,66 @@
Origin: Debian
Codename: stretch
Description: OpenStack Debian Stretch mirror
Architectures: amd64 arm64 source
Components: main
UDebComponents: main
Contents: .gz
Update: debian
Log: /var/log/reprepro/debian-stretch.log
Origin: Debian
Codename: stretch-updates
Description: OpenStack Debian Stretch Updates mirror
Architectures: amd64 arm64 source
Components: main
UDebComponents: main
Contents: .gz
Update: debian
Log: /var/log/reprepro/debian-stretch-updates.log
Origin: Debian Backports
Codename: stretch-backports
NotAutomatic: yes
ButAutomaticUpgrades: yes
Description: OpenStack Debian Stretch Backports mirror
Architectures: amd64 arm64 source
Components: main
UDebComponents: main
Contents: .gz
Update: debian
Log: /var/log/reprepro/debian-stretch-backports.log
Origin: Debian
Codename: buster
Description: OpenStack Debian Buster mirror
Architectures: amd64 arm64 source
Components: main
UDebComponents: main
Contents: .gz
Update: debian
Log: /var/log/reprepro/debian-buster.log
Origin: Debian
Codename: buster-updates
Description: OpenStack Debian Buster Updates mirror
Architectures: amd64 arm64 source
Components: main
UDebComponents: main
Contents: .gz
Update: debian
Log: /var/log/reprepro/debian-buster-updates.log
Origin: Debian Backports
Codename: buster-backports
NotAutomatic: yes
ButAutomaticUpgrades: yes
Description: OpenStack Debian Buster Backports mirror
Architectures: amd64 arm64 source
Components: main
UDebComponents: main
Contents: .gz
Update: debian
Log: /var/log/reprepro/debian-buster-backports.log

View File

@ -0,0 +1,6 @@
basedir /afs/.openstack.org/mirror/debian
keepunreferencedfiles
noskipold
export changed
spacecheck none
verbose

View File

@ -0,0 +1,7 @@
Name: debian
Method: http://ftp.us.debian.org/debian/
Components: main
UDebComponents: main
Architectures: amd64 arm64 source
GetInRelease: no
VerifyRelease: 7638D0442B90D010+|E0B11894F66AEC98+|DC30D7C23CBBABEE+

View File

@ -0,0 +1,174 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFyy58ABEADTs8KDtQRcm5ZbIxW3g5YvI5zvrmOReSufB7WX7S8mKvpVO+cO
CsEhlb3NCdp7j/Bc8O8ccvN8k+yX/pQaSKJZ/GmzhZ+Fgjz1PxnTLYoCC0NSKSEZ
8EF5afm5zCdvzTpbM2S/1LywYkFBUqFgFcqMMFLxh8GqOoKQgqbY5ZAmYzC0v+Q0
T1pz/jQymdwwdUotvLs2knkJBz9u7xTaGdfKwS8vISnnyM/QrLpXS/WSSgVzYT46
Hv637WcPze+WjVQ4LhXEbwVSRstHiObxIPaNzufbbotlAVzeKiVnNu6qgnKK4/Qp
ZUYWztGIosZPNo3SLFPbhe02nNGCyNwY0sGFsaBUH+UQ+h8tOHUXnuf4Qo97eMVP
1Da0UWPhWDZ4uPjBDpCZIdVa3rJ6ksSIkClA9ovZlI/fYdTI/A5lEpXZvzIxcCoc
SMjU8hzU5osYX0JjlgmAUP/H7CA0LWxXIZZuDALPgvyLjaw7C4U/ZRPXEP4VBjXz
abb93q5XY3WUBbIckf+lJvddZNv8wHFCmAN0RLeFZR/QojPvxvpgrlSVs1hetzis
XcGhQyZtGzgfadqBlJAKKmjkU7w4TjagLoSOYzlEwS/9PWFLij206txqkMqRWhxh
WF1LZRaRb6OQLYqXQUg6oWiTzZfxFAEgxx7cR6opawyx86xf2HMmVR+DNQARAQAB
iQJOBB8BCgA4FiEEXmGyFyZdqYB6I8X/TfqycMqpbfoFAlyy58UXDIABgOl28UpQ
ikjpyj/pvDciUsoc+WQCBwAACgkQTfqycMqpbfolgRAAs6J+0laTDAd7LwfHf7sd
wFemkDaTB6mkOloF/n8CgGA5zg1apJfeQXTmwJeFUARLiHIPyzaElzIi1NakyR3l
8Vs2yzJvVgWDX4wJuFhlyxZTv00gt1hQ+R99n3V7vnX3/6Dma/fjdmzHtAH4xWXa
+2zkOSRO/kUeyEzMCFq7a+/1hP2Q12zDkJnbCT7yBLrpC/aEKhX+P54vZ8NnQxol
w7g6jzogTkbjHQl9X5zJRx7pS6TeLQj60xaecN8jc+kyVQIBvDDDi/+DeEGCuyMZ
UyRa+fTSbYBZFZ/RtImT8nQGoDZOYHkVEwyr4ggEKasDfkbH46nDfmuwGzrsxaBA
d500sV7iSJgfmwf74Sd52XcqQjyxDcYFIUjcnhmfLTbk6mEOhrqnIfCAcV7w90DP
zAWaETxB3qGdwAJvHSsTxk2NgD+z1z1enbkszU3PQ3VPINOnhy6koTx6SCwQqwFn
2zH9P+FDZPyNWmZjgl9ynWLP7ojyH568HAc65W/szFmMgOt4SbytkF2U4pxqbzMa
zZZ04ZnR61RYT5dY/xlh1eDdU1a1f6h16oSwOhiviZwmeo07CkzjPZGOPBVPTHQC
IYiQJJijO4B7nOnPqqAhBVaaqQKAANWYmjDMW21s84qlmdP9gfao2Icox7SwED/g
IgpPEGzczJjNIWoOwU+Z1Q2JAk4EHwEKADgWIQReYbIXJl2pgHojxf9N+rJwyqlt
+gUCXLLnxRcMgAH7+r21QbXclVvZum7bFs9bsSUlxAIHAAAKCRBN+rJwyqlt+j/4
D/wMClr929EM8S+bTMA70KmA+94EPbIazGIr72eZt16y4FMGi02mI+XipwQH+oIK
ueXov7Xl/I1sFM/33YZq0dUWa2EAjkQSY4g6ZJT//9Y0Pa2lbgV+oOvT/bgoBO33
HNcikKQubbavOP6RuPDq82QfjFwx1JA7+7tG1XohW37ZtxIspRfIJ3CiP9Qd/hYn
mNs5QZsQ8ZGPmfvpXnb0pWRnSIcX51RMgBQkr2IPsGqiwUZYmbHLJ76+A6AMoANx
UICoqUaopMmPbeYv4V04XM+0396yffapt6iguxyq5FEsW41wsPFxa90S3kXPsbgw
dmZIeqFkYDB6oI0JPoU9GVQ3UEcV+W4arIXeUrTzvT312DmsYLZcGWoT6MbKmDWY
gwMH77ZmU++EcaCQllbEB1HK3R0RFz9QG6wYihd+Ilj5R/YEYLU47ZJ5DQXAS8Ww
1RXG0JxDnfpZnb25wgJkfCEamoSqp0l9SLLgqIz2zETJ6Whd3F2eEw3S1NSo29Ep
SbTK4bWvvWaO4u+RKrCBzDJ+rHVTtfSuHKBhvdy36R07jBMUnDz4sZQgNHamgSmh
I9AWZop/X7hmJnvNZe2x/uFOHvHzcIpBNB0CqyEuqpDNdf1k4A24CEGcF/fn+YG9
enlPha/KzDrvNNrQ58NpX1hMKWM9659Ci0EtspLBEx6GP4kCTgQfAQoAOBYhBF5h
shcmXamAeiPF/036snDKqW36BQJcsufFFwyAAYyCPe0QqoBBY54SEFrOjW4MFKRw
AgcAAAoJEE36snDKqW36hmYP/1+Vajlfgrs80MMXv0ArgpGg+5YvigqIPu74LuwZ
GHG9afsWicddSYRngTbaFNiqc6rNZDXtnEruDovq7CISokyHvM0VNiSTY8vap//P
QW/8+ZWyW7ZeQDuqU3IRzvYAV3RAu2JaNuZWaK7czg2J8T4Gj1dFYAwf4OPx2x1a
3HsRTQCGioTrrcuhDbuhOvAH+mY1akYkWXGdse04rKlX9HNoSLKgwoFlqFuxAkW0
Yy7qZzNOhxCbMZJojoR1baE0Keer98rF0OVuHtQbvON+Wm4hYkku91fgFJ1cgvYQ
VE+lknME60DH7keiULBmjQIwcCbG9PN1zOus+/EnA5W/qf8lPX/rh2tppmfAEUbN
yxjOzTdEpzrg+Urh7V5fAThTcNKSrYSjbY0CN27EBaaiVTWYtEY6+13eipQV6yyj
GiAAKwva/ehlFzFgpRfmEEZZzq7US32TnznxJ0lU+YgsoJo+3TO3B77hAet/TfU9
uQa1nffUpIA8CWf2MIKY2lfXZ5AF2a1hPpWPCG3fB7YETzmgZRYnEfaS3zktSlHU
KZzUXcM1zBzUmGqUqgBbHP2wnD/H0y01ubff8C57S/sJ1OTJCt8/rnT6wtPPLNL3
cPYFfpH1vIc9tYluaN78nWqmfqRnaD53mJM19gCxJcOAgUILkOopRl8ZStrqwipi
tj4hiQJOBB8BCgA4FiEEXmGyFyZdqYB6I8X/TfqycMqpbfoFAlyy58UXDIABMJkR
vqlm0GEwUwRXEbTl/xWw/YICBwAACgkQTfqycMqpbfqZsBAAmLNngcE9k8LstJSK
zMGL8uWyLRq+DeAHMQ4OZT8aa7paM9PLPeNjpktnxAtvoDy/ZoJaSVWhTAMDMD/z
PLou1VM43J1dBMe5mN63VR6QGVupfjuQ4h6kLd22FUXvnrxPenLTnEMfSs0ZJ657
xLnDvDyZy10xoft9yJHxHFRcD23ynGqQqatcpFltPieoST64KzJmATo+mba6J9vY
4DRrfhz3WV2H5RsWueJACYsKdkW05ZaPUHujIZtdEFslGbpPgP89T3UBmEVlTXNm
59uh0WOdlvA8ESLQmqzV70U+se8WP64p9YXYW/WMh083sq2vrVuV7t4YKcLWBB61
TcBDgVzKXTl2Kde08YEA7wmVG0EH1DwFRHkxirm+PyaGyuuoyke+LNZ1YqSdrPtN
rTC/2WXIiclVfeqFzc1bVcu9E2MFf9Sf2Gjpi7h4xvEiK76ap2+w23eFIRI1DI5p
Gr/ryApjGo49NrZOocKIwUtZBZ6iVZABtf8EPwgeMea250EwRwSmU36w0hba3I/3
G/nZBKtG43wecYkp7hFBbOQ/I3ARPe3Ecmdr14baRIqVZwNL6F4VlYMaXz1jKAXX
ktkrmq2E+mUQvK/RR1cQg9FMkvMTFBz7S8kqc0RvRcZkuJ0oyMaUQsyZmEHdUmnV
VCtdg/qUkt4clowLnNSfgzYzPxSJAk4EHwEKADgWIQReYbIXJl2pgHojxf9N+rJw
yqlt+gUCXLLnxRcMgAHHT2rJ6TOzBn9S8z+kWexnFbBwXwIHAAAKCRBN+rJwyqlt
+nkcEACEHAUInrpSbYPzxPpzEWe2tMO5OQa2URTA50F9i5TxJ5brGwhK2OLV+7oO
IRx4xOTB8DYNjgik3E99xWctiBpSHOykSEEHcJelL3CN8hcmJKYlL5cdMlbZTs6+
JV0jjp6QRgqBbHNUXNU9JBtH2PniKM54b9egcKbsljP5Y7OPrwStu08gd3lgnPHN
6zGUfHjcwt1ojbVnhl71v3pgYBKox02za2vPvfGK4bTjZLRVekfFgeWFBeHGW7YC
DeLjonBED96HSsBLvqWSCjrh/Ku31eV/nDrd/fhrQemmi9wshBPGVyWj9QzS8pIs
4ShgOBdca6+3dJAPdK6dj3fEHF+6Z9UZvgD3FAan0G26l1JW7ryQsD/iQZ5AufxJ
kR3IP8iiyaGBUhdggyrBqBEos1sSgtjpUewdUbKVwUPtPe5iwSFVyCpsK7M739dQ
MQaEvxkvohL2bvNhX2T+BmSvVIleZAYJzuzPWJVzw5tfpyLoGMHhN+nO5VXm9t9E
GSJbwDtmtkxAvoeJXghHr3VhNfZGlMiwoSDIJHTi6raD3Z6KMarXZb4ih+NG8FwX
PD2lnw8/c4bj/eqSOQgPxeY+hJG8QwiUtnbg3tSu4xTVK9mnVEHH6HAG5aQyRnfy
us6NTOOZZWaG7dJFsCCtjIWzJ0fGKESHz/b8V/Crl67tYJCZmbRQRGViaWFuIFNl
Y3VyaXR5IEFyY2hpdmUgQXV0b21hdGljIFNpZ25pbmcgS2V5ICgxMC9idXN0ZXIp
IDxmdHBtYXN0ZXJAZGViaWFuLm9yZz6JAlQEEwEKAD4WIQReYbIXJl2pgHojxf9N
+rJwyqlt+gUCXLLnwAIbAwUJDwmcAAULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAK
CRBN+rJwyqlt+umHEACJ9UGJy+3Ppc9W39C/CSO0/DUlTodwQ6jk1WW/ayp1hYX3
nWJmtp0dhDdEYx0eGzczWN3oFhJh5/No7VM/WisTDuhhPHShOJ7u9g3OlJ270R5F
fuMskaF6rtaiecTtX6W2xYlYDMEmutNZwVuMw/vtZdUq/cLGJ1DBgPXQ6lbX3o9j
ufRIwrrDZ0OU1R1fFW6+uBEunixiNji3zcf5/Df9Kq5wO5wOL9OM/wRbHPbSDD9d
3VODSiDdWcSBQVepMx7/PvmdL/466t+a1kGBMOP5IB8qo0TnpsULpzj7JN9vH8t7
FLKhjB1vF2nxfSK6DZjZbVO7avrK+GbLmK7GBVaAl5V44W8vapTTnKZh2CqegDWG
kAWx+L5+lzSL9Zolz+PJRgDnfASplWvLcogGQELqydbittmomDi/rUxcQ+eUQ1ki
7o3MMBSJ5nqENluHg9eq3MsvzhM7+0O2KrsufHo4tFEdEVXV+5mMRp+cV23TNkd+
MwL5MOYek2/LPzRR13n/VPdGbe7wJQN1LlbOq6aniDzEvyytQHhbUsOWvyrGN4ph
wS+WIAovS0Tgs11uz8tiDO3dlkucyevRwbN44U7Xyopt7/T3X8tyJqphpasfQqsf
z4V1BDtnqPtwdeb82dDgG3JA8fNilUfk3T14z1EaTnA0o+te9G8ktPzsePB8d4kC
MwQQAQgAHRYhBOHPIN3/5LiegCZY8eCxGJT2auyYBQJcsuvHAAoJEOCxGJT2auyY
x5oQAI2VXupB1fXFqBcbclXyRoiT9Bp02VvoLslHCkj0xECIFa6/c7qqBsfDd5Wo
f/7ihyZHWt8IkYdzrOVnYUR7CsxJrEUzEeKBThWPL30dsVVyBVFW0SYei0T9RJvs
DchAHezCvOaDNha3aZ7r2Ks+gYVFMI5gKZmtu2f7bObkvs4hB7BwfuTaOxlbWrJi
SIlHnNL6HyRXMC5cfrRI4VRxZxL0Ud2tCe2ElcwM0wQQUv2WlCt4dM2Ti6oQaaT2
e8d0Mt+xjj9K0oKcaVUs6BAKTq6Al/vO1sDlv/xuRzWyccPY6RZrXld6aP19yPHU
HTJSrT0h4VPyT+7LElJl1gShldFwArFQmmNIssEQK6FtkTZkKa7YTRr1HVIA3+tV
dJ3iiVxtsDzcysPBD52ZMtgNJALTVR5pzW9NIdJm05vhUyQSQxeb+fbBXbbLmUlI
lPbbH6Z3RaVi3dGU45FkU+AjNrISTNzRjmzcb0UeYX1TRxFW7PotTYPNPJH3P0Zi
7mPx5Iom2amgS3MMg7n/1uLbTCjfuG4JSi3kz+lWH2whYMhOa/9aosCozJA191hQ
1XMT7q2rdTgW6SUfwAY/4gs3EaqTNNGOjk+1QyXBpq7nP2EKl/7ndjJuEM7hQwdD
FkjsI9Zec0L/q/A/VN+pW1xcyKv9eAkd73EQGX9ubRs/N2CyiQIzBBABCAAdFiEE
btb1y1+m+y9GCuiO7aDSOIriK6kFAlyy7OkACgkQ7aDSOIriK6ltIg/9EP1Zwe0t
zXKKBvyUpIuTsYyZRz3w0rrv/2EuzMY8Y3UE/e0hYzPStvTPrXqR/Wuw1QRbIO10
jXm4KW+mpbyDB7LK0gJvZFawynZp05z65NcvtvnPpxwYRtBsQ/aSQjj6oBLW7V21
n2X5zFNERZcX0O0jwZQTn/g0hgMrd2lYIW6b54bvwmOnZgNrvpHRwPlLCPFPDjBs
pXAS5eY1pWcQ8NrfRCk0yfxLZR2AtlaDoEmhswaGVjan+ccBhADnMwuCP9iECPiC
kr3tMyVWGrVg+WoW968TrgHHIZC+7sxGHU8wF/9EPsRl+PSfUQLyUodV6+UfqRLL
QnjOJBE8i1vOZjBpavMWFq+4ylYng8Swti/L+EQm2wGOJ/yzEuhb088FsorA+xEA
Tgep7a7j6m+JouQCuzHJKgaSR0IYKe2T7F73RMrTZ3NDjosdaDeCOt0xq//4ubHq
q9LBr8bsYUD2EAol9eGMxIrSxU8QY2RETxd+WBntvb7ZgPvCBC5aW0A9HD8xrcy+
KIg3PWU7nMdqVVfRBZryEmdwrNboW8S/ud3xyDyUQSFoM2+LCEOuTuwhcD0NvciH
oyL8V1cmJyMw+jCT8/Rit6XsAwXILbtSjU9Q8DkwNts5KsncSY6W3QR2t6fLiwzK
a7qLCS2yApQGGG34B+BQWCbW/91wisyP60iJAjMEEAEKAB0WIQSA6XbxSlCKSOnK
P+m8NyJSyhz5ZAUCXLLvBwAKCRC8NyJSyhz5ZAsaEACfrGCJKBZP7zbcE+EKI21V
0megq3bd96gqKVGY5OsvODHAgvzCevXhl2LCEiXJCQj3JCDynwn9VVoInloK7XZd
7iYb1BZ0Ce8PpPuXYji8vi1sHcTZZFm6H6uHoId+895er8a3GAOvWaaL953HA5fx
dV87GYTTneKRxJJpMNu/idFn1ZdxfUwoOZnBFuKbyNAcc8WWRr7XCZDq8X0PBa3b
Brp83h3sNKdSgofI3ZB9hND8cGxwJmxEKEYdVRf2NpEY/yywBXaXJ4QlWJRNdFAD
t9mG1fdop3TsvSyFCGzL9d3tRFbm5rtVT9XAzSPuit3YmL0pyc8LcWfH+kcunR3n
UvbtqKNGBBSz05wNkfu08l4TWPTQhui6/WgggYkrnjfOWibHncmpx//tGMvxaGBP
sw2AzbMjONTaGYUfJ3xcpclaNtXfwdclHQnH++t/p8eaUn4wbmOU8HktgPa71WLn
iKL3pSHOm5Fs4FxNiPO43PbB+UgUanUDwaGp7IGr5WDkp8D7yblrp/dmJKPko3R9
THwuZEFUjJzznf429QbEsj/Q1NItO1ZIBCV3ApbE8KyU3ESfmmQes5IDt/uW/ucn
Gl/F5fUvDcoN42SDBDSWas6SLPdM7MTWwodhrO6lkjQuDKOeGt/GCj7DcAX8Om7f
fGw+R/Z9J6kuigyJviGYh4kCVQQQAQoAPxYhBPv6vbVBtdyVW9m6btsWz1uxJSXE
BQJcs4vlIRpodHRwOi8vZ3BnLmdhbm5lZmYuZGUvcG9saWN5LnR4dAAKCRDbFs9b
sSUlxHrtEACK50akHPDqKH/H54xcNoBkPB7IudBLptUR3fsfmq/CzrDXYUiFPIBd
C4alSyIA0aYQ5nfCac54VM+SYHMtzeSMle2EuTBqU+NVhKUOrVlvOjvFKqWx2Vnc
ntOFQs5gTtu97nTDjuycXvX4w8GU7SVnpil0OD0wLSEMw6x12A4H56Pvtzu0drCa
mJSrJ/35iGI9TypmAN5T9kjMqrTeifpxEcUFvdOOOL2mpIBg6F8XuAYvMMX8rGB2
ZeQgZyAZOzNMCtLwOu2NQdFtFVR/sEdNZRf9t+46oCh7zOb2iPcLciUodfg6CEGr
t9C6bplDebKfOQu3VZAVa9cmDiThoDGr3Lx5toNHbDO8D6qZgbPcM0/cNDz6eOuS
JS9QSATXRC7Gvjf+Ltd5Y23sa6Bsbegix9BoJP1qkqI0XDi0sG4AEMD+TrWLYDVR
/NqbSub5RcLcjFJczC99/j+BV61wus/Fyyi1OTI9iOChwcvqLbpn7M5wxnuVgxO0
i0rimePznFprwQ4gshG3ioQNkoApW91z8NyuyDLIk7lnLyTvkwJ05ntY2RQH8q3S
sgKUE9Qacowjm6ZKEOivG5bCZnoaPsMqYfDQXqa2M7Ytz6tlE+v9VfgIyz2Jurav
OchTNV2CR9Qi4A7PS2Z5O3gDY8NwiEpivCQTZ6aR1U1/estvRqVpC7kCDQRcsufA
ARAAzTM+elVKuyb29MUg+cjp1cAntXmkErLF5RmWmhR7BndQEoLWg+BcjnCevxub
ZLffbeasYue4HWdyG8KUXCCS7h5/R+2J7f15So7k21MC2Yn4rJpKmdHOTAlGmKo7
D6B5vwvSF1EQxFH3PRfVRDoM9qtx4+C/3uq7MBXSXBAshGsBnQTZgdDt8odk5Awt
2xOrC+EY1X/nG06bNvwKYWrNDFsc/tTjRKl4Jd+Unq/JLcKwv5CPLiSSFlLWrcDS
RorcxklKyhfGcaCofcS00EDu+7qK7Z3958zqZWeTR5zW4mPcGpcg8Em6G1qX8lAk
rv5VltjJQajIjSGreMo9aHiOARjrJ/st3SY7YuSzJuHdxHbldk8fV7/npaSHn4DN
f00oOsgpe09XhmsqxVhYI8MxgzP5NScRNVEVKsWiL3WANos/EjTln3pISTmrGwq2
FFhTd2/8fk9cp6wZAh/UyJdX3CfdWdgRFM509zcy6ej7dlYkYnIOw2eHwEwCi4PK
klBjHaFXCbkP33oidhZMr89mfMRBy4mpwDAhM5bv+UA2qBhIMQtwjtrbvW/QjeRY
EKDTrli6hupzGNleajcvEynOztL0miu0ytkDEjTYKEXF6UykoOl0AWHX8US3dIHo
7cUUk6JuN55nQpeDIJ9eQuBmQEqJtWVJeB350Np7EDIc3t0AEQEAAYkEcgQYAQoA
JhYhBF5hshcmXamAeiPF/036snDKqW36BQJcsufAAhsCBQkPCZwAAkAJEE36snDK
qW36wXQgBBkBCgAdFiEEUjfO7vIS89UcdKvgESaVoOVisyoFAlyy58AACgkQESaV
oOVisypOpw/+P3UwCLsfpLuAs0QpNUJflPNm0AskKDUW07M14SKMK6pu/EbkQE1k
Cr0hKeHRjd1dGeMl7Bkihpi+8RS6ZSt8L2rcQwah9INDQRytjW4r6t4lB78q3IrI
NrBHEA40hJNbk+pcOQ47kTMi+BttiwPos/cpbioSEDVO1Mndfg2vtpmjogqE1Hyw
ZcQWpZYKAgsUsengFLTEmECRRRS8KbICYyVCXUXe8gCfcgiDs7piKMGmc+vd62gT
aNVoC8jkFQwWLvZzZjKb7GFS/5I8FkbfGwtOGqZYYGVWf7sb7WEQfO57HKxUjnGI
bCvQYbgu2uM1zkTniy2fubXQ7wWrxZQPSXhY2b+DHtmLMxhSPi4mTo+BItVbj72L
sxW8HhxcjarYRopwWf82DbZbnrGdex7X5JK00mBoOEjzXcFM+ySIzDjfrTC+a6Bn
okMti++EDdIcFmu4fBO7S7zee6nnbT26TbMPsUvNZmU2jhJyFpyBr2PKh1aIblMp
SywAYsniDtQCPMbUD4k3VAShwGG2CAYKeVnyg2ov4pHtcOHU+Z1hUi3rhnwZ2VuI
mymeO3/7kq6MUK8Gu7EHUm4su3Rbt+zlY0rsPKXn3qPE+uVDKPWVz7tLI6/o3JrR
9p8HNl7bVgSw+J+oWfGexk7T/oJB64t75EnkiZWQtzYdvziE2F2cwcVy+g/+MBKd
h6SrGvzRaVoZEnvspphpuKgdme9FEXuqmUapwztwNK71+SkjX/lJNWNun03HQQ3T
8j7tLlwEu6AUPQE3cUhKeezt8vV4VA0IQ++itQvjm+ZKdeLAVSyW8L+kjBhvDUug
2VLGrAEaH1syAjJiQsvIReO9q3QujBzGtREXeJgSFLi7feQvP6+QW25zNnVlsamS
++A7Tyy3WI1ABQqK0BqcwxkoOQaK1s5F6BsRH1G90jkYwl6eU6cGJYIo9dqA0/+O
lG/uRxXBmFxuNlK/kN1uJc0uutrmXgcQBHlHdS7MQyNAHJ3UYSTISUOJgsqMQGei
Z39UpBgL50ZJU9KUXxJYWUzr/YEtRzzVlr/b4+AxsAMjZdAeimZ8Y2YHA7P+M4z7
pKt8AjLI7Pe6xKOO2CoZkqFv18h8MO+yXeBR8iJQQXPVUZCyJl21eQ1DpvpTxR9A
4FCZrahNExsTZA9wv6lLCS7fVGrbgi7sIV1gG9R2reGnkHSn0c7g3RBdnoDSbebl
IfIU0uATOn4umDTEgg3jim+qco1JdnghlYdDMtzHB+xk+MzmH4d3xfi2W6XfZnbd
ISUL8jzK6Al6fegHQc4u3SSPj2n1KtSfN8V6QUxYc0AhAEg6SZsPQMqdQI1rEOmQ
8V9DmVt99tlJJvTXFUXZ7K2JMX0f8pDW7KtR0zI=
=xBv7
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,174 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFyy5ecBEACxXGKUyi5dFjPhEFoz3IwKlVfDxySVg+hlhcUEO657UHf/7Ba5
wr9eHxjlbpxetAymSNnptgh8oaJWcokr9UjeaTbKrYGpRra7Wd1W+f++9tF7BVvV
+AWBaltD5NDuq+eQ7kj72oeMa7KAr4702ZokLgiTsS9dPeDAodx3/jMuV9VxlJ7q
w07bAoUdzhlPBcII3MOCMfQmtwIg27/qqekeOnrGtNwscugwVqcBATxRZ1wNAebJ
60FH9FQOtPZJnuv/q3KXqoneuSMKiBKferQhLXDG/1fUyojNF9Dcae+HmHAZmVsV
K8cHQwgSICWOgWOKVHUH0YHYvElhNIWayaw1EswEW3WMa0F4tY+EDNHEII1TGOxc
X9VzbGT998Hiuf9iJuWuCgYZ75XGA/tUooOwLE77lxPGpTtLL0tr/lTJOkfwxVeY
ERH1LranSQhZAXDHozKPylGo2vLxfA4WNKfaC7Mgq2WKpDWjYtF4kO6/Eiyoiq8L
DqOkCtvt84PFoXEGMk3I1yd7d3bhIUwsgt6nkvn54xebJwVe5aK4MM7qCNZAm+7i
94iZjXTH9wUWX27n9UESqYeHjer1L0m/yL8sn4ceCMzpri2HsI71URwJp47GJTSV
6oAm7NJkiT5Oihcex/tvObZZXZZNqtwROBCkBcdb4Ii3upIfx8uQ3WBkSQARAQAB
iQJOBB8BCgA4FiEEgNFYI7f9FWH597zd3DDXwjy7q+4FAlyy5mwXDIABgOl28UpQ
ikjpyj/pvDciUsoc+WQCBwAACgkQ3DDXwjy7q+7u/g//Wzz20dlQymfkrtvgWAXN
8qw6ifkQtd/kNu61A5u5MGg/EViFnmvZdtYRentf3qnsDl3ZgjYhHMJ5hLVG16Gb
2nrkpQQe6rBX26PMkg/wP5uebUnPQscEO0KpVlJBppO4/rmJNKsphsRYCkgbZORM
LyTRijrN+NJw3Lirk59ykkWyu0PQN0by+aDMOjg4Qt8vfpNxeeEBtCg7wk5XuArZ
mDwcjqazkXn04l74LRzXynK2HFakROCWZQQxl87gpFXAzcdualbenazYI3nWcpPM
taLvOoWpse4jM2c4UC9fX+PLOCOh01POMu/7+omeKfuSLJ77ngS7jkCdbn8y469e
EBFh5tGD2piNg3IgSFjGFOIKt8eOOYQJ5dYLCYpDQ12qO3B/TnRiIwWGDPWg3wxZ
UEkVS+ZkqZcBe3qIqEQ4r/ZgG2vByWdiKDEYGIk6vITOP9SBzWE29M883oAvifcG
3cTwyODl06RMe/DJkZwMxbti0qn2Fpw6T4kozVVI3wbmuLm7kShcTxeE4volP44c
3mOcqIyXIoOQeCLHy34SmYkzmSJ7iE32u6V4hzvPOtfxFbR6VUKOGvFCGUTLfvZr
AqF2PiUWw9B/bXkD6j7js7eclYz9ClgDnW8p5HzA4xVoVAvZISNbwxtiwflplbYT
6t1Mv1sU2iyjjrncY2AYV1mJAk4EHwEKADgWIQSA0Vgjt/0VYfn3vN3cMNfCPLur
7gUCXLLmbBcMgAH7+r21QbXclVvZum7bFs9bsSUlxAIHAAAKCRDcMNfCPLur7ihB
D/4iace5p4gK5MTRNTibKNktYfpOr47BccPGdfeEx+PrVXPHAvFVoo6cwTBa0VeS
n8jXkosgwlXREUTsXFTWq0XFOKBg1OLzofKQyxfyYZLM4ge2VAGuI20HuwnAVHUU
/+8BIzH31CJmvsehWIhALaCxA7RbI01aREpiDJoiBNppHCqwXBRxzk3y7Shmo4pt
J+joRw4x9OZXjBC1y4q70bafOufglKGU11qMDqTan9LpbVT8eN/7xLuGQsUC+Nt5
ZB/UZkN7shfHiI8bEOTfR9hawf83i/ErAv3PhFmcI9D9SAe11PYGTYwZtGs6Osnv
SXyJNyxvanaFbNfowEUou4NGGdRMXff6W3qe7SQG976SHmJtHB5V5QlO9gVxU5TC
TQc1IL7+JJRhJN83Yo/CnOo6xeY0/jlhZDvVFylGuHDe2L87Q4GqU4ztwrq6KYPA
OuPCGrDTo6Dzc0+WAiZfnrtx11qSawa6hlP0pJdjw09fhBaugrdPyIr23b0iMwp+
Q8mMaqU8ud4Sfae8KuMvcaNF5dCNe4qJ3xVfeQCkZIsFVSWdq8LHxmQoVZYH+ZsQ
7QzjKZT5s6sb5We7scGYm6O0+1SzT0j4IoiXM39kovzmq40eEZktOm0l7qmDO5vW
2DcMSdFrf9bY4yP0/XiCgKIntl6xKC8FP6lBYl+fd4Jq1IkCTgQfAQoAOBYhBIDR
WCO3/RVh+fe83dww18I8u6vuBQJcsuZsFwyAAYyCPe0QqoBBY54SEFrOjW4MFKRw
AgcAAAoJENww18I8u6vu6IIP/RwycYXi/0bHlthWvS5dAfWlpkQBuG5ZZmxCgw0O
meTFPrIAMk2TZ7mgeiPGetwmvze+5QeRmy4zdSZfyaQWxcWoIE+oUaWEARLlSGIT
nDVn6fiAgjcqauT3Sw3EWp2UAVIvJOoz59aZI+msdglI82eSO+v/XoZ/Bk3KrwrA
ClCqsPfInXdodLeBbDxQ+CJGGjq87sjS6DM8LZFR6Y3rcJf9QbGSU1ZG+bjNb4nq
de29eIqhrJPcfh4p12ADNLUf0MFWh8KDkVOy9cqJH/GeYX3kPxl8cDD6s5PwEsrc
TIa1Iaw7cYSxRRZQJYeCf9//2kn4xQOzFwSoVDHLjg4tTgctLzcmiebqZAtoZGLA
QGDq2SrnPc9vK3z8VMgzrJM1pNkLrhAvTZtyyw85bq/SXUfymPnWDhk5071v6yfn
IMLtvzgA+FcybD6mRLC1tUFhfeqqVi5zbw1haunGnwodSTw/z2BcgR9fdCGA8ebv
Iwh8txQsDHNG10E8dWwF8pe/e8uSdagmITTE9QYN04rV/RRMY6WJ8+2pz12XQZmA
18BPljP2VIHZcBg5Cm2sSgjNA/rpwlGtAxA+ztimwnV39p90BAEVUco8AXXM9cBa
ya2pxNf5U0hj6xMG27FqIcdmmyKlys2m6kPLDuxrF0hPBIa3WM5jEKXercrsMGC+
x9VoiQJOBB8BCgA4FiEEgNFYI7f9FWH597zd3DDXwjy7q+4FAlyy5mwXDIABMJkR
vqlm0GEwUwRXEbTl/xWw/YICBwAACgkQ3DDXwjy7q+6H7w/+OLbg5w8pGGnm1t0I
2QoLVKz3bNYLf0aJ5SwODYjXnQbLgcEjct/4gexTy3ahPR6zsX2cq0BGXH80A2nT
g9MP20BUOjtQnGjRozn9FotTOi5HsxoyIBcP5pfk2zcfcskpTJchqVhB5QXmw+vl
CIOtjSgLjrSPmRnhHqKR8bjMzvwo+jjCwTlWVBtjU9UnA1jRhvHzTp8SLC4HHY31
yAiU6FbAlthC0UvCcw/c0FxEacZiy4tDYJUehV1e2tdwHf82yRamZq/wnU6iEM9I
KUNcxHKgpUxwOSK82urpP1gkDb3d8Qp5EVkhTuCO8C4ws6PvFIge21e+XgDLgeR2
B6+SPU8yJdZIpYJeqN9eGjlym6J5YwBi4BSGEU8tiXvfg0ZC+zbcj809l70QMtKc
Cb7CFXQcIpfuBHuqQOkN0IphwtYTJ8u+EADFWwbTPqLrshN85BQQ44JNF/BSkl7j
ZnHJwUqMIwliP2xxBfeHBDiSaGkCju1xQh4fRB3ob2UA/W0AAAptuayUkKS1gMVu
e2Y32qzPOY7mwCKahLQ1wn8AB+jVhndHWMgNbDfJ02BtB3oGyvWDuUaS0XYKGncz
0AE8UNDyn2Xj4uESJFQZ3JP24FVGIDzVUJkYodF4mSZL/KIsjOXSBGitWB7uVlh6
zZzuTkwSbiVvRj75r6xjmTJIlD+JAk4EHwEKADgWIQSA0Vgjt/0VYfn3vN3cMNfC
PLur7gUCXLLmbBcMgAHHT2rJ6TOzBn9S8z+kWexnFbBwXwIHAAAKCRDcMNfCPLur
7vrPD/9I5p00zJ42MW0wbAEY4QGjiAVRsv1Lw1VUokeT2h6s0sBhYn+SM+lTCAva
Pp7q0KGFjHOSVCIKlweCV/1Iw9EDuReLpfY2eKNFWRDj+lKYSI74Tos73sNHBRvp
5xXkFqLvNrBmTYfvcqr2FIDfF6LXAZb/yUg6NjE4E93kilwq8lh+3nPqM9apWo9H
6fr6rGfDt1hlrwUDzrI5O7R5tjjQ1dd79YPYBXS6Sbc3LI8mTH6HIKTVgOw1rsA8
haEL1JwzFiCnbmIZ4s5dc2yc+ALpVc3OdUKrCTpU/AthQAu/RSXGN9AdjdLYPDGY
aFer3pZvN2Nrh1ZB8j+4MY1YiOp0qgLQSxaBqq/JRY7jVDNxMyNADZuf7ji4qeAp
9nbIiCWjK4oqKKmGG78BxVx05zTteWPtcxkVSsPMfOgjaEefagYLIgv8Be1+avVg
hboLXrOIrHCFPfV7WNeLcLD8Mwz7/JTFP+XobAvim06QSe5u/wJc85AFTKPV+oCx
dn0dE81bp2G9r4/ypROBBEkYnoFN1dhmysXs8c0xRAboK56WxWihVQhiK7fLOonM
zmceMeiaKsQufNoOQ1a3rO4qd4Dks4cwXWiGhWRXSFWY1cCbxP34oo/fFKAxLBdq
RhN/IjafU+tw5SygW/3mkMHKVxJ2Tb+726QPhb/cYfRfpX52+bRHRGViaWFuIEFy
Y2hpdmUgQXV0b21hdGljIFNpZ25pbmcgS2V5ICgxMC9idXN0ZXIpIDxmdHBtYXN0
ZXJAZGViaWFuLm9yZz6JAlQEEwEKAD4WIQSA0Vgjt/0VYfn3vN3cMNfCPLur7gUC
XLLl5wIbAwUJDwmcAAULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRDcMNfCPLur
7p8KD/4gCYmz6IjMnhsz8x9d5lP3h+wIdUdt0L0QCNceoHcblUFhqx74HwVMLFyY
k+8/WHrLry/N83mgWmP8GOeOsQG0+1Fpd+0ew1+smYagSjyON4crv8W47Yb48qfV
UwT9VRJqdW0zga6KD8F17I3ssOVr9pZTDHa33ykwzg4eUvBs4wYdb5dZMYJImgRA
NRzgeiw70LOMZyaPh6yu7i+qcDuVUP1R8xF14GWmKgczsNnOGvaHTo+lc8SSTwjb
OhkNOSN9X6EYdqXRgyeGGiLcgWL7cOmezLNVOV4pDUD1T0jOXMV/t+2hQaPNmIJO
2hFa4m8ewi4Yo7QUw9q/NToJNMwtr4ZeFH4taCfHbfIJBQE+BQJ1MXDckH95LFNF
v3Zfh9iwEXyM1P5IgcgGp5mh7Uzs+FfyNLBzIoC09Kgbtrgohihm5S7jJD7ghogW
tQP6Gvz1XWvXOmljv2ccJKezbL82ChED/uSBnWypPxs2zbtyEvX16QnwJsNZMrvT
Whh4/4jaDrM7wncmU4RoV96KwwTlx8V4XlkEielMCt1Po/9Ws3JbdcFKVEIUrLOB
p631evHuUG+mmBlGAX1k8uiEVK3Xvrn3wdDc8+tPSxDQ9GCnQ4YPOv4SU02eUB+q
tBs85NbpULxAweKyMumARNVuqC82viB2YryUZF5+JslFnmb8pokCMwQQAQgAHRYh
BOHPIN3/5LiegCZY8eCxGJT2auyYBQJcsuvcAAoJEOCxGJT2auyYoSMP/ApUnr+O
6qzfkCNkxWcyFe/cSLsjKYDNeneaGIVnffk1gwltQ6/x3403UYW+HWFMdOf+PzRu
KD0habntmdMZP3a1t0YiJkRF4rGX2rqBegesPiBp74fSlHtuy6cPWlu7PYi0qVs1
uZWiUF3eBo9DhN5j0w0vTaEVBFh1reahhOw5SlTXj2ITGViJXcQtFgcn5CepbZ9q
cswgnCv5RU1qXUxqiOTT/zBmVdOsNiZil5X39L5t8GE6yNCNaQrm+JNM/OWPswEi
fOhN4eiCysIDwKxGLqFvrw3i18iV8zWjJ+sQO2jXeqVFaxfT3HR3S24RO9VpjtIw
s5VdFjhczkqEWAHV/VtERDgrhiEB3tVwrEARNGjuIEJvWEo643KRkI2w+KK7GB0R
p4meBXHhyDucffss/0t5NqZynjZ/DDGWa+bsk/l2BI3KvPi2NZXXCXkZHbDREQka
kjlQgsM8Cy0+a//TU2X+l7+aXHSbrwVlAfF6yA6Lf6yu/GTMyS08rs5pSwxWFucu
cYPgANGD+V6XLn490un7iewcjjml6VKbi0fEqHkUV953tgZtnQGgZ9k3KL7aNdAV
/GtIxc47sL8HEsWgvBOc6s1hXbw7v1+bvI8hS46bhxMYWmXgznAdQPB++Xlc5kHu
QMAyQfaxYui6cXZra6+26sKZv8xYmroQVzk9iQIzBBABCAAdFiEEbtb1y1+m+y9G
CuiO7aDSOIriK6kFAlyy7NwACgkQ7aDSOIriK6mzKhAAhd7CQ/3Bl9Cvk8x+Gt5N
EDnj80gLGKqxUxoRekSAp6Rkh4b7XOBbSb+LHgniPgmXZnnVhNChfAlSmnmS4i+c
hJbu9Y2B987exiNXdBYWE3VBMvzy8a5JbUF8Guqqb9DlzAaD3rHOUSOK3HWi+Rhf
9wdFKVzDUXku32v4fmxMSSTOqpXRj2iVnuKLCKR18hNiZK5ez434gQDqYDvHuU4/
jzsXsG4nPKfxvSjZk6hykb0rWvxbmDA1RVTLKAdlL+nm1dNoJKRz7/OmHf/u5Voh
inSDhlXbtWHL1PO7mqgqst5+0qkjImENpsQE9lKAyyV8xo/PsS+pu6N6NPxyjfTL
tHHyBnUOwS09vvib8aVYSH+3GqCz0c0ZpmGaTeDT2fhdCBFs7DKV6HYT3DbnqBnj
tQF2PBFUSDJlbRafDAu2JwLVPC3QL/iYKUn6NQHQkrKPYp8uQAMSLLRCr8lGMCG6
4oqsMcVXHv3QYrYqQE+83dNSsZa+BabYTyz+tZS9EtJkN65UgrRvRLPvVazAEmJq
uiHZxLuwEuSUmnpSfTY0KGGJMhzsN8AI98K1sqDjrUvmgHH7ACWj0hU3xzkd0yOG
RjH507xOBFNpgN9LsPpRe9h5vpisFOrJYeIp2hQcoPDKHvgdeyFau3qdOItI7S5b
KJUW7UvfXu0pH+HyydTpZX+JAjMEEAEKAB0WIQSA6XbxSlCKSOnKP+m8NyJSyhz5
ZAUCXLLu7gAKCRC8NyJSyhz5ZKgGEACMep8c7JVSEd6hsrmET50hd8U3tlwzhlwj
uNM181mN1P1dV+Tcjprz+Dr3b5U3fuA+Irnijn3Vfvoa/DD5j79dzp8VVO5DlSzx
wTM8fnswlJtSv/NaCAFsErxX7Gi54lgwC1abuUor/YdNimij06hg5PRD8ZtjAM+j
N3OI64vPsmhS+QPD3sz1nuiuh59AXoBcVtND5Ej7nHcK3WOwf8xhvim5g+eyoaPS
T47WzawWjSK/SgBQVeJsU0B0vb+DQGemnd4QyVI5tGKWz+vw0iAXieUksqnIYDlt
NSUgru3I+M0L6cIl9C9oj+gvXn4vSwpuhwpSJZS7ratIrhvY+uShBq0T1gSy1buL
c6hkDvyS+dIqnEZzPfCBAog3Q5mPD0GZ5rzk/XJ9PPTgH4QEug57MvyYyFmvIDtQ
1ZmfAlxWcKFMCNEpuGhL3DcmZWqd+Fqs4Ik/UsEPQpSVhxcsLf8wDO1dIzJBamlF
4IJHImoHtsmMFGI9zwNDwBo1jPOKcPt3FbMlQw9KUht/H7Xg6pbRQ6yGVi9ppdiG
k1Eb5B/J72QjwSaVKhC1W/nPNZvF5NxRwImTW1i3Llyy06WebperF7/8Wksk1pHo
GKZHt5JS816DTfOVrsjkFqC66mJCYBy3vEPONJWOo9gohxA7V0SP9vMEZJa8UpaY
rDGyonjq4YkCVQQQAQoAPxYhBPv6vbVBtdyVW9m6btsWz1uxJSXEBQJcs4trIRpo
dHRwOi8vZ3BnLmdhbm5lZmYuZGUvcG9saWN5LnR4dAAKCRDbFs9bsSUlxKm/D/9p
B+G1mLPt2DZveRhLQXi9w0QJlmOH3Ec/KYZKLbrk74yV6hgJS5fP9NYMT5/89wDD
KajmXy30UpiX99Y1nOeSGV7xk0LikiVvv1ZQl3YhsIgyiHiCtYgVXxZPhFYhxHw5
P+7Zdl00gkTilTBuVbaVQLH+S593MBla/IX7PXPZFyPkArh3pyDleiE3AQiU8EWo
0Zjhntrfa9VQtk79vC1ho0//p+W0EPyhiLl9nzRvxoCjveSMFw8Pn+Qr51FzC/Y+
EGjYao0H2PLce4CcogWh2no0o1zeFSm8xoyGUgNczs0hMLkrQTkr2+YQj9NJ5oKd
hZM1uRzsJ/DDXaEQTZjj2iIyU8e0E/OhOaq3OnTMVeiZEy5ZvyfyYlkzb5Qmcufv
OCh5rFtUj5+6TGl3ywRyTrs21MjCVwggBn2KU0Kg/gqh2IkPavlV+LecH6CJwplA
lsH1cnnnm2RJwOQhcdAAjbpjvkAVi4k+XJGnVZaeU1KCG8nmVSWdKd60Li4EOPlO
swc5K9GmPFjEfHkY6dynKbzMh8ukSozSF2f7Z0wL+c53jMCHpZ/UZUBqNjmhKcoS
PCME5pKP9rUr+L+sucw9gNC9mwWRTj6KbjLWo7fvQpJaBvcbYNIpKU7ViBe4Blvb
Sl0Me56Cmew4s8G5T2cpUG2Aumg/Rr5lR+MXdfGjVLkCDQRcsuXnARAArgqqMQG0
iABrEdAG6Twzp+wZV7r/2IVqJyhnGyu0+yoOcYqai9eeP8XM3yZk1Y95FE09g7RJ
2jacyhhC5Tsrg+GVJ/1eSsvudegZn+QnqEZ7HrmwJsYKFKhntak11Tvvhsw08sKM
4KVoxZSmMgBq84OUW95ILySM9vm8ge1+aYgr70flXhKne+o1VKeHWlovtmIGpWaJ
7fCHj95pDoJhe6uUkmEIJzMrNIaM7FQ0r4GdBYwqDImW07zMRWk80Av7uf6f+5xc
v27y2yW8ZjKF5u0ZKWln+VZX4EfUdCgJ/0LeV/v9gVbCeanNqGJB6k6DpKu6IzGz
KXi7rHFi1GiuoiVgy9Svx27iRpJaykLxnGFn8C7Lpzo9q034gGIWLwQnjT1FdPya
2pFV1VHNFZQ3JnQRJwE8yGhw/5bpllaUUJKvydSWvBMgOscEHQdtRnA4IMUXrHGV
IhYN/awYkjhubeVJuhbsxaQDqpdAodaoIz20PVBfE+XFbfnLCBwxgzR/m+mE0iW1
GCOBSoFw5SPQBihCF/PPBjqQjZKJz1btUvrv7gpLNuLEyA0RsHBFGqtqvT1K4Hvx
6Y7di35/Nm/Jgty2e75vMSGUm1B+G2pFjEypZjtOckOHQ9hVN4svvMJGFnqcwZIa
gMF+67twWmv/AVb5CovsXLKv1qTzplRJWiEAEQEAAYkEcgQYAQoAJhYhBIDRWCO3
/RVh+fe83dww18I8u6vuBQJcsuXnAhsCBQkPCZwAAkAJENww18I8u6vuwXQgBBkB
CgAdFiEEAUbcbUoLKRS97TTbZIrP1iLz0TgFAlyy5ecACgkQZIrP1iLz0TiL/g//
UwdPym98fCTVZJ+HwHId+Ssqo6vTgxA/6DLGRvFILie40vA4OnFrozusDVh/x+Vv
+pxbtdw3w16kfpDifKicx2o4ZyEYl30pdVuBmSEOhFvI3ZgN6P79/Dv3KhD3QQPK
OMSxXO2vCh7BebmpfT2rdukgFED9vxbj1Ec7IMfm4VobFJZaFXZKsTBc09MQU2Bm
1JvtzINsdwzp/sFTilxmqO7kX4DmTM3k1KYmMkx7xq5KUaxSORZHIqDcIy74pOIw
TuvHN98cYujCKFDk0MfHBovXPUnFHFxd+OgSEbxGnb4Uuus1h89VIU5xviQHPGe0
T9qG6tUBvFuCkPzcWxUg4AN6nxZz8stZHhd0ceuSDeYnGBk6X/eEcYmy/kEbJEqj
f+kuY4VFIDkShnnDrKchyoi/LmkfvW4fOEtTpmB8nkflolKfVaN2dEo2hyma3iKC
5zp8n8hlNwhkt3DiGyYXU0RD7JAbX4jVZSVov5PhAjmrEksxslv/ICrAJ7zfCx62
zzm37TGwiQJTWQsIcQ2PRPWFWk/CHAVjNPsu2QpMsGUWccGUOI6a70LsVnnufLzt
c73TM37Jv9hCXljRvVRikTy+StjFZlVQdXoZvNJhhIE/W+/iNoBvChD8pKSWe6RJ
Yto5CxCQtN6IKgAiUtoXusAgFSB7TZ5CJF1NFZ0VQabJcw/9GunyNNj+RRdMXbHI
VbrDQoqKY1FAhIUE0cURfkVE7z0mYUUZ5bwILchQsvwVsQKorVmryh1fgaYCOi+H
4kvmhljN9HqB9I7vgRaYAJ3qwgYIUselclYN4SNniHzatRMROppUMs9W5ytENGhx
oPARiZpRVL+rPPaFdip33c27pVdNAU/lRq2ZpzkdSTv+2V9GmVfDtcKv9A4uDqJ9
7ttgZCaifNbHShzMEWRCXSsT7/52XB7KlxmAynwPNMLeM+/0JTCLyFBEvyejvgCM
GqgvMDEddarHhd6ChdXLJLBAeXVBGRygWcDBO5rX8GPMb0y5/yE+UVprkx3jSb2m
sl9nUW2UcOhfrtu+CPS3qazu6h/QkTwitzAFSn57DtGmwKLzqk63g9TgcjBg1HtZ
S66DzdsJ4Y6Iy51oNyHx3EBLzmdFfxKAeABsapvJl7fhiC93CC3hZTKUyBjr6Dru
I2wktWCAAMHFE0eeyIreCHdzzMtu+V2H+X9GJMxzd5jOYBI3vy946R2jG5gX+WyD
calvWyo8N+XrZKD8NQnWQ/BocU9r5S5aJFcovdcmm1s1Ymdlo5Yuk8WHZDOsSf38
VzY12szoQ9eMbBJOH7MhseS/gIWC/4x1eEEhGbPQbkzKZlJifv+55Mqqq7emGyBG
qn8+ouVQUr65+xcIST13Ffg80zc=
=5Cty
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,29 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1
mQINBFX4hgkBEADLqn6O+UFp+ZuwccNldwvh5PzEwKUPlXKPLjQfXlQRig1flpCH
E0HJ5wgGlCtYd3Ol9f9+qU24kDNzfbs5bud58BeE7zFaZ4s0JMOMuVm7p8JhsvkU
C/Lo/7NFh25e4kgJpjvnwua7c2YrA44ggRb1QT19ueOZLK5wCQ1mR+0GdrcHRCLr
7Sdw1d7aLxMT+5nvqfzsmbDullsWOD6RnMdcqhOxZZvpay8OeuK+yb8FVQ4sOIzB
FiNi5cNOFFHg+8dZQoDrK3BpwNxYdGHsYIwU9u6DWWqXybBnB9jd2pve9PlzQUbO
eHEa4Z+jPqxY829f4ldaql7ig8e6BaInTfs2wPnHJ+606g2UH86QUmrVAjVzlLCm
nqoGymoAPGA4ObHu9X3kO8viMBId9FzooVqR8a9En7ZE0Dm9O7puzXR7A1f5sHoz
JdYHnr32I+B8iOixhDUtxIY4GA8biGATNaPd8XR2Ca1hPuZRVuIiGG9HDqUEtXhV
fY5qjTjaThIVKtYgEkWMT+Wet3DPPiWT3ftNOE907e6EWEBCHgsEuuZnAbku1GgD
LBH4/a/yo9bNvGZKRaTUM/1TXhM5XgVKjd07B4cChgKypAVHvef3HKfCG2U/DkyA
LjteHt/V807MtSlQyYaXUTGtDCrQPSlMK5TjmqUnDwy6Qdq8dtWN3DtBWQARAQAB
tCpDZXBoLmNvbSAocmVsZWFzZSBrZXkpIDxzZWN1cml0eUBjZXBoLmNvbT6JAjgE
EwECACIFAlX4hgkCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEOhKwsBG
DzmUXdIQAI8YPcZMBWdv489q8CzxlfRIRZ3Gv/G/8CH+EOExcmkVZ89mVHngCdAP
DOYCl8twWXC1lwJuLDBtkUOHXNuR5+Jcl5zFOUyldq1Hv8u03vjnGT7lLJkJoqpG
l9QD8nBqRvBU7EM+CU7kP8+09b+088pULil+8x46PwgXkvOQwfVKSOr740Q4J4nm
/nUOyTNtToYntmt2fAVWDTIuyPpAqA6jcqSOC7Xoz9cYxkVWnYMLBUySXmSS0uxl
3p+wK0lMG0my/gb+alke5PAQjcE5dtXYzCn+8Lj0uSfCk8Gy0ZOK2oiUjaCGYN6D
u72qDRFBnR3jaoFqi03bGBIMnglGuAPyBZiI7LJgzuT9xumjKTJW3kN4YJxMNYu1
FzmIyFZpyvZ7930vB2UpCOiIaRdZiX4Z6ZN2frD3a/vBxBNqiNh/BO+Dex+PDfI4
TqwF8zlcjt4XZ2teQ8nNMR/D8oiYTUW8hwR4laEmDy7ASxe0p5aijmUApWq5UTsF
+s/QbwugccU0iR5orksM5u9MZH4J/mFGKzOltfGXNLYI6D5Mtwrnyi0BsF5eY0u6
vkdivtdqrq2DXY+ftuqLOQ7b+t1RctbcMHGPptlxFuN9ufP5TiTWSpfqDwmHCLsT
k2vFiMwcHdLpQ1IH8ORVRgPPsiBnBOJ/kIiXG2SxPUTjjEGOVgeA
=/Tod
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,63 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1
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
YT90qFF93M3v01BbxP+EIY2/9tiIPbrd
=0YYh
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,112 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1
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
3rRmtFrJQ50iIcnJX8TjzB9e
=2Gih
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,160 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
1WrnUemLTfrI4rIs17Ocs6opX9nEYPxfIoVGxqqNqvuj3Hej5JnglPctbJ1+ttNX
fuB6yqsa/wANPOC5qAVy+u4MY1ljyKSTCtc9kwc+K2Vjr/TrRDDq/o2xrmjC4JwP
3IpPr2dolGsBUQ3+HWAeLgBhqH3e4sYL5DLQgav+2cv39ez9jGp4FMZ0nztky+hi
Q2zHSyYzTzYzPc3775H7LMnH39b64DO0MfREJb+3Wbpj3hCBNn8zdSE807Tx5XeX
dQbIynXafFU5CR3AJbCuzs8RjdMXpeVlvad0OOStbjFDNpGmeKXgbD0A43ddCUj6
GKAlWLX7J7pN2OKkQmewZWgRmNEXIAaorUR3GXClORMzeUTYopQLazHIkXWH1VWO
4Yqqew7K3LkCF2eMA8wj02fjyMtb+8I+xoj4wEHROSDQGGf90fcHgfoPWZgvjgvp
s2egpO19X8zMTVvZW8VoNDeiaeMSlLLEVBhMHYwiB3MpQYXfnkfLjhKmhvil86Jg
t0F/CTzTRdd8JjtwOsIC6TtYcZPsZGyDFBvx/K8lOcN2t5p5VZMnFQm0aCV2d6r0
0nD5HexDPBMq3Lvy3vm5zmwJxM072SU69k5qEHCKERYyfyuNrhA4VxOm9UqnDcDI
lwpetFBEZWJpYW4gU2VjdXJpdHkgQXJjaGl2ZSBBdXRvbWF0aWMgU2lnbmluZyBL
ZXkgKDkvc3RyZXRjaCkgPGZ0cG1hc3RlckBkZWJpYW4ub3JnPokCVAQTAQoAPhYh
BG7W9ctfpvsvRgroju2g0jiK4iupBQJZIzDxAhsDBQkPCZwABQsJCAcDBRUKCQgL
BRYCAwEAAh4BAheAAAoJEO2g0jiK4iupWUEP/Az929HCCGTGBZajoEfN2FNqOWZ4
pdKN6a4pPwnY2Cg7FeKqsXcYG2EM+Iuea2MK2IIlA2n5LYr6VIjLWfQJkkRoeZwo
QNTcb7fE5nBF/mUhqYovm4mSbDgmL/c5EVk7iqL7YDUE+fYWyIbGipIPKVHvST1b
18GHq1aEoURPHgxnqsWapuKlZFNhGQc6ncq5O0bdUthH5jdwu8/qX0iLbtK0MeLR
kQK4Vhw3WkMKRlsTTgo+lw0ubxj6UW8osaDGMY0HxFDPrlQLzdW9vcxLZVbNG0FV
woPymNwnrlC++GMbS8dtv8JlsaRJhsL7fbYX6IQUAC8hqBd7Rpcu9Mx+87z6iUFv
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
DSw2gTJL6stXqSNn8g8afGzQ1TcVRhplqYa1RJtSPKvA4FPNNbS1QTIcR6olsA25
iYb/7tNk4EVtQePvUSWfBW43ZLOggMB8CjqxUSSkOjYgecrU+pY8G8mAbzqOexRL
gG4sLSoL0l7NpSxzpnd7+ARJz+qz2hCr+JPJseld6D7MJpyz6Pnz43+JAhwEEwEK
AAYFAlkmhB0ACgkQdjjQRCuQ0BBFww//U2aBxtpskWSW436P4FxoAG0K6SKPiiJh
ZFx9Ox813fXrWKJ5qPV39hT+mW4VhYYepvUgtAw110H7zegHvjfjhYr2nAh4CDsD
uCOqwlOp6RpqPI1zUoUoOVeAaExMg7nPZeQAaqXNtQ1ohGgxBFdeBYRA4ICx2EGy
y+YR9mABZZbhfh+AeDljQlw5bqpxaWNkkiQsysB4SYDdcVeCZ3FMdiCF4MU5ceHG
kFuWQIRLgYL1zNek1WDXRcuyJM5a6YE0sOZ6guNKJ+ZVV/yzFRN4JjTFbWunYqgM
pisNM5i0xce/VMe/y2QqnyTenO6mYRv0qX2Yr0Dag/W+CxqAmvS+17eD3SZzSXqr
DMDZQkdvquyaYjVcqg/ixHRtRTrIJ1gGPjfl9YiOTlGgm3/HiVzgIZPcDdU2KZP1
iHlUhPQnfEHT6sHTrRVdxLWgxQuWgX1CsuPYgSe4Ia9BBQL7xFwCkonx/80fsHeN
1ryMX6wBZt1dAJkc1pmS5ahzgwlIKWU9fnufsXn7tAQWG9BHtjrXsCBdlKIKNWKW
Un3Vl1oDVaWMMZ9Gu0bkpDv/wA4vHQehtrKe0XfSnU0W7QQifCHVRV5kuLSvVD3I
nMWxZV5uAQ239VCzMrKLyErSyKybMuDos0csSrBvOtCIVLoDvVS6u+uoyc+DsQOm
xawn3wpaElGJAhwEEwEKAAYFAlkmhTMACgkQnW2Pa8hXyQaYcg//d3vMCp9ZXgIk
t1GQTVYQIhDqpR3Bq4RGHswZS3HEVShv+yoFlbciUccp0Q3FFmxwP6HsGMlhVHK9
UG42maJ5yfsewoMnumWFLR2LeimuCxYCzN6C486qPwK5aNpOzhs3nDWaqDq6J1wG
yQWnDGGilDrgSe/NptPTBCAERUwnmbuL4Y3WdrZM0Shgs8JDoMHFOpQiXVGJ5qoh
uQnK1O6fjlqsRAUIu+amfSl21s67OfBFlL20AoITBGLvKBrZvj6NhHHE34Wa6WCp
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
TLeFkkM3UnAOQN0p
=1HGQ
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,160 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
k5Bh
=3qWJ
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,53 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.12 (GNU/Linux)
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
3xJn
=mMjt
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,52 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1
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
Oa4g9309p/+af/HU1smBrOfIeRoxb8jQoHu3
=xg4S
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,62 @@
#!/bin/bash
# Copyright 2016 IBM Corp.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
set -e
# For initial clones, and debugging, set this for more verbose output
# that doesn't time out.
if [[ ${NO_TIMEOUT:-0} -eq 1 ]]; then
echo "Running interactively"
TIMEOUT=""
set -x
else
TIMEOUT="timeout -k 2m 90m"
fi
REPREPRO_CONFIG=$1
MIRROR_VOLUME=$2
BASE=$(cat ${REPREPRO_CONFIG}/options | grep base | cut -d' ' -f2)
CONFIG_KEY=$(basename $REPREPRO_CONFIG)
UNREF_FILE=/var/run/reprepro/${MIRROR_VOLUME}.${CONFIG_KEY}.unreferenced-files
K5START="k5start -t -f /etc/reprepro.keytab service/reprepro -- ${TIMEOUT} "
REPREPRO="$K5START reprepro --confdir $REPREPRO_CONFIG"
date --iso-8601=ns
echo "Obtaining reprepro tokens and running reprepro update"
$REPREPRO update
if [ -f $UNREF_FILE ] ; then
date --iso-8601=ns
echo "Cleaning up files made unreferenced on the last run"
$REPREPRO deleteifunreferenced < $UNREF_FILE
fi
date --iso-8601=ns
echo "Saving list of newly unreferenced files for next time"
k5start -t -f /etc/reprepro.keytab service/reprepro -- bash -c "reprepro --confdir $REPREPRO_CONFIG dumpunreferenced > $UNREF_FILE"
date --iso-8601=ns
echo "Checking state of mirror"
$REPREPRO checkpool fast
$REPREPRO check
date --iso-8601=ns | $K5START tee $BASE/timestamp.txt
echo "reprepro completed successfully, running vos release."
k5start -t -f /etc/afsadmin.keytab service/afsadmin -- vos release -v $MIRROR_VOLUME
date --iso-8601=ns
echo "Done."

View File

@ -0,0 +1,81 @@
Origin: Canonical
Codename: xenial-updates/newton
Description: OpenStack Newton Archive for Ubuntu Xenial
Architectures: amd64 arm64
Components: main
Contents: .gz
Update: ubuntu-cloud-archive
Log: /var/log/reprepro/ubuntu-cloud-archive-xenial.log
Origin: Canonical
Codename: xenial-updates/ocata
Description: OpenStack Ocata Archive for Ubuntu Xenial
Architectures: amd64 arm64
Components: main
Contents: .gz
Update: ubuntu-cloud-archive
Log: /var/log/reprepro/ubuntu-cloud-archive-xenial.log
Origin: Canonical
Codename: xenial-updates/pike
Description: OpenStack Pike Archive for Ubuntu Xenial
Architectures: amd64 arm64
Components: main
Contents: .gz
Update: ubuntu-cloud-archive
Log: /var/log/reprepro/ubuntu-cloud-archive-xenial.log
Origin: Canonical
Codename: xenial-updates/queens
Description: OpenStack Queens Archive for Ubuntu Xenial
Architectures: amd64 arm64
Components: main
Contents: .gz
Update: ubuntu-cloud-archive
Log: /var/log/reprepro/ubuntu-cloud-archive-xenial.log
Origin: Canonical
Codename: bionic-updates/rocky
Description: OpenStack Rocky Archive for Ubuntu Bionic
Architectures: amd64 arm64
Components: main
Contents: .gz
Update: ubuntu-cloud-archive
Log: /var/log/reprepro/ubuntu-cloud-archive-bionic.log
Origin: Canonical
Codename: bionic-updates/stein
Description: OpenStack Stein Archive for Ubuntu Bionic
Architectures: amd64 arm64
Components: main
Contents: .gz
Update: ubuntu-cloud-archive
Log: /var/log/reprepro/ubuntu-cloud-archive-bionic.log
Origin: Canonical
Codename: bionic-updates/train
Description: OpenStack Train Archive for Ubuntu Bionic
Architectures: amd64 arm64
Components: main
Contents: .gz
Update: ubuntu-cloud-archive
Log: /var/log/reprepro/ubuntu-cloud-archive-bionic.log
Origin: Canonical
Codename: bionic-updates/ussuri
Description: OpenStack Ussuri Archive for Ubuntu Bionic
Architectures: amd64 arm64
Components: main
Contents: .gz
Update: ubuntu-cloud-archive
Log: /var/log/reprepro/ubuntu-cloud-archive-bionic.log
Origin: Canonical
Codename: focal-updates/victoria
Description: OpenStack Victoria Archive for Ubuntu Focal
Architectures: amd64 arm64
Components: main
Contents: .gz
Update: ubuntu-cloud-archive
Log: /var/log/reprepro/ubuntu-cloud-archive-focal.log

View File

@ -0,0 +1,6 @@
basedir /afs/.openstack.org/mirror/ubuntu-cloud-archive
keepunreferencedfiles
noskipold
export changed
spacecheck none
verbose

View File

@ -0,0 +1,7 @@
Name: ubuntu-cloud-archive
Method: http://ubuntu-cloud.archive.canonical.com/ubuntu
Components: main
UDebComponents: main
Architectures: amd64 arm64
GetInRelease: no
VerifyRelease: EC4926EA

View File

@ -0,0 +1,126 @@
Origin: Ubuntu
Codename: bionic
Description: OpenStack Ubuntu Bionic mirror
Architectures: arm64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu-ports
Log: /var/log/reprepro/ubuntu-ports-bionic.log
Origin: Ubuntu
Codename: bionic-updates
Description: OpenStack Ubuntu Bionic Updates mirror
Architectures: arm64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu-ports
Log: /var/log/reprepro/ubuntu-ports-bionic-updates.log
Origin: Ubuntu
Codename: bionic-backports
Description: OpenStack Ubuntu Bionic Backports mirror
Architectures: arm64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu-ports
NotAutomatic: yes
ButAutomaticUpgrades: yes
Log: /var/log/reprepro/ubuntu-ports-bionic-backports.log
Origin: Ubuntu
Codename: bionic-security
Description: OpenStack Ubuntu Bionic Security mirror
Architectures: arm64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu-ports-security
Log: /var/log/reprepro/ubuntu-ports-bionic-security.log
Origin: Ubuntu
Codename: focal
Description: OpenStack Ubuntu Focal mirror
Architectures: arm64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu-ports
Log: /var/log/reprepro/ubuntu-ports-focal.log
Origin: Ubuntu
Codename: focal-updates
Description: OpenStack Ubuntu Focal Updates mirror
Architectures: arm64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu-ports
Log: /var/log/reprepro/ubuntu-ports-focal-updates.log
Origin: Ubuntu
Codename: focal-backports
Description: OpenStack Ubuntu Focal Backports mirror
Architectures: arm64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu-ports
NotAutomatic: yes
ButAutomaticUpgrades: yes
Log: /var/log/reprepro/ubuntu-ports-focal-backports.log
Origin: Ubuntu
Codename: focal-security
Description: OpenStack Ubuntu Focal Security mirror
Architectures: arm64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu-ports-security
Log: /var/log/reprepro/ubuntu-ports-focal-security.log
Origin: Ubuntu
Codename: xenial
Description: OpenStack Ubuntu Xenial mirror
Architectures: arm64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu-ports
Log: /var/log/reprepro/ubuntu-ports-xenial.log
Origin: Ubuntu
Codename: xenial-updates
Description: OpenStack Ubuntu Xenial Updates mirror
Architectures: arm64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu-ports
Log: /var/log/reprepro/ubuntu-ports-xenial-updates.log
Origin: Ubuntu
Codename: xenial-backports
Description: OpenStack Ubuntu Xenial Backports mirror
Architectures: arm64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu-ports
NotAutomatic: yes
ButAutomaticUpgrades: yes
Log: /var/log/reprepro/ubuntu-ports-xenial-backports.log
Origin: Ubuntu
Codename: xenial-security
Description: OpenStack Ubuntu Xenial Security mirror
Architectures: arm64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu-ports-security
Log: /var/log/reprepro/ubuntu-ports-xenial-security.log

View File

@ -0,0 +1,6 @@
basedir /afs/.openstack.org/mirror/ubuntu-ports
keepunreferencedfiles
noskipold
export changed
spacecheck none
verbose

View File

@ -0,0 +1,31 @@
Name: ubuntu
Method: http://us.archive.ubuntu.com/ubuntu
Components: main universe
UDebComponents: main
Architectures: amd64 source
GetInRelease: no
VerifyRelease: 437D05B5|C0B21F32
Name: ubuntu-security
Method: http://security.ubuntu.com/ubuntu
Components: main universe
UDebComponents: main
Architectures: amd64 source
GetInRelease: no
VerifyRelease: 437D05B5|C0B21F32
Name: ubuntu-ports
Method: http://ports.ubuntu.com/ubuntu-ports
Components: main universe
UDebComponents: main
Architectures: arm64 source
GetInRelease: no
VerifyRelease: 437D05B5|C0B21F32
Name: ubuntu-ports-security
Method: http://ports.ubuntu.com/ubuntu-ports
Components: main universe
UDebComponents: main
Architectures: arm64 source
GetInRelease: no
VerifyRelease: 437D05B5|C0B21F32

View File

@ -0,0 +1,126 @@
Origin: Ubuntu
Codename: bionic
Description: OpenStack Ubuntu Bionic mirror
Architectures: amd64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu
Log: /var/log/reprepro/ubuntu-bionic.log
Origin: Ubuntu
Codename: bionic-updates
Description: OpenStack Ubuntu Bionic Updates mirror
Architectures: amd64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu
Log: /var/log/reprepro/ubuntu-bionic-updates.log
Origin: Ubuntu
Codename: bionic-backports
Description: OpenStack Ubuntu Bionic Backports mirror
Architectures: amd64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu
NotAutomatic: yes
ButAutomaticUpgrades: yes
Log: /var/log/reprepro/ubuntu-bionic-backports.log
Origin: Ubuntu
Codename: bionic-security
Description: OpenStack Ubuntu Bionic Security mirror
Architectures: amd64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu-security
Log: /var/log/reprepro/ubuntu-bionic-security.log
Origin: Ubuntu
Codename: focal
Description: OpenStack Ubuntu Focal mirror
Architectures: amd64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu
Log: /var/log/reprepro/ubuntu-focal.log
Origin: Ubuntu
Codename: focal-updates
Description: OpenStack Ubuntu Focal Updates mirror
Architectures: amd64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu
Log: /var/log/reprepro/ubuntu-focal-updates.log
Origin: Ubuntu
Codename: focal-backports
Description: OpenStack Ubuntu Focal Backports mirror
Architectures: amd64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu
NotAutomatic: yes
ButAutomaticUpgrades: yes
Log: /var/log/reprepro/ubuntu-focal-backports.log
Origin: Ubuntu
Codename: focal-security
Description: OpenStack Ubuntu Focal Security mirror
Architectures: amd64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu-security
Log: /var/log/reprepro/ubuntu-focal-security.log
Origin: Ubuntu
Codename: xenial
Description: OpenStack Ubuntu Xenial mirror
Architectures: amd64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu
Log: /var/log/reprepro/ubuntu-xenial.log
Origin: Ubuntu
Codename: xenial-updates
Description: OpenStack Ubuntu Xenial Updates mirror
Architectures: amd64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu
Log: /var/log/reprepro/ubuntu-xenial-updates.log
Origin: Ubuntu
Codename: xenial-backports
Description: OpenStack Ubuntu Xenial Backports mirror
Architectures: amd64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu
NotAutomatic: yes
ButAutomaticUpgrades: yes
Log: /var/log/reprepro/ubuntu-xenial-backports.log
Origin: Ubuntu
Codename: xenial-security
Description: OpenStack Ubuntu Xenial Security mirror
Architectures: amd64 source
Components: main universe
UDebComponents: main
Contents: .gz
Update: ubuntu-security
Log: /var/log/reprepro/ubuntu-xenial-security.log

View File

@ -0,0 +1,6 @@
basedir /afs/.openstack.org/mirror/ubuntu
keepunreferencedfiles
noskipold
export changed
spacecheck none
verbose

View File

@ -0,0 +1,31 @@
Name: ubuntu
Method: http://us.archive.ubuntu.com/ubuntu
Components: main universe
UDebComponents: main
Architectures: amd64 source
GetInRelease: no
VerifyRelease: 437D05B5|C0B21F32
Name: ubuntu-security
Method: http://security.ubuntu.com/ubuntu
Components: main universe
UDebComponents: main
Architectures: amd64 source
GetInRelease: no
VerifyRelease: 437D05B5|C0B21F32
Name: ubuntu-ports
Method: http://ports.ubuntu.com/ubuntu-ports
Components: main universe
UDebComponents: main
Architectures: arm64 source
GetInRelease: no
VerifyRelease: 437D05B5|C0B21F32
Name: ubuntu-ports-security
Method: http://ports.ubuntu.com/ubuntu-ports
Components: main universe
UDebComponents: main
Architectures: arm64 source
GetInRelease: no
VerifyRelease: 437D05B5|C0B21F32

View File

@ -0,0 +1,29 @@
- name: Deploy Debian Ceph key
include_tasks: utils/keys.yaml
vars:
_keys:
- { key_id: 'E84AC2C0460F3994', file: 'debian-ceph.asc' }
- name: Copy Debian Ceph Octopus
include_tasks: utils/copy-config.yaml
vars:
_dir: 'debian-ceph-octopus'
- name: Install Debian Ceph Octopus cron job
include_tasks: utils/cron.yaml
vars:
_string_name: 'Debian Ceph Octopus'
_dir: 'debian-ceph-octopus'
_volume: 'mirror.deb-octopus'
- name: Copy Debian Ceph Nautilus
include_tasks: utils/copy-config.yaml
vars:
_dir: 'debian-ceph-nautilus'
- name: Install Debian Ceph Nautilus cron job
include_tasks: utils/cron.yaml
vars:
_string_name: 'Debian Ceph Nautilus'
_dir: 'debian-ceph-nautilus'
_volume: 'mirror.deb-nautilus'

View File

@ -0,0 +1,17 @@
- name: Set Debian security config dir
set_fact:
_string_name: 'Debian Security'
_dir: 'debian-security'
_volume: 'mirror.debian-security'
_keys:
- { key_id: 'EDA0D2388AE22BA9', file: 'debian-stretch-security.asc' }
- { key_id: '4DFAB270CAA96DFA', file: 'debian-buster-security.asc' }
- name: Deploy debian-security keys
include_tasks: utils/keys.yaml
- name: Copy debian-security config
include_tasks: utils/copy-config.yaml
- name: Install Debian security cron job
include_tasks: utils/cron.yaml

View File

@ -0,0 +1,18 @@
- name: Set Debian config
set_fact:
_string_name: 'Debian'
_dir: 'debian'
_volume: 'mirror.debian'
_keys:
- { key_id: '7638D0442B90D010', file: 'debian-jessie.asc' }
- { key_id: 'E0B11894F66AEC98', file: 'debian-stretch.asc' }
- { key_id: 'DC30D7C23CBBABEE', file: 'debian-buster.asc' }
- name: Deploy Debian keys
include_tasks: utils/keys.yaml
- name: Copy Debian config
include_tasks: utils/copy-config.yaml
- name: Install Debian cron job
include_tasks: utils/cron.yaml

View File

@ -0,0 +1,33 @@
- name: Deploy Docker key
include_tasks: utils/keys.yaml
vars:
_keys:
- { key_id: '0EBFCD88', file: 'debian-docker.asc' }
# Unfortunately docker upstream doesn't do the pool model correctly,
# and we have to mirror each distro separately to avoid file
# conflicts (they have the same .deb files)
- name: Copy Debian Docker Xenial config
include_tasks: utils/copy-config.yaml
vars:
_dir: 'debian-docker-xenial'
- name: Copy Debian Docker Bionic
include_tasks: utils/copy-config.yaml
vars:
_dir: 'debian-docker-bionic'
- name: Copy Debian Docker Focal config
include_tasks: utils/copy-config.yaml
vars:
_dir: 'debian-docker-focal'
# Beacuse they all live on the same volume, run in order
- name: Install update cron jobs
cron:
name: 'Debian Docker reprepro mirror sync'
job: 'flock -n /var/run/reprepro/debian-docker.lock bash -c "for DISTRO in xenial bionic focal; do reprepro-mirror-update /etc/reprepro/debian-docker-\$DISTRO mirror.deb-docker >>/var/log/reprepro/debian-docker-\$DISTRO-mirror.log; done" 2>&1'
state: present
hour: '*/2'
minute: '{{ 45 | random(seed=inventory_hostname) }}'

View File

@ -0,0 +1,77 @@
- name: Install reprepro
package:
name:
- reprepro
state: present
- name: Ensure config directory
file:
path: /etc/reprepro
state: directory
owner: root
group: root
mode: '0755'
- name: Ensure key storage
file:
path: /etc/reprepro-gpg-keys
state: directory
owner: root
group: root
mode: '0755'
- name: Ensure log directory
file:
path: /var/log/reprepro
state: directory
owner: root
group: root
mode: '0755'
- name: Ensure run directory
file:
path: /var/run/reprepro
state: directory
owner: root
group: root
mode: '0755'
- name: Rotate logfiles
include_role:
name: logrotate
vars:
logrotate_file_name: '/var/log/reprepro/*'
logrotate_config_file_name: 'reprepro'
logrotate_frequency: 'weekly'
- name: Install mirror script
copy:
src: reprepro-mirror-update.sh
dest: /usr/local/bin/
owner: root
group: root
mode: 0755
- name: Debian
include_tasks: debian.yaml
- name: Debian Ceph
include_tasks: debian-ceph.yaml
- name: Debian security
include_tasks: debian-security.yaml
- name: Docker
include_tasks: docker.yaml
- name: Puppetlabs
include_tasks: puppetlabs.yaml
- name: Ubuntu
include_tasks: ubuntu.yaml
- name: Ubuntu Cloud Archive
include_tasks: ubuntu-cloud-archive.yaml
- name: Ubuntu Ports
include_tasks: ubuntu-ports.yaml

View File

@ -0,0 +1,18 @@
- name: Set Puppetlabs config
set_fact:
_string_name: 'APT Puppetlabs'
_dir: 'apt-puppetlabs'
_volume: 'mirror.puppetlabs'
_keys:
- { key_id: 'EF8D349F', file: 'puppetlabs.asc' }
- name: Deploy puppetlabs keys
include_tasks: utils/keys.yaml
- name: Copy puppetlabs config
include_tasks: utils/copy-config.yaml
- name: Install puppetlabs cron job
include_tasks: utils/cron.yaml

View File

@ -0,0 +1,16 @@
- name: Set Ubuntu Cloud Archive config
set_fact:
_string_name: 'Ubuntu Cloud Archive'
_dir: 'ubuntu-cloud-archive'
_volume: 'mirror.ubuntu-cloud'
_keys:
- { key_id: '5EDB1B62EC4926EA', file: 'ubuntu-cloud-archive.asc' }
- name: Deploy Ubuntu Cloud Archive keys
include_tasks: utils/keys.yaml
- name: Copy Ubuntu Cloud Archive config
include_tasks: utils/copy-config.yaml
- name: Install Ubuntu Cloud Archive cron job
include_tasks: utils/cron.yaml

View File

@ -0,0 +1,13 @@
- name: Set Ubuntu Ports config
set_fact:
_string_name: 'Ubuntu Ports'
_dir: 'ubuntu-ports'
_volume: 'mirror.ubuntu-ports'
# NOTE(ianw) : keys are already installed?
- name: Copy Ubuntu Ports config
include_tasks: utils/copy-config.yaml
- name: Install Ubuntu Ports cron job
include_tasks: utils/cron.yaml

View File

@ -0,0 +1,13 @@
- name: Set Debian config
set_fact:
_string_name: 'Ubuntu'
_dir: 'ubuntu'
_volume: 'mirror.ubuntu'
# NOTE(ianw) : keys are already installed?
- name: Copy Ubuntu config
include_tasks: utils/copy-config.yaml
- name: Install Ubuntu cron job
include_tasks: utils/cron.yaml

View File

@ -0,0 +1,19 @@
- name: Ensure config directory
file:
state: directory
path: '/etc/reprepro/{{ _dir }}/'
owner: root
group: root
mode: 0755
- name: Copy config files
copy:
src: '{{ _dir }}/config/{{ item }}'
dest: '/etc/reprepro/{{ _dir }}/{{ item }}'
owner: root
group: root
mode: 0644
loop:
- distributions
- options
- updates

View File

@ -0,0 +1,9 @@
- name: Install update cron jobs
cron:
name: '{{ _string_name }} reprepro mirror sync'
# NOTE(ianw) 2020-10-19 : initially disabled so we can try
# manually before we enable everything.
state: absent
job: 'flock -n /var/run/reprepro/{{ _dir }}.lock reprepro-mirror-update {{ _dir }} {{ _volume }} >> /var/log/reprepro/{{ _dir }}.log 2>&1'
hour: '*/2'
minute: '{{ 45 | random(seed=inventory_hostname) }}'

View File

@ -0,0 +1,16 @@
- name: Copy keys remotely
copy:
src: 'keys/{{ item.file }}'
dest: '/etc/reprepro-gpg-keys/{{ item.file }}'
owner: root
group: root
mode: 0644
loop: '{{ _keys }}'
- name: Import gpg keys
include_role:
name: import-gpg-key
vars:
gpg_key_id: '{{ item.key_id }}'
gpg_key_asc: '/etc/reprepro-gpg-keys/{{ item.file }}'
loop: '{{ _keys }}'

View File

@ -70,3 +70,42 @@ def test_afsmon_installed(host):
f = host.file('/etc/afsmon.cfg')
assert f.exists
# reprepro
def test_repro_general_conf(host):
package = host.package('reprepro')
assert package.is_installed
f = host.file('/etc/reprepro')
assert f.exists
assert f.is_directory
f = host.file('/var/log/reprepro')
assert f.exists
assert f.is_directory
f = host.file('/usr/local/bin/reprepro-mirror-update.sh')
assert f.exists
f = host.file('/etc/logrotate.d/reprepro')
assert f.exists
def test_reprepro_configs(host):
dirs = ('apt-puppetlabs',
'debian',
'debian-security',
'debian-ceph-octopus',
'debian-ceph-nautilus',
'debian-docker-xenial',
'debian-docker-bionic',
'debian-docker-focal',
'ubuntu',
'ubuntu-cloud-archive',
'ubuntu-ports')
for d in dirs:
for config in ('distributions', 'options', 'updates'):
f = host.file('/etc/reprepro/%s/%s' % (d, config))
assert f.exists

View File

@ -464,6 +464,7 @@
- playbooks/install-ansible.yaml
- roles/
- playbooks/roles/mirror-update/
- playbooks/roles/reprepro/
- playbooks/service-mirror-update.yaml
- testinfra/test_mirror-update.py