domino-container-lp-recipe — 為 HCL Domino Container 加上繁中 Language Pack 的社群工具(含他語言擴充範本)

domino-container-lp-recipe — 為 HCL Domino Container 加上繁中 Language Pack 的社群工具(含他語言擴充範本)

2026.05.19 約 1,497 字

重點摘要

  • HCL 官方 HCL-TECH-SOFTWARE/domino-container 內建支援 6 種 LP(DE / ES / FR / IT / NL / JA)
  • 上游 Issue #55 討論過怎麼裝其他 LP;官方基於「要加就要承擔所有語言維護責任」的考量沒把更多 LP 收進 build.sh、這個取捨是合理的
  • 社群工具 bryanHsiao/domino-container-lp-recipe 目前只 ship 繁中 LP(end-to-end 驗證過):一個小腳本、套用 ~50 行修補到上游 clone(不是維護 fork),就能跑 ./build.sh ... -domlp=TC 蓋出含繁中 LP 的 image
  • 簡中 (SC) 跟韓文 (KO) 不是已支援、只是 language_registry.py 的擴充範本 — SC 從 TC 對稱推論、跑需加 --allow-inferred 旗標、未實測;KO 是空 skeleton、需有人補 installer code 才能跑。給有對應語言需求的社群成員當起點、跑通請發 PR 升 status
  • ⚠️ 重要警告:對已運行的 server 重 build image 後、既有 .nsf 不會自動變繁中(Domino entrypoint 偵測「Data already installed」會 skip template 部署)—— 重 build 之前一定要讀後面那節

背景:Issue #55 上游的考量

2022 年 11 月有人在上游 repo 開 Issue #55 問怎麼裝 LP。上游 maintainer Daniel Nashed 回了一些 workaround 思路(stop container、起 temp container 跑 LNXDomLPxx silent install),並在後續討論中點出維護擴大的考量:

“The right way would be to add it to the software file, but then we would need to support all the languages…”

—— 意思是:真要在 build.sh 加新 LP、官方就要承擔「所有語言、所有版本」的維護責任。對一個個人維護的開源 repo 來說、那是合理的工程取捨。

但實務上 6 LP 之外的需求依然存在 —— 在台灣、中國、韓國 deploy Domino 通常會要繁中/簡中/韓文 LP,每個 deploy 工程師各自 hack build.sh 重複勞動。domino-container-lp-recipe繁中那條 hack 整理成共用、可重跑、有測試的工具,並且把擴充其他語言的 pattern 在 language_registry.py 留下範本(SC / KO 兩個 entry),讓有其他語言需求的社群伙伴有起點可以擴充、跑通後貢獻回來

三層整合 — 為什麼每個 LP 要動 ~7 處跨 3 個檔

build.sh 加新 LP 不是「加一個 menu item」這麼簡單。從 how-it-works.md 整理:

檔案為什麼要動
UI / menubuild.shLP submenu 要列出新語言、user 才選得到
Install 邏輯dockerfiles/install_dir_domino/install_domino.sh短碼(TC)對應到 LP installer 內部碼(zh-TW)的 mapping
Manifestsoftware/software.txt + dockerfiles/install_dir_common/software.txt告訴 build.sh「這個 lang/version 對應哪個 LP tar 檔」

三層缺一不可

  • 漏 manifest → Download for [domlp] [XX-VER] not found!
  • 漏 install_domino.sh mapping → Cannot find LPLog.txt
  • 漏 build.sh → LP menu 根本看不到新語言

實際 patch 範圍:build.sh 4 處、install_domino.sh 1 處、兩份 software.txt 各 1 處 = 7 處跨 4 檔、約 50 行。每加一個語言都要照這個 pattern 動一次。

為什麼用 Recipe 而非 Fork

要對上游 repo「加點東西」、技術上有三條路:

方法怎麼做
Fork維護一份 mirror、把 patch 直接 commit 上去
Recipe(本工具走的)一支腳本、按需對乾淨的上游 clone 套用 patch
Patch seriesgit format-patch 包裝、git am 套用

我選 Recipe 的理由(詳見 docs/why-recipe-not-fork.md):

  1. 改動很小 — ~50 行跨 4 檔。維護一個 99% 都是上游 code 的 fork、95% 的時間在處理 rebase noise
  2. 上游動很快 — Daniel Nashed 直接 push to main、commit 頻繁。fork 永遠在追上游
  3. 改動跟整份 codebase 是兩件事 — Recipe 的設計把「我改了什麼」跟「上游是什麼」徹底分開、可讀可審

上游萬一改到我們 patch 的位置、腳本會明確噴錯

Error: expected 2 matches in build.sh, found 0

upgrade-guide.md 微調 patch.py 裡的 anchor 字串就好。沒有長期 fork drift

對比表(節錄):

面向ForkRecipe
初次使用clone fork && buildclone recipe && apply && build
上游改了我沒 patch 的檔rebase noise完全無影響
上游改到我有 patch 的檔rebase + per-file merge改 1 個 anchor 字串
Repo 大小繼承 600+ 上游 commit~300 行 code + docs
我 3 個月不更新fork silently driftrecipe pin 在測試過的 commit、跑起來會 warn

