V哥 Claude Code 遷移至 Oracle Linux 9 方案

V哥的開發主力機改放 VM 伺服器:Oracle APEX 環境安裝、專案原始碼、Claude Code 對話轉移、備份、筆電遠端接續。整理日期 2026-10-08。

一、結論

  1. Oracle Linux 9 沒有 Claude 桌面版,只能跑 CLI(claude)。可搬的是對話內容與專案,不是桌面版介面。
  2. V哥的主力機要先裝好開發環境,再搬專案原始碼,最後搬 Claude Code 對話。
  3. 對話是檔案(~/.claude/projects/**/*.jsonl),用 rsync 搬到 VM 後,CLI 用 claude --resume 接續。
  4. 搬對話時,資料夾名稱必須改成 VM 上專案新路徑的編碼,否則 VM 上看不到舊對話。
  5. 筆電遠端接續建議:VM 上 tmux + /remote-control,從 Mac 桌面版、claude.ai/code 或手機接上同一個對話。

二、動手前先確認的資訊(請 V哥填寫)

項目說明V哥的值
V哥 Mac 的使用者名稱用來組出舊路徑,如 /Users/<mac使用者>/<專案>________
VM 的使用者名稱與 IP如 vge@10.0.0.20________
VM 上專案根目錄如 /home/vge/projects________
APEX、ORDS、資料庫版本舊環境查 apex_release、ords --version、v$version________
Workspace、Schema、應用程式 ID 清單決定要匯出哪些內容________
資料庫形式與資料量Free/XE/EE、容器或實體安裝;資料量決定搬移方式________
APEX 原始碼是否已進 git未進 git 的先匯出成檔案________
Claude 帳號方案Pro/Max/Team/Enterprise(Remote Control 需要)________

下文以 MAC_USER、VM_USER、VM_IP、PROJ(專案名稱)作為占位符,請替換成實際值。

三、VM(Oracle Linux 9)環境安裝:Oracle APEX 元件

V哥的專案以 Oracle APEX 為主,環境是一整組元件。下表為建議版本與順序,版本號請依 V哥現有環境對齊(先在舊環境查:select * from apex_release;、ords --version、select banner from v$version;)。

順序元件用途備註
1基礎工具、JavaORDS 與 SQLcl 需要 JDKJDK 17 或 21(依 ORDS 版本需求)
2Oracle DatabaseAPEX 的資料庫Free 23ai / XE / EE 或 Docker/Podman 容器,依授權與現況
3Oracle APEX低程式碼開發環境安裝到資料庫內(PDB),版本與舊環境一致或明確升級
4ORDSAPEX 的 Web 入口(REST)standalone 模式,或放到 Tomcat
5SQLcl命令列、匯出匯入、版本控管Claude Code 也能透過它操作資料庫
6git、tmux、Claude Code原始碼與 AI 協作見下方

1. 基礎工具與 Java

sudo dnf -y update
sudo dnf -y install git tmux rsync curl wget unzip tar vim jq
sudo dnf -y install java-17-openjdk-devel    # 或 JDK 21,依 ORDS 版本需求
java -version

2. Oracle Database

# 以 Oracle Database Free 23ai 為例(版本請依現況調整)
sudo dnf -y install oracle-database-preinstall-23ai
# 下載 oracle-database-free-23ai RPM 後安裝
sudo dnf -y install ./oracle-database-free-23ai-*.rpm
sudo /etc/init.d/oracle-free-23ai configure      # 設定 SYS/SYSTEM/PDB 管理者密碼
sudo systemctl enable --now oracle-free-23ai
若 V哥現用 19c / 21c / XE,請改裝相同版本以降低相容性風險。Oracle Database Free 的資源上限與授權條件和 EE 不同,正式環境請確認。

3. 安裝 Oracle APEX(到 PDB)

# 下載 APEX 壓縮檔並解壓,例如 /opt/apex
cd /opt/apex
sql sys@localhost:1521/FREEPDB1 as sysdba
SQL> @apexins.sql SYSAUX SYSAUX TEMP /i/
SQL> @apxchpwd.sql          -- 設定 APEX ADMIN 密碼
SQL> alter user APEX_PUBLIC_USER identified by "<密碼>" account unlock;

靜態檔案(/i/)路徑要讓 ORDS 找得到,下一步設定。

4. 安裝 ORDS(standalone)

# Oracle Linux 可由官方 repo 安裝(若 repo 找不到,改用下載 zip)
sudo dnf -y install ords
# 互動式安裝,指向 PDB 與 APEX 靜態檔案
sudo -u oracle ords --config /etc/ords/config install
# 啟動
sudo -u oracle ords --config /etc/ords/config serve

