Closed MiraiHattori closed 4 years ago
前半はpush出来てませんでした。修正しました。
後半については、 ここで、GPUチェックをしているので、 https://github.com/agent-system/robot_assembler/blob/master/scripts/run_docker.sh#L31-L35 ここで、GPU="--gpus all" になっているか確認してください
なっている場合は、GPU="" で試してみてください なっていない場合は、GPU="--gpus all" で試してみてください
次に、
DOCKER_OPTION=-it ./run_docker.sh bash
で入って
glxinfo
と
LIBGL_ALWAYS_INDIRECT=1 glxinfo
をしてみてください
ホストで
aptitude search glvnd
などして、glvndが入っているか確認してみてください
GPU変数の変更によらずエラーが出ているようです.
future731@future731-MS-7B61:~/JSK/robot_assembler$ git pull origin master
remote: Enumerating objects: 23, done.
remote: Counting objects: 100% (23/23), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 14 (delta 10), reused 14 (delta 10), pack-reused 0
Unpacking objects: 100% (14/14), done.
From github.com:agent-system/robot_assembler
* branch master -> FETCH_HEAD
4149487..ec8cea6 master -> origin/master
Updating 4149487..ec8cea6
Fast-forward
euslisp/assembled-robot-interface.l | 12 ++++++++----
euslisp/robot-assembler.l | 2 +-
launch/robot_assembler_buttons.launch | 2 +-
scripts/Dockerfile | 14 +++++---------
scripts/run_docker.sh | 7 ++++++-
5 files changed, 21 insertions(+), 16 deletions(-)
future731@future731-MS-7B61:~/JSK/robot_assembler/scripts$ docker build -f Dockerfile -t yoheikakiuchi/robot_assembler .
略
future731@future731-MS-7B61:~/JSK/robot_assembler/scripts$ git diff
diff --git a/scripts/run_docker.sh b/scripts/run_docker.sh
index 026fbd9..6ef4620 100755
--- a/scripts/run_docker.sh
+++ b/scripts/run_docker.sh
@@ -33,6 +33,7 @@ if [ $(nvidia-smi | grep Xorg | wc -l) -gt 0 ]; then
else
GPU=""
fi
+GPU="--gpus all"
##xhost +local:root
xhost +si:localuser:root
future731@future731-MS-7B61:~/JSK/robot_assembler/scripts$ ./run_docker.sh
localuser:root being added to access control list
cont_robot_assembler
;; loading roseus("1.7.4") on euslisp((9.27 ip-172-30-1-167 Wed Mar 4 01:33:18 UTC 2020 1.2.1))
[ WARN] [1587609990.352629275]: ;; start_desgin_file () does not exists
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 151 (GLX)
Minor opcode of failed request: 3 (X_GLXCreateContext)
Value in failed request: 0x0
Serial number of failed request: 134
Current serial number in output stream: 135
[ INFO] [1587609990.139017480]: install ros::roseus-sigint-handler
malloc_consolidate(): invalid chunk size
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-leus'
[robot_assembler-2] process has died [pid 54, exit code -6, cmd /catkin_ws/src/robot_assembler/euslisp/robot-assembler-node.l __name:=robot_assembler __log:=/home/leus/.ros/log/a1496118-850c-11ea-b1fc-309c2386fd94/robot_assembler-2.log].
log file: /home/leus/.ros/log/a1496118-850c-11ea-b1fc-309c2386fd94/robot_assembler-2*.log
the rosdep view is empty: call 'sudo rosdep init' and 'rosdep update'
future731@future731-MS-7B61:~/JSK/robot_assembler/scripts$ git diff run_docker.sh
diff --git a/scripts/run_docker.sh b/scripts/run_docker.sh
index 026fbd9..7600b1f 100755
--- a/scripts/run_docker.sh
+++ b/scripts/run_docker.sh
@@ -33,6 +33,7 @@ if [ $(nvidia-smi | grep Xorg | wc -l) -gt 0 ]; then
else
GPU=""
fi
+GPU=""
##xhost +local:root
xhost +si:localuser:root
future731@future731-MS-7B61:~/JSK/robot_assembler/scripts$ ./run_docker.sh
localuser:root being added to access control list
cont_robot_assembler
;; loading roseus("1.7.4") on euslisp((9.27 ip-172-30-1-167 Wed Mar 4 01:33:18 UTC 2020 1.2.1))
[ WARN] [1587610021.021116956]: ;; start_desgin_file () does not exists
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
X Error of failed request: GLXBadContext
Major opcode of failed request: 151 (GLX)
Minor opcode of failed request: 6 (X_GLXIsDirect)
Serial number of failed request: 145
Current serial number in output stream: 144
[ INFO] [1587610020.805557000]: install ros::roseus-sigint-handler
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-leus'
[robot_assembler-2] process has died [pid 53, exit code 1, cmd /catkin_ws/src/robot_assembler/euslisp/robot-assembler-node.l __name:=robot_assembler __log:=/home/leus/.ros/log/b3950322-850c-11ea-b0f2-309c
2386fd94/robot_assembler-2.log].
log file: /home/leus/.ros/log/b3950322-850c-11ea-b0f2-309c2386fd94/robot_assembler-2*.log
the rosdep view is empty: call 'sudo rosdep init' and 'rosdep update'
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
glxinfoについても,前者のGPU=""としたときと後者のGPU="--gpus all"としたときで差はありませんでした
future731@future731-MS-7B61:~/JSK/robot_assembler/scripts$ DOCKER_OPTION=-it ./run_docker.sh bash
localuser:root being added to access control list
cont_robot_assembler
leus@future731-MS-7B61:/userdir$ ls
Dockerfile build.sh dump_yaml_to_sexp.py exec_docker.sh run_docker.sh
leus@future731-MS-7B61:/userdir$ glxinfo
name of display: :1
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
X Error of failed request: GLXBadContext
Major opcode of failed request: 151 (GLX)
Minor opcode of failed request: 6 (X_GLXIsDirect)
Serial number of failed request: 57
Current serial number in output stream: 56
leus@future731-MS-7B61:/userdir$ LIBGL_ALWAYS_INDIRECT=1 glxinfo
name of display: :1
X Error of failed request: GLXBadContext
Major opcode of failed request: 151 (GLX)
Minor opcode of failed request: 6 (X_GLXIsDirect)
Serial number of failed request: 39
Current serial number in output stream: 38
leus@future731-MS-7B61:/userdir$ exit
future731@future731-MS-7B61:~/JSK/robot_assembler/scripts$ vi run_docker.sh
future731@future731-MS-7B61:~/JSK/robot_assembler/scripts$ DOCKER_OPTION=-it ./run_docker.sh bash
localuser:root being added to access control list
cont_robot_assembler
leus@future731-MS-7B61:/userdir$ glxinfo
name of display: :1
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 151 (GLX)
Minor opcode of failed request: 24 (X_GLXCreateNewContext)
Value in failed request: 0x0
Serial number of failed request: 96
Current serial number in output stream: 97
leus@future731-MS-7B61:/userdir$ LIBGL_ALWAYS_INDIRECT=1 glxinfo
name of display: :1
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 151 (GLX)
Minor opcode of failed request: 24 (X_GLXCreateNewContext)
Value in failed request: 0x0
Serial number of failed request: 96
Current serial number in output stream: 97
leus@future731-MS-7B61:/userdir$
また,glvndは以下のようになっています
future731@future731-MS-7B61:~/JSK/robot_assembler/scripts$ aptitude search glvnd
i A libglvnd-core-dev - Vendor neutral GL dispatch library -- core development files
p libglvnd-core-dev:i386 - Vendor neutral GL dispatch library -- core development files
i A libglvnd-dev - Vendor neutral GL dispatch library -- development files
p libglvnd-dev:i386 - Vendor neutral GL dispatch library -- development files
i A libglvnd0 - Vendor neutral GL dispatch library
i A libglvnd0:i386 - Vendor neutral GL dispatch library
従来のnvidia/opengl:1.0-glvnd-runtime-ubuntu18.04を使ってglxinfoが動くことまでは確認しました.
nvidia/opengl:1.0-glvnd-runtime-ubuntu18.04とはほとんど差がないと思うのだけどな。 16.04 と 18.04 だとdocker+nvidiaで動いている(手元環境では)。 あと18.04のnon-nvidiaの環境でも動いている。 授業中に見せたけどもdocker-on-windowsでも動いた。
yoheikakiuchi/robot_assembler
$ aptitude search libglvnd
i A libglvnd-core-dev - Vendor neutral GL dispatch library -- core development file
i A libglvnd-dev - Vendor neutral GL dispatch library -- development files
i A libglvnd0 - Vendor neutral GL dispatch library
nvidia/opengl:1.0-glvnd-runtime-ubuntu18.04
$ aptitude search libglvnd
p libglvnd-core-dev - Vendor neutral GL dispatch library -- core development file
p libglvnd-core-dev:i386 - Vendor neutral GL dispatch library -- core development file
p libglvnd-dev - Vendor neutral GL dispatch library -- development files
p libglvnd-dev:i386 - Vendor neutral GL dispatch library -- development files
i libglvnd0 - Vendor neutral GL dispatch library
i libglvnd0:i386 - Vendor neutral GL dispatch library
nvidia/opengl:1.0-glvnd-runtime-ubuntu18.04については、 これを見た限りでは、コンパイルしていなくてデフォルトのdebを入れているだけ。 https://gitlab.com/nvidia/container-images/opengl/-/blob/ubuntu18.04/base/Dockerfile https://gitlab.com/nvidia/container-images/opengl/-/blob/ubuntu18.04/glvnd/runtime/Dockerfile
下の違いポイント入れていってみたらどうなるだろうか
違いポイント1 (i386のアーキテクチャが鍵?)
dpkg --add-architecture i386
して
apt-get update
apt-get install -y --no-install-recommends \
libxau6 libxau6:i386 \
libxdmcp6 libxdmcp6:i386 \
libxcb1 libxcb1:i386 \
libxext6 libxext6:i386 \
libx11-6 libx11-6:i386
apt-get install -y --no-install-recommends \
pkg-config \
libglvnd-dev libglvnd-dev:i386 \
libgl1-mesa-dev libgl1-mesa-dev:i386 \
libegl1-mesa-dev libegl1-mesa-dev:i386 \
libgles2-mesa-dev libgles2-mesa-dev:i386
違いポイント2(そもそも/usr/local/nvidiaが無いので意味ない気がする)
echo "/usr/local/nvidia/lib" >> /etc/ld.so.conf.d/nvidia.conf && \
echo "/usr/local/nvidia/lib64" >> /etc/ld.so.conf.d/nvidia.conf
違いポイント3(そもそも/usr/local/nvidiaが無いので意味ない気がする)
ENV LD_LIBRARY_PATH /usr/lib/x86_64-linux-gnu:/usr/lib/i386-linux-gnu${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}:/usr/local/nvidia/lib:/usr/local/nvidia/lib64
3つの違いポイントを試しても状況は変わらずでした. その代わり,glxinfoは動かず,sudo glxinfoが動くことを確認しました.
xのユーザーコントロールの問題か、それはあり得るね。 ホストにleusユーザーいないんだよね?
ホストのユーザーのidは1000以外かな? id -u
で調べられる。
セキュリティの問題ありそうだから番号は言わなくていいけど。
あと、id=1000のユーザーは存在しそうかな?
docker立ち上げるとrootユーザーになって、マウントしたディレクトリに 書かれるファイルのオーナーがrootになるのが嫌で、Docker内に id=1000のleusユーザーを作って それでdockerに入るようにしたのだけど、現在のidが1000でなければ、知らないユーザーからのアクセスになりそう。
ということで、leus作る方便をやめて、ローカルユーザーのid/groupでdockerに入ることにしました。
ホストのuid/gidは1000だったので,不思議に思っています. ほとんどのubuntuマシンのホストユーザーのuidは1000なのでセキュリティ的には公言しても問題ないかな,と思っています.
変更後git cloneし直して,ビルドもし直して実行したところ,症状は相変わらずでした. 以下のgroups: cannot find name for group ID 1000が気になっています.
future731@future731-MS-7B61:~/JSK/robot_assembler/scripts$ DOCKER_OPTION=-it ./run_docker.sh /bin/bash
non-network local connections being added to access control list
cont_robot_assembler
groups: cannot find name for group ID 1000
I have no name!@future731-MS-7B61:/userdir$ ls
Dockerfile build.sh dump_yaml_to_sexp.py exec_docker.sh run_docker.sh
I have no name!@future731-MS-7B61:/userdir$
ここ修正
- xhost +local:
+ xhost +si:localuser:root
ユーザーでのログインやめる
-u $(id -u ${USER}):$(id -g ${USER}) \
これでsudoと完全に同じになるはずだけどどうかな。
19.10ってXorgのxserverなのかな? アクセスコントロールが強化されてるのだろうか
ここ修正
- xhost +local: + xhost +si:localuser:root
ユーザーでのログインやめる
-u $(id -u ${USER}):$(id -g ${USER}) \
これでsudoと完全に同じになるはずだけどどうかな。
ありがとうございます.この変更で動いています. ユーザーとしてはホスト側ファイル権限がrootになる部分だけが差分なので,chownするようにすれば完全に同じように使えると思っています.
19.10ってXorgのxserverなのかな? アクセスコントロールが強化されてるのだろうか
後で詳しく調べるつもりなのですが,今の所わかっているのは
xhost +
してもuid/gidが1000/1000のleusユーザーからアクセスできないようです
virtualglが悪さをしていたようです. /dev/nvidia-*の所有者がvglusersになっているのが原因でした. virtualglを/opt/VirtualGL/vglserver_configして消したところ,正常に動くようになりました.
ubuntu 19.10がはいった,GTX1060搭載のマシンにおいて,nvidia dockerのopengl周りのエラーを確認しました.
まず,
をしたあとに,
./run_docker.sh
としたところ,test_raというイメージ名がないと言われてうまく行きませんでした.これを以下のように書き直して実行したところ,コンテナは立ち上がりました.その後,プログラムを走らせたところ,irtviewerがうまく立ち上がらないという現象が起こりました.libGL.soの相性の問題だと思っているのですが,どのようなコマンドで調べるとよさそうでしょうか. 以下がログになります.irtviewerは出ていなくて,ボタン群のウィンドウは表示されている状態です.