對「上游動很快、改動很小」的場景、Recipe 是對的抽象。

快速開始(TC、已驗證)

Terminal window
# 1. clone 本工具
git clone https://github.com/bryanHsiao/domino-container-lp-recipe.git ~/lp-recipe
# 2. 跑 apply-lp.sh
# 自動 clone 上游 domino-container、checkout 到測試過的 commit、對 TC 套用 patch
~/lp-recipe/apply-lp.sh --lang TC
# 3. 把 LP tar 檔放到 /local/software/
# (從 HCL FlexNet 下載;HCL 軟體不能重新散布,所以不在本 repo 內)
# 4. Build
cd /local/github/domino-container
./build.sh domino 14.5.1 -restapi=1.1.7 -leap=1.1.10 -domlp=TC
# 5. 驗證
~/lp-recipe/verify.sh --lang TC

跑完之後重進 ./build.sh menuL、LP submenu 會在原本 6 種之後多出第 7 個 (TC) Traditional Chinese、按 t 即可選用:

套用 recipe 後的 build.sh Language Pack submenu,(TC) Traditional Chinese 為新加的第 7 個選項

目前驗證過的組合(從 tested-against.md):

Recipe ver上游 commitDominoLangOSContainer engine結果
v0.1473480114.5.1TCUbuntu 24.04.4 (WSL2)Docker 29.4.3✅ Build + fresh-setup verified — names.nsf 顯示「網域監督」

加新語言(KO / SC / TH 等)

完整流程在 docs/adding-new-language.md,三步:

Terminal window
# 1. 解壓 LP tar、找該語言的 installer 內部碼
tar -xf NotesDomLP-14050100-XX.tar
strings LNXDomLP | grep LangCodeList # 例如 KO 是 "ko"
# 2. 在 language_registry.py 加 entry
# Language("KO", "Korean", "k", "ko", status="verified")
# 3. apply + build
./apply-lp.sh --lang KO
./build.sh domino 14.5.1 -domlp=KO

通了之後請發 PR 回來、把該語言的 status 從 template / inferred 升到 verified、其他人就不用重做一次。

⚠️ 重要警告:「Data already installed」同步陷阱

這節是已 deploy 的 server 重 build 之前一定要讀的。

完整討論見 docs/sync-trap-caveat.md,這裡摘要:

症狀

你完成這些步驟:

  1. 跑 recipe 整合 TC(或其他 LP)
  2. ./build.sh ... -domlp=TC 重 build image
  3. verify.sh --lang TC 通過、image 確實有 TC resources
  4. 把 production container 重啟成新 image

…但登入 Notes client 進 server UI 還是英文

  • names.nsf 的 People / Groups / Configuration view —— 英文
  • 既有 mail/*.nsf —— 英文
  • 新建一個 testmail.nsf(套 server template)—— 也是英文

根本原因

Domino container 的 entrypoint 啟動時檢查 /local/notesdata、發現裡面已有安裝就跳過 template 部署

Data already installed for 14050100

換句話說 —— image 裡有繁中 template、但 entrypoint 不會把它部署到既有 notesdata 上。

解法(任選一)

  • fresh data dir + 重做 OneTouch Setup — 把 /local/notesdata 清空、重起 container、讓 entrypoint 跑 template 部署
  • 對每個既有 .nsf 手動 Replace Designload convert -u <dbpath> * <template>、針對每個 db 套新 template

兩種都要 plan、不是換個 image 重啟那麼簡單。

邀請貢獻 + 結論

這個工具是寫給「有 LP 需求、想自己擴充」的社群伙伴用的。依當下實際狀態分流:

  • 用繁中 — 直接 clone repo、跑 apply-lp.sh --lang TC,是 end-to-end 驗證過的路線
  • 要試簡中 — registry 已有 SC entry(從 TC 對稱推論的 zh-CN),跑時加 --allow-inferred 旗標。請以實測為準;跑通請發 PR 把 status 從 inferred 升到 verified
  • 要試韓文 — KO 是空 skeleton、要先解 LP tar 跑 strings LNXDomLP | grep LangCodeList 拿 installer code 補進 registry。流程在 adding-new-language.md
  • 要加全新語言(TH / VI 等) — 同樣照 adding-new-language.md 做、PR 進 registry
  • 上游 commit 改到 patch 位置、recipe 跑壞 — 報 issue 我修

Repo 用 Apache-2.0、跟上游一致。本工具不含任何 HCL 軟體、LP tar 你自己從 HCL FlexNet 下載。

繁中以及其他需要 LP 的 Domino 部署社群一直存在 —— 把繁中那條 hack 標準化、共用、有測試、有警告,並且為其他語言留下擴充範本,是 domino-container-lp-recipe 想做的事。SC / KO 等語言的 verified 狀態、要靠社群手把 LP tar 接上去後 PR 回來才會逐步累積。

參考來源

← 回到文章列表