跳轉到

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 已建立:

id <operator>

若尚未建立:

sudo useradd -r -m -d /home/<operator> <operator>

安裝前確認 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)涵蓋首次安裝與升級兩種情形:

sudo rpm -Uvh --force ./tapio-1.7.1-1.4.g07f3479.sinopac.epoll.x86_64.rpm
  • -v -h:verbose + 進度條。
  • --force:等同 --replacepkgs --replacefiles --oldpackage,重裝同版、覆蓋檔案、 允許裝較舊版都不擋。Tapio 是單一套件、封閉部署,用 --force 省事;代價是它會 蓋過一切衝突檢查,務必先用上面的 rpm -qp 確認檔案版本對。

套件是 all-in-one

一個 RPM 含全部五支 daemon,整批一起換版。即使某支 binary 這版沒改動, 也會重編、一併打包進去;換版就是整包換掉,不會只更新其中一支。

rpm 不解相依

rpm -U 不會dnf 自動拉相依套件。Tapio 的相依(lftpjemalloctuned、高速版另需 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

sudo rpm -Uvh --oldpackage ./tapio-1.7.1-1.3.g0c8a725.sinopac.epoll.x86_64.rpm

降版需要舊版 .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):

export PATH="/opt/Tapio/bin:$PATH"
source /opt/Tapio/share/tapioctl/tapioctl-completion.bash

套用後,重新登入或執行 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.44)。同一條 tag 線上數字越大越新。
  • g<sha> 用來精確對回原始碼。跨 branch / rebase 後 commit 數可能撞號,sha 才是唯一身分。
  • built 時間(binary --version)= 組建時間,與 tapioctl version 顯示的「安裝時間」(檔案放到主機上的時間)是兩回事,不要混用。
  • build 變體(broker / IO 實作 / debug|release)rpm -qpi(或 rpm -qi tapio)的 Variant: 行,或檔名尾段;tapioctl versionbuild-time 設定 段也列 broker 與 pollio_impl。

exact tag 的 Release

若 build 點剛好落在 tag 上(0 個 commit),Release 會是純 1 (如 tapio-1.7.1-1.x86_64),不帶 g<sha>——代表這是正式 tag 版而非中間快照。

移除

sudo rpm -e tapio          # 套件名小寫 tapio,非 .rpm 檔名

排錯

  • rpm -UFailed dependencies → rpm 不自動拉相依,先手動裝齊 lftpjemalloctunedirqbalancecpupowerutils(高速版另需 tcpdirect/onload),見系統需求

  • chown 失敗 → operator user 尚未建立,執行 useradd 後重新安裝

  • 裝完 tapioctl version 還是顯示舊版 → daemon 還在跑舊 inode。tapioctl downtapioctl up(或等隔日清晨自動重啟)