{{ 'fb_in_app_browser_popup.desc' | translate }} {{ 'fb_in_app_browser_popup.copy_link' | translate }}
{{ 'in_app_browser_popup.desc' | translate }}
{{ childProduct.title_translations | translateModel }}
{{ getChildVariationShorthand(childProduct.child_variation) }}
{{ getSelectedItemDetail(selectedChildProduct, item).childProductName }} x {{ selectedChildProduct.quantity || 1 }}
{{ getSelectedItemDetail(selectedChildProduct, item).childVariationName }}
前言
在我們上一篇文章中,我們提到了怎麼安裝LIMO的ROS2容器。其中有一些命令,我們照著打安裝過去,但卻不知道代表什麼意思。本篇我們將針對這些小部分進行補充,並介紹"為什麼"與"之後可以怎麼使用"。
本篇內容如不閱讀並不影響後續課程進行,有興趣者再配飯觀賞即可!
建立容器時的指令
docker run --network=host --cap-add=SYS_PTRACE --cap-add=SYS_RAWIO --security-opt=seccomp:unconfined --security-opt=apparmor:unconfined --volume=/tmp/.X11-unix:/tmp/.X11-unix --runtime=nvidia --device /dev/ttyTHS1:/dev/ttyTHS1 --device /dev/ttyUSB0:/dev/ydlidar --device /dev/bus/usb/:/dev/bus/usb -v $(pwd)/:workspace --env="DISPLAY=$DISPLAY" --name limo-foxy-dev -w /workspace -id ros:foxy
我們仍未知道這行命令在說什麼。
……所以今天我們就來一步一步來拆解,說明其中這些參數的意義。
--network=host
這行指出容器的網路使用host(也就是母體系統)的網路。通過加上這行,容器才有上網能力,也才能做到我們前面在容器內使用apt等方式安裝軟體包的行為--同時也保證了ROS2可以對區網通訊。
--cap-add=SYS_PTRACE --cap-add=SYS_RAWIO
增加容器可以存取的權限,我們知道sudo有非常大的權力可以控制各種命令和存取。capadd則是將這些權力拆散,讓容器碰到指定的某些部份時可以不用sudo操作。
其中SYS_PTRACE讓容器可以追蹤進程,RAWIO則使容器可以存取諸如/devport、/dev/mem、/dev/kmem等等裝置。
順帶一提,sudo(正確來說應該是root)的權利在這定義下被拆分為29項,這裡使用的只是冰山一角而已。
--security-opt=seccomp:unconfined --security-opt=apparmor:unconfined
對容器做安全性的設置,常看見的就是AppArmor(Application Armor)和seccomp(Secure computing mode),這兩者在此處都預設不設限制。
--volume=/tmp/.X11-unix:/tmp/.X11-unix
可以簡單的想像成和原生系統共用資料夾,可以重新指定在容器中對應的路徑。
--runtime=nvidia
由於我們是在NV上進行,並且「有可能」使用到NV的GPU,因此需要加上這個參數讓容器載入NV的設置。
--device /dev/ttyTHS1:/dev/ttyTHS1 --device /dev/ttyUSB0:/dev/ydlidar --device /dev/bus/usb/:/dev/bus/usb
將原生系統的硬體橋接到容器中,同樣可以在容器內為他改名。
--env="DISPLAY=$DISPLAY"
這很關鍵(同時也是松靈原廠沒加的參數),他讓容器可以直接使用原生系統的螢幕輸出,這樣後續我們才能利用這個容器執行rviz……
執行時,原生系統也要打上相關的指令開啟權限給Docker:
xhost +local:docker
我們也可以將這行新增到bashrc裡面自動開啟權限。
--name limo-foxy-dev -w /workspace
為容器命名,以及指定進入容器時的工作目錄