#docker #linux-device-driver #ubuntu-18.04 #ubuntu-20.04 #usbserial
Вопрос:
Когда я запускаюсь sudo apt install linux-modules-extra-$(uname -r)
в контейнере Docker Ubuntu 20.04
, основанном на работающем одноплатном компьютере Ubuntu 18.04
, я получаю следующие ошибки:
E: Unable to locate package linux-modules-extra-4.15.0-143-generic
E: Couldn't find any package by glob 'linux-modules-extra-4.15.0-143-generic'
E: Couldn't find any package by regex 'linux-modules-extra-4.15.0-143-generic'
Для меня это заставляет задуматься, возможно ли вообще установить linux-modules-extra-4.15.0-143-generic
в Ubuntu 20.04
? Может быть, это совместимо только с Ubuntu 18.04
?
Не мог бы кто-нибудь прояснить это для меня, пожалуйста?
Ответ №1:
В общем случае, если вы создаете модуль ядра, он должен точно соответствовать ядру, запущенному в хост-системе. Если вы используете собственную систему Debian или Ubuntu (без докера), существует система, в которой модули ядра могут быть перестроены или переустановлены при обновлении ядра хоста. См., например, страницу Debian wiki KernelDKMS.
В отличие от этого, изображение Docker, как правило, должно быть переносимым между хостами. Если вы обновите ядро хоста или запустите FROM ubuntu:18.04
образ на хосте Ubuntu 20.04, образ на самом деле не должен знать об этом.
В вашем конкретном случае вы не можете получить необходимые заголовки ядра, потому что они не являются частью дистрибутива Ubuntu 18.04. В данном конкретном случае можно было бы получить заголовки из более поздней версии Ubuntu, но в общем случае это может оказаться невозможным; возможно, потому, что система на самом деле работает под управлением обычного Debian или RHEL, а сборка ядра отличается, возможно, потому, что оператор создал свое собственное ядро.
Поскольку модуль ядра Linux настолько специфичен для хоста, на котором он работает, и поскольку он может обойти все проблемы безопасности, нецелесообразно пытаться установить его в контейнер. Вместо этого сделайте это непосредственно на хосте.