$cd ../troubleshooting/
CRITICAL📦 Installation
二重インストール:シャドウopenclawバイナリ — 誤ったバージョンが実行される
// OpenClawをアップグレードしたのに `openclaw --version` が古いビルドのまま、doctorの修正が効かない、またはgatewayの挙動が削除したはずのリリースのようになる — これはほぼ常に2つのグローバルインストール(`sudo npm i -g openclaw` の /usr/local/bin と ~/.npm-global や nvm 下のユーザー級インストール)が存在し、シェルが先に間違った方を解決しているためです。シャドウバイナリは静かに問題を起こします:コマンドは成功するが古いコードが動きます。本非公式ガイドでは、ディスク上の全コピーを特定し、1つのインストール戦略を選び、PATH優先順位を修正し、OpenClawドキュメント推奨のユーザープレフィックスにクリーン再インストールする方法を説明します。
diagnose.sh
🔍 これがあなたの問題ですか?
?`openclaw --version` がインストールしたばかりより古いリリースを表示
?`which -a openclaw` が2つ以上のパスをリスト(例:/usr/local/bin と ~/.npm-global/bin)
?`openclaw doctor` やアップグレードの修正がランタイムに反映されない
?以前 `sudo npm i -g openclaw` と通常ユーザーのグローバルインストールの両方を実行した
?Gatewayログが期待バージョンにない機能を参照
diagnose_paths.sh
✅ 修正1 — ディスク上の全openclawバイナリをマップ
変更前に全バイナリをマップ
# PATH上の全openclawをリスト which -a openclaw # Bash: 全解決名を表示 type -a openclaw # 各パスでバージョン比較 /usr/local/bin/openclaw --version 2>/dev/null ~/.npm-global/bin/openclaw --version 2>/dev/null # npmグローバルルート npm prefix -g sudo npm prefix -g 2>/dev/null
重複npmインストールとアクティブバイナリを確認
# 両方のnpmグローバルツリーを確認 npm list -g openclaw --depth=0 sudo npm list -g openclaw --depth=0 2>/dev/null # シェルが実際に実行するもの hash -r # bash: コマンドキャッシュクリア command -v openclaw openclaw --version
uninstall_dupes.sh
✅ 修正2 — 重複インストールパスを削除
両ツリーをアンインストール — ~/.openclaw設定は安全
# ユーザー級グローバルコピーを削除 npm uninstall -g openclaw # システム全体sudoコピーを削除(存在する場合) sudo npm uninstall -g openclaw # PATHに残っていないことを確認 which -a openclaw || echo "PATHにopenclawなし — OK"
npm uninstallが壊れたリンクを残した場合の手動クリーンアップ
# 任意:古いシンボリックリンクを手動削除 sudo rm -f /usr/local/bin/openclaw rm -f ~/.npm-global/bin/openclaw # シェルハッシュテーブルをクリア hash -r # クリーン状態を確認 which -a openclaw
reinstall_clean.sh
✅ 修正3 — PATH順序修正とユーザープレフィックス再インストール
PATH順序が正しければユーザープレフィックスが /usr/local/bin より優先
# 標準ユーザープレフィックス(推奨) npm config set prefix "$HOME/.npm-global" mkdir -p "$HOME/.npm-global/bin" # ~/.bashrc または ~/.zshrc に追加 — npm binを先に export PATH="$HOME/.npm-global/bin:$PATH" # シェル再読み込み source ~/.bashrc # または ~/.zshrc
1パス、1バージョン — その後サービス再起動
# ユーザープレフィックスに新規インストール npm i -g openclaw@latest # 単一バイナリを確認 which -a openclaw openclaw --version openclaw doctor # gateway実行中なら再起動 openclaw gateway restart
💡 プロのヒント:グローバル戦略は1つだけ
ユーザー級npm global(推奨)かシステム全体のsudoインストールのいずれかを選び、両方は使わない。クリーンアップ後 `which -a openclaw` は1パスのみを返すべき。~/.npmrcでnpm prefixを固定し、今後の `npm i -g` が別の場所に入らないようにする。
🛡️ 予防チェックリスト
- • `sudo npm i -g openclaw` とユーザー級グローバルインストールを混在させない — 1つのprefixを選んで徹底
- • インストール後、gateway再起動やdoctor実行前に `which -a openclaw` と `openclaw --version` を実行
- • ~/.bashrc または ~/.zshrc で npm グローバル bin(`npm prefix -g`/bin)を /usr/local/bin より前に置く
- • nvm/fnm使用時は、非対話シェル(systemd、cron、SSH)でもバージョン管理initが走るようにする
- • 選んだインストールパスをホストのREADMEに記録し、将来のsudoインストールを防ぐ
❓ FAQ
Q1. シャドウバイナリかどうかはどう判別しますか?
`which -a openclaw`(bashでは `type -a openclaw`)を実行。/usr/local/bin/openclaw と /home/you/.npm-global/bin/openclaw など2つ以上のパスが出れば、$PATHで先に現れる方が使われます。各パスで `--version` を比較し、ユーザーと `sudo npm list -g openclaw` の両方にインストールがあれば警告サインです。
Q2. sudoインストールとユーザー級インストール、どちらを残すべき?
Linux VPSとMac Miniのコミュニティ慣行はsudoなしのユーザー級グローバル:`npm config set prefix ~/.npm-global` とPATH追加。sudoは/usr/localに書き込み、後から通常ユーザーで `npm i -g` すると忘れやすい。動作中のユーザープレフィックスがあればsudo側を削除。意図的に1サービスアカウントのみで管理する場合のみシステム全体を維持。
Q3. 古いバイナリを削除してもsystemd内のopenclawが誤バージョンのまま?
gatewayサービスが絶対パスを使うか、systemd/launchdから最小PATHを継承している可能性。`~/.config/systemd/user/openclaw-gateway.service` の ExecStart= と Environment=PATH= を確認し、正しいバイナリパスまたはnpm global binを含むPATHに更新。`systemctl --user daemon-reload && systemctl --user restart openclaw-gateway`。対話シェルの修正はデーモン環境に自動反映されません。
Q4. nvmでも同じ問題が起きますか?
はい。nvmはNodeバージョンごとにグローバルパッケージをインストール。Node 22でopenclawを入れsystemdがNode 20を使う、またはログインシェルだけnvmを読み込む場合、異なるバイナリになります。gatewayと同じコンテキストで `node -v` と `which openclaw` を確認。デフォルトエイリアスや安定パスを指す公式インストールスクリプトも検討。
Q5. アンインストールで ~/.openclaw 設定は壊れますか?
いいえ。設定・セッション・チャネル認証は ~/.openclaw/ にあり、どのグローバルバイナリを呼ぶかとは独立。アンインストールはnpmグローバルツリーからCLI/gatewayパッケージのみ削除。正しいバージョン再インストール後 `openclaw doctor` は同じ設定を見るはず。大規模クリーンアップ前に ~/.openclaw/openclaw.json をバックアップ推奨。
Q6. 最もクリーンな再インストール手順は?
1)設定パス確認。2)ユーザーと `sudo npm uninstall -g openclaw` の両方でアンインストール。3)`which -a openclaw` が空であることを確認。4)`npm config set prefix ~/.npm-global`。5)shell rcにPATH追加。6)`npm i -g openclaw@latest`。7)単一パスとバージョン確認後gateway再起動。公式リポ:github.com/openclaw/openclaw。