Моё решение для автоматического обновления пути к устройству проброшенного RTL SDR USB. Приложение, работающее в контейнере, в моём случае rtl_433, не может читать символическую ссылку на USB-устройство. Ему нужно, чтобы его распознавал libusb, и я не смог добиться этого никаким другим способом, кроме как передавать полный путь к устройству, например: Код: /dev/bus/usb/001/001. Добавьте устройство в графический интерфейс Proxmox, указав полный путь к нему. (Возможно, это не нужно?) #Создайте правило UDEV по адресу: Код: /etc/udev/rules.d/20.rtlsdr.rules Код: SUBSYSTEM=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", MODE="0666", SYMLINK+="rtl_sdr", RUN="/usr/share/lxc/lxc-<CT_ID>-read-link.sh" #Создайте bash-скрипт по адресу: Код: /usr/share/lxc/lxc-<CT_ID>-read-link.sh Код: #!/bin/bash
pct set <CT_ID> --dev0 path=$(readlink -f /dev/rtl_sdr)
exit 0 #Сделайте скрипт исполняемым: Код: chmod +x /usr/share/lxc/lxc-<CT_ID>-read-link.sh #Добавьте строку в /etc/pve/lxc/<CT_ID>.conf Код: lxc.hook.pre-start: "udevadm control --reload-rules && udevadm trigger" Эта строка обновляет правила udev перед запуском контейнера. Я не смог заставить это работать, просто вставив Код: "bash -c "pct set 503 --dev0 path=$(readlink -f /dev/rtl_sdr)"" или даже команду pct в bash-скрипт. Только метод, при котором правило udev запускает скрипт, обновляющий путь к устройству для контейнера, сработал. Чтобы контейнер распознавал устройство при загрузке хоста, мне пришлось установить строку, обновляющую правила udev, в файле конфигурации lxc. Есть какие-нибудь комментарии или улучшения? Я могу отсоединить и снова подключить устройство, даже позволить его вставлять при загрузке хоста, и контейнер запускается нормально. Но если я удаляю и снова вставляю устройство, контейнер должен быть перезапущен.
pct set <CT_ID> --dev0 path=$(readlink -f /dev/rtl_sdr)
exit 0 #Сделайте скрипт исполняемым: Код: chmod +x /usr/share/lxc/lxc-<CT_ID>-read-link.sh #Добавьте строку в /etc/pve/lxc/<CT_ID>.conf Код: lxc.hook.pre-start: "udevadm control --reload-rules && udevadm trigger" Эта строка обновляет правила udev перед запуском контейнера. Я не смог заставить это работать, просто вставив Код: "bash -c "pct set 503 --dev0 path=$(readlink -f /dev/rtl_sdr)"" или даже команду pct в bash-скрипт. Только метод, при котором правило udev запускает скрипт, обновляющий путь к устройству для контейнера, сработал. Чтобы контейнер распознавал устройство при загрузке хоста, мне пришлось установить строку, обновляющую правила udev, в файле конфигурации lxc. Есть какие-нибудь комментарии или улучшения? Я могу отсоединить и снова подключить устройство, даже позволить его вставлять при загрузке хоста, и контейнер запускается нормально. Но если я удаляю и снова вставляю устройство, контейнер должен быть перезапущен.
