Skip to content

Commit 2effa04

Browse files
GuanzhouSongCopilot
andcommitted
Tighten the architecture and offline callouts after a clarity review
A documentation review measured 544 words of blockquote on this page -- 20% of all prose -- and singled out the two architecture callouts added earlier as the worst offenders at 204 words between them. Replace both with a single substitution table: three rows for the three strings that actually change on ARM, with the arch-agnostic forms as the primary advice so most readers need no decision at all. Both searchable error strings survive, so anyone who hits the symptom and googles it still lands here. The page also used none of the GitHub-style alert markers the renderer supports (app/components/Markdown.tsx handles [!NOTE], [!WARNING], [!IMPORTANT], [!TIP] and [!CAUTION] with distinct colours), so all eight callouts rendered as the same blue box and the load-bearing crb warning was visually indistinguishable from Debian 13 trivia. Tag the ARM callout [!WARNING], crb [!IMPORTANT] and the offline staging note [!NOTE]. Also cut the offline prose: merge the two-paragraph opener, drop the harmless-warnings trivia to a clause, and delete the defensive "that is not a defect in the packages" sentence, which changes nothing a reader types. 3,519 -> 3,239 rendered words. No shell command was altered -- every flag in the staging and install blocks is byte-identical, since those were verified by installing into containers with the network disabled. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: f18515db-c52f-4197-aa50-d81359c7c763 Signed-off-by: Guanzhou Song <guanzhou.song@gmail.com>
1 parent 618e5fc commit 2effa04

1 file changed

Lines changed: 20 additions & 17 deletions

File tree

‎app/services/articleService.ts‎

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -179,33 +179,35 @@ ${buildAptInstallCommand('ubuntu24', 'amd64', '18')}
179179
180180
For PostgreSQL 17 on the same host, install \`documentdb-17\` instead of \`documentdb-18\`. The \`documentdb\` meta package is equivalent to \`documentdb-18\`.
181181
182-
> **On arm64, swap \`arch=amd64\` → \`arch=arm64\`** in the \`documentdb.list\` line. The repository publishes both (\`Architectures: amd64 arm64\`), so nothing else in the command changes. To make the line arch-agnostic, use \`arch=$(dpkg --print-architecture)\` instead.
183-
>
184-
> Leaving \`amd64\` on an ARM host fails in a way that does not name the architecture: \`apt update\` succeeds, then the install reports \`documentdb-18 : Depends: postgresql-18-documentdb but it is not installable\`. The meta and stand-alone packages are \`Architecture: all\` and resolve fine; only the extension package is arch-specific, so it is the one that goes missing.
185-
186182
### RPM example (RHEL-compatible 9, PostgreSQL 18)
187183
188184
\`\`\`bash
189185
${buildRpmInstallCommand('rhel9', 'x86_64', '18')}
190186
\`\`\`
191187
192-
For PostgreSQL 17, install \`documentdb-17\`. The \`documentdb\` meta package is equivalent to \`documentdb-18\`.
188+
For PostgreSQL 17, install \`documentdb-17\`.
193189
194-
> **On aarch64, swap \`EL-9-x86_64\` → \`EL-9-aarch64\`** in the PGDG repository RPM URL, and \`codeready-builder-for-rhel-9-x86_64-rpms\` → \`codeready-builder-for-rhel-9-aarch64-rpms\` in the fallback \`config-manager\` line. On EL8 the same swap applies to \`EL-8-x86_64\`. To make the URL arch-agnostic, use \`EL-9-$(uname -m)\` instead.
190+
> [!WARNING]
191+
> **On ARM, change three strings** — the commands above are written for x86_64.
195192
>
196-
> PGDG ships a *separate* \`pgdg-redhat-repo\` package per architecture, and the file name \`pgdg-redhat-repo-latest.noarch.rpm\` is identical for both — so the wrong one installs without complaint. It writes x86_64 repository URLs and keys, and the next \`dnf\` call fails with \`Bad GPG signature\` on \`pgdg-common\` even though \`epel\`, \`crb\` and \`documentdb\` all verify normally. The signature error names the repository but never the architecture, so it reads like a broken mirror.
193+
> | In | Replace | With |
194+
> | --- | --- | --- |
195+
> | APT \`documentdb.list\` line | \`arch=amd64\` | \`arch=$(dpkg --print-architecture)\` |
196+
> | RPM PGDG URL | \`EL-9-x86_64\` | \`EL-9-$(uname -m)\` (same for \`EL-8-x86_64\`) |
197+
> | RPM \`config-manager\` fallback | \`codeready-builder-for-rhel-9-x86_64-rpms\` | \`...-aarch64-rpms\` |
198+
>
199+
> Neither failure names the architecture. APT reports \`documentdb-18 : Depends: postgresql-18-documentdb but it is not installable\` — only the extension package is arch-specific, so it is the one that goes missing. DNF reports \`Bad GPG signature\` on \`pgdg-common\`, because PGDG ships a separate reporpm per architecture under an identical file name.
197200
198-
> **Why the \`crb\` line matters.** DocumentDB's extension depends on PostGIS, which pulls in \`gdal*-libs\`, which needs \`libqhull_r.so.7\` — and that library ships only in **CRB** (CodeReady Builder; \`powertools\` on EL8). If CRB is not enabled, \`dnf install\` fails with dozens of lines like \`nothing provides libqhull_r.so.7()(64bit) needed by gdal313-libs\`, naming GDAL but never the missing repository. Do not drop that line.
201+
> [!IMPORTANT]
202+
> **Do not drop the \`crb\` line.** PostGIS pulls in \`gdal*-libs\`, which needs \`libqhull_r.so.7\`, and that ships only in CRB (\`powertools\` on EL8). Without it \`dnf install\` fails with \`nothing provides libqhull_r.so.7()(64bit)\`, naming GDAL but never the missing repository.
199203
200204
## Offline / air-gapped install
201205
202-
A host with no route to this repository also has no route to PGDG — and DocumentDB depends on PostgreSQL itself plus \`pg_cron\`, \`pgvector\` and PostGIS, which are PGDG packages. Downloading the DocumentDB release assets alone is not enough. Stage the whole dependency closure on a connected machine and carry it across.
203-
204-
Run the staging step on a machine with the **same distribution, release and architecture** as the target; the closure is specific to all three.
206+
An air-gapped host has no route to PGDG either, and DocumentDB pulls PostgreSQL, \`pg_cron\`, \`pgvector\` and PostGIS from there — the release assets alone are not enough. Stage the full dependency closure on a connected machine with the **same distribution, release and architecture** as the target.
205207
206208
### Stage the bundle (connected machine)
207209
208-
Configure the repositories exactly as in the examples above, then download the closure and index it:
210+
With the same repositories configured as for an online install:
209211
210212
\`\`\`bash
211213
# Debian / Ubuntu
@@ -225,13 +227,14 @@ sudo dnf download --resolve --alldeps --destdir bundle documentdb-18
225227
createrepo_c bundle
226228
\`\`\`
227229
228-
> **Use the full-closure flags, not \`--download-only\`.** \`apt-get install --download-only\` and a bare \`dnf download --resolve\` skip anything already installed on the staging machine. The bundle looks complete and then fails on a clean target with errors like \`Depends: adduser but it is not installable\`. \`apt-cache depends --recurse\` and \`dnf download --alldeps\` ignore local install state, which is what you want here.
230+
> [!NOTE]
231+
> **Use the full-closure flags, not \`--download-only\`.** \`apt-get install --download-only\` and a bare \`dnf download --resolve\` skip whatever is already installed on the staging machine; the bundle looks complete and the target dies with \`Depends: adduser but it is not installable\`.
229232
230-
Expect roughly 200 packages / 200 MB for the DEB closure and 270 packages / 170 MB for the RPM closure — mostly PostGIS and its GDAL dependencies. Two warnings from the DEB step are harmless: \`Download is performed unsandboxed as root\`, and a long \`dpkg-scanpackages: warning: Packages in archive but missing from override file\` list, which is just an artifact of passing \`/dev/null\` as the override file.
233+
Expect ~200 packages / 200 MB (DEB) or ~270 / 170 MB (RPM), mostly PostGIS and GDAL. The \`unsandboxed as root\` and \`dpkg-scanpackages ... override file\` warnings are harmless.
231234
232235
### Install from the bundle (air-gapped target)
233236
234-
Copy \`bundle/\` across and point the package manager at it. Because the target now has a real repository index, this is a single command with full dependency resolution — no ordered list of files:
237+
Copy \`bundle/\` across and point the package manager at it — the local index restores full dependency resolution:
235238
236239
\`\`\`bash
237240
# Debian / Ubuntu
@@ -249,7 +252,7 @@ printf '%s\\n' '[documentdb-offline]' 'name=DocumentDB offline bundle' \\
249252
sudo dnf install documentdb-18
250253
\`\`\`
251254
252-
\`[trusted=yes]\` and \`gpgcheck=0\` tell the package manager to accept a local directory that has no repository signature of its own. The upstream signatures were verified when the bundle was staged; if it crosses an untrusted boundary, check the transfer with \`sha256sum\`.
255+
\`[trusted=yes]\` / \`gpgcheck=0\` accept the unsigned local directory. Upstream signatures were verified at staging time; \`sha256sum\` the transfer if it crosses an untrusted boundary.
253256
254257
Then continue with **Set up and connect** below — \`documentdb-setup\` needs no network.
255258
@@ -258,7 +261,7 @@ Then continue with **Set up and connect** below — \`documentdb-setup\` needs n
258261
If the target already has PostgreSQL and the PGDG extension dependencies (\`postgresql-N-cron\`, \`-pgvector\`, \`-postgis-3\`), you do not need a bundle:
259262
260263
- **Extension only, one file** — \`sudo apt install ./ubuntu24.04-postgresql-18-documentdb_0.116-0_amd64.deb\`. No gateway and no \`documentdb-setup\`.
261-
- **Full stack from the release assets** — pass all six files for your platform to a single \`apt install\` / \`dnf install\`. They must go in one command: \`apt\` and \`dnf\` resolve dependencies only from repository indexes, so a dependency on a bare local file is unresolvable and the meta package on its own fails with \`Depends: documentdb-18 ... but it is not installable\`. That is not a defect in the packages — it happens to any local \`.deb\` or \`.rpm\` whose dependencies are not in an enabled repository.
264+
- **Full stack from the release assets** — pass all six files for your platform to a *single* \`apt install\` / \`dnf install\`. Local files resolve dependencies only against enabled repositories, so the meta package on its own fails with \`Depends: documentdb-18 ... but it is not installable\`.
262265
263266
## Set up and connect
264267

0 commit comments

Comments
 (0)