fix(db-build): ensure Build Database Image uses valid Percona packages and non-interactive tzdata

- generator: map pg_stat_monitor to percona-pg-stat-monitor{major} for Percona 17/18 (was percona-postgresql-*-stat-monitor).

- templates: add non-interactive tzdata setup pinned to Etc/GMT-0 to avoid stdin prompts.

- templates: switch contrib to percona-postgresql-contrib metapackage.

- dockerfile: regenerated to reflect fixes; confirmed build succeeds.

Co-authored-by: Junie <junie@jetbrains.com>
This commit is contained in:
chrisfu 2026-02-28 23:27:38 -08:00
parent f20df131df
commit 28b3cd72df
5 changed files with 60 additions and 44 deletions

View File

@ -1,5 +1,5 @@
; Prole Master Configuration File ; Prole Master Configuration File
; Generated by install.py on 2026-02-28 22:51:26 ; Generated by install.py on 2026-02-28 23:26:36
; This file is used as input for Ansible deployment and k8s cluster creation. ; This file is used as input for Ansible deployment and k8s cluster creation.
[User] [User]
@ -27,38 +27,38 @@ dependencies.opentofu.install = true
dependencies.python.install = true dependencies.python.install = true
dependencies.verify_all = false dependencies.verify_all = false
disk_selection.disk_type = local disk_selection.disk_type = local
disk_selection.local_path = ${PROLE_HOME}/prole-tools-app/dist disk_selection.local_path = /Users/chrisfu
disk_selection.removable_mount = disk_selection.removable_mount =
env_setup.NAMESPACE = prole-hq0-db0 env_setup.NAMESPACE = ${NAMESPACE}
env_setup.PROLE_CONF = ${PROLE_CONF} env_setup.PROLE_CONF = ${PROLE_CONF}
env_setup.PROLE_DATA = ${PROLE_DATA} env_setup.PROLE_DATA = ${PROLE_DATA}
env_setup.PROLE_HOME = ${PROLE_HOME} env_setup.PROLE_HOME = ${PROLE_HOME}
env_setup.PROLE_LOGS = ${PROLE_LOGS} env_setup.PROLE_LOGS = ${PROLE_LOGS}
env_setup.PROLE_SERVICE = ${PROLE_SERVICE} env_setup.PROLE_SERVICE = ${PROLE_SERVICE}
init_cluster.at_rest_encryption_enabled = true init_cluster.at_rest_encryption_enabled = true
init_cluster.cluster_env = service init_cluster.cluster_env = dev
init_cluster.deployment_target = prole-service-cluster init_cluster.deployment_target = prole-dev-cluster
init_cluster.gitops_enabled = false init_cluster.gitops_enabled = false
init_cluster.k3s_server_url = https://myrddin.prole.org:6443 init_cluster.k3s_server_url =
init_cluster.k3s_token = ${PROLE_SECRET:v1:WQH1gOPkAhxbQdaD:TPu9jANobgFhqGuXdZEBH87Nf7kp9GzQ7rX52ddcv9vxYRE-aooXVvtIPjEnYZaMhmU9eHwKcLCUGcNLMY5QTxe4H5Wt_kLM_8CeMnT1_49M-FCe09hkCvyCMWtsp7Z7T7ceu9740RYLZWwOn5YlTTYvN8j2DIc-3pRaag==} init_cluster.k3s_token =
init_cluster.kerberos_enabled = true init_cluster.kerberos_enabled = false
init_cluster.mode = k3s init_cluster.mode = k3d
init_cluster.start_cluster = true init_cluster.start_cluster = true
init_cluster.supabase_enabled = false init_cluster.supabase_enabled = false
init_cnpg_deploy.force_rollout = false init_cnpg_deploy.force_rollout = false
init_cnpg_deploy.run_deploy = true init_cnpg_deploy.run_deploy = true
init_db_build.run_build = true init_db_build.run_build = true
init_password.db_host_port = 5432 init_password.db_host_port = 5432
init_password.db_namespace = prole-hq0-db0 init_password.db_namespace = ${NAMESPACE}
init_password.db_password = ${PROLE_SECRET:v1:SseiI-jBFyTZ9zoB:3eqr2gEMnrJuilQPcBEI9MTq8ahrVblz} init_password.db_password =
init_password.db_password_confirm = ${PROLE_SECRET:v1:SseiI-jBFyTZ9zoB:3eqr2gEMnrJuilQPcBEI9MTq8ahrVblz} init_password.db_password_confirm =
init_password.db_username = chrisfu init_password.db_username = root
init_password.generate_ssh_key = true init_password.generate_ssh_key = true
init_scripts.run_scripts = true init_scripts.run_scripts = true
kerberos_config.enabled = true kerberos_config.enabled = false
kerberos_config.kdc = 10.0.0.3 kerberos_config.kdc =
kerberos_config.password = kerberos_config.password =
kerberos_config.realm = PROLE.ORG kerberos_config.realm =
kerberos_config.test_connection = false kerberos_config.test_connection = false
kerberos_config.user = kerberos_config.user =
network_scan.run = true network_scan.run = true
@ -68,16 +68,16 @@ ollama_config.server_port = 11434
[Global] [Global]
; Variables used by name in more than one place or assumed global scope ; Variables used by name in more than one place or assumed global scope
CLUSTER_ENV = service CLUSTER_ENV = dev
DB_HOST_PORT = 5432 DB_HOST_PORT = 5432
DB_PASSWORD = ${PROLE_SECRET:v1:RRx5Zbnsbz1L1FDz:QOzdAPLCl-qLzeeoHl7leEdG60W2FX75} DB_PASSWORD =
DEPLOYMENT_MODE = k3s DEPLOYMENT_MODE = k3d
DEPLOYMENT_TARGET = prole-service-cluster DEPLOYMENT_TARGET = prole-dev-cluster
NAMESPACE = ${NAMESPACE} NAMESPACE = ${NAMESPACE}
PROLE_DB_USER = chrisfu PROLE_DB_USER = root
PROLE_HOME = ${PROLE_HOME} PROLE_HOME = ${PROLE_HOME}
PROLE_K3S_SERVER = https://myrddin.prole.org:6443 PROLE_K3S_SERVER =
PROLE_K3S_TOKEN = ${PROLE_SECRET:v1:WQH1gOPkAhxbQdaD:TPu9jANobgFhqGuXdZEBH87Nf7kp9GzQ7rX52ddcv9vxYRE-aooXVvtIPjEnYZaMhmU9eHwKcLCUGcNLMY5QTxe4H5Wt_kLM_8CeMnT1_49M-FCe09hkCvyCMWtsp7Z7T7ceu9740RYLZWwOn5YlTTYvN8j2DIc-3pRaag==} PROLE_K3S_TOKEN =
PROLE_OPENTOFU_URL = http://127.0.0.1:8080 PROLE_OPENTOFU_URL = http://127.0.0.1:8080
SERVICE_NAMESPACE = default SERVICE_NAMESPACE = default
@ -96,8 +96,6 @@ ANSIBLE_INVENTORY = ${PROLE_HOME}/infrastructure/inventory
ANSIBLE_REALM = PROLE.ORG ANSIBLE_REALM = PROLE.ORG
ANSIBLE_TOPOLOGY = {"domain":"prole.org","realm":"PROLE.ORG","internal_records":{"aventage.prole.org":"10.0.0.206","fairyland.prole.org":"10.0.0.208","loghost.prole.org":"10.0.0.3","morana.prole.org":"10.0.0.66","morgoth.prole.org":"10.0.0.204","myrddin.prole.org":"10.0.0.3","pi.prole.org":"10.0.0.5","raspberry.prole.org":"10.0.0.4","retropie.prole.org":"10.0.0.207","synology.prole.org":"10.0.0.203","zinfandel.prole.org":"10.0.0.205"},"ad_dc":{"host":"myrddin.prole.org","ip":"10.0.0.3"},"k3s":{"server_url":"https://myrddin.prole.org:6443","server_host":"myrddin.prole.org","token_present":true},"groups":{"iscsi":["pi.prole.org","raspberry.prole.org","myrddin.prole.org","retropie.prole.org"],"pihole":["pi.prole.org","raspberry.prole.org"],"ad_dc":["myrddin.prole.org"],"k3s_hosts":["myrddin.prole.org","pi.prole.org","retropie.prole.org"],"linux_hosts":["pi.prole.org","raspberry.prole.org","myrddin.prole.org","retropie.prole.org"]},"hosts":{"myrddin.prole.org":"10.0.0.3","pi.prole.org":"10.0.0.5","raspberry.prole.org":"10.0.0.4","retropie.prole.org":"10.0.0.207"},"unmapped_hosts":[]} ANSIBLE_TOPOLOGY = {"domain":"prole.org","realm":"PROLE.ORG","internal_records":{"aventage.prole.org":"10.0.0.206","fairyland.prole.org":"10.0.0.208","loghost.prole.org":"10.0.0.3","morana.prole.org":"10.0.0.66","morgoth.prole.org":"10.0.0.204","myrddin.prole.org":"10.0.0.3","pi.prole.org":"10.0.0.5","raspberry.prole.org":"10.0.0.4","retropie.prole.org":"10.0.0.207","synology.prole.org":"10.0.0.203","zinfandel.prole.org":"10.0.0.205"},"ad_dc":{"host":"myrddin.prole.org","ip":"10.0.0.3"},"k3s":{"server_url":"https://myrddin.prole.org:6443","server_host":"myrddin.prole.org","token_present":true},"groups":{"iscsi":["pi.prole.org","raspberry.prole.org","myrddin.prole.org","retropie.prole.org"],"pihole":["pi.prole.org","raspberry.prole.org"],"ad_dc":["myrddin.prole.org"],"k3s_hosts":["myrddin.prole.org","pi.prole.org","retropie.prole.org"],"linux_hosts":["pi.prole.org","raspberry.prole.org","myrddin.prole.org","retropie.prole.org"]},"hosts":{"myrddin.prole.org":"10.0.0.3","pi.prole.org":"10.0.0.5","raspberry.prole.org":"10.0.0.4","retropie.prole.org":"10.0.0.207"},"unmapped_hosts":[]}
KDC_ANSIBLE_DETECTED = 10.0.0.3 KDC_ANSIBLE_DETECTED = 10.0.0.3
KDC_AUTO_DETECTED = 10.0.0.3
KERBEROS_AUTO_ENABLED = True
[Port Forwards] [Port Forwards]
; No configuration values captured yet for this section. ; No configuration values captured yet for this section.
@ -119,10 +117,7 @@ PROLE_SERVICE = ${PROLE_SERVICE}
; No configuration values captured yet for this section. ; No configuration values captured yet for this section.
[Optional Features] [Optional Features]
AT_REST_ENCRYPTION_ENABLED = True
GITOPS_ENABLED = False GITOPS_ENABLED = False
KERBEROS_ENABLED = True
SUPABASE_ENABLED = False
[GitOps] [GitOps]
; No configuration values captured yet for this section. ; No configuration values captured yet for this section.
@ -131,41 +126,38 @@ SUPABASE_ENABLED = False
NAMESPACE = ${NAMESPACE} NAMESPACE = ${NAMESPACE}
[Initialize Cluster] [Initialize Cluster]
ENVIRONMENT = service ; No configuration values captured yet for this section.
K3S_SERVER_URL = https://myrddin.prole.org:6443
K3S_TOKEN = ${PROLE_SECRET:v1:WQH1gOPkAhxbQdaD:TPu9jANobgFhqGuXdZEBH87Nf7kp9GzQ7rX52ddcv9vxYRE-aooXVvtIPjEnYZaMhmU9eHwKcLCUGcNLMY5QTxe4H5Wt_kLM_8CeMnT1_49M-FCe09hkCvyCMWtsp7Z7T7ceu9740RYLZWwOn5YlTTYvN8j2DIc-3pRaag==}
[Dev Cluster (k3d)] [Dev Cluster (k3d)]
CLUSTER_ENV = dev CLUSTER_ENV = dev
DISPLAY_NAME = prole-dev-cluster DISPLAY_NAME = prole-dev-cluster
KUBECTL_CONTEXT = prole-k3s KUBECTL_CONTEXT =
MODE = k3d MODE = k3d
[Service Cluster (k3s)] [Service Cluster (k3s)]
CLUSTER_ENV = prole-service-cluster CLUSTER_ENV = prole-service-cluster
DISPLAY_NAME = prole-service-cluster DISPLAY_NAME = prole-service-cluster
K3S_SERVER_URL = https://myrddin.prole.org:6443 K3S_SERVER_URL =
K3S_TOKEN = ${PROLE_SECRET:v1:WQH1gOPkAhxbQdaD:TPu9jANobgFhqGuXdZEBH87Nf7kp9GzQ7rX52ddcv9vxYRE-aooXVvtIPjEnYZaMhmU9eHwKcLCUGcNLMY5QTxe4H5Wt_kLM_8CeMnT1_49M-FCe09hkCvyCMWtsp7Z7T7ceu9740RYLZWwOn5YlTTYvN8j2DIc-3pRaag==} K3S_TOKEN =
MODE = k3s MODE = k3s
PIPELINE_URL = http://127.0.0.1:8080 PIPELINE_URL = http://127.0.0.1:8080
[Prod Cluster (k8s)] [Prod Cluster (k8s)]
ARTIFACTS_DIR = /Users/chrisfu/dev/prole/data/staging ARTIFACTS_DIR = /private/var/folders/rt/pywlnmxj3dn7t5552vwdcpp80000gn/T/pytest-of-chrisfu/pytest-67/test_encryption_toggle0/data/staging
CLUSTER_ENV = prole-prod-cluster CLUSTER_ENV = prole-prod-cluster
DISPLAY_NAME = prole-prod-cluster DISPLAY_NAME = prole-prod-cluster
MODE = k8s MODE = k8s
PIPELINE_URL = http://127.0.0.1:8080 PIPELINE_URL = http://127.0.0.1:8080
[Docker Build] [Docker Build]
LOCAL_REGISTRY = localhost:5000 ; No configuration values captured yet for this section.
LOCAL_REGISTRY_INTERNAL = k3d-prole-registry.localhost:5000
[Initialization Scripts] [Initialization Scripts]
; No configuration values captured yet for this section. ; No configuration values captured yet for this section.
[Deployment] [Deployment]
MODE = k3s MODE = k3d
TARGET = prole-service-cluster TARGET = prole-dev-cluster
[Install] [Install]
; No configuration values captured yet for this section. ; No configuration values captured yet for this section.

