RPM 安裝¶
每個期貨商一份專屬 RPM。檔名遵循 rpm 慣例 <name>-<version>-<release>.<arch>.rpm,
後面再接 build 變體標示:
.rpm檔名(傳給rpm -U ./...):tapio-<version>-<release>.<期貨商>.<IO實作>[.debug].x86_64.rpm, 例tapio-1.7.1-1.4.g07f3479.sinopac.epoll.x86_64.rpm。檔名自帶版本號, 不同 build 不會撞名;.<broker>.<pollio>[.debug]是 build 變體標示。- 已安裝套件名(傳給
rpm -q/rpm -e):只到tapio(小寫,不帶 broker / 版本)。
安裝前準備¶
確認 broker operator user 已建立:
若尚未建立:
安裝前確認 RPM 版本¶
換版前,先查 .rpm 檔提供的是哪一版——不需先安裝,直接對檔案下 -qp(query package file):
# 只看 名稱-版本-Release(-qp 的參數是「檔案路徑」,印出的是小寫套件名)
rpm -qp ./tapio-1.7.1-1.4.g07f3479.sinopac.epoll.x86_64.rpm
# → tapio-1.7.1-1.4.g07f3479.x86_64
# 看完整資訊,含組建來源、時間、build 變體(Description 欄)
rpm -qpi ./tapio-1.7.1-1.4.g07f3479.sinopac.epoll.x86_64.rpm
# → Version / Release / ...
# Description:
# Tapio Gateway
# Build: v1.7.1-4-g07f3479 (built 2026-06-01 07:19:53 UTC)
# Variant: broker=SinoPac pollio=epoll type=release
與目前主機上已裝的版本比對,確認換版方向正確:
rpm -q tapio # 已安裝版本(套件名小寫 tapio)
# → tapio-1.7.1-1.3.g0c8a725.x86_64 ← 舊
# 檔案 metadata 是 tapio-1.7.1-1.4.g07f3479 ← 新(tag 後第 4 個 commit)
版本字串怎麼讀
見下方版本辨識。Release 中間的數字就是「tag 後第幾個 commit」,
數字越大越新;末尾 g<sha> 是該 commit 的 git 雜湊,用來唯一定位原始碼。
安裝 / 換版¶
直接用 rpm,不經 dnf。-U(upgrade)涵蓋首次安裝與升級兩種情形:
-v -h:verbose + 進度條。--force:等同--replacepkgs --replacefiles --oldpackage,重裝同版、覆蓋檔案、 允許裝較舊版都不擋。Tapio 是單一套件、封閉部署,用--force省事;代價是它會 蓋過一切衝突檢查,務必先用上面的rpm -qp確認檔案版本對。
套件是 all-in-one
一個 RPM 含全部五支 daemon,整批一起換版。即使某支 binary 這版沒改動, 也會重編、一併打包進去;換版就是整包換掉,不會只更新其中一支。
rpm 不解相依
rpm -U 不會像 dnf 自動拉相依套件。Tapio 的相依(lftp、jemalloc、
tuned、高速版另需 tcpdirect/onload)必須事先裝好,否則 rpm 直接報
Failed dependencies。相依見系統需求。
換版後要重啟才生效
rpm -U 會換掉 /opt/Tapio/bin/ 下的執行檔,但正在跑的 process 仍用舊的
inode,要重啟才載入新版。
換版作業窗口¶
何時換、要不要手動重啟,看作業落在哪個時段:
| 時段 | daemon 狀態 | 重啟動作 |
|---|---|---|
| 盤中(08:45 後,程式已啟動) | 跑舊 inode | 裝完 tapioctl down && tapioctl up 全部重啟(約 5–10 秒生效) |
| 假日(週六 06:30 — 週一 06:30) | 未啟動 | 不需手動重啟,下次清晨自動啟動即載入新版 |
| 預開盤(06:30 — 08:45) | 排程啟動中 | 此時段 daemon 有啟動順序約束,不建議作業,見 交易日 Lifecycle |
非緊急換版建議時段
非緊急更新建議排在下午 14:00–14:30:已過上午預開盤排程、離收盤尚遠, 重啟影響最小。
降版¶
-U --force 已含 --oldpackage,可直接裝較舊的檔;若要語意更明確、不開全套
--force,用 --oldpackage:
降版需要舊版 .rpm 檔在手
檔名自帶版本號,不同版本不會互相覆蓋,多個版本可並存在同一目錄。要降版就把
舊版 .rpm 留著(或重新 build 舊 commit)。降完用 rpm -q tapio 確認版本退回預期值。
降版同樣不解相依、同樣建議先 tapioctl down。
安裝完成後,post_install 會自動執行:
| 動作 | 說明 |
|---|---|
| 目錄建立 | 建立 /opt/Tapio/ 下各子目錄 |
| 檔案權限 | 所有檔案 chown 至 broker operator user |
| Capabilities | 對必要的執行檔設定 Linux capabilities(自動完成,無需介入) |
Note
系統層級調校(GRUB 參數、tuned、sysctl、NIC 韌體)不由 RPM 處理,須依照前幾章手動完成。
安裝後驗證¶
# 確認檔案 ownership
ls -la /opt/Tapio/bin | head -5
# 確認 capabilities
getcap /opt/Tapio/bin/tapio-core
# 確認裝上去的版本與預期相符
rpm -q tapio # 套件版本(套件名小寫 tapio)
tapio-core --version # binary 烤進去的版本(應與 RPM Release 對得上)
tapioctl version # 一次列出 RPM 套件 + 五支 daemon 的版本
Shell 環境設定¶
將以下兩行加入操作員帳號的 ~/.bashrc(或 ~/.bash_profile):
套用後,重新登入或執行 source ~/.bashrc 即可使用 tapioctl 指令與 Tab 自動補全。
版本辨識¶
版本資訊在三個地方一致呈現,全部源自同一個 git describe,換版時用來辨識「這是哪一版」。
以 rpm -q 印出的 tapio-1.7.1-1.4.g07f3479 為例(套件名小寫):
tapio - 1.7.1 - 1.4.g07f3479 . x86_64
│ │ │ │ │
│ │ │ │ └ g07f3479 該 commit 的 git short sha(唯一定位原始碼)
│ │ │ └ 4 最近 tag 之後的第幾個 commit(越大越新)
│ │ └ 1 pkgrel:同一版原始碼第幾次打包
│ └ 1.7.1 Version:對齊 SDK wire 協定的 release tag
└ tapio 套件名(已安裝套件就到這裡)
.rpm 檔名是同一組 NVR 再接 build 變體:tapio-1.7.1-1.4.g07f3479.sinopac.epoll.x86_64.rpm,
尾段 .sinopac.epoll[.debug] 標示 broker / IO 實作 / build 類型(這些只是檔名與
rpm -qpi Description 的標示,不進已安裝套件名)。
| 看哪一版 | 指令 | 輸出例 |
|---|---|---|
.rpm 檔(裝之前) |
rpm -qp <檔>.rpm |
tapio-1.7.1-1.4.g07f3479.x86_64 |
| 已安裝套件 | rpm -q tapio |
tapio-1.7.1-1.4.g07f3479.x86_64 |
| 單一 binary | tapio-core --version |
tapio-core v1.7.1-4-g07f3479 (built …) |
| 全部 daemon | tapioctl version |
見 tapioctl version |
辨識重點:
- 比新舊看中間那個 commit 數(
1.4的4)。同一條 tag 線上數字越大越新。 g<sha>用來精確對回原始碼。跨 branch / rebase 後 commit 數可能撞號,sha 才是唯一身分。built時間(binary--version)= 組建時間,與tapioctl version顯示的「安裝時間」(檔案放到主機上的時間)是兩回事,不要混用。- build 變體(broker / IO 實作 / debug|release) 看
rpm -qpi(或rpm -qi tapio)的Variant:行,或檔名尾段;tapioctl version的build-time 設定段也列 broker 與 pollio_impl。
exact tag 的 Release
若 build 點剛好落在 tag 上(0 個 commit),Release 會是純 1
(如 tapio-1.7.1-1.x86_64),不帶 g<sha>——代表這是正式 tag 版而非中間快照。
移除¶
排錯¶
-
rpm -U報Failed dependencies→ rpm 不自動拉相依,先手動裝齊lftp、jemalloc、tuned、irqbalance、cpupowerutils(高速版另需tcpdirect/onload),見系統需求 -
chown失敗 → operator user 尚未建立,執行useradd後重新安裝 -
裝完
tapioctl version還是顯示舊版 → daemon 還在跑舊 inode。tapioctl down後tapioctl up(或等隔日清晨自動重啟)