1
1
x-common-env : &common-env
2
2
3
+ GNUPGHOME : /root/.gnupg/
4
+ KEYRING : /root/.gnupg/pubring.kbx
5
+
3
6
DJANGO_SUPERUSER_USERNAME : admin
4
7
DJANGO_SUPERUSER_EMAIL : admin@example.com
5
8
DJANGO_SUPERUSER_PASSWORD : admin
@@ -78,7 +81,7 @@ services:
78
81
test : ["CMD", "pg_isready", "-U", "galaxy_ng"]
79
82
interval : 10s
80
83
retries : 5
81
-
84
+
82
85
helper :
83
86
image : quay.io/centos/centos:stream9
84
87
environment :
@@ -88,24 +91,45 @@ services:
88
91
volumes :
89
92
- " etc_pulp_certs:/etc/pulp/certs"
90
93
- " var_lib_pulp:/var/lib/pulp"
94
+ - " .:/src/galaxy_ng"
91
95
command : |
92
96
bash -c "
93
- if [[ ! -e /etc/pulp/certs/database_fields.symmetric.key ]] || [[ -s /etc/pulp/certs/database_fields.symmetric.key ]]; then
94
- mkdir -p /etc/pulp/certs/;
95
- echo 'check openssl and install ...';
96
- rpm -q openssl || dnf -y install openssl;
97
- echo 'generate key ...';
98
- openssl rand -base64 32 > /etc/pulp/certs/database_fields.symmetric.key;
99
- echo 'chown key ...';
100
- chmod 640 /etc/pulp/certs/database_fields.symmetric.key;
101
- else
102
- echo 'symmetric key exists'
103
- fi;
97
+ echo '#> STEP: Database Symmetric Key';
98
+ echo 'WARNING: Symmetric key is hardcoded for development only.';
99
+ echo 'DNmNdwgyZugTax9S64J0FITTr9IHPxbuoF1F1CGPr68=' > /etc/pulp/certs/database_fields.symmetric.key;
104
100
find /etc/pulp ;
105
101
echo '# KEY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>';
106
102
cat /etc/pulp/certs/database_fields.symmetric.key;
107
103
echo '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<';
108
- echo "DONE!";
104
+ echo 'DONE! <#';
105
+
106
+ echo '#> STEP: Signing scripts';
107
+ base64 -d <<< 'IyEvdXNyL2Jpbi9lbnYgYmFzaApHTlVQR0hPTUU9L3Jvb3QvLmdudXBnLwpGSUxFX1BBVEg9JDEKU0lHTkFUVVJFX1BBVEg9IiQxLmFzYyIKQURNSU5fSUQ9IiRQVUxQX1NJR05JTkdfS0VZX0ZJTkdFUlBSSU5UIgpQQVNTV09SRD0iR2FsYXh5MjAyNCIKZ3BnIC0tbG9jay1uZXZlciAtLXF1aWV0IC0tYmF0Y2ggLS1waW5lbnRyeS1tb2RlIGxvb3BiYWNrIC0teWVzIFwKICAtLXBhc3NwaHJhc2UgJFBBU1NXT1JEIC0taG9tZWRpciAvcm9vdC8uZ251cGcvIC0tZGV0YWNoLXNpZ24gLS1hcm1vciBcCiAgLS1vdXRwdXQgJFNJR05BVFVSRV9QQVRIICRGSUxFX1BBVEgKU1RBVFVTPSQ/CmlmIFsgJFNUQVRVUyAtZXEgMCBdOyB0aGVuCiAgIGVjaG8ge1wiZmlsZVwiOiBcIiRGSUxFX1BBVEhcIiwgXCJzaWduYXR1cmVcIjogXCIkU0lHTkFUVVJFX1BBVEhcIn0KZWxzZQogICBleGl0ICRTVEFUVVMKZmk=' > /var/lib/pulp/scripts/collection_sign.sh;
108
+ base64 -d <<< 'IyEvdXNyL2Jpbi9lbnYgYmFzaAplY2hvICJHYWxheHkyMDI0IiA+IC90bXAva2V5X3Bhc3N3b3JkLnR4dApNQU5JRkVTVF9QQVRIPSQxCklNQUdFX1JFRkVSRU5DRT0iJFJFRkVSRU5DRSIKRklOR0VSUFJJTlQ9IiRQVUxQX1NJR05JTkdfS0VZX0ZJTkdFUlBSSU5UIgpTSUdOQVRVUkVfUEFUSD0iJFNJR19QQVRIIgojIElNUE9SVEFOVDogU2tvcGVvIGRvZXNudCBhbGxvdyB0byBzZXQgY3VzdG9tIGdudXBnaG9tZSBvciBrZXlyaW5nCiMgU28gaXQgd2lsbCB1c2UgdGhlIGN1cnJlbnQgdXNlciBIT01FLy5nbnVwZyBhbmQgZGVmYXVsdCBrZXlyaW5nCnNrb3BlbyBzdGFuZGFsb25lLXNpZ24gLS1wYXNzcGhyYXNlLWZpbGUgL3RtcC9rZXlfcGFzc3dvcmQudHh0IFwKICAkTUFOSUZFU1RfUEFUSCAkSU1BR0VfUkVGRVJFTkNFICRGSU5HRVJQUklOVCAtLW91dHB1dCAkU0lHTkFUVVJFX1BBVEgKU1RBVFVTPSQ/CmlmIFsgJFNUQVRVUyAtZXEgMCBdOyB0aGVuCiAgZWNobyB7XCJzaWduYXR1cmVfcGF0aFwiOiBcIiRTSUdOQVRVUkVfUEFUSFwifQplbHNlCiAgZXhpdCAkU1RBVFVTCmZp' > /var/lib/pulp/scripts/container_sign.sh;
109
+ chmod +x /var/lib/pulp/scripts/*_sign.sh;
110
+ ls -la /var/lib/pulp/scripts/collection_sign.sh;
111
+ cat /var/lib/pulp/scripts/collection_sign.sh;
112
+ echo ' ';
113
+ ls -la /var/lib/pulp/scripts/container_sign.sh;
114
+ cat /var/lib/pulp/scripts/container_sign.sh;
115
+ echo ' ';
116
+ echo 'DONE! <#';
117
+
118
+ echo '#> STEP: Signing keys';
119
+ echo 'WARNING: This key is for development only, passphrase:Galaxy2024';
120
+ base64 -d <<< 'LS0tLS1CRUdJTiBQR1AgUFJJVkFURSBLRVkgQkxPQ0stLS0tLQoKbFFQR0JHY0JrRE1CQ0FEY1h6TEZwSUhqbFBTTnROc1FCdnRuUkNjcUJVS1VrN1h6OGVaSUhWSU90NmxGM1RQTgpaTWZ5eVBoYWloTGxLekpRZGh6RG9jMy9oZFRLUnhmQmx0cmZmOW5ZeDVkSFdlZ29tVkwxaS9TMEhBQjdNT3FuClNqMWRFcmtRRVBoWWJubzFWSTVtbDcxTE1ldS9hbkRtRWtFaHR2a1ZjcVduWHM2RGlpdWRVMFRtYzRXLytsVkgKQ2x1aytJU2tnMS8zcHhMQVFqU2lQcFdnL1lCL2NORGN1dUh4dWVDMEtxSUhnR0lyeDBpREk4VHE3S2xOYmNPVgpDeWowWHBjdjY1M2REbEpaQUE5Ty9samZsZU5hMDhOeHNwUkJFb01YaElLdU9ML293Vlk2NVpEQ0JCZ2c1R0dICnVLR25GQklUbUtkOWRXVVZSZXpqN3NLdTVwNEVyQVRnUmk3bEFCRUJBQUgrQndNQ0hQSG9wTFhOeS9INXg5c3YKdytDYTNsQXFLanFGWDBNVEpFbGo1ZE9uZFJnZFVoM29VQW9ZZlNCNi9GM09IR0lsM3psS2hoNVFyUDhVVUZqYgpQRlpqSllWb0VVK3ltQk51Y1hNTEJBeW1SQWI4RnhzREQ5NEc3NVRZWnhnK1BYalFDblViQnhlZUZvWWw1dkEyCjM1S01acEdBSXpoaE5BalpseUZvWDdHaU1xZFd4YUt1VWtSK05BaTdjRVdqaHJnVEU4Z1R0UGZEbDhhV04waWYKMmIySmw4WVhYbEczMlArWU40cW4wUDkxWi9uUkFIUG5ybTB3R2JEdGNGQ1BHTEdsMndYdG9ZMmViLzJnd3J1VQpyMHVoM0xFWHEvMjdHNkVmZ1g1QURpa21YSTRXNlZkeUNra0lSamJBdjdqZm91M2pFc2VpeTFqSTJvR0N2V1ZuCmsweTc5ZzA0b1RTakRHYWRXMGd2WmJHQTg3SG5kblM3cDdTMG9WbVBWdWh6S290ODk0VkgzVENDcjFWM25PK1oKeTdGZmpkQ0RrTjliWjRpam9JMGFYZE9HWkQxbGJSSGxxMlVDYUNlOVpLeTI3eEZwcW5rcWxmdWs1OXdqbWNWSgp4dit3MTFrUGgxUVc1MXhZNXF1ditDWEtGZDNERjFMOWF1UnZSQkpQK1VaYTZRcS8ydzVZWlZQS0xqOVZGNW9TCjRpUU9OM2wvNGNhc29qVC9zM0Y3TjErSGZzU1pINnkzK1dGcjl1cDgwNkdVdGU4ZVFVaXFIeEFuS2ZLZG9VQzkKNml6RmVHV2k2QUw1N3ZFaUxwOTM5UldoNUFFUm5MSEhBcDRLcFI0ZkRid29CUkViZ3F0QmUyRkhDSkNuaHFWbAovRS8xWWRsZTFiWFYvc3dwUEk1bHNLcWpmMkVoS0syaEZVVG1CbERrUWpmTjR0VlUxQnZDNnM3SEdEL0YwT1F1CmxvWmdoVWlzTjY2dDljQTByWkhZenZkMHlJa25nbERYZmpnemorcmRYYU1vYXFPS1Y4SWdFYS9Td2ROakx3NUEKbS9kRlhDZnozQXVlempIcmRBdzh5MStGL3dSbGV6eVNGUm1kNlJFU3RNZ0h0V0plUmdKaXY0Mlpna3RCSnppTAphNjcxd3A2YzhiVjBBdGFhNDNXSUJ1N0taYnE2TnVpSm5rWkhOSTdCSUxwRU5BOTh5VjZXTmV0Q2I3U3NaNk9RCmxQZHpXMHdwOUJJTHRDWkhZV3hoZUhrZ1JHVjJJRXRsZVNBOFoyRnNZWGg1WkdWMlFHRnVjMmxpYkdVdVkyOXQKUG9rQlVRUVRBUWdBT3hZaEJQdUxQeTBrdks5Ky9mZVRxZk4xZGNVdFR4YnpCUUpuQVpBekFoc0RCUXNKQ0FjQwpBaUlDQmhVS0NRZ0xBZ1FXQWdNQkFoNEhBaGVBQUFvSkVQTjFkY1V0VHhienc1Z0lBTUNTZjB6dzYxdlhKUm16Cm14dW5kMFU4ek5QRWRSNzhkY1VZYVhsaGdkN2oyb1BzMGk1cG9FaDFMSkZsZ29VYTlabkhTSHgrdEI0SFlVZFQKeUpQYkl5ckUxcUs4MHRENkpZcmV3M2U2VXZudGJCWFJuakJSbDlKWXcyQmVlZk1tbCtUUWxRYkxTR3FzVTdoMwpQa2hqbUUvUCs4T1QrLzh1eTR2VGdUdUw2VDhlb0t2MFZTZGNlaHB3eEM2WVJuc3N3SlQ4M3IwY0ZhKzRkdTVICnlJblNQTHc5aTJMTjZsZTdISnpuRnZvUlhDZWJyUzNudU9JbXRRUXdtQTBZRG9NK0pES00vNnhrT0swZGVXazMKSllvWE5QcWJtU2E3N0ZFREQwdGZxdlY2Q1R5YlByUGhxNUdOdUdDQS93VFZGOHRJL3dVZWIwRUx3a2dtbG5RUQp4c2hiMWV3PQo9aHcxUQotLS0tLUVORCBQR1AgUFJJVkFURSBLRVkgQkxPQ0stLS0tLQ==' > /etc/pulp/certs/ansible-sign.key;
121
+ head -n 4 /etc/pulp/certs/ansible-sign.key;
122
+ echo '...';
123
+ tail -n 4 /etc/pulp/certs/ansible-sign.key;
124
+ echo ' ';
125
+ base64 -d <<< 'LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUVOQkdjQmtETUJDQURjWHpMRnBJSGpsUFNOdE5zUUJ2dG5SQ2NxQlVLVWs3WHo4ZVpJSFZJT3Q2bEYzVFBOClpNZnl5UGhhaWhMbEt6SlFkaHpEb2MzL2hkVEtSeGZCbHRyZmY5bll4NWRIV2Vnb21WTDFpL1MwSEFCN01PcW4KU2oxZEVya1FFUGhZYm5vMVZJNW1sNzFMTWV1L2FuRG1Fa0VodHZrVmNxV25YczZEaWl1ZFUwVG1jNFcvK2xWSApDbHVrK0lTa2cxLzNweExBUWpTaVBwV2cvWUIvY05EY3V1SHh1ZUMwS3FJSGdHSXJ4MGlESThUcTdLbE5iY09WCkN5ajBYcGN2NjUzZERsSlpBQTlPL2xqZmxlTmEwOE54c3BSQkVvTVhoSUt1T0wvb3dWWTY1WkRDQkJnZzVHR0gKdUtHbkZCSVRtS2Q5ZFdVVlJlemo3c0t1NXA0RXJBVGdSaTdsQUJFQkFBRzBKa2RoYkdGNGVTQkVaWFlnUzJWNQpJRHhuWVd4aGVIbGtaWFpBWVc1emFXSnNaUzVqYjIwK2lRRlJCQk1CQ0FBN0ZpRUUrNHMvTFNTOHIzNzk5NU9wCjgzVjF4UzFQRnZNRkFtY0JrRE1DR3dNRkN3a0lCd0lDSWdJR0ZRb0pDQXNDQkJZQ0F3RUNIZ2NDRjRBQUNna1EKODNWMXhTMVBGdlBEbUFnQXdKSi9UUERyVzljbEdiT2JHNmQzUlR6TTA4UjFIdngxeFJocGVXR0IzdVBhZyt6UwpMbW1nU0hVc2tXV0NoUnIxbWNkSWZINjBIZ2RoUjFQSWs5c2pLc1RXb3J6UzBQb2xpdDdEZDdwUytlMXNGZEdlCk1GR1gwbGpEWUY1NTh5YVg1TkNWQnN0SWFxeFR1SGMrU0dPWVQ4Lzd3NVA3L3k3TGk5T0JPNHZwUHg2Z3EvUlYKSjF4NkduREVMcGhHZXl6QWxQemV2UndWcjdoMjdrZklpZEk4dkQyTFlzM3FWN3Njbk9jVytoRmNKNXV0TGVlNAo0aWExQkRDWURSZ09nejRrTW96L3JHUTRyUjE1YVRjbGloYzArcHVaSnJ2c1VRTVBTMStxOVhvSlBKcytzK0dyCmtZMjRZSUQvQk5VWHkwai9CUjV2UVF2Q1NDYVdkQkRHeUZ2VjdBPT0KPTBoWksKLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLQo=' > /etc/pulp/certs/ansible-sign-pub.gpg;
126
+ head -n 4 /etc/pulp/certs/ansible-sign-pub.gpg;
127
+ echo '...';
128
+ tail -n 4 /etc/pulp/certs/ansible-sign-pub.gpg;
129
+ find /etc/pulp/certs ;
130
+ echo ' ';
131
+ echo 'DONE! <#';
132
+
109
133
"
110
134
111
135
migrations :
@@ -124,6 +148,7 @@ services:
124
148
command : |
125
149
bash -c "
126
150
set -e;
151
+ rm -rf /var/lib/pulp/.migrated;
127
152
while [[ ! -f /etc/pulp/certs/database_fields.symmetric.key ]]; do
128
153
echo 'Waiting for key';
129
154
sleep 2;
@@ -153,6 +178,7 @@ services:
153
178
networks :
154
179
- default
155
180
- service-mesh
181
+ user : root
156
182
command : |
157
183
bash -c "
158
184
while [[ ! -f /var/lib/pulp/.migrated ]]; do
@@ -179,6 +205,7 @@ services:
179
205
networks :
180
206
- default
181
207
- service-mesh
208
+ user : root
182
209
command : |
183
210
bash -c "
184
211
while [[ ! -f /var/lib/pulp/.migrated ]]; do
@@ -200,12 +227,91 @@ services:
200
227
- " .:/src/galaxy_ng"
201
228
environment :
202
229
<< : *common-env
230
+ user : root
203
231
command : |
204
232
bash -c "
205
233
while [[ ! -f /var/lib/pulp/.migrated ]]; do
206
234
echo 'Waiting for migrations ...';
207
235
sleep 2;
208
- done && exec pulpcore-worker;
236
+ done;
237
+ while [[ ! -f /etc/pulp/certs/ansible-sign.key ]]; do
238
+ echo 'Waiting for signing key';
239
+ sleep 2;
240
+ done;
241
+
242
+ echo '#> STEP: Import GPG Keys for content signing tasks';
243
+ gpgconf --kill gpg-agent && gpg --batch --no-default-keyring --import /etc/pulp/certs/ansible-sign.key;
244
+ (echo 5; echo y; echo save) | gpg --command-fd 0 --no-tty --no-greeting -q --edit-key 'FB8B3F2D24BCAF7EFDF793A9F37575C52D4F16F3' trust;
245
+ gpg --list-secret-keys;
246
+ echo 'DONE! <#';
247
+
248
+ exec pulpcore-worker;
249
+ "
250
+
251
+ manager :
252
+ image : " localhost/galaxy_ng/galaxy_ng:base"
253
+ depends_on :
254
+ - base_img
255
+ - postgres
256
+ - helper
257
+ - migrations
258
+ - worker
259
+ volumes :
260
+ - " etc_pulp_certs:/etc/pulp/certs"
261
+ - " var_lib_pulp:/var/lib/pulp"
262
+ - " .:/src/galaxy_ng"
263
+ environment :
264
+ << : *common-env
265
+ user : root
266
+ command : |
267
+ bash -c "
268
+ while [[ ! -f /var/lib/pulp/.migrated ]]; do
269
+ echo 'Waiting for migrations ...';
270
+ sleep 2;
271
+ done;
272
+ while [[ ! -f /etc/pulp/certs/ansible-sign.key ]]; do
273
+ echo 'Waiting for signing key';
274
+ sleep 2;
275
+ done;
276
+
277
+ echo '#> STEP: Scheduling Resource Sync Task.';
278
+ pulpcore-manager task-scheduler --id dab_sync --interval 15 --path "galaxy_ng.app.tasks.resource_sync.run";
279
+ curl -s -u admin:admin http://api:24817/api/galaxy/pulp/api/v3/task-schedules/?name=dab_sync | python -m json.tool;
280
+ echo 'DONE! <#';
281
+
282
+ echo '#> STEP: Import GPG Keys for signing service creation.';
283
+ gpgconf --kill gpg-agent && gpg --batch --no-default-keyring --import /etc/pulp/certs/ansible-sign.key;
284
+ (echo 5; echo y; echo save) | gpg --command-fd 0 --no-tty --no-greeting -q --edit-key 'FB8B3F2D24BCAF7EFDF793A9F37575C52D4F16F3' trust;
285
+ gpg --list-secret-keys;
286
+ echo 'DONE! <#';
287
+ echo '#> STEP: Creating signing services';
288
+ pulpcore-manager add-signing-service ansible-default /var/lib/pulp/scripts/collection_sign.sh F37575C52D4F16F3;
289
+ pulpcore-manager add-signing-service container-default /var/lib/pulp/scripts/container_sign.sh F37575C52D4F16F3 --class container:ManifestSigningService;
290
+ # add-signing-service is not idempotent, so the note below.
291
+ echo 'NOTE!!! CommandError: duplicate key value, above is NOT A PROBLEM if 2 signing services are returned from API below:';
292
+ curl -s -u admin:admin http://api:24817/api/galaxy/pulp/api/v3/signing-services/?fields=name,script,pubkey_fingerprint | python -m json.tool;
293
+ echo 'DONE! <#';
294
+ echo '#> STEP: Setting repository public key for signature upload verification'
295
+ pulpcore-manager set-repo-keyring --repository staging --publickeypath /etc/pulp/certs/ansible-sign-pub.gpg -y;
296
+ pulpcore-manager set-repo-keyring --repository published --publickeypath /etc/pulp/certs/ansible-sign-pub.gpg -y;
297
+ echo 'DONE! <#';
298
+
299
+ echo '#> STEP: Installing dev tools';
300
+ /venv/bin/pip3.11 install ipython ipdb django-extensions;
301
+ echo 'DONE! <#';
302
+ echo ' ';
303
+
304
+ echo '###################### API ROOT ##############################';
305
+ curl -s http://api:24817/api/galaxy/ | python -m json.tool;
306
+
307
+ echo '######################## READY ###############################';
308
+ echo ' ';
309
+ echo 'API: http://localhost:5001/api/galaxy/v3/swagger-ui/';
310
+ echo 'Django Admin CLI: docker compose -f aap_compose_dev.yaml exec manager pulpcore-manager';
311
+ echo 'Settings list: docker compose -f aap_compose_dev.yaml exec manager dynaconf list';
312
+
313
+ # Keep it running indefinitely to enable `docker compose -f ... exec manager /bin/bash`
314
+ tail -f /dev/null
209
315
"
210
316
211
317
nginx :
@@ -224,10 +330,10 @@ services:
224
330
225
331
volumes :
226
332
var_lib_pulp :
227
- name : var_lib_pulp
333
+ name : var_lib_pulp
228
334
etc_pulp_certs :
229
- name : etc_pulp_certs
335
+ name : etc_pulp_certs
230
336
231
337
networks :
232
338
service-mesh :
233
- name : service-mesh
339
+ name : service-mesh
0 commit comments