Шукати в цьому блозі

четвер, 28 грудня 2023 р.

binfmts для exe-файлів

В попередній статті я частково вже зачепив тему 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

Ось така магія ;)

Java 21 & Debian (Ubuntu)

Нарешті! Нарешті це сталося!

Oracle почала випускати deb-пакети з Java. Принаймні Java 21 вже можна завантажити як deb-пакет. А далі все стає просто і без зайвих танців з бубном. За потреби, видаляємо залишки openjdk:

sudo apt purge openjdk-17-jre-headless

Також, переда встановленням deb-пакету з Java 21, краще видалити binfmts для попередньої версії (в моєму випадку це openjdk-17):

sudo update-binfmts --display
sudo update-binfmts --package openjdk-17 --remove jar /usr/bin/jexec

Встановлюємо пакет:

sudo dpkg -i jdk-21_linux-x64_bin.deb

Все ;)

понеділок, 18 грудня 2023 р.

Viber 21.0.0.1 на Debian 11.8 (Bullseye)

 Зіткнувся з проблемою при оновленні версії Viber, а саме - припинив запускатися. При запуску в консолі виводить наступне:

$ /opt/viber/Viber
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: wayland, eglfs, minimalegl, minimal, offscreen, vnc, linuxfb, wayland-egl, xcb.
З'ясувалося, що лікується доволі просто, хоч і не очевидно. Встановлюємо пакет libxcb-cursor0:
$ sudo apt install libxcb-cursor0
Після встановлення Viber "ожив".
Неочевидність полягає саме в тому, що встановлення самого по собі пакету xcb не допомагає. Більше того, для роботи Viber, його можна й не встановлювати.

вівторок, 5 грудня 2023 р.

Debian 11: deb uses unknown compression for member

 Звісно, що вже є Debian 12, але подекуди доводиться використовувати старіші версії. Так от трапилося й у мене. Debian 11 "матюгнувся":

$ sudo dpkg -i apache-netbeans_20-1_all.deb
dpkg-deb: error: archive 'apache-netbeans_20-1_all.deb' uses unknown compression for member 'control.tar.zst', giving up
dpkg: error processing archive apache-netbeans_20-1_all.deb (--install):
 dpkg-deb --control subprocess returned error exit status 2
Errors were encountered while processing:
 apache-netbeans_20-1_all.deb
Ну, нічого страшного. Просто доведеться перепакувати deb-пакет з тим методом компресії, який відомий Debian 11.

$ ar x apache-netbeans_20-1_all.deb
$ zstd -d < control.tar.zst | xz > control.tar.xz
$ zstd -d < data.tar.zst | xz > data.tar.xz
$ ar -m -c -a sdsd /tmp/apache-netbeans_20-1_all.deb debian-binary control.tar.xz data.tar.xz
$ rm debian-binary control.tar.xz data.tar.xz control.tar.zst data.tar.zst
$ sudo dpkg -i /tmp/apache-netbeans_20-1_all.deb
(Reading database ... 398738 files and directories currently installed.)
Preparing to unpack .../apache-netbeans_20-1_all.deb ...
Unpacking apache-netbeans (20-1) over (19-1) ...
Setting up apache-netbeans (20-1) ...
Processing triggers for gnome-menus (3.36.0-1) ...
Processing triggers for desktop-file-utils (0.26-1) ...
Processing triggers for mailcap (3.69) ...
Processing triggers for hicolor-icon-theme (0.17-2) ...
Незручність лише в тому, що така конвертація займає певний час та місце.