預設埠 8080。要長期執行請改為 systemd 服務,正式環境建議前面加 Nginx/HAProxy 與 HTTPS。防火牆只開必要埠:

sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

5. SQLcl

sudo dnf -y install sqlcl      # 若 repo 沒有,改下載 zip 解壓,並把 bin 加入 PATH
sql -V

6. Claude Code CLI

curl -fsSL https://claude.ai/install.sh | bash
claude --version
claude doctor
claude        # 第一次登入,輸入 /login,用 V哥的 claude.ai 帳號

7. SSH 與 Git 認證

# 在 Mac 上:建立金鑰並放到 VM(之後免密碼登入)
ssh-keygen -t ed25519
ssh-copy-id VM_USER@VM_IP
Git 認證(SSH key 或 token)也要在 VM 上重新設定,才能 git clone / git push 私有儲存庫。

四、搬之前先備份(在 V哥的 Mac 上)

# 整個 ~/.claude 打包(含所有專案對話、設定、外掛)
tar czf ~/Documents/claude-backup-$(date +%Y%m%d).tgz -C ~ .claude

# 桌面版對話索引另存(小檔案,Linux 用不到,僅供存檔)
tar czf ~/Documents/claude-desktop-sessions-$(date +%Y%m%d).tgz \
  -C ~/Library/Application\ Support/Claude claude-code-sessions

不要整包搬 ~/Library/Application Support/Claude/,裡面多數是桌面版快取與沙盒映像,體積可達數 GB 且 Linux 用不到。備份檔含對話內容與可能貼過的金鑰,請存放在加密或權限受限的位置。

五、APEX 專案內容與原始碼轉移

APEX 專案的「原始碼」分散在資料庫裡,不是單純的檔案資料夾。要搬的東西如下:

內容匯出方式匯入 / 存放
APEX 應用程式(頁面、區域、動態動作等)SQLcl apex export,建議 -split 拆成多檔以利 gitSQLcl 執行 @f<ID>.sql 匯入
Workspace、使用者、Workspace 檔案apex export -workspaceid 或 APEX 後台匯出匯入同名 Workspace
資料庫物件(表、檢視、套件、觸發器)SQLcl ddl 或 lb(Liquibase)在 VM 資料庫執行 SQL 腳本
資料表資料Data Pump(expdp)或 SQLcl unloadimpdp 匯入 VM 資料庫
靜態檔案(JS/CSS/圖片)隨 APEX 匯出,或原始檔放在 git匯入應用程式,或由 ORDS 提供
REST 模組(ORDS)SQLcl ords export 或 APEX 匯出 REST 服務在 VM 匯入
設定檔、.env、連線設定、wallet手動整理,不進 gitscp 傳輸並限制權限

在舊環境匯出(範例)

# 連線舊資料庫
sql user/pass@old_host:1521/OLDPDB

-- 匯出單一應用程式並拆檔(適合 git)
SQL> apex export -applicationid 100 -split -dir /path/to/repo/apex/f100

-- 匯出所有應用程式
SQL> apex export -workspaceid 123456789 -expType APPLICATION_SOURCE -dir /path/to/repo/apex

-- 匯出資料庫物件 DDL
SQL> ddl -dir /path/to/repo/db

資料搬移(Data Pump)

# 舊環境匯出
expdp system@OLDPDB schemas=APP_SCHEMA directory=DATA_PUMP_DIR dumpfile=app.dmp logfile=exp.log
# 把 dmp 傳到 VM 的 DATA_PUMP_DIR 目錄
scp app.dmp VM_USER@VM_IP:/opt/oracle/admin/dpdump/
# VM 匯入
impdp system@FREEPDB1 schemas=APP_SCHEMA directory=DATA_PUMP_DIR dumpfile=app.dmp logfile=imp.log

原始碼進 git(讓 Claude Code 能讀寫)

repo/
├── apex/f100/      # apex export -split 的輸出
├── db/             # 表、套件、觸發器 DDL
├── ords/           # REST 模組
├── static/         # JS / CSS / 圖片
└── README.md
# 在 VM 上
mkdir -p ~/projects && cd ~/projects
git clone git@github.com:<org>/PROJ.git
匯出的 APEX 檔案是 SQL 文字,Claude Code 可以讀、比對、修改,再由 SQLcl 匯入回資料庫。也可評估 SQLcl 的 MCP 伺服器功能,讓 Claude 直接查詢資料庫(需確認 SQLcl 版本支援,並限制資料庫帳號權限)。
密碼、wallet、.env 不要進 git。APEX 匯出檔可能含 Workspace 的設定值與連線字串,推到遠端前先檢查。

六、Claude Code 對話轉移

路徑編碼規則

對話資料夾名稱 = 專案工作目錄路徑,把 / 及部分符號換成 -。

