Это связано с тем, что прошивка Lenovo не поддерживает EFI_VARIABLE_APPEND_WRITE. Один из разработчиков прошивки уже переписал MokManager.efi для работы на затронутых машинах Lenovo, хотя неясно, как долго это будет объединено и выведено вниз по течению от Ubuntu. Вы можете следить за выпуском журнала отслеживания github gimub here.
Если вы не можете ждать (виновным в качестве обвинения), вы можете скомпилировать прокладку и протестировать ее самостоятельно.
Если у вас нет git
, gnu-efi
, libnss3-tools
pesign
и вам необходимо установить их первую (подробнее о настройке среды разработки EFI можно найти here, я использую довольно новую установку Ubuntu 16,04, но вполне возможно, что я установил требуются другие библиотеки/инструменты и забыл о них - просто искать ошибки при компиляции и установки недостающие пакеты как neccesary):
sudo apt-get install git gnu-efi libnss3-tools pesign
Далее клонировать ветвь git с патчем:
cd /src
git clone -b fix-lenovo-write https://github.com/lcp/shim.git
cd shim
Далее вам необходимо изменить Makefile (подкладок разработчики не используют Ubuntu)
gedit Makefile
Внести следующие изменения (кредит на эту post):
-OBJCOPY_GTE224 = $(shell expr `$(OBJCOPY) --version |grep ^"GNU objcopy" | sed 's/^.version //g' | cut -f1-2 -d.` \>= 2.24)
+#OBJCOPY_GTE224 = $(shell expr `$(OBJCOPY) --version |grep ^"GNU objcopy" | sed 's/^.version //g' | cut -f1-2 -d.` \>= 2.24)
+OBJCOPY_GTE224 = 1
-LIB_PATH = /usr/lib64
+LIB_PATH = /usr/lib
-EFI_PATH := /usr/lib64/gnuefi
+EFI_PATH := /usr/lib
Следующая Вы» Вам нужно будет прокомментировать неиспользованную переменную в прокладке.с:
gedit shim.c
сделать следующие изменения в строке 1118:
@@ -1118,7 +1118,7 @@ static EFI_STATUS handle_image (void *data, unsigned int datasize,
EFI_STATUS efi_status;
char *buffer;
int i;
- unsigned int size;
+ //unsigned int size;
EFI_IMAGE_SECTION_HEADER *Section;
char *base, *end;
PE_COFF_LOADER_IMAGE_CONTEXT context;
Compile прокладка:
make
Выключить безопасную загрузку временно:
sudo mokutil --disable-validation
Установите пароль , перезагрузитесь и следуйте инструкциям (пароль сложный, он просит вас ввести определенные символы из пароля, а не всего).
резервного копирования MokManager.efi и дважды проверьте, что резервное копирование:
sudo mv /boot/efi/EFI/ubuntu/MokManager.efi /boot/efi/EFI/ubuntu/MokManager.efi.bak
sudo ls /boot/efi/EFI/ubuntu/
Переместите исправленную версию MokManager в раздел EFI.
sudo mv ./MokManager.efi.signed /boot/efi/EFI/ubuntu/MokManager.efi
Записаться ключ (изменять по мере необходимости в зависимости от того, где вы ключ и то, что он называется):
sudo mokutil --import MOK.der
Установить пароль, перезагрузка и следуйте инструкциям, чтобы зарегистрировать его Мок. На машинах Lenovo это должно получиться.
Revert к оригинальной версии MokManager и renable безопасной загрузки:
sudo mv /boot/efi/EFI/ubuntu/MokManager.efi ./MokManager.efi.signed
sudo mv /boot/efi/EFI/ubuntu/MokManager.efi.bak /boot/efi/EFI/ubuntu/MokManager.efi
sudo mokutil --enable-validation
Установить пароль, перезагрузка, следуйте инструкциям.
Подпишите свои модули, загрузите их с modprobe и наслаждайтесь!
Примечание: надеюсь, что это будет официально исправлено в большинстве репозиториев дистрибутива в ближайшее время. Этот ответ является вариантом для исключительно нетерпеливых людей, которым удобно создавать патч из источника и тестировать его. Он работал на моей машине (Lenovo P50), но это не значит, что она будет работать для всех. Если вам неудобно создавать приложения efi из источника, просто подождите, пока исправленная версия попадет в репозитории (в этот момент я обновлю этот ответ).
Я подал ошибку против 'mokutil' здесь: https://bugs.launchpad.net/ubuntu/+source/mokutil/+bug/1600452 и против' shim' здесь https://github.com/rhinstaller/ shim/issues/55 – adempewolff
Это уже исправлено разработчиком прокладки (я тестировал его, и он работает). Я обновил свой ответ соответственно. – adempewolff