VSCode Server メモ
Visual Studio Code Server
公式の説明
また CLIだけで動作するようになった? (2023-09-18)
CLI だけでは動作しなくなった模様。(2023-08-11)
Debian 系では、deb パッケージをダウンロードしてインストールする必要がある。
(direct link と言いながら direct link ではないのは、direct link の意味が分かっていないのか?)
展開すると code というバイナリ1つができるので、これをパスが通っているところに配置。
自分用なら、~/bin に入れておく。
前の deb パッケージをうっかりインストールしてしまった場合
$ sudo apt remove code
$ sudo apt autoremove
この時、/usr/bin/code を強制的に消すとややこしいことになるので消さないこと。
前のバージョンのサービスをアンインストール
$ code tunnel service uninstall
インストールをしなおす。
$ code tunnel service install --accept-server-license-terms
code:console
*
* Visual Studio Code Server
*
* By using the software, you agree to
*
2023-10-17 07:46:44 info Tip: run sudo loginctl enable-linger $USER to ensure the service stays running after you disconnect. Service successfully installed! You can use code tunnel service log to monitor it, and code tunnel service uninstall to remove it.
サーバー起動時に非rootユーザーのサービスが起動できるようにする。
$ sudo loginctl enable-linger $USER
アップデートが面倒なのでスクリプト作った
download フォルダがあること
bin フォルダがありパスが通っていること
code:sh
set -eu
SCRIPT_NAME="$(basename $0)"
TIMESTAMP=$(TZ=UTC date +%Y%m%dT%H%M%S)Z
arch=$(uname -m)
target=x64
target=arm64
else
echo "unknown arch"
exit 1
fi
tar_file=vscode_cli_alpine_${target}_cli.tar.gz
mv ~/download/${tar_file} ~/download/${tar_file}.${TIMESTAMP}
fi
code tunnel service uninstall
cd ~/bin/
tar xvzf ~/download/${tar_file}
code tunnel service install --accept-server-license-terms
なぜか一部のマシンでどうしても接続できないことがあった。
IPv4 では問題がないが
IPv6 だと応答しない、という現象になっていた。
以下のようにした別のホストへの接続は問題ないため、update.code.visualstudio.com かそこまでの経路の問題。
そこでやむなく、squid でプロキシサーバーを別のホスト上に作成。
(このホスト上では、VSCode Server が動いている。)
このプロキシサーバーを使うように、サービスを設定する。
$ systemctl --user edit code-tunnel.service
code:txt
Environment=169.254.169.254,azure.com,digicert.com,microsoft.com
squid のログを見ながら、TCP_DENIED が出たサーバーを no_proxy に追加した。
169.254.169.254 は予約済みで、おそらく AWS の内部のテレメトリを取得しようとしている?
squid のログに POST https というのがいくつか出ていたが、プロキシの動作を理解せずに直接アドレスを叩いてそう。
以下古い情報
CLI をダウンロードする。(VSCode 本体ではない。)
curl でダウンロードする場合は以下のようにする。
なぜか direct link を wget や curl で取得できないので直リンク (debian x64 用(alpine と書いてあるから alpine でも動くと思う。))
展開すると、code 実行ファイルが出てくる。
$ code tunnel
以下の3つの処理が終わると起動する
ライセンスの確認
GitHub との連携
サーバーの名前(ホスト名と別にしてもよい。任意。)
以下のようにすれば、入力不要になる。
$ code tunnel --accept-server-license-terms --name your-remote-name-here
一度起動した後は、Ctrl-C で停止させて、もう一度起動してもこれらが問われることはない。
これは起動したユーザーの ~/.vscode-cli ディレクトリに保存されている。
サービス化する方法
今は service サブコマンドがあるのでそれを使えば良い?
$ code tunnel service install
dbus が動いていないと、以下のようなエラーが出て止まる。
code:console
error creating dbus session: I/O error: No such file or directory (os error 2)
同様の報告あり
重複として誘導されている
以下のコマンドで dbus が動作するようになる。
$ sudo apt install dbus-user-session
$ sudo reboot
systemd のユーザーセッションを残す?
$ sudo loginctl enable-linger your_user_name_here
code tunnel service install で作られる Unit ファイルについて書かれている。
systemd で動かすならこの程度の Unit ファイルでよい。
code:code-tunnel.service
Description=Visual Studio Code Tunnel
After=network.target
StartLimitIntervalSec=0
Type=simple
User=ken
Group=ken
Restart=always
RestartSec=10
ExecStart=/usr/local/bin/code "--verbose" "--cli-data-dir" "/home/ken/.vscode-cli" "tunnel" "service" "internal-run"
WantedBy=multi-user.target
アクセスするためには以下のいずれかの方法になる。
VSCode に Remote - Tunnel 機能拡張をインストールして、リモートエクスプローラの Tunnel から選択する。
https://gyazo.com/884f62142ba0d8de82449e73d2cf3a8d
code 本体を入れる場合
$ sudo dpkg -i code_1.81.1-1691620686_amd64.deb
これを入れると、芋づるで GUI 関連のパッケージが入ってしまうので辛い。
パッケージがどうもつじつまが合わないらしく、以下のコマンドが必要となった。
$ sudo apt --fix-broken install
/icons/hr.icon
以下古い情報
公式の説明
Web UI を持っているので、そこにアクセスできれば、クライアントはブラウザだけあればよい。
sudo できるユーザーで実行する。
code:console
/usr/bin/code-server がインストールされる。
1000番未満のポートは root でないと開けられないので、8080 あたりを使う。
ホストアドレスに 0.0.0.0 を指定すれば、ホストのすべてのインターフェースからアクセス可能になる。
code:console
code-server serve-local --host 0.0.0.0 --port 8080
表示された URL (tkn というトークン付き)でアクセスすると、ブラウザで表示される。
http しか対応していないので、リバースプロキシを立てるのが望ましい。
リバースプロキシを立てるなら --host 指定を抜いて locahost 固定にすべき。
無指定だと、GitHub を介したトンネリングを行うようになっている(?)
動作確認できていないのでよく分からない。
出てくる tkn の UUID はどうも実行ユーザーごとで固定の模様。
ポート番号を変えようと、プロセスを複数立ち上げようと、ユーザーが同じなら同じ tkn が出てくる。
sytemctl のサービスにする。
code:code-server.service
Description = code-server
ExecStart = /usr/local/bin/code-server serve-local --port 10080
Restart = always
Type = simple
User = bugbearr
Group = bugbearr
WantedBy = multi-user.target
systemctl enable code-server
systemctl start code-server
Nginx でリバースプロキシにして https で接続させる。
code:/etc/nginx/site-available/default
// 抜粋
URL で指定する方法はやや危なくて、何らかの拍子に URL が抜かれる可能性がある。
このため、Basic 認証などと併用するのが望ましい。