Slackware

OpenLinkHub

ページ作成日

概要

OpenLinkHubは、Corsair iCUE LINK Hubをはじめ、各種Corsair製AIO水冷クーラーやハブをLinux上から制御するためのオープンソースソフトウェアです。
Go言語で実装されており、ローカルのWebブラウザからアクセスするダッシュボード(http://127.0.0.1:27003)を通じて、ファン・ポンプ速度、RGBイルミネーション、LCD表示などを一元管理できます。

液冷クーラー制御という点ではliquidctlと用途が重なりますが、liquidctlがCLI・Pythonライブラリ中心であるのに対し、OpenLinkHubはWeb UIを備えた常駐デーモン型のツールという違いがあります。
公式にCorsairが提供する純正ソフトウェアではなく、非公式のコミュニティプロジェクトです。

特徴

Webベースのダッシュボード
ブラウザからhttp://127.0.0.1:27003にアクセスし、接続されたデバイスの状態確認や設定変更を行えます。
幅広いデバイス対応
iCUE LINK Hub、AIO水冷クーラー、ファン、ポンプ、LCD画面などのCorsair製デバイスに対応しています。
周辺機器の管理
一部のキーボード、マウス、ヘッドセットのRGB・バッテリー状態などもダッシュボードから管理できます。
メモリのステータス表示
対応するDDR4/DDR5メモリのSPD情報や温度、LED状態を表示・制御できます。
カスタムファンプロファイル・RGBエディタ
温度センサーに基づくカスタムファンカーブや、デバイスごとのRGBプロファイルをダッシュボード上のエディタで作成できます。
OpenRGB連携・Prometheusメトリクス
OpenRGBとの連携や、Prometheus形式でのメトリクス出力にも対応しており、既存の監視基盤に組み込むことも可能です。
常駐デーモンとしての動作
バックグラウンドで常駐させることで、起動時に自動でデバイスを初期化・制御できます。本家はsystemdサービスを前提としていますが、Slackwareでは後述の通りrc.d形式の起動スクリプトで代用します。

公式サイト

OpenLinkHub(GitHub)
openlinkhub.dev(公式サイト)

依存関係

このパッケージをビルド・実行するには、以下のパッケージが必要です。

Slackware標準パッケージ

Slackware Currentにはgccパッケージの一部としてgcc-go(gccgo)も収録されており、/usr/bin/goはこのgccgoのラッパーです。
公式Go(google-go-lang)とgccgoの2種類のgoコマンドが同じシステム上に存在するため、ビルド時にどちらが呼ばれているかに注意して下さい。

Make it by yourself!

1. 事前準備:公式Goの確認

Slackware Currentには公式Go(google-go-lang)が標準で収録されており、which goで確認するとgccgoではなく公式版のパスが優先されます。


which go

/usr/lib64/go1.26.5/go/bin/go

一方、/usr/bin/goを直接指定すると、gccパッケージに含まれるgccgo側が呼ばれます。


/usr/bin/go version

go version go1.18 gccgo (GCC) 15.3.0 linux/amd64

公式GoのPATHは、google-go-langパッケージが導入する/etc/profile.d/go.shによってログインシェルで自動的に設定されます。
ただしsudo コマンドのような非ログインシェル経由の実行では、この設定が読み込まれずgccgo側の/usr/bin/goが呼ばれてしまう場合があるため、ビルド時は念のためwhich goの結果をフルパスとしてGO変数に固定しておきます(~/.bashrcなどに記載)。


export GO=/usr/lib64/go1.26.5/go/bin/go

なお$GOをフルパスでexportして明示的に呼び出す形にしているため、sudoのsecure_pathによるPATHリセットは$GOの解決には影響しません。
このページではroot権限が必要な作業をsudo コマンドの形式で記載しています。
なおSlackwareコミュニティでは、rootパスワードを知る作業者が一人という前提からsuを使う慣習もありますが、複数ユーザーで管理する環境や実行ログを残したい環境では、必ずしもその前提は成り立たないため、このページでは一般的なLinux環境にも合わせてsudoを使用します。

2. ソースの取得とビルド

GitHubリポジトリをクローンし、パッケージ化したいバージョンのタグをチェックアウトします。
執筆時点での最新版は0.8.9です。


cd ~/Downloads
git clone https://github.com/jurkovic-nikola/OpenLinkHub.git
cd OpenLinkHub
git checkout 0.8.9

Goでビルドします。
pipewireのcgoバインディングをビルドするため、CGO_CFLAGS_ALLOW環境変数の指定が必要です。


CGO_CFLAGS_ALLOW='-fno-strict-overflow' $GO build .

ビルドが成功すると、カレントディレクトリにOpenLinkHubバイナリが生成されます。
生成されたバイナリが正しいツールチェインでビルドされているかは、以下のコマンドで確認できます。


file OpenLinkHub
go version -m OpenLinkHub

3. ファイルの配置

公式のinstall.shcp -r ../OpenLinkHub /optとして、gitリポジトリ全体を丸ごと/opt/OpenLinkHubにコピーする方式を取っています(特定のディレクトリだけを選んでコピーしているわけではありません)。
Slackwareパッケージでも同様に、リポジトリ全体(.gitを除く)を仮インストールディレクトリにコピーします。


mkdir -p /tmp/OpenLinkHub-0.8.9/opt/OpenLinkHub
cp -a . /tmp/OpenLinkHub-0.8.9/opt/OpenLinkHub/
rm -rf /tmp/OpenLinkHub-0.8.9/opt/OpenLinkHub/.git

設定ファイルの雛形も配置しておきます。
リポジトリにconfig.jsonのサンプルが含まれていない場合は、READMEに記載の内容を参考に作成して下さい。

4. udevルールの配置

root権限なしでデバイスにアクセスできるよう、リポジトリに含まれる99-openlinkhub.rulesをudevルールディレクトリに配置します。
なお公式のinstall.shが自動で扱っているudevルールはこの99-openlinkhub.rulesのみです。
READMEのアンインストール手順には98-corsair-memory.rulesという別ファイルへの言及もありますが、install.sh自体には登場せず、リポジトリ内での扱いが不統一なため、DDR4/DDR5メモリのステータス機能を使う場合は、リポジトリ内にこのファイルが実際に存在するか確認した上で配置して下さい。


mkdir -p /tmp/OpenLinkHub-0.8.9/lib/udev/rules.d
cp 99-openlinkhub.rules /tmp/OpenLinkHub-0.8.9/lib/udev/rules.d/

5. 起動スクリプトの配置

Slackwareはsystemdではなく、BSD形式の/etc/rc.d/rc.*起動スクリプトを使用します。
専用ユーザーではなくrootとして動作させるため、rc.openlinkhubという起動スクリプトはsuを経由せず、直接バイナリを起動する形にします。
バックグラウンドで起動する際は、nohupを付けないと、rc.openlinkhub自体を起動したシェルの終了とともにSIGHUPで子プロセスが終了してしまうことがあるため、忘れずに付けて下さい。


mkdir -p /tmp/OpenLinkHub-0.8.9/etc/rc.d
cat > /tmp/OpenLinkHub-0.8.9/etc/rc.d/rc.openlinkhub << 'EOF'
#!/bin/sh
#
# /etc/rc.d/rc.openlinkhub
# OpenLinkHub 起動スクリプト

OPENLINKHUB_DIR=/opt/OpenLinkHub
OPENLINKHUB_BIN=$OPENLINKHUB_DIR/OpenLinkHub
PIDFILE=/var/run/OpenLinkHub.pid
LOGFILE=/var/log/OpenLinkHub.log

openlinkhub_start() {
  if [ -x $OPENLINKHUB_BIN ]; then
    echo "Starting OpenLinkHub..."
    cd $OPENLINKHUB_DIR
    nohup $OPENLINKHUB_BIN >>$LOGFILE 2>&1 &
    echo $! > $PIDFILE
  fi
}

openlinkhub_stop() {
  if [ -f $PIDFILE ]; then
    echo "Stopping OpenLinkHub..."
    kill $(cat $PIDFILE) 2>/dev/null
    rm -f $PIDFILE
  fi
}

openlinkhub_restart() {
  openlinkhub_stop
  sleep 1
  openlinkhub_start
}

case "$1" in
  start)
    openlinkhub_start
    ;;
  stop)
    openlinkhub_stop
    ;;
  restart)
    openlinkhub_restart
    ;;
  *)
    echo "usage: $0 start|stop|restart"
    ;;
