2026年1月6日 星期二

建立一個PostgreSQL的Docker image,並使用它

 

測試目標

在Proxmox VE上,安裝一個 Zorin Linux 的 VM,跑 PsogreSQL docker image,試試它的極限。

1, 下載ISO,上傳 Proxmox。

Zorin-OS-18-Core-64-nit.iso

2. 建VM,裝系統。








VM ID:139

自動登入


3. 裝 Chrome


4. 裝Visual Studio Code

可以不裝,這是順便,供下一步測試用。



5. 安裝Docker

安裝方法:

Install Docker Engine on Ubuntu

在加入 docker repository 之後,請把 /etc/apt/sources.lisr.d/docker.sources 最後面加上一行:

Architectures: amd64

這樣就不會每次在下sudo apt update -y時,再出現沒有architecture 'i386'的錯誤訊息。(其實也可以在過程中就加入)

安裝好了之後,如果不想每次都要用sudo才能執行 docker,可以:

sudo usermod -aG docker $USER

newgrp docker

可以用 docker version 試看看。

6. 補充一下,這台的IP是內部私有IP:

7.  建立一個共用的volume

docker volume create postgres-volume

按照Docker的預設,它會在Zorin OS上建立一個 /var/lib/docker/volumes/postgres-volume/_data 的目錄,存放 volume,所以你所建的PostgreSQL的資料庫物件以及資料都會好好地保存在這裡,即使Docker Cintainer結束,Database物件仍會保留下來。

8. 執行一個 postgres 的 container,參數是:POSTGRES_USER=postgres、POSTGRES_PASSWORD=password,以 5432 port 對外,然後使用剛才建立的 volume,採用 17.2 版:

docker run --name postgres \ -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=password \ -p 5432:5432 \ -v postgres-volume:/var/lib/postgresql/data \ -d postgres:17.2

9. 看看有沒有執行:

docker container ls -f name=postgres





10. 由於使用 -d 參數,所以回應 (stdio) 完全看不到,但是可以用以下看到 log:

docker logs postgres















11. 關機後能恢復嗎?(Gemini的回覆)

問:如果我之前執行的一個Docker container,由於我的電腦關機,讓它呈現Exit狀態,我能讓它恢復執行嗎?還是把它rm掉,重啟算了?

答:

當然可以恢復!這正是 Docker 容器化技術的優勢之一:容器的狀態和數據是會被保留的,即使電腦關機或容器崩潰,它只是進入了 Exited(退出)狀態,並不會自動消失。

不需要把它 rm 掉,除非你想要放棄之前的配置重新開始。

1. 如何恢復執行的步驟

你可以透過以下簡單指令讓它重新動起來:

  • 第一步:確認容器名稱或 ID

    如果你不記得容器的名字,可以用這行指令列出所有(包含已停止的)容器:

    Bash
    docker ps -a
    

    你會看到狀態顯示為 Exited (...)。

  • 第二步:啟動容器

    使用 start 指令(將 keycloak 換成你的容器名稱或 ID):

    Bash
    docker start keycloak
    

    這會讓 Keycloak 在背景啟動,並保留你之前在裡面設定的所有 Realm、User 和 Client。


2. 「啟動 (start)」與「重啟 (rm + run)」的差別

這兩者最大的差別在於資料的持久性:

特性docker start (恢復)docker rm + docker run (重啟)
資料保留會保留。你在後台建立的設定都在。會消失。除非你有掛載外部 Volume。
設定變更使用原有的啟動參數,無法更改環境變數。可以重新輸入指令,更改密碼或端口。
適合場景正常維護、電腦重啟、暫時停止。測試壞了想重來、需要更新 Docker 參數。

3. 進階建議:如何讓它「自動復活」?

如果你希望以後電腦重啟或 Docker 服務啟動時,Keycloak 能自動跑起來,你可以在 docker run 時加入 --restart 參數,或者對現有的容器進行修改:

對現有容器增加自動重啟:

Bash
docker update --restart unless-stopped keycloak

這樣以後只要你不是手動下 docker stop,它都會在系統重啟後自動啟動。


疑難排解:如果恢復失敗怎麼辦?

有時候 Keycloak 恢復失敗是因為資料庫連線或某些暫存檔問題,你可以查看日誌找出原因:

Bash
docker logs keycloak

如果發現真的是設定搞爛了,那這時候才是 docker rm 掉,然後用原本的 docker run 指令重啟一個乾淨版本的時機。


2025年11月19日 星期三

Wayland和中文輸入法相衝突發生的一連串問題及解決方法

 這件事情其實已經發生了很久,只是我在Kubuntu上從沒在Chrome上輸入過中文,所以都沒發現。但是,一經發現,我才發現,連Edge都受影響。這下子事情就大條了,非解決不可。發現的原因是,當我想在Chrome上使用Gemini時,想輸入中文,卻發現Fcitx5無法切換成中文輸入法,無論是倉頡或是新酷音都不行!上網查才發現,那是Fcitx5和Wayland不相容所導致……。

