Claude Code apt installでのLinuxパッケージ導入と更新
Claude Codeをapt・dnf・apkの署名付きリポジトリから導入し、stable/latestチャンネルの切り替えとアップグレード運用までを一次ソースの手順でまとめます。
curlではなくapt・dnf・apkで入れる理由
Claude Codeはcurlのネイティブインストーラーに加えて、署名済みのapt・dnf・apkリポジトリからも導入できます。構成管理ツール(AnsibleやPuppetなど)でサーバー群を管理している場合は、この経路が第一候補です。社内で許可されたパッケージ経路しか使えない環境でも同じです。WSLのUbuntuやDebianの中に入れる場合も同じ手順で、WSL固有の前提はClaude Code WSL2セットアップにあります。
選ぶ分かれ目は、更新を誰が握るかです。
ネイティブインストーラーとパッケージマネージャー
apt・dnf・apk
更新はシステムのアップグレード手順に乗ります。チャンネルはリポジトリのURLで決まり、autoUpdatesChannelは効きません。選べるのはstableとlatestの2チャンネルです。番号を指定した導入は、ネイティブインストーラーの手順にあります。
この違いを知らないと、更新通知は出るのに新しいバージョンにならない状態で止まります。
3つのリポジトリが共有する署名鍵とチャンネル
apt・dnf・apkの3リポジトリは同じAnthropicのGPG鍵で署名されており、それぞれstableとlatestの2チャンネルを提供します。チャンネルごとの性質は、後半の比較で扱います。
鍵を信頼する前に、fingerprintを目視で確認してください。正しい値は次のとおりです。
31DD DE24 DDFA B679 F42D 7BD2 BAA9 29FF 1A7E CACEaptのgpg --show-keysは同じ値を空白なしの40桁で出力します。この鍵とmanifest.jsonの署名を組み合わせた、配布バイナリ自体の整合性チェックはClaude CodeバイナリのGPG署名検証にあります。
aptでUbuntu・Debianに入れる
流れは、鍵の取得、fingerprintの照合、リポジトリ登録、インストールの4段階です。
aptでの導入
- 1
curlとgnupgを用意する
新しめのDebian・Ubuntuには
curlとgpgが入っていないことがあります。どちらかがcommand not foundになる場合は先に導入します。sudo apt install curl gnupg - 2
署名鍵を取得する
sudo install -d -m 0755 /etc/apt/keyrings sudo curl -fsSL https://downloads.claude.ai/keys/claude-code.asc \ -o /etc/apt/keyrings/claude-code.asc - 3
fingerprintを照合する
gpg --show-keys /etc/apt/keyrings/claude-code.asc出力が上のfingerprintと一致してから先に進みます。
- 4
stableチャンネルを登録してインストールする
echo "deb [signed-by=/etc/apt/keyrings/claude-code.asc] https://downloads.claude.ai/claude-code/apt/stable stable main" \ | sudo tee /etc/apt/sources.list.d/claude-code.list sudo apt update sudo apt install claude-code
latestに切り替えるときは、URLのパスとsuite名の両方を変えたdeb行に書き換えます。
echo "deb [signed-by=/etc/apt/keyrings/claude-code.asc] https://downloads.claude.ai/claude-code/apt/latest latest main" \
| sudo tee /etc/apt/sources.list.d/claude-code.list更新はsudo apt update && sudo apt upgrade claude-codeです。Ubuntuでサンドボックスを使うためのbubblewrapとsocatの導入、24.04以降のAppArmor制限はClaude Code Ubuntuインストールにあります。
dnfでFedora・RHELに入れる
FedoraとRHELでは、リポジトリ定義ファイルを1つ作ればインストールまで進みます。
sudo tee /etc/yum.repos.d/claude-code.repo <<'EOF'
[claude-code]
name=Claude Code
baseurl=https://downloads.claude.ai/claude-code/rpm/stable
enabled=1
gpgcheck=1
gpgkey=https://downloads.claude.ai/keys/claude-code.asc
EOF
sudo dnf install claude-code鍵はgpgkeyのURLから初回インストール時にdnfが取得し、fingerprintの確認プロンプトを出します。上の値と一致するのを確かめてから承認してください。latestに切り替えるにはbaseurlをhttps://downloads.claude.ai/claude-code/rpm/latestに書き換えます。更新はsudo dnf upgrade claude-codeです。
apkでAlpine Linuxに入れる
Alpineでは公開鍵をwgetで取得し、リポジトリのURLを/etc/apk/repositoriesに直接追記します。鍵はaptやdnfと形式が異なり、.rsa.pubファイルを/etc/apk/keys/に置く方式です。
wget -O /etc/apk/keys/claude-code.rsa.pub \
https://downloads.claude.ai/keys/claude-code.rsa.pub
echo "https://downloads.claude.ai/claude-code/apk/stable" >> /etc/apk/repositories
apk add claude-codeapkではGPGのfingerprintの代わりに、鍵ファイルのsha256チェックサムで照合します。次のコマンドの出力が、下の値と一致するか見ます。
sha256sum /etc/apk/keys/claude-code.rsa.pub
# 期待値: 395759c1f7449ef4cdef305a42e820f3c766d6090d142634ebdb049f113168b6latestへの切り替えは、stableの行を消してlatestの行を足す形です。
sed -i '\|downloads.claude.ai/claude-code/apk/stable|d' /etc/apk/repositories
echo "https://downloads.claude.ai/claude-code/apk/latest" >> /etc/apk/repositoriesAlpineは素の状態でbashもcurlも入っていません。curlのインストーラーを使う場合は両方に加えて、実行時にlibgcc・libstdc++・ripgrepが必要です。この前提はClaude Code Alpine Linuxセットアップで個別にまとめています。更新はapk update && apk upgrade claude-codeです。
stableとlatestはリポジトリ側で選ぶ
チャンネルの選び方
stable
深刻な不具合を含むリリースを飛ばした、約1週間遅れのバージョンです。サーバー群やCI基盤のように、更新で挙動が変わると困る環境が対象です。
latest
リリースのたびに即時反映されます。新機能やバグ修正を早く使いたい開発機に向きます。
新しく出たモデルがstableの配るバージョンより新しいClaude Codeを要求することがあり、その場合はlatestに寄せるのが公式の案内です。
更新が自動で走らない理由と、運用の選択肢
HomebrewとWinGetの導入では、環境変数CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATEを1にできます。すると、Claude Codeがアップグレードコマンドをバックグラウンドで代行します。apt・dnf・apkにこの仕組みはありません。アップグレードのコマンドが昇格した権限を必要とするため、手動のままです。
更新を自分たちの経路だけに限りたい場合は、DISABLE_UPDATESを1にします。バックグラウンドの更新だけでなく、手動のclaude updateとclaude installも止まります。DISABLE_AUTOUPDATERはバックグラウンドの確認だけを止め、claude updateは動くので、止める範囲が違います。管理側が配るバージョンだけを使わせたい運用なら、止める範囲の広いDISABLE_UPDATESが目的に合います。DISABLE_AUTOUPDATERを設定したら、claude doctorで確かめられます。ネイティブまたはnpm導入なら、Auto-updates行がdisabled (set by env: DISABLE_AUTOUPDATER)と表示されれば反映済みです。
手元のclaudeで確かめられること
v2.1.287で、更新まわりのサブコマンドのヘルプを実際に表示しました。claude updateにはオプションがありません。
$ claude update --help
Usage: claude update|upgrade [options]
Check for updates and install if available
Options:
-h, --help Display help for commandチャンネルやバージョンを渡す引数はclaude update側にないので、パッケージ導入のチャンネルはリポジトリ行でしか動かせません。
$ claude install --help
Usage: claude install [options] [target]
Install Claude Code native build. Use [target] to specify version (stable,
latest, or specific version)
Options:
--force Force installation even if already installed
-h, --help Display help for commandclaude installの説明は「native build」のインストールで、[target]にstable・latest・バージョン番号を取ります。パッケージマネージャーで入れた版の更新には、apt upgradeなどのシステム側のコマンドを使います。
$ claude doctor --help
Usage: claude doctor [options]
Check the health of your Claude Code installation. Reads settings files in the
current directory without a trust prompt. For a full checkup that can also fix
issues, run /doctor in a session.
Options:
-h, --help Display help for commandclaude doctorは設定ファイルを信頼確認なしで読む検査で、修正まで含める場合はセッション内の/doctorを使います。Auto-updates行の表示はネイティブ・npm導入向けなので、apt・dnf・apkで入れた版の更新は、各パッケージマネージャーの側で確かめます。
手動更新の結果表示と、共有ストレージでの注意
手動で更新を回すときはclaude updateを使い、成功時はSuccessfully updated from <旧バージョン> to version <新バージョン>と表示されます。最新だった場合の表示はインストール方法で変わります。ネイティブ導入はClaude Code is up to date (<version>)で、Homebrew・WinGet・apkの導入はClaude is up to date!です。ログの文言を監視に使う場合は、この違いが効きます。
ホームディレクトリをNFSなどのネットワークストレージに置き、複数台でマウントしている環境では、導入先の置き場所が問題になります。実行中のセッションは起動時だけでなく動作中も実行ファイルの一部をディスクから読むため、ファイルが途中で消えるとセッションが落ち、LinuxのシェルにはBus errorと出ます。ネイティブインストーラーの既定の置き場所~/.local/share/claude/versions/はホーム配下にあたります。各マシンのローカルディスクに置ける方法の例として、公式はLinuxパッケージマネージャーを挙げています。
置き場所が共有側だと、ほかのマシンが使用中のバージョンを消してしまう恐れがあります。この構成でClaude Code自身の更新を止めるにはDISABLE_UPDATESを使います。DISABLE_AUTOUPDATERだけでは、利用者がclaude updateやclaude installを実行できてしまうからです。
特定バージョンに固定したいとき
バージョンを固定したい検証環境では、ネイティブインストーラーに番号を渡します。
curl -fsSL https://claude.ai/install.sh | bash -s 2.1.89詳細はClaude Code install完全ガイドにあります。
パッケージ経由で入れたものを外す
リポジトリ設定まで含めて消します。
sudo apt remove claude-code
sudo rm /etc/apt/sources.list.d/claude-code.list /etc/apt/keyrings/claude-code.ascsudo dnf remove claude-code
sudo rm /etc/yum.repos.d/claude-code.repoapk del claude-code
sed -i '\|downloads.claude.ai/claude-code/apk|d' /etc/apk/repositories
rm /etc/apk/keys/claude-code.rsa.pub導入で詰まったときの切り分け
NO_PUBKEY BAA929FF1A7ECACEでapt updateが失敗する
鍵のダウンロードに失敗したままapt updateまで進んだときの症状です。/etc/apt/keyrings/claude-code.ascが存在するか、gpg --show-keysでfingerprintが出るかを確かめます。gpgがファイルを開けない、または有効なOpenPGPデータがないと言う場合は、ダウンロードが失敗したか別の内容が返っています。ネットワークがdownloads.claude.aiに届くことを確認して、ダウンロードのコマンドを再実行します。
command not foundでcurlやgpgが動かない
最小構成のDebian・Ubuntuイメージには、どちらも入っていないことがあります。sudo apt install curl gnupgを実行してから、鍵の手順をやり直します。
curlのインストーラーで入れたAlpineでripgrepが見つからない
curlのインストーラー経路でapk add libgcc libstdc++ ripgrepを実行し、パッケージが無いと言われる場合です。ripgrepはcommunityリポジトリにあるので、Alpineのバージョンに合わせたcommunityの行を/etc/apk/repositoriesに追加します。そのうえでapk updateをかけ直します。
ripgrepを入れても検索まわりが動かないときは、settings.jsonのUSE_BUILTIN_RIPGREPを0にして、同梱版ではなくシステムのripgrepを使わせます。
判断の持ち帰り
更新通知が出ても、apt・dnf・apkはアップグレードを自分で回すまでバージョンが変わりません。どのジョブでupgradeを回すかを先に決めておくと、通知と実際の配布のずれに慌てずに済みます。ホームを共有しているマシン群では、パッケージで各機のローカルディスクに入れ、DISABLE_UPDATESを併用する形が成立します。