View File

@ -320,7 +320,7 @@ class DatabaseOptionsScreenMixin:
elif ext_id == "pgbadger": elif ext_id == "pgbadger":
pkg = "percona-pgbadger" pkg = "percona-pgbadger"
elif ext_id == "pg_stat_monitor": elif ext_id == "pg_stat_monitor":
pkg = f"percona-postgresql-{version}-stat-monitor" pkg = f"percona-pg-stat-monitor{version}"
else: else:
pkg = f"percona-postgresql-{version}-{ext_id}" pkg = f"percona-postgresql-{version}-{ext_id}"
else: else:

View File

@ -1 +1 @@
77 78

View File

@ -4,18 +4,30 @@ FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
ENV LANG=C.UTF-8 ENV LANG=C.UTF-8
ENV PGDATA=/var/lib/postgresql/data ENV PGDATA=/var/lib/postgresql/data
ENV TZ=Etc/GMT-0
RUN set -eux; \ RUN set -eux; \
apt-get update; \ apt-get update; \
apt-get install -y --no-install-recommends \ apt-get install -y --no-install-recommends \
ca-certificates curl wget gnupg2 lsb-release \ ca-certificates curl wget gnupg2 lsb-release \
locales tzdata \ locales \
gosu \ gosu \
build-essential git openssh-client \ build-essential git openssh-client \
; \ ; \
rm -rf /var/lib/apt/lists/*; \ rm -rf /var/lib/apt/lists/*; \
locale-gen en_US.UTF-8 locale-gen en_US.UTF-8
# Configure non-interactive timezone to avoid tzdata prompts
RUN set -eux; \
echo "tzdata tzdata/Areas select Etc" | debconf-set-selections; \
echo "tzdata tzdata/Zones/Etc select GMT-0" | debconf-set-selections; \
apt-get update; \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata; \
rm -rf /var/lib/apt/lists/*; \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime; \
echo $TZ > /etc/timezone; \
dpkg-reconfigure -f noninteractive tzdata
RUN set -eux; \ RUN set -eux; \
mkdir -p /root/.ssh; \ mkdir -p /root/.ssh; \
ssh-keyscan github.com >> /root/.ssh/known_hosts ssh-keyscan github.com >> /root/.ssh/known_hosts
@ -64,7 +76,7 @@ RUN set -eux; \
apt-get update; \ apt-get update; \
{{EXTENSION_INSTALL_STEPS}} {{EXTENSION_INSTALL_STEPS}}
apt-get install -y --no-install-recommends \ apt-get install -y --no-install-recommends \
percona-postgresql-contrib-{{MAJOR_VERSION}} \ percona-postgresql-contrib \
freetds-dev \ freetds-dev \
; \ ; \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*

View File

@ -4,18 +4,30 @@ FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
ENV LANG=C.UTF-8 ENV LANG=C.UTF-8
ENV PGDATA=/var/lib/postgresql/data ENV PGDATA=/var/lib/postgresql/data
ENV TZ=Etc/GMT-0
RUN set -eux; \ RUN set -eux; \
apt-get update; \ apt-get update; \
apt-get install -y --no-install-recommends \ apt-get install -y --no-install-recommends \
ca-certificates curl wget gnupg2 lsb-release \ ca-certificates curl wget gnupg2 lsb-release \
locales tzdata \ locales \
gosu \ gosu \
build-essential git openssh-client \ build-essential git openssh-client \
; \ ; \
rm -rf /var/lib/apt/lists/*; \ rm -rf /var/lib/apt/lists/*; \
locale-gen en_US.UTF-8 locale-gen en_US.UTF-8
# Configure non-interactive timezone to avoid tzdata prompts
RUN set -eux; \
echo "tzdata tzdata/Areas select Etc" | debconf-set-selections; \
echo "tzdata tzdata/Zones/Etc select GMT-0" | debconf-set-selections; \
apt-get update; \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata; \
rm -rf /var/lib/apt/lists/*; \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime; \
echo $TZ > /etc/timezone; \
dpkg-reconfigure -f noninteractive tzdata
RUN set -eux; \ RUN set -eux; \
mkdir -p /root/.ssh; \ mkdir -p /root/.ssh; \
ssh-keyscan github.com >> /root/.ssh/known_hosts ssh-keyscan github.com >> /root/.ssh/known_hosts