Using Ubuntu Xenial, I pass USB DVB tuners through to MythTv running in an unprivileged LXD container. Not exactly the same but may provide some pointers

First you need to change ownership of adapters eg. “sudo chown -R root:video /dev/dvb”

then add <user> to video

===========================================================================

Next issue was how to grant unprivileged container access to host files (eg storage for recorded content), read this

https://gist.github.com/bloodearnest/ebf044476e70c4baee59c5000a10f4c8

For me the resulting profile looks like this

config:

  raw.lxc: |
    lxc.id_map = u 400000 1000 1
    lxc.id_map = g 400000 1000 1
  user.user-data: |
    #cloud-config
    users:
      - name: <your user id>
        primary-group: 400000
        uid: 400000  # only works in xenial
        groups: sudo
        shell: /bin/bash
        sudo: ['ALL=(ALL) NOPASSWD:ALL']
description: ""
devices: {}

===========================================================================

Then the container setup / definition looks like this (note the cgroup definitions, plus I copied the user and group mappings across from the above profile because the profile sometimes seemed to be unapplied - really needed for initial container definition though). I also tend to limit CPU and memory access of VMs

### This is a yaml representation of the configuration.
### Any line starting with a '# will be ignored.
###
### A sample configuration looks like:
### name: container1
### profiles:
### - default
### config:
###   volatile.eth0.hwaddr: 00:16:3e:e9:f8:7f
### devices:
###   homedir:
###     path: /extra
###     source: /home/user
###     type: disk
### ephemeral: false
###
### Note that the name is shown but cannot be changed

name: xenial-mythserver
profiles:
- <your base profile for access to host id resources>
- default
config:
  boot.autostart: "1"
  limits.cpu: 1,2,3
  limits.memory: 6GB
  raw.lxc: |
    lxc.cgroup.devices.allow= c 212:* rwm
    lxc.cgroup.devices.allow= c 189:* rwm
    lxc.cgroup.devices.allow= c 13:* rwm
    lxc.id_map= u 400000 1000 1
    lxc.id_map= g 400000 1000 1
volatile.base_image: f452cda3bccb2903e56d53e402b9d35334b4276783d098a879be5d74b04e62e2
  volatile.eth0.hwaddr: xx:xx:xx:xx:xx:xx
volatile.last_state.idmap: '[{"Isuid":true,"Isgid":false,"Hostid":165536,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":165536,"Nsid":0,"Maprange":65536}]'
devices:
  dvb0_demux:
    gid: "44"
    major: "212"
    minor: "0"
    path: /dev/dvb/adapter0/demux0
    type: unix-char
  dvb0_dvr:
    gid: "44"
    major: "212"
    minor: "1"
    path: /dev/dvb/adapter0/dvr0
    type: unix-char
  dvb0_frontend:
    gid: "44"
    major: "212"
    minor: "3"
    path: /dev/dvb/adapter0/frontend0
    type: unix-char
  dvb0_net:
    gid: "44"
    major: "212"
    minor: "2"
    path: /dev/dvb/adapter0/net0
    type: unix-char
  dvb1_demux:
    gid: "44"
    major: "212"
    minor: "4"
    path: /dev/dvb/adapter1/demux0
    type: unix-char
  dvb1_dvr:
    gid: "44"
    major: "212"
    minor: "5"
    path: /dev/dvb/adapter1/dvr0
    type: unix-char
  dvb1_frontend:
    gid: "44"
    major: "212"
    minor: "7"
    path: /dev/dvb/adapter1/frontend0
    type: unix-char
  dvb1_net:
    gid: "44"
    major: "212"
    minor: "6"
    path: /dev/dvb/adapter1/net0
    type: unix-char
  dvb2_demux:
    gid: "44"
    major: "212"
    minor: "8"
    path: /dev/dvb/adapter2/demux0
    type: unix-char
  dvb2_dvr:
    gid: "44"
    major: "212"
    minor: "9"
    path: /dev/dvb/adapter2/dvr0
    type: unix-char
  dvb2_frontend:
    gid: "44"
    major: "212"
    minor: "11"
    path: /dev/dvb/adapter2/frontend0
    type: unix-char
  dvb2_net:
    gid: "44"
    major: "212"
    minor: "10"
    path: /dev/dvb/adapter2/net0
    type: unix-char
  dvb3_demux:
    gid: "44"
    major: "212"
    minor: "12"
    path: /dev/dvb/adapter3/demux0
    type: unix-char
  dvb3_dvr:
    gid: "44"
    major: "212"
    minor: "13"
    path: /dev/dvb/adapter3/dvr0
    type: unix-char
  dvb3_frontend:
    gid: "44"
    major: "212"
    minor: "15"
    path: /dev/dvb/adapter3/frontend0
    type: unix-char
  dvb3_net:
    gid: "44"
    major: "212"
    minor: "14"
    path: /dev/dvb/adapter3/net0
    type: unix-char
  dvd_data:
    path: /mnt/xxx
    source: /mnt/xxxx
    type: disk
  eth0:
    name: eth0
    nictype: bridged
    parent: <your bridge name>
    type: nic
  music_data:
    path: /mnt/xxx
    source: /mnt/xxx
    type: disk
  root:
    path: /
    type: disk
  video_data:
    path: /mnt/xxxx
    source: /mnt/xxxx
    type: disk
ephemeral: false

===========================================================================

Now you can start the container and configure the network, recorder and whatever else you want to run


Rob



On 03/01/17 08:38, John Gubert wrote:
Hello everyone,

I am setting up my next container (Ubuntu Xenial) on my host (Ubuntu Xenial), this one is supposed to stream TV from a dvb-s2 card to my network.

I intend to use TvHeadend software for this purpose, which I was able to install inside the container and I tried to pass through the /dev components of my dvb card:

lxc config device add tv bridge0 unix-char path=/dev/ddbridge/card0

lxc config device add tv demux0 unix-char path=/dev/dvb/adapter0/demux0
lxc config device add tv dvr0 unix-char path=/dev/dvb/adapter0/dvr0
lxc config device add tv frontend0 unix-char path=/dev/dvb/adapter0/frontend0
lxc config device add tv net0 unix-char path=/dev/dvb/adapter0/net0

lxc config device add tv demux1 unix-char path=/dev/dvb/adapter1/demux0
lxc config device add tv dvr1 unix-char path=/dev/dvb/adapter1/dvr0
lxc config device add tv frontend1 unix-char path=/dev/dvb/adapter1/frontend0
lxc config device add tv net1 unix-char path=/dev/dvb/adapter1/net0

As far as I can see, all those devices are available inside the host, yet tvheadend does not find them.

The former setup was a virtual machine based on kvm/qemu with pci passthrough. I was hoping to increase responsiveness and decrease load with a switch to LXD.

Does one of you use a similar setup and know about some caveats I need to look into? Or how to check inside the container, whether it is a tvheadend or a container problem?

kind regards,

John
_______________________________________________
lxc-users mailing list
lxc-users@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-users

_______________________________________________
lxc-users mailing list
lxc-users@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-users

Reply via email to