Как использовать lsusb в контейнере Docker для получения описаний USB-устройств?

Прежде всего, я бы предложил определить, в какую цель вы загружаетесь:

systemctl list-units --type target

systemctl get-default

и вы можете поэкспериментировать, в какую цель вы хотели бы загрузиться.

Затем я предпочитаю отключать службы, которые мне не нужны на этапе загрузки, и запускать их через @reboot в cron .

Чтобы привести простой пример из виртуальной машины:

# systemctl status iptables | grep disabled
   Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)

# systemctl status ip6tables | grep disabled
   Loaded: loaded (/usr/lib/systemd/system/ip6tables.service; disabled; vendor preset: disabled)
# crontab -l
@reboot systemctl restart iptables
@reboot systemctl restart ip6tables

Но будьте осторожны, так как systemd поддерживает зависимости служб, и если вы отключите основную службу, ваша система может загружаться неправильно.

0
24.11.2020, 18:20
1 ответ

Иметь/usr/share/usb.ids(и/или [/usr]/lib/udev/hwdb.bin, если в вашем дистрибутиве он )присутствует в контейнере.

Если в остальном ваш контейнер работает хорошо, похоже, вам нужны эти файлы только для lsusb. Хотя добавление пакета udevдля включения в процесс сборки контейнера возможно, в данном случае это может быть излишним.

Файл hwdb.binсоздается динамически командой systemd-hwdb update, получая информацию из файлов /lib/udev/hwdb.d/*.hwdbи /etc/udev/hwdb.d/*.hwdb. Чтобы сделать контейнер как можно более легким, вы можете создать hwdb.binвне контейнера (или использовать файл с вашего узла сборки контейнеров )и просто внедрить конечный продукт hwdb.binв фактический контейнер.

Я запустил lsusbпод strace, чтобы узнать все места, где он пытается найти файл hwdb.binиз :

.
openat(AT_FDCWD, "/etc/systemd/hwdb/hwdb.bin", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/udev/hwdb.bin", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/systemd/hwdb/hwdb.bin", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/systemd/hwdb/hwdb.bin", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/udev/hwdb.bin", O_RDONLY|O_CLOEXEC) = 3

Внутри контейнера вы можете поместить файл hwdb.binв любое из этих мест, которое имеет для вас наибольшее значение.

1
18.03.2021, 22:47

Теги

Похожие вопросы