В попередній статті я частково вже зачепив тему binfmts.
Що це за приблуда, що це за звір такий?
update-binfmts — maintain registry of executable binary formats
Тобто в Debian (та й інших дистрибутивах Linux) ми можемо запускати бінарні файли на виконання, навіть якщо це не ELF. Просто для цього треба навчити Linux їх запускати.
Для початку можна подивитися на вже встановлені зв'язки. Виглядатиме це приблизно так:
$ sudo update-binfmts --display
cli (enabled):
package = mono-runtime
type = magic
offset = 0
magic = MZ
mask =
interpreter = /usr/bin/cli
detector = /usr/lib/cli/binfmt-detector-cli
jar (enabled):
package = oracle-java16
type = magic
offset = 0
magic = PK\x03\x04
mask =
interpreter = /usr/lib/jvm/java-16-oracle/lib/jexec
detector =
python2.7 (enabled):
package = python2.7
type = magic
offset = 0
magic = \x03\xf3\x0d\x0a
mask =
interpreter = /usr/bin/python2.7
detector =
python3.9 (enabled):
package = python3.9
type = magic
offset = 0
magic = \x61\x0d\x0d\x0a
mask =
interpreter = /usr/bin/python3.9
detector =
Як бачимо то тут встановлено зв'язки для бінарних (скопмільованих) форматів - cli (exe), jar, python 2.7 та 3.9.
Якщо раптом закортить додати запуск exe (MZ) не через wine то достатньо просто додати наступну конфігурацію:
$ sudo update-binfmts --package wine --install wine /usr/bin/wine --magic 'MZ'
Дивимося:
$ sudo update-binfmts --display
cli (enabled):
package = mono-runtime
type = magic
offset = 0
magic = MZ
mask =
interpreter = /usr/bin/cli
detector = /usr/lib/cli/binfmt-detector-cli
jar (enabled):
package = oracle-java16
type = magic
offset = 0
magic = PK\x03\x04
mask =
interpreter = /usr/lib/jvm/java-16-oracle/lib/jexec
detector =
python2.7 (enabled):
package = python2.7
type = magic
offset = 0
magic = \x03\xf3\x0d\x0a
mask =
interpreter = /usr/bin/python2.7
detector =
python3.9 (enabled):
package = python3.9
type = magic
offset = 0
magic = \x61\x0d\x0d\x0a
mask =
interpreter = /usr/bin/python3.9
detector =
wine (enabled):
package = wine
type = magic
offset = 0
magic = MZ
mask =
interpreter = /usr/bin/wine
detector =
Все, після цього можна "прозоро" запускати exe-файли через wine. Наприклад:
$ chmod +x ./winbox-3.40.exe $ ./winbox-3.40.exe
Якщо ж хочеться встановити коректне відображення кодування CP1251 то можна виконати запуск наступним чином:
$ LANG=ru_RU.cp1251 luit winbox.exe
Видалити конфігурацію binfmts так само легко як і встановити:
$ sudo update-binfmts --package wine --remove wine /usr/bin/wine
Ось така магія ;)
Немає коментарів:
Дописати коментар