Вопрос или проблема
В Ubuntu 20.04 LTS я компилировал ядро 5.11.11 после добавления нового системного вызова. Я также получаю это с более поздними версиями Ubuntu и ядрами. Во время выполнения команды make произошла следующая ошибка:
make[1]: *** Нет правила для создания цели 'debian/canonical-certs.pem', необходимой для 'certs/x509_certificate_list'. Остановка.
make: *** [Makefile:1809: certs] Ошибка 2
Если кто-то может помочь, я буду очень признателен, спасибо.
В вашем файле конфигурации ядра вы найдете следующую строку:
CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
Измените ее на:
CONFIG_SYSTEM_TRUSTED_KEYS=""
В зависимости от вашей структуры исходников вы можете сделать это через командную строку. Примеры:
scripts/config --disable SYSTEM_TRUSTED_KEYS
или
scripts/config --set-str SYSTEM_TRUSTED_KEYS ""
ИЗМЕНЕНИЕ: В стандартную конфигурацию ядра Canonical добавлен другой ключ с момента публикации этого ответа:
CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"
Таким образом, с ним также нужно разобраться, чтобы сборка пользовательского ядра завершилась:
scripts/config --disable SYSTEM_REVOCATION_KEYS
Смотрите также заметки по компиляции ядра на основе git.
Что ж, я только что сгенерировал самоподписанный x509 сертификат с общим названием, равным моему имени, поместил ключ и сертификат в один файл и указал обе строки на этот файл. Компилируется идеально, и безопасность должна быть сохранена. Я предполагаю, что он используется для подписи бинарного ядра, и вы можете добавить ваш сертификат в белый список при безопасной загрузке, чтобы позволить вашему ядру загружаться.
openssl req -x509 -newkey rsa:4096 -keyout certs/mycert.pem -out certs/mycert.pem -nodes -days 3650
CONFIG_MODULE_SIG_KEY="certs/mycert.pem"
CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_SYSTEM_TRUSTED_KEYS="certs/mycert.pem"
CONFIG_SYSTEM_EXTRA_CERTIFICATE=y
CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE=4096
CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_HASH_LIST=""
Я просто выполнил следующие две команды после запуска “make menuconfig”
scripts/config --disable SYSTEM_TRUSTED_KEYS
scripts/config --disable SYSTEM_REVOCATION_KEYS
если во время выполнения команды “make” возникает какой-либо вопрос, связанный с сертификатом, просто нажмите Enter. Вот и все.
Вот решение, которое не требует отключения безопасности 🙂
Из вашего каталога linux (например, /opt/linux-5.13.4):
- mkdir debian результат -> /opt/linux-5.13.4/debian
- cd certs результат -> /opt/linux-5.13.4/certs
- cp canonical.pem ../debian* результат -> /opt/linux-5.13.4/debian/canonical*.pem
- cd .. результат -> /opt/linux-5.13.4
- make
Ответ или решение
Компиляция ядра 5.11.11 и более поздних версий в Ubuntu
При компиляции ядра Linux, особенно версии 5.11.11 и более поздних, на системе Ubuntu 20.04 LTS и других версиях могут возникать проблемные ситуации. Одной из таких проблем является ошибка, указывающая на отсутствие правила для создания целевого файла debian/canonical-certs.pem
, необходимого для сборки сертификатов, как показано в следующем сообщении об ошибке:
make[1]: *** No rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_certificate_list'. Stop.
make: *** [Makefile:1809: certs] Error 2
Чтобы успешно завершить процесс компиляции, необходимо внести изменения в конфигурацию ядра. В этом документе мы рассмотрим шаги, которые помогут вам устранить данную ошибку.
Шаги для решения проблемы
-
Изменение конфигурации ядра
Вам нужно изменить конфигурацию, указав, что система не должна использовать отсутствующий файл сертификата. Найдите следующую строку в вашем конфигурационном файле ядра:
CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
Измените её на:
CONFIG_SYSTEM_TRUSTED_KEYS=""
Это отключит использование доверенных ключей. Альтернативно, вы можете сделать это с помощью командной строки:
scripts/config --disable SYSTEM_TRUSTED_KEYS
Также необходимо отключить другую конфигурацию, которая может вызвать проблемы:
scripts/config --disable SYSTEM_REVOCATION_KEYS
-
Использование самоподписанного сертификата
Если вы хотите сохранить всю систему безопасности, можно создать самоподписанный X.509 сертификат и использовать его для подписывания ядра. Для этого выполните команду:
openssl req -x509 -newkey rsa:4096 -keyout certs/mycert.pem -out certs/mycert.pem -nodes -days 3650
После этого измените конфигурационные параметры в вашем
.config
файле на:CONFIG_MODULE_SIG_KEY="certs/mycert.pem" CONFIG_SYSTEM_TRUSTED_KEYRING=y CONFIG_SYSTEM_TRUSTED_KEYS="certs/mycert.pem" CONFIG_SYSTEM_EXTRA_CERTIFICATE=y CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE=4096 CONFIG_SECONDARY_TRUSTED_KEYRING=y CONFIG_SYSTEM_BLACKLIST_KEYRING=y CONFIG_SYSTEM_BLACKLIST_HASH_LIST=""
-
Не отключая безопасность
Если вы хотите подход, который не требует отключения системных защит, выполните следующие шаги:
-
Создайте директорию
debian
:mkdir debian
-
Перейдите в директорию
certs
:cd certs
-
Скопируйте файл сертификата
canonical.pem
в директориюdebian
:cp canonical.pem ../debian/
-
Вернитесь назад в корневую директорию исходного кода ядра:
cd ..
-
Запустите компиляцию:
make
-
Заключение
Следуя этим инструкциям, вы сможете устранить проблемы, связанные с отсутствующими сертификатами, и успешно скомпилировать ядро Linux версии 5.11.11 и более поздние версии для Ubuntu. Будьте внимательны при работе с системными сертификатами и конфигурацией безопасности, чтобы обеспечить надёжность и безопасность вашей системы.