Mac 舊資料夾名稱VM 新資料夾名稱
-Users-MAC_USER-PROJ-home-VM_USER-projects-PROJ
最保險的做法:先在 VM 的專案目錄執行一次 claude,看 ~/.claude/projects/ 自動產生的資料夾名稱,再把舊對話搬進同名資料夾。

搬移指令(每個專案各做一次,先挑一個小專案試)

# 在 V哥的 Mac 上
ssh VM_USER@VM_IP 'mkdir -p ~/.claude/projects/-home-VM_USER-projects-PROJ'
rsync -av ~/.claude/projects/-Users-MAC_USER-PROJ/ \
  VM_USER@VM_IP:~/.claude/projects/-home-VM_USER-projects-PROJ/

# 全域設定、輸入歷史、外掛、檔案快照
rsync -av ~/.claude/settings.json ~/.claude/history.jsonl ~/.claude/CLAUDE.md \
  VM_USER@VM_IP:~/.claude/ 2>/dev/null
rsync -av ~/.claude/plugins/      VM_USER@VM_IP:~/.claude/plugins/
rsync -av ~/.claude/file-history/ VM_USER@VM_IP:~/.claude/file-history/
settings.json 若含 Mac 專用路徑或 hook,搬過去要檢查修改。plugins/ 內若有 macOS 專用二進位檔,可能無法在 Linux 使用,必要時在 VM 重新安裝。

驗證

cd ~/projects/PROJ && claude --resume

看到舊對話清單即成功。對話中若提到舊的絕對路徑(/Users/MAC_USER/...),可在第一句話告訴 Claude「專案現在在 ~/projects/PROJ」。

需要重新設定的項目

七、筆電如何遠端接續對話

方式用途說明
A. SSH + tmux最穩主力操作入口保證看到舊對話;斷線後 tmux 裡的 Claude 繼續跑
B. Remote Control建議搭配用桌面版/網頁/手機接同一個對話Claude 仍在 VM 執行,畫面在筆電或手機
C. 桌面版 SSH 環境新對話文件未說明是否列出遠端既有舊對話,不要依賴

建議流程(每個要遠端用的對話)

# 在筆電上
ssh VM_USER@VM_IP
tmux new -As claude
cd ~/projects/PROJ
claude --resume          # 選舊對話
# 進入對話後輸入:
/remote-control          # 或 /rc

接著在 Mac 桌面版、claude.ai/code 或手機 Claude app 開啟該 session(顯示電腦圖示與綠點即在線)。斷線後回到終端機:tmux attach -t claude。

搬完後的實際效果

項目是否與 Mac 本機相同
對話內容與上下文(Claude 記得之前聊的)相同
檔案讀寫、git、指令執行相同(但發生在 VM)
入口不同:要先在 VM 啟動對話,再從 Mac/網頁/手機接上,不會自動列出全部舊對話
終端機專用指令(/plugin、/resume)遠端畫面不能用,要在 VM 端操作
Mac 桌面版側邊欄的舊對話仍是 Mac 本機的獨立紀錄,與 VM 上的不同步

八、風險與必須實測的項目

官方文件(code.claude.com/docs)未涵蓋、需實測:
  1. Oracle Linux 9 不在支援清單(列出 Ubuntu 20.04+、Debian 10+、Alpine 3.19+)。與 RHEL 相容、文件有 dnf 安裝方式,但 Remote Control 是否可用沒有保證。
  2. 接上後,網頁/桌面版是否完整顯示舊對話的歷史訊息,文件沒有明說。
  3. 桌面版 SSH 環境是否列出遠端主機上搬過去的舊對話,文件沒有說明。
  4. VM 重開機後,Remote Control 對話清單保留多久,沒有說明。

已知限制(文件有載明)

實測順序(約 15 分鐘)

  1. VM 執行 claude doctor 與 claude remote-control --verbose,確認 OL9 可運作。
  2. 挑一個小專案,搬原始碼與對話,claude --resume 確認舊對話出現。
  3. 輸入 /remote-control,用 Mac 桌面版或 claude.ai/code 接上,檢查歷史訊息是否完整、能否送出新訊息。
  4. 關閉筆電連線再接回,確認 tmux 與重連正常。
退路:若 OL9 不能用 Remote Control,改用 Ubuntu/Debian VM,或在 OL9 上以容器跑 Debian。可用 /feedback 向官方回報。

九、VM 成為主力後的日常備份

# VM 上的每日備份範例(crontab -e)
30 2 * * * tar czf /backup/claude-$(date +\%Y\%m\%d).tgz -C $HOME .claude \
  && find /backup -name 'claude-*.tgz' -mtime +30 -delete

十、執行檢查清單