esac
EOF
chmod 755 /tmp/OpenLinkHub-0.8.9/etc/rc.d/rc.openlinkhub

6. ドキュメントのインストール

リポジトリ全体をすでに/opt/OpenLinkHubにコピーしているため、README等もそちらに含まれていますが、Slackwareの慣例に従い/usr/docにも配置しておきます。


mkdir -p /tmp/OpenLinkHub-0.8.9/usr/doc/OpenLinkHub-0.8.9
cp -a README.md CHANGELOG.md LICENSE docs \
  /tmp/OpenLinkHub-0.8.9/usr/doc/OpenLinkHub-0.8.9/

7. パッケージの作成


cd /tmp/OpenLinkHub-0.8.9
sudo makepkg --linkadd y --chown n ../OpenLinkHub-0.8.9-x86_64-1.txz

Slackware package ../OpenLinkHub-0.8.9-x86_64-1.txz created.

あとは、パッケージをインストールすれば完了です。


cd ..
sudo installpkg OpenLinkHub-0.8.9-x86_64-1.txz

udevルールを反映するため、ルールを再読み込みします。


sudo udevadm control --reload-rules
sudo udevadm trigger

使い方

起動スクリプトを手動で実行して起動します。


sudo /etc/rc.d/rc.openlinkhub start

起動時に自動実行させたい場合は、/etc/rc.d/rc.localに以下を追記します(rc.localが存在しない場合は新規作成し、実行権限を付与して下さい)。


if [ -x /etc/rc.d/rc.openlinkhub ]; then
  /etc/rc.d/rc.openlinkhub start
fi

サービスが起動したら、ブラウザから以下のURLにアクセスするとダッシュボードが表示されます。


http://127.0.0.1:27003

設定ファイル

設定は/opt/OpenLinkHub/config.jsonで行います。
主な項目は以下の通りです。

listenPort / listenAddress
Webダッシュボードが待ち受けるポート番号とアドレスです。デフォルトはそれぞれ27003127.0.0.1です。
cpuSensorChip
CPU温度取得に使用するセンサーチップ名です。AMD環境ではk10tempまたはzenpower、Intel環境ではcoretempを指定します。
memory / memorySmBus / memoryType
メモリのステータス表示・制御に関する設定です。DDR4の場合は4、DDR5の場合は5を指定します。
metrics
Prometheus形式のメトリクス出力を有効にするかどうかの設定です。
logFile / logLevel
ログの出力先とログレベルの設定です。logFile-にすると標準出力にログが出力されます。

そのほかの設定項目の詳細は、公式リポジトリのREADMEを参照して下さい。