由於我的Kubuntu用的是25.04版,而且一直有更新,換句話說,你可以看作,Fcitx5至今並沒有解決掉這個問題,它仍然只支援XFree86。換句話說,我必須換掉它,我決定先參考同樣已經換成Wayland的Zorin OS用的是哪套輸入法系統?打開星期一才裝好的Zorin OS 查看後,發現它用的是ibus,當機立斷,把輸入法系統全換成ibus。

sudo apt purge fcitx5*

sudo apt autoremove

sudo apt install ibus ibus-chewing ibus-table

並且把倉頡輸入法 ibus-table-cangjie 也安裝上去。

一切順利。但是Chrome沒問題了,可是等到了要用 Kate 打一篇純文字的時候又出現問題了。

(後來到了 26.04,這裡就正常了,還相當好用)

倉頡輸入法通常是連打好幾個字根碼後,再按下空白鍵顯示或選字,才是一整個字的輸入程序。然而,現在變成了「打入任何一個字碼,就會立刻顯示,而不是等打入空白才選字」。這就完了,根本無法正確使用倉頡輸入法。後來更發現,其實在 Visual Studio Code 輸入中文字也會這樣,原本用 Fcitx 5 還能正常使用倉頡輸入中文字的,為了瀏覽器們把 IM 改成 ibus 反而連輸入都不行!

如果是從前,我就直接放棄。但是這次有 ChatGPT,我就善用它來幫我找到解決方法。

其實儘管有 ChatGPT,我仍然花了將近一整個下午才找到解決方法。其實,結論很簡單:

🛠 檢查 im-config 的設定檔

檢查:

cat ~/.xinputrc

如果有:

run_im ibus

那 IBus 就會在 KDE Wayland 啟動時自動被插入環境變數:GTK_IM_MODULE、QT_IM_MODULE 和 XMODIFIERS。


✔ 如果你看到 .xinputrc 有 ibus

你必須改成:

run_im none

或直接刪除:

rm ~/.xinputrc

因為 KDE Wayland 必須使用自己的 IBus Wayland 啟動方式,不可以使用 im-config 設定 XIM 那套。

 

我後來就是把 run_im 設成 none。然後……千萬要記得,重新啟動電腦,讓設定 active。

要這樣改 CharGPT 有解釋原因:

✔ 為什麼這樣就會正常?

KDE(Wayland)使用自身機制處理 text-input(如 Text Input Protocol),而 .xinputrc 這種 X11 時代的設定反而會造成衝突。
把它改成 run_im none → 等於不干擾 KDE 的 Wayland 原生輸入法流程 → 問題自然消失。

我只是想不通,既然已經知道 Fcitx 5 不支援 Wayland,Kubuntu 就應該把預設安裝的 text-input method 改成iBus。而且預設就是把 .xinputrc 移除掉。

我為什麼會這樣抱怨?因為我後來發現 Fedora KDE 就是這樣做!Kubuntu 為什麼不這樣做?


2025年8月6日 星期三

Ubuntu (25.04之後)上,要安裝倉頡的方法

 Ubuntu的中文輸入法,預設是fcitx5。但是,這個預設中文輸入套件,正體中文卻只有酷音輸入法。如果你想要安裝倉頡,在網路上有說,要安裝fcitx5-table-extra套件。原本fcitx5-table-extra套件並不存在於Ubuntu的Repository中,必自己build。但是我在安裝Kubuntu 25.04版後,居然在軟體清單發現它。

但是,我在Ubuntu Cinnamon的軟體清單中又找不到它了。它到底有沒有在Repository中呢?其實是有的,只是Gnome的軟體清單中沒把它加入。但是你從apt list 可以找到它:

$ sudo apt list | grep fcitx5

所以,這時候你就只需手動加入它:

$ sudo apt install fcitx5-table-extra

安裝好之後,在右下角的那個鍵盤icon按下滑鼠右鍵,選重新啟動,再選設定,你就可以發現倉頡輸入法了,裡面有第三代和第五代可以選。


2025年7月14日 星期一

碰到ramfs的議題,老人家的回憶

 因為這是我十幾歲的時候,早期學電腦的經驗,所以細節不清楚,也不確定自己判斷的對不對。

我最早學電腦是使用學校的PA-2000。你沒聽說是必然的,因為它是全華早期出的PC,CPU是Z-80,記憶體多大?不清楚,它使用的OS是CP/M,厲害的是,他一台有四個終端機,共用兩個軟碟機。

四台終端機,只有兩個軟碟機?那怎麼搶?不用搶,因為一旦用系統開機,它會開一個ramdisk,把RAM拿來做硬碟,只要你沒關機,就用這個記憶體磁碟機來存放你的程式。要離開的時候,再把軟碟插上,把檔案帶走即可。

