1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

おうちAI構築報告:OpenCodeをインストールしてローカルLLM(llama.cpp)に接続

1
Last updated at Posted at 2026-07-11

能書き

前回は自分のマシン上にコンテナを作ってllama.cppをインストールし、モデル Qwen3.5-9B-UD-Q4_K_XL を動かしてみました

今回はllama.cppとは別コンテナにOpenCodeをインストールして、前回のllama.cppに接続してみます。

なおOpenCodeの何たるかについては語りません。他に詳しい解説記事が沢山ありますし。

前提

目標

  • ProxmoxVE上にコンテナを作成してOpenCodeをインストール
    • コンテナのOSはUbuntu24.04
  • OpenCodeを私のローカルLLM(llama.cpp)に接続する

参考文献

インストールは下記が公式かな。ありがたい事に日本語の文書がありました。

私のマシンにローカルLLMとしてllama.cppをインストールしてあります。

接続に関しては下記を参考にさせていただきました。が、結局うまく行きませんでした。バージョンが上がってファイル名やら書き方やらが変わったのかも知れません。

我が家の細々した設定など。

準備

コンテナを用意します。私の流儀で、手順がちょっと長いです。

踏み台

我が家のProxmoxサーバーでは、コンテナへの接続は172.16.1.100を踏み台としています。ユーザーはansibleです。

普段使いのWindowsマシン
ssh ansible@172.16.1.100

これの公開鍵を表示しておきます。

コンテナ172.16.1.100:ユーザーansible
cd
cat .ssh/id_ed25519.pub

コンテナ作成

