vscodeを1.99以降にアップデートすると古いLinuxにRemote SSHやRemote Containerでアクセス出来なくなってしまいました。
回避策も書いてあるのですがどうも分かりにくい。
どうやら仕組みとしては下記のようです。
- Remote SSHやRemote Containerは接続先のマシンにvscode serverを起動させる
- 1.99以降はvscode serverがglibc 2.28など新しいライブラリを要求するようになった
- glibcは動的リンクされるので、接続先マシンにglibcの新しいバージョンが入っている必要がある
- 通常、動的リンクはシステムの固定のパスからライブラリを探すため、古いLinuxでは必要なバージョンが見つけられずエラーになる
上記の公式ページに書いてある回避策は、
- VSCODE_SERVER_PATCHELF_PATH という環境変数で patchelfというツールのパスを指定する
- patchelf は動的リンクする際のライブラリを探すパスを実行ファイルを書き換えることで変更する機能を持ってる
- 事前に crosstool-ngというツールを使ってvscode serverが必要とする新しいglibcなどをビルドして用意しておく
- patchelfがvscode serverを書き換えて新しいglibcを探しに行くようにしてくれるので動作できる
仕組みは理解したが、色々面倒なので、vscode 1.99 から接続できる Ubuntu 16と18のDocker imageを作りました。
ghcr.io/naitaku/old-linux-vscode:ubuntu-16.04
という名前でdockerやDockerfileから参照できるので、これをベースにイメージを作ればvscodeから接続できるイメージが作れます。