Не инициализируется окружение wine на ядрах с запретом создания 16-битных сегментов (ltd16)

Материал из Etersoft wiki
Перейти к навигацииПерейти к поиску

В некоторых 64-битных ядрах выключена по-умолчанию поддержка 16-битных сегментов.

Это приводит к ошибке в работе 32-битных приложений.

Так выглядит ошибка при инициализации окружения wine:

 modify_ldt: Недопустимый аргумент
 modify_ldt: Недопустимый аргумент
 modify_ldt: Недопустимый аргумент
 modify_ldt: Недопустимый аргумент
 modify_ldt: Недопустимый аргумент


Это касается ядер в диапазоне 3.8.* - 3.16 .

В 3.16 поддержка была снова включена по-умолчанию.

Решение

1) Установить 32-битный дистрибутив

2) Обновить ядро до 3.16

3) Решить данную проблему можно с помощью команды

 #echo 1 > /proc/sys/abi/ldt16
 (внимание необходимы права администратора ) 

4) Так же можно передать этот параметр ядру через Sysctl

Пример файла /etc/sysctl.d/wine-etersoft.conf

  abi.ldt16 = 1

Ubuntu

C Ubuntu работают первые 2 варианта.

А вот с 3-м всё сложнее, потому что ldt16 бэкпортировали только в ядра начиная с 3.14.6

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1328965/comments/5

Все ядра меньше 3.14.6 не имеют файла /proc/sys/abi/ldt16 как такового.

SLES

SLES 12 не имеет поддержки ldt16 в ядре?!