下記スペックでProxmox上にコンテナを用意します。なおコンテナIDが107になる事から、我が家のIPアドレス体系に従って、IPアドレスは172.16.1.107/16にします。

  • ホスト名: opencode
  • SSH公開鍵: 上述の、踏み台ユーザーansibleの公開鍵
  • 非特権コンテナ: チェック
  • ネスト: チェック
  • テンプレート: ubuntu-24.04-standard_24.04-2_amd64.tar.zst
  • ディスクサイズ: 64GiB
  • CPUコア: 2
  • メモリ: 2048MiB(=2GiB)
  • スワップ: 0MiB(SSD対策でスワップ無しとする
  • IPv4/CIDR: 172.16.1.107/16
  • ゲートウェイ(IPv4): 172.16.2.1 (我が家のゲートウェイのIPアドレス)
  • DNSドメイン: 空欄(ホスト設定を使用)
  • DNSサーバ: 空欄(ホスト設定を使用)

コンテナを構築して開始したら、踏み台172.16.1.100からsshログインを試みます。同時に踏み台の.ssh/known_hostsへ登録します。

コンテナ172.16.1.100:ユーザーansible
ssh root@172.16.1.107

SSD対策で、私のProxmoxホストマシンはswapinessを10にしています。それを確認。

コンテナ172.16.1.107:ユーザーroot
sysctl vm.swappiness

下記のように、60ではなくて10と表示されます。

コンテナ172.16.1.107:ユーザーroot
# sysctl vm.swappiness
vm.swappiness = 10

確認できたらコンテナ172.16.1.107から抜けましょう。

コンテナ172.16.1.107:ユーザーroot
exit

Ansibleで基本設定

私の流儀で、Ansibleを利用して/etcをSubversion管理するように設定します/etcのSubversion管理をしないなら、このAnsible実行は省略して大丈夫です。次のユーザー作成へどうぞ。
なおetckeeperを使わないのはSubversion好きの私の我儘です。

インベントリについて。ここで動かすプレイブックには冪等性が無いので、今回のコンテナのIPアドレス(172.16.1.107)だけを記したインベントリを作る必要があります。

Ansibleコントロールノード172.16.1.100:ユーザーansible
cd
cd svn_etc
cat <<___ >inventory_107.ini
[servers]
172.16.1.107

[servers:vars]
ansible_user=root
___

インベントリの確認の為にpingしてみましょう。

Ansibleコントロールノード172.16.1.100:ユーザーansible
ansible all -m ping -i inventory_107.ini

確認できたらAnsibleを実行します。

Ansibleコントロールノード172.16.1.100:ユーザーansible
ansible-playbook -i inventory_107.ini playbook.yaml

タイムゾーン

準備したコンテナ(IPアドレス172.16.1.107)に踏み台(172.16.1.100)から入ります。

Ansibleコントロールノード172.16.1.100:ユーザーansible
ssh root@172.16.1.107

開発用マシンとなるコンテナなので、タイムゾーンを日本にしておきます。

172.16.1.107:ユーザーroot
timedatectl set-timezone Asia/Tokyo

私の流儀で、/etcをSubversionにコミットします。

172.16.1.107:ユーザーroot
cd /etc
svn st | grep "^?" | cut -b9- | xargs -rt svn add
svn ci -m"set timezone"
svn up

ロケール

日本語で読み書きできるようにします。

172.16.1.107:ユーザーroot
locale-gen ja_JP.UTF-8
update-locale LANG=ja_JP.UTF-8

ここでも/etcをSubversionにコミットします。

172.16.1.107:ユーザーroot
cd /etc
svn st | grep "^?" | cut -b9- | xargs -rt svn add
svn ci -m"set locale"
svn up

ユーザー作成

開発用の一般ユーザーを作成します。ここでは私の名前でkatzとします。

172.16.1.107:ユーザーroot
useradd -m -s /bin/bash katz

そしてパスワードを設定。

172.16.1.106:ユーザーroot
passwd katz

sudoは、今回は不要でしょうかね。必要ならばrootでログインし直す事にしましょう。

ユーザーを作成したら、私の流儀で、/etcをSubversionにコミットします。

172.16.1.107:ユーザーroot
cd /etc
svn st | grep "^?" | cut -b9- | xargs -rt svn add
svn ci -m"added user 'katz'"
svn up

最後に一つだけ。curlコマンドをインストールしておきます。

172.16.1.107:ユーザーroot
apt install -y curl
172.16.1.107:ユーザーroot
svn st | grep "^?" | cut -b9- | xargs -rt svn add
svn ci -m"installed curl command"
svn up

以上でコンテナを用意できました。

172.16.1.107:ユーザーroot
exit

OpenCode

インストール

スクリプトをざっと眺めると、どうやら$HOME/.opencode/binディレクトリを作って、そこにバイナリを置くようです。なのでopencodeを実行するユーザーでログインしてから実行します。

普段使いのWindowsマシン
ssh katz@172.16.1.107

公式に従ってインストールします。このinstallスクリプトの中でcurlコマンドを呼んでいるようです。先程curlをインストールしたのはこの為です。

172.16.1.107:ユーザーkatz
curl -fsSL https://opencode.ai/install | bash

インストールが問題無く成功したら、一旦ログアウトします。環境変数を設定する都合です。

172.16.1.107:ユーザーkatz
exit

接続

開発用ユーザーでログイン。これで環境変数が反映されます。

普段使いのWindowsマシン
ssh katz@172.16.1.107

一旦OpenCodeを起動します。

172.16.1.107:ユーザーkatz
opencode

画面上、「Build」の表記の右に、現在のLLMとして「Big Pickle OpenCode Zen」が表示されています。

image.png

すぐに/exitコマンドを実行して終了。そうすると$HOME/.configディレクトリが作成されます。

OpenCodeの設定ファイル($HOME/.config/opencode/opencode.jsonc)に追記して下記のようにします。内容に関しては前回の構築を参照してください

172.16.1.107:ユーザーkatz
cd
vi .config/opencode/opencode.jsonc
172.16.1.107:ユーザーkatz:$HOME/.config/opencode/opencode.jsonc
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "llama.cpp": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "llama-server (local)",
      "options": {
        "baseURL": "http://172.16.1.106:8080/v1"
      },
      "models": {
        "Qwen3.5-9B": {
          "name": "Qwen3.5-9B (local)",
          "limit": {
            "context": 262144,
            "output": 32768
          }
        }
      }
    }
  }
}

もう一度OpenCodeを起動。

172.16.1.107:ユーザーkatz
opencode

/connectを指示。

image.png

そうするとデフォルトとしてOpenCode Zen (Recommended)が選択されていますが……

image.png

カーソルキーの↓を押していくとllama-server (local)にもチェックが入っていますので、これを選択し、enterキーを押します。

image.png

API keyですが、特に設定していないので何を入力しても構いません。とりあえずdummyとでも入力しましょう。そしてenterキー。

image.png

下記のようなモデル選択(?)画面になりますので、そのままenterキーを押します。

image.png

そうするとローカルLLMのllama.cppに接続して、画面上「Build」の右に「Qwen3.5-9B (local) llama-server (local)」と表示されます。

image.png

ここで「あなたのLLMは何ですか」と聞いてみましょう。

image.png

うまくいったようです!しかし反応が遅いですね……体感で百倍って感じです。

仕舞い

OpenCodeをインストールして、前回のローカルLLMと接続しました。動作が遅いとは言え、うまく接続できたようです。やったね:thumbsup_tone1:

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?