1a747f61a8
images/·manifests/helm/·.claude/ 의 20개 파일이 doc/decisions·doc/analysis 등 **이 레포에 존재한 적 없는 경로 15종을 48곳에서** 인용하고 있었다. security-catalog 에서 포팅할 때 따라온 것인데, 그 레포는 개인 레포(github.com/wbsong111/security-catalog)라 팀 구성원은 접근조차 못 한다 — "security-catalog 에 있으나 이관되지 않았다" 는 안내가 아무 역할을 하지 못했다. 원문을 통째로 복사하지 않았다 ---------------------------- 원본 문서들이 서로를 근거로 인용한다. decisions/0001 하나만 봐도 analysis/cnpg-image-baseline.md · analysis/vendor-unassessed-data-sources.md 처럼 **인용 목록에 없던 또 다른 미이관 문서**를 가리킨다. 복사는 문제를 옮기는 것이지 없애는 게 아니다. 그리고 대부분은 애초에 dip-catalog 가 더 나은 것을 갖고 있다. 7곳에서 인용되던 analysis/sles-oval-measurement.md 는 원문 스스로 "이 문서는 결정하지 않는다. 재측정하면 갱신된다" 고 밝히는 스냅샷인데, dip-catalog 는 같은 측정을 CoverageProbe 로 매 스캔마다 자동으로 한다. 문서를 복사하는 것보다 게이트를 가리키는 것이 정확하다. 그래서 성격별로 나눴다 --------------------- 재측정으로 복원 안 되는 것 → doc/decisions/ 에 자립적 ADR 로 다시 씀 (4건) 이미 단일 출처가 있는 것 → 그쪽으로 인용 교체 (11종 경로) ADR 4건은 security-catalog 0001·0005·0006·0007 이 원본이고, 결론과 근거만 추려 dip-catalog 맥락으로 새로 썼다 — **레포 밖을 가리키는 링크가 0이다.** 번호는 이 레포에서 0001~0004 로 다시 붙였고 원본 대응은 각 문서와 README 에 적었다. 왜 안 가져온 것은 안 가져왔는지도 README 표에 남겼다. 인용 교체는 카테고리별로: analysis/*-cve.md, cnpg-image-vuln-comparison.md → 해당 ADR · images/<image>/README.md analysis/sles-oval-measurement.md → 게이트 CoverageProbe (doc/sbom-pipeline.md) cve-zero-pipeline.md, architecture/build-pipeline.md → doc/sbom-pipeline.md image-selection.md → .claude/image-authoring.md charts/*/deploy-test.md → scripts/deploy-test/*.sh + 절차 문서 찾은 오류 2건 ------------- - images/cloudnative-pg/source.build.env 가 인용한 decisions/0004-cloudnative-pg-operator-self-build.md 는 **번호 오기**다. 원본 0004 는 postgresql-chart-selection 이고 이 결정은 0005 다. - cnpg-cluster values.yaml·templates/database.yaml 이 인용한 doc/deploy-test-cnpg.md 는 **원본 레포에도 없다.** CREATE EXTENSION 함정 설명은 주석 자체에 이미 있어 인용만 뺐다. 검증 ---- 우리 파일의 깨진 doc/ 인용 0건 (전수 스캔) 새 문서·수정 문서의 로컬 링크 전부 실재 확인 helm template cnpg-cluster · etcd · cloudnative-pg 정상 렌더 남은 doc/health-checking.md(144곳)·doc/integration/*(2곳)은 업스트림 CRD·차트 안의 문자열로 우리가 쓴 인용이 아니다 — 건드리지 않았다. Closes #33 Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
84 lines
3.9 KiB
Docker
84 lines
3.9 KiB
Docker
# CloudNativePG PostgreSQL — SUSE BCI 기반 자체 빌드
|
|
#
|
|
# 업스트림 CNPG Dockerfile(Debian/apt/PGDG-deb)을 SUSE(zypper/PGDG-rpm)로 이식한 것이다.
|
|
# ARG BASE 만 바꾸는 수준이 아니라 패키지 관리자·저장소 설정·패키지명·경로가 모두 다르다.
|
|
#
|
|
# 업스트림과의 대응 관계
|
|
# postgresql-common + apt.postgresql.org.sh → rpm --import + zypper addrepo (PGDG zypp)
|
|
# postgresql-18 → postgresql18-server
|
|
# postgresql-18-pgaudit / -pgvector → pgaudit_18 / pgvector_18
|
|
# locales-all → glibc-locale
|
|
# usermod -u 26 postgres → 불필요 (PGDG RPM 이 uid 26 으로 생성)
|
|
# /usr/lib/postgresql/18/bin → /usr/pgsql-18/bin
|
|
#
|
|
# CNPG 호환성 근거 (실측)
|
|
# - uid 26: PGDG RPM 이 postgres 를 uid/gid 26 으로 만든다 (RPM 계열 관례)
|
|
# - 바이너리 탐색: CNPG 는 경로를 하드코딩하지 않고 PATH 로 찾는다.
|
|
# cloudnative-pg 소스에서 "usr/lib/postgresql" 는 테스트 픽스처에만 등장한다.
|
|
# 그래도 하드코딩 경로를 쓰는 코드가 생길 경우를 대비해 심볼릭 링크를 함께 둔다.
|
|
#
|
|
# 측정 가능성 — trivy 는 SLES 15.7 을 정상 커버한다.
|
|
# 2026-07-29 이전에는 "trivy 의 SUSE 데이터가 15.7 을 커버하지 않는다" 로 판단했으나
|
|
# 양성 대조(SBOM 사본에 취약 버전 주입 후 재스캔)로 재측정한 결과 오판이었다 — trivy 는
|
|
# 13건을 잡았다(SUSE-SU ID 포함). 0건은 이 이미지가 실제로 최신이라서다.
|
|
# scan-sbom.sh 의 커버리지 자가진단이 매 스캔마다 이를 확인한다.
|
|
# 판정 메커니즘: doc/sbom-pipeline.md (CoverageProbe)
|
|
|
|
ARG BASE=registry.suse.com/bci/bci-base:15.7
|
|
FROM $BASE AS minimal
|
|
|
|
ARG PG_MAJOR=18
|
|
ARG PG_VERSION=18.4-4200001PGDG.sles15.7
|
|
ARG SLE_REPO=sles-15.7-x86_64
|
|
ARG PGDG_KEY=PGDG-RPM-GPG-KEY-SLES15
|
|
|
|
ENV PATH=$PATH:/usr/pgsql-${PG_MAJOR}/bin
|
|
|
|
# PGDG 저장소는 GPG 키를 미리 import 해야 한다. addrepo 만 하면
|
|
# "Signature verification failed for repomd.xml" 로 저장소가 스킵된다.
|
|
RUN set -eux; \
|
|
rpm --import "https://download.postgresql.org/pub/repos/zypp/keys/${PGDG_KEY}"; \
|
|
zypper --non-interactive addrepo --refresh \
|
|
"https://download.postgresql.org/pub/repos/zypp/${PG_MAJOR}/suse/${SLE_REPO}/" pgdg; \
|
|
zypper --non-interactive refresh; \
|
|
zypper --non-interactive install -y --no-recommends \
|
|
"postgresql${PG_MAJOR}-server=${PG_VERSION}"; \
|
|
zypper clean --all; \
|
|
rm -rf /var/log/zypp /var/cache/zypp
|
|
|
|
# CNPG 는 PATH 로 바이너리를 찾지만, Debian 레이아웃을 가정하는 코드가 생길 경우를 대비한다.
|
|
RUN set -eux; \
|
|
mkdir -p /usr/lib/postgresql; \
|
|
ln -sfn "/usr/pgsql-${PG_MAJOR}" "/usr/lib/postgresql/${PG_MAJOR}"; \
|
|
id postgres | grep -q 'uid=26(' || { echo "postgres uid 가 26 이 아니다"; exit 1; }
|
|
|
|
USER 26
|
|
|
|
|
|
FROM minimal AS standard
|
|
ARG PG_MAJOR=18
|
|
# 업스트림 standard 와 동등한 구성: pgaudit, pgvector, contrib(pg_stat_statements), 전 로케일.
|
|
# pg-failover-slots 는 PGDG zypp 저장소에 없어 제외한다 (업스트림 Debian standard 와의 차이).
|
|
ARG EXTENSIONS="pgaudit_${PG_MAJOR} pgvector_${PG_MAJOR}"
|
|
USER 0
|
|
RUN set -eux; \
|
|
zypper --non-interactive install -y --no-recommends \
|
|
glibc-locale \
|
|
"postgresql${PG_MAJOR}-contrib" \
|
|
${EXTENSIONS}; \
|
|
zypper clean --all; \
|
|
rm -rf /var/log/zypp /var/cache/zypp
|
|
USER 26
|
|
|
|
|
|
# 베이스 이미지에 남은 구버전 패키지를 보안 업데이트로 올린다.
|
|
# Debian 판의 `apt-get upgrade` 단계에 대응한다 (그쪽에서 NVD 기준 HIGH 5건을 해소했다).
|
|
FROM standard AS patched
|
|
USER 0
|
|
RUN set -eux; \
|
|
zypper --non-interactive refresh; \
|
|
zypper --non-interactive update -y --no-recommends; \
|
|
zypper clean --all; \
|
|
rm -rf /var/log/zypp /var/cache/zypp
|
|
USER 26
|