
今日も同様の質問を見ました。VBoxManage: 仮想マシン NS_ERROR_FAILURE(0x80004005) を起動しません。しかし、ここではまったく異なり、謎のような文脈を説明することができます。
Ubuntu 20.04ベースのディストリビューションでは、一般ユーザーから次のコマンドを実行できます。
$ whoami
my-user-name
$ VBoxManage startvm --type headless my.app-name
しかし、私はいいえ同じユーザーがJava(特にTomcat9)で同じコマンドを実行できます。
ProcessBuilder pb = new ProcessBuilder("bash", "-c", "whoami"); // my-user-name
Process p = pb.start();
ProcessBuilder pb = new ProcessBuilder("bash", "-c", "VBoxManage ...");
Process p = pb.start();
最後のケースでは、次のエラーが発生します。
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component MachineWrap, interface IMachine
tty
緊急コンソールやその他の非対話型シェルでもコマンドを正常に実行できますが、いいえTomcatプロセスで実行されるJavaです。
インターネット上の誰もがVirtualBoxの再インストールを提案しましたが、これはまったく関係のないソリューションです(何も変更せずにTomcatまたはVirtualHostを再インストールしようとしたためです)。養子縁組を勧めることもありますが、--type headless
私はすでにそうしました。
私も成功せずに次のことを試しました。
- トムキャットの再インストール
- VirtualBoxの再インストール(2回)
- カーネルを奇妙で不安定なバージョンに更新しました。
- 最新のBIOSフラッシュ
トラブルシューティングのヒントがありますか?
答え1
私も同じ問題があります。私はsystemd
制限の影響を受けました。
システムTomcatサービスを確認してください(正しいバージョンを使用)。
sudo systemctl cat tomcat9.service
#
# Systemd unit file for Apache Tomcat
#
...
# Security
User=my-user-name
Group=my-user-name
PrivateTmp=yes
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
...
特に上記の設定があるかもしれませんNoNewPrivileges
。これは、次の理由で特定のユースケースに問題があります。1
trueの場合、サービスプロセスとすべての子プロセスがexecve()を介して(たとえば、setuidまたはsetgidビットまたはファイルシステム機能を介して)新しい権限を取得できないようにします。これは、プロセスとその子孫が再び権限を昇格させないようにする最も簡単で効果的な方法です。
これが問題の場合は、この設定を無効にしてください(説明しました)。
sudo systemctl edit --full tomcat9.service
...
# NoNewPrivileges=true
...
その後、Tomcatを再起動します。
sudo systemctl restart tomcat9.service
すべてが正常に戻ります。
これは、ディストリビューションで採用されている基本的なシステムサービスユニットの特定の制限が原因で、他の人がトラブルシューティングに時間を費やさないようにするのに役立ちます。もっとコメントがあればコメントを追加してください。