這是因為我發現Linux早期開機initrd所使用的ramdisk,應該跟我早期用的,在CP/M上的ramdisk,應該是一樣的技術,搞不好原始碼還相同,只是Linux早期直接拿來用。難怪後來還要換成ramfs,早期考慮東考慮西做出來的東西,後來發現條件、環境都變了,不再適用了,換掉是必然的。


2023年11月17日 星期五

在VMWare ESXi 6.7上安裝Windows 11

 要在VMWare ESXi 6.7上安裝Windows 11,相當困難。

首先是因為Windows 11預定你的主機板的TPM(Trusted Platform Module) 2.0必須打開。問題在於:如果你的主機板連TPM 2.0都沒支援,那怎麼打開?VMWare ESXi 6.7就是遭遇這個難題。

再來你將遇到的問題是,它預設你的網路上有DCHP Server。一樣的道理,如果像ESXi預設沒有DHCP Server,要跟誰去要IP?

幸好,第一個問題的解方網路上有人分享了。第二個問題的解方就由第一個答案得到靈感,再加上不斷的試驗的結果。

相當辛苦。

我試著只把關鍵之處列出,其它應該不會遇到問題的地方,就略過不提了。

首先,要去下載Windows 11的網站下載。

https://www.microsoft.com/zh-TW/software-download/windows11
過程就略過了,好像只能選multi-edition。檔案很大,可能要下載很久。

接下來建立一個新的VM。



如上圖,請選Microsoft Windows 10 (64位元)。
接下來,建議VM的設定如下即可。














開機很快,所以要儘快點進主控台,然後快速在鍵盤上按下空白鍵。
















當出現這個畫面時,要立刻按SHIFT-F10,這時候會執行cmd.exe,也就是打開命令提示字元,這樣你可以以系統管理者的身份,以指令更改一堆設定。













首先是讓安裝程式不去check TPM是否打開。方法是下達以下指令:

REG ADD HKLM\SYSTEM\Setup\LabConfig /v BypassTPMCheck /t REG_DWORD /d 1







跳出,按下一步。

立即安裝。

按下:我沒有產品金鑰。

選擇要安裝的版本後,當出現這個畫面,恭喜你,第一關過了,TPM檢查繞過去了。
















接下來都沒什麼值著注意的,在此略過。

 

當安裝一切順利,安裝程式重新啟動兩次時,進入設定。

當該設定網路時,你會發現卡住了!你遇到第二個大魔王了。下一步不給按!














此時,請再度使用SHIFT-F10,開啟命令提示字元,先下ipconfig /all

看看你的VM的網路目前到底怎麼了:












看到了吧,安裝程式自動使用DHCP,不給你手動設定IP的機會。

所以,你只好用下指令的方式來設定IP。

這裡有一個要注意的細節。Ipconfig輸出中,有提到,在此,你的網路卡的名稱叫做:Ethernet0,所以你就要根據Ethernet0來設定它的IP。雖然很想在這裡介紹netsh interface指令,但是在此略過直接告訴你答案:

>netsh interface ipv4 add address “Ethernet0” <你的IP> <你的遮罩> <你的gateway> 1

最後的那個1代表gwmetric,也就是到Gateway的跳躍數。

>netsh interface ipv4 add dnsservers “Ethernet0” 8.8.8.8

>netsh interface ipv4 add dnsservers “Ethernet0” 1.1.1.1

第一行又臭又長,你可以如下分成兩行:







現在,下一步可以按了!
















恭喜,再來就簡單了。

再重新開機,設定電腦名稱。再開一次機之後,再設定幾個有關登入的問題,畫面就出來了。



2023年9月5日 星期二

RedHat系列的Linux安裝倉頡輸入法的方法

 無論是CentOS Stream,還是Rocky Linux,打算安裝倉頡輸入法,都不能只直接從視窗的「軟體」安裝,必須先在「軟體」中,把 ibus-table裝起來。

但是這樣還是沒有中文輸入法。比較快的方法是直接在console下,打入:

> sudo yum install ibus-table-chinese-cangjie

這個指令會把ibus-table-chinese一起裝上。

裝好要先重新啟動(可能登出即可,但是我不太確定),此時,就可以在「設定值」/「Keyboard」/「輸入來源」加入倉頡輸入法。


有 Creational Patterns 的原因,是否是有些狀況不適合直接用 new 建造出一個物件來用?

  沒錯!您的直覺非常準確,這正是整個創建型模式(Creational Patterns)核心要解決的根本問題。 在軟體開發中,直接使用 new 關鍵字來建立物件(例如 MyClass obj = new MyClass(); )雖然直覺又方便,但在中大型系統或需要高度擴充性的...