多分組込みLinuxにSSH接続しようとした時にこの問題が発生するのだと思います。
VSCodeの更新でまたSSH接続しなくなった
2024年2月は接続できていたのに、4月ではまた接続しなくなった。多分自動更新でいろいろな問題が発生。
まずVSCodeに表示されるエラーを上から順番に対処していきました。
ENOENTエラー消えた
C:\Windows\System32\ssh.exeを実行してENOENTエラーとなっていました。 しかしC:\Windows\System32\にはssh.exeはありませんでした。そこで『C:\>dir ssh.exe /s /a』でssh.exeを探してC:\Windows\System32\OpenSSH\ssh.exeにあったので、VSCodeの『settings』の『remote.ssh.path』に『C:\Windows\System32\OpenSSH\ssh.exe』を入れて、VSCodeを再起動して、SSH接続を試みたらENOENTエラーは消えていました。
その他4つのエラー
これはVSCodeが要件確認する為のシェルスクリプトを更新していて、更に色々厳格にチェックしようとしていて、全て入ったDESKTOP用のシェルスクリプトコマンド様に記述していてボードなどbusyboxを考慮していない為、この問題が発生しているようです。
2024年2月時点ではcheck-requirements.shがボードに転送されていたので、それを修正していましたが、今はどうも『c:\Users\<user_name>\.vscode\extensions\ms-vscode-remote.remote-ssh-0.111.2024040515\out\extension.js』をバイナリー形式にして転送して、ボード側で実行しているみたいなで、この『c:\Users\<user_name>\.vscode\extensions\ms-vscode-remote.remote-ssh-0.111.2024040515\out\extension.js』を修正して無事VSCodeでSSH接続ができるようになりました。
『~/.vscode-server/code-5c3e652f63e798a5ac2f31ffd0d863669328dc4c』これがそのボード側のバイナリ形式のファイル。
【注意】ファイル編集時、時々止まりますが大きなファイルで文字をシフトしたりしているので、待っていたら30秒くらいでカーソルがまた点滅しだしてそのまま編集できます。 警告がでたら『Keep Waiting』(処理を待つ)でOKです。
getconf not found は消えた
下のファイルを編集した。 『getconf LONG_BIT』で検索
c:\Users\<user_name>\.vscode\extensions\ms-vscode-remote.remote-ssh-0.111.2024040515\out\extension.js
2ヵ所:BITNESS=$(getconf LONG_BIT)をBITNESS=64に変更
printenv not foundは消えた
上と同じファイルを編集した。『printenv 』(末尾半角スペース)で検索。 printenvで検索すると、『printenv_indent』も表示され面倒くさい。
ボードはsudo dnf install printenvでprintenvをインストールできなかったが、envはあったので『\tprintenv | sed』コマンド部分を『\tenv | sed』にした。(2ヵ所)
%N/1000000で0になるエラーも消えた
上と同じファイル編集。 %Nはナノ秒まで取得するフォーマット指定子だけど、Petalinuxではサポートしていない。『%N)』で検索。
$(date +%s%N)/1000000 となっている2ヵ所を$(date +%s)*1000 に変更した。
ps: invalid option — ‘p’ になるエラーも消えて繋がった
上と同じファイルを編集。 ボードはbusyboxを使っているので-pオプションを使えない。 なのでパイプとgrepで代用した。『ps -p』で検索。
ps -p $CLI_PIDを ps | grep $CLI_PIDに変更した。(1ヵ所)
Backup
念のため、編集後extension.jsのバックアップを別directoryに保存しました。 VSCodeは自動更新するので、extension.jsもまた更新されてしまい、同じ問題が起こるかもしれないので。
以前発生した問題(2024年2月)
Petalinuxを使っていて、最初はVSCodeでSSH接続できていたのですが、何故か途中でVSCodeでSSH接続できなくなり、『Waiting for server log …』と表示され、最後に『getconf: command not found』となりエラーで接続できませんでした。 (この時は、この1つのエラーだけで問題解決できました)
因みに、以下のエラーメッセージはエラーで接続できなかった場合、少しスクロールアップすれば表示されていました。
以前の解決策1
そこでメッセージの通りVSCodeで接続する相手機器の『/home/petalinux/.vscode-server/bin/31c37ee8f63491495ac49e43b8544550fbae4533/bin/helpers/check-requirements.sh』の22行目を見るとgetconfコマンドでシステムのビット数を取得するようになっていました。 そこでエラーを起こしてしまっていました。 組込みとしてPetalinuxを使っていてdnfでもgetconfをインストールできなかったので、私のシステムは64bitなので64と直接記述しました。 因みにこれはVSCodeのSSHサーバー機能としてのチェックなので、普通のTerminalからSSHでは接続できます。 なのでVSCodeを使わずSSHでPetalinuxの機器に接続して、このファイルの編集をしています。
BITNESS=${getconf LONG_BIT}
以下の様に変更
BITNESS=64
以前の解決策2
Petalinuxには初期値ではnano入っていないので、編集は、viで『sudo vi check-requirements.sh』で編集しています。 viの使い方を知らない場合は、以下でも接続できたので試してみてください。(これはVSCodeで接続する相手機器に設定します。)(2024年4月時点ではこの方法も効果ありませんでした。)
$ sudo touch /tmp/vscode-skip-server-requirements-check
これは、check-requirementsのgetconfを使う前の16~20行に、以下のコードがあり、『/tmp/vscode-skip-server-requirements-check』ファイルが存在すると、『自分のリスクで進んでください』と警告が表示されて、getconfでビット数をチェックせずにSSH接続します。 基本的にビット数に応じて使用するLibrary等が異なるので、解決策1がお勧めと思います。
if [ -f "/tmp/vscode-skip-server-requirements-check" ]; then echo "!!! WARNING: Skipping server pre-requisite check !!!" echo "!!! Server stability is not guaranteed. Proceed at your own risk. !!!" exit 0 fi
コメント