Прежде всего, я бы предложил определить, в какую цель вы загружаетесь:
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 поддерживает зависимости служб, и если вы отключите основную службу, ваша система может загружаться неправильно.
Иметь/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
в любое из этих мест, которое имеет для вас наибольшее значение.