chore: follow-ups to #406, #407 and #415 — locale cleanup, journal entry, pigz 1.1 and docs

This commit is contained in:
MacRimi
2026-10-01 23:06:49 +02:00
parent b7e053b88a
commit 96f3d82e15
29 changed files with 254 additions and 130 deletions
@@ -250,7 +250,7 @@ export default async function NvidiaHostPage({
<Steps.Step title={t("walkthrough.version.title")}>
<p className="mb-3 text-gray-800">{t.rich("walkthrough.version.body1", { strong, em, code })}</p>
<p className="mb-3 text-gray-800">{t("walkthrough.version.body2")}</p>
<p className="mb-3 text-gray-800">{t.rich("walkthrough.version.body2", { em })}</p>
<Callout variant="tip" title={t("walkthrough.version.whyTitle")}>
{t("walkthrough.version.whyBody")}
@@ -49,6 +49,7 @@ export async function generateMetadata({
type SourceRow = { collector: string; watches: string; events: string }
type DispatchRow = { stage: string; what: string; tunable: string }
type CatalogueRow = { group: string; events: string }
type BackupResultRow = { icon: string; result: string; when: string }
type ApiRow = { endpoint: string; method: string; use: string }
type WhereNextItem = { label: string; href: string; tail?: string; tailRich?: string }
@@ -88,7 +89,7 @@ export default async function NotificationsPage({
securityItems: string[]
actionsItems: string[]
}
catalogue: { rows: CatalogueRow[] }
catalogue: { rows: CatalogueRow[]; backupResults: { rows: BackupResultRow[]; items: string[] } }
api: { rows: ApiRow[] }
whereNext: { items: WhereNextItem[] }
} } }
@@ -117,6 +118,8 @@ export default async function NotificationsPage({
const pveSecurity = n.pveWebhook.securityItems
const pveActions = n.pveWebhook.actionsItems
const catalogueRows = n.catalogue.rows
const backupResultRows = n.catalogue.backupResults.rows
const backupResultItems = n.catalogue.backupResults.items
const apiRows = n.api.rows
const whereNextItems = n.whereNext.items
@@ -722,6 +725,37 @@ running on node pve-01
{t.rich("catalogue.burstNote", { code })}
</p>
<h3 id="backup-results" className="text-lg font-semibold mt-6 mb-2 text-gray-900">{t("catalogue.backupResults.heading")}</h3>
<p className="mb-4 text-gray-800 leading-relaxed">{t.rich("catalogue.backupResults.intro", { em })}</p>
<div className="overflow-x-auto mb-6">
<table className="w-full text-sm border border-gray-200 rounded-md">
<thead className="bg-gray-50 text-gray-900">
<tr>
<th className="text-left px-3 py-2 border-b border-gray-200">{t("catalogue.backupResults.headerIcon")}</th>
<th className="text-left px-3 py-2 border-b border-gray-200">{t("catalogue.backupResults.headerResult")}</th>
<th className="text-left px-3 py-2 border-b border-gray-200">{t("catalogue.backupResults.headerWhen")}</th>
</tr>
</thead>
<tbody className="text-gray-800">
{backupResultRows.map((row, idx) => (
<tr key={row.icon} className={idx < backupResultRows.length - 1 ? "border-b border-gray-100" : ""}>
<td className="px-3 py-2 align-top whitespace-nowrap">{row.icon}</td>
<td className="px-3 py-2 align-top whitespace-nowrap"><strong>{row.result}</strong></td>
<td className="px-3 py-2 align-top">{row.when}</td>
</tr>
))}
</tbody>
</table>
</div>
<ul className="list-disc pl-6 mb-6 text-gray-800 leading-relaxed space-y-1">
{backupResultItems.map((_, idx) => (
<li key={idx}>{t.rich(`catalogue.backupResults.items.${idx}`, { strong })}</li>
))}
</ul>
<h2 className="text-2xl font-semibold mt-10 mb-4 text-gray-900">{t("history.heading")}</h2>
<p className="mb-4 text-gray-800 leading-relaxed">
@@ -85,14 +85,17 @@ apt-get -y install pigz
cat > /bin/pigzwrapper <<'EOF'
#!/bin/sh
PATH=/bin:$PATH
GZIP="-1"
export GZIP="-1"
exec /usr/bin/pigz "$@"
EOF
chmod +x /bin/pigzwrapper
# Only replaces gzip if not already replaced (idempotent)
[ ! -f /bin/gzip.original ] && mv /bin/gzip /bin/gzip.original \\
&& cp /bin/pigzwrapper /bin/gzip && chmod +x /bin/gzip`}
# gzip is diverted: the real binary is kept as gzip.distrib, package updates
# land there, and the wrapper takes the place of gzip.
# Path on Proxmox VE 9; on Proxmox VE 8 it is /bin/gzip.
cp -p /usr/bin/gzip /usr/bin/gzip.distrib
dpkg-divert --local --no-rename --divert /usr/bin/gzip.distrib --add /usr/bin/gzip
cat /bin/pigzwrapper > /usr/bin/gzip`}
className="my-4"
/>
@@ -106,8 +109,9 @@ chmod +x /bin/pigzwrapper
<CopyableCode
code={`# Manual rollback of pigz
mv /bin/gzip.original /bin/gzip # restore original binary
rm /bin/pigzwrapper
cat /usr/bin/gzip.distrib > /usr/bin/gzip # restore the real binary
dpkg-divert --local --no-rename --remove /usr/bin/gzip
rm /usr/bin/gzip.distrib /bin/pigzwrapper
sed -i 's/^pigz: 1/#pigz: 1/' /etc/vzdump.conf
# Optional: remove the package
apt purge pigz`}
@@ -74,7 +74,7 @@ export default async function SystemUpdatePage({
<div>
<DocHeader
title={t("header.title")}
description={t("header.description")}
description={t.rich("header.description", { code, em })}
section={t("header.section")}
estimatedMinutes={5}
scriptPath="utilities/proxmox_update.sh"
@@ -175,14 +175,14 @@ export default async function SystemUpdatePage({
<h2 className="text-2xl font-semibold mt-10 mb-4 text-gray-900">{t("noSub.heading")}</h2>
<p className="mb-6 text-gray-800 leading-relaxed">
{t.rich("noSub.intro", { code, strong })}
{t.rich("noSub.intro", { code, strong, em })}
</p>
<ol className="list-decimal pl-6 mb-6 text-gray-800 leading-relaxed space-y-1">
<ul className="list-disc pl-6 mb-6 text-gray-800 leading-relaxed space-y-1">
{noSubItems.map((_, idx) => (
<li key={idx}>{t.rich(`noSub.items.${idx}`, { code, strong })}</li>
<li key={idx}>{t.rich(`noSub.items.${idx}`, { code, strong, em })}</li>
))}
</ol>
<p className="mb-6 text-gray-800 leading-relaxed">{t("noSub.outro")}</p>
</ul>
<p className="mb-6 text-gray-800 leading-relaxed">{t.rich("noSub.outro", { code, em })}</p>
<h2 className="text-2xl font-semibold mt-10 mb-4 text-gray-900">{t("cluster.heading")}</h2>
<Callout variant="warning" title={t("cluster.calloutTitle")}>
@@ -200,7 +200,7 @@ export default async function SystemUpdatePage({
{troubleItems.map((_, idx) => (
<Callout key={idx} variant="troubleshoot" title={t(`troubleshooting.items.${idx}.title`)}>
{t.rich(`troubleshooting.items.${idx}.body`, { code, kbd })}
{t.rich(`troubleshooting.items.${idx}.body`, { code, kbd, em })}
</Callout>
))}
@@ -157,7 +157,7 @@ export default async function SystemUtilsPage({
<h2 className="text-2xl font-semibold mt-10 mb-4 text-gray-900">{t("troubleshoot.heading")}</h2>
<Callout variant="troubleshoot" title={t("troubleshoot.reposTitle")}>
{t.rich("troubleshoot.reposBody", { code })}
{t.rich("troubleshoot.reposBody", { code, em })}
</Callout>
<Callout variant="troubleshoot" title={t("troubleshoot.warningsTitle")}>