Ответы пользователя по тегу LXC
  • LXC: как обновить ссылку на подключённый раздел хоста?

    @cyber-punk
    Думаю, без перезагрузки контейнера, никак.
    Ответ написан
    Комментировать
  • Как пробросить USB-принтер в LXD контейнер?

    @cyber-punk Автор вопроса
    Окончательное решение найдено!
    Получилось пробросить, установить и заставить печатать принтер HP LaserJet 1000 (win-принтер) из контейнера LXD.

    Итак, за эталон берем конфиг от Ubuntu 14.04 на котором все работало и пытаемся сделать тоже самое, но в LXD.

    Для проброса USB-принтер в LXD контейнер (в моем примере я использую принтер HP LaserJet 1000, контейнер предварительно развернут на базе Ubuntu 16.04 и называется "print") необходимо проделать следующее:
    • Выяснить, куда подключен принтер

    Для этого на хосте вводим lsusb
    root@aspire-5520g:~# lsusb
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 001 Device 004: ID 0bda:8197 Realtek Semiconductor Corp. RTL8187B Wireless Adapter
    Bus 001 Device 003: ID 5986:0102 Acer, Inc Crystal Eye Webcam
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 003 Device 002: ID 03f0:0517 Hewlett-Packard LaserJet 1000
    Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

    Принтер подключен на Bus 003 Device 002.
    • Проверить, в контейнере, а при необходимости доустановить, поддержку usbutils

    Переходим в контейнер:
    root@aspire-5520g:~# lxc exec print -- bash
    root@print:~# lsusb
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 001 Device 004: ID 0bda:8197 Realtek Semiconductor Corp. RTL8187B Wireless Adapter
    Bus 001 Device 003: ID 5986:0102 Acer, Inc Crystal Eye Webcam
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 003 Device 002: ID 03f0:0517 Hewlett-Packard LaserJet 1000
    Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

    В моем случае поддержка usbutils и поддержка принтеров HP, через hplip, уже установлена.
    Для тех у кого не установлена, нужно в контейнере выполнить:
    root@print:~# apt install usbutils hplip -y
    • Далее на хосте нужно выполнить непосредственно проброс USB-принтера в LXD контейнер.

    На предыдущих этапах мы выяснили, что принтер подключен на Bus 003 Device 002 на хосте.
    Теперь необходимо выяснить кому принадлежат и с какими правами файлы устройств на хосте, а также цифровой идентификатор группы gid.
    Для этого выполним:
    root@aspire-5520g:~# ll /dev/bus/usb/003
    итого 0
    drwxr-xr-x 2 root root       80 Июл 14 21:00 ./
    drwxr-xr-x 6 root root      120 Июл 14 21:00 ../
    crw-rw-r-- 1 root root 189, 256 Июл 14 21:00 001
    crw-rw-r-- 1 root lp   189, 257 Июл 15 10:56 002

    Интересующая нас информация это файл 002, который представляет из себя char-устройство, владельцем которого является пользователь root и группа lp. Права у этого файла 0664.
    Теперь выясним числовой идентификатор группы lp:
    root@aspire-5520g:~# cat /etc/group | egrep lp
    lp:x:7:

    Числовой идентификатор группы 7.
    Ну и наконец, выполним создание этих устройств в контейнере. Для этого выполним:
    root@aspire-5520g:~# lxc config device add print lj1000 unix-char path=/dev/bus/usb/003/002 mode=0664 gid=7
    Device lj1000 added to print
    root@aspire-5520g:~# lxc config device add print lp0 unix-char path=/dev/usb/lp0 gid=7
    Device lp0 added to print

    (По умолчанию unix-char устройство создается с правами 0660, поэтому задание mode=0660 во второй комманде можно опустить)
    • Устанавливаем принтер:
    root@aspire-5520g:~# lxc exec print -- hp-setup -i
    Действуем согласно инструкции выводимой скриптом установки.
    По завершении, скрипт предложит распечатать пробную страницу, соглашаемся и прыгаем от счастья по поводу успешного проброса принтера в контейнер LXD.
    Ура товарищи!!!
    Для добавления автозапуска контейнера после перезагрузки выполним:
    root@aspire-5520g:~# lxc config set print boot.autostart true
    root@aspire-5520g:~# lxc config set print boot.autostart.delay 5

    Это позволит автоматически через 5 секунд после перезагрузки хоста запустить контейнер.

    Единственная проблема с которой можно столкнуться - это нумерация устройства на шине, после передергивания USB шнура в другой порт или в тот же порт с небольшим промежутком времени, но это уже совсем другая история. В качестве наводки могу сказать, что можно привязать устройство к шине (при условии подключения в тот же порт USB) посредством серийного номера устройства и такой замечательной вещи, как udev.
    Всем спасибо за внимание!!!
    Ответ написан
    Комментировать
  • В чем разница между lxc и lxd?

    @cyber-punk Автор вопроса
    В кратце, LXD - это демон, работающий поверх LXC и предоставляющий REST API для работы с контейнерами LXC. Другими словами, более понятный и унифицированный "язык для общения с LXC контейнерами".
    Конфигурационные файлы, которые применялись для настройки контейнеров, при использовании чистого LXC неприменимы для конфигурирования контейнеров при помощи LXD.
    Конфигурирование контейнеров, которые создаются при помощи LXD, осуществляется при помощи этого самого унифицированного "языка для общения с LXC контейнерами".
    Это первые выводы, которые удалось сделать, после обновления операционки и доустановки LXD.
    Из этого у меня рождается следующий вопрос.
    Ответ написан
    8 комментариев