使用LXC建立USB以及X forward環境
因為修課需要一些debian系的工具,不過我不想讓debian系的和Arch Linux混在一起,所以LXC看起來是一個不錯的解。環境
- OS: Arch Linux (4.15.7-1-ARCH)
- LXC
- ubuntu on LXC
步驟
LXC準備
安裝 LXC
1 | $ sudo pacman -Sy lxc arch- install -scripts debootstap |
建立 Host Network (NAT bridge) (Arch Wiki寫得很好看Arch Wiki)
建立/etc/default/lxc-net(詳情見Arch Wiki)1 2 3 4 5 6 7 | USE_LXC_BRIDGE="true" LXC_BRIDGE="lxcbr0" LXC_ADDR="10.0.3.1" LXC_NETMASK="255.255.255.0" LXC_NETWORK="10.0.3.0/24" LXC_DHCP_RANGE="10.0.3.2,10.0.3.254" LXC_DHCP_MAX="253" |
1 2 3 4 | lxc.net.0.type = veth lxc.net.0.link = lxcbr0 lxc.net.0.flags = up lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx |
1 | $ sudo pacman -Sy dnsmasq |
1 2 | sudo systemctl start lxc-net sudo systemctl enable lxc-net |
建立container (ubuntu)
建previleged的container1 | $ sudo lxc-create -n UbuntuBuild -t /usr/share/lxc/templates/lxc-ubuntu [ -P lxc-location] |
1 2 3 4 5 6 7 8 9 | ## default values ... ... ## network lxc.net.0.type = veth lxc.net.0.link = br0 lxc.net.0.flags = up lxc.net.0.name = eth0 lxc.net.0.hwaddr = .... ## 自行修改mac address |
LXC Xorg
修改container的config(同上位置)1 2 3 4 5 6 7 8 9 10 11 12 13 | ## default values ... ... # network ... ... ## for xorg lxc.mount.entry = /dev/dri dev/dri none bind,optional,create=dir lxc.mount.entry = /dev/snd dev/snd none bind,optional,create=dir lxc.mount.entry = /tmp/.X11-unix tmp/.X11-unix none bind,optional,create=dir,ro lxc.mount.entry = /dev/video0 dev/video0 none bind,optional,create=file lxc.mount.entry = tmpfs tmp tmpfs defaults |
/dev/dri為direct rendering manager(DRM)的device file,
/dev/snd為音效的device file
/dev/video0為video device file
ubuntu on LXC中安裝X相關套件
1 | $ sudo lxc-console -n UbuntuBuild [ -P /path ] |
# sudo apt-get install xauth x11-apps
使用ssh -X進入LXC1 | # /usr/bin/xclock |
其他app可能會需要裝dbus
1 | # sudo apt-get install dbus dbus-x11 |
LXC USB
修改container的config(同上位置)1 2 3 4 5 6 7 | ## usb lxc.cgroup.devices.allow = c 189:* rwm lxc.mount.entry = /dev/bus/usb/001 dev/bus/usb/001 none bind,optional,create=dir lxc.mount.entry = /dev/bus/usb/002 dev/bus/usb/002 none bind,optional,create=dir lxc.mount.entry = /dev/bus/usb/003 dev/bus/usb/003 none bind,optional,create=dir lxc.mount.entry = /dev/bus/usb/004 dev/bus/usb/004 none bind,optional,create=dir |
lxc.cgroup.devices.allow = c 189:* rwm
這行的意思,首先1 2 3 4 5 | $ ls -al /dev/bus/usb/001 drwxr-xr-x 2 root root 80 Mar 8 23:06 . drwxr-xr-x 6 root root 120 Mar 8 23:06 .. crw-rw-r-- 1 root root 189, 0 Mar 8 23:06 001 crw-rw-r-- 1 root root 189, 1 Mar 8 23:06 002 |
逗號後為minor number,有於usb裝置多,所以在lxc.cgroup.devices.allow中用wildcard取代。底下部份就是把usb的device folder mount進LXC中。
LXC Serial Port設定
由於修課需要用到serial port,但是Serial Port的tty只有插上後才會出現,這對開機就需mount的lxc來說偏麻煩。這時有一個好用的指令出現了。lxc-device
在使用lxc-device時仍須注意cgroup是否有允許該裝置。例如Serial Port常用(USB serial converters)的major number為188。所以需要在config中新增
1 | lxc.cgroup.devices.allow = c 188:* rwm |
/dev/ttyUSB1。這時我們需要透過lxc-device把其接入中。
1 | $ sudo lxc-device -n CONTAINER_NAME [-P path] add /dev/ttyUSB1 |