LINUX.ORG.RU

Программисты подскажите! Не работает Anki

 , , ,


0

1

Беру anki с сайта разработчиков, всегда работала без нареканий на федорах и шапках.

После переезда на новый диск и обновления на RHEL-8.4 обнаружил, что не работает. Проверил на 8.3, работает без проблем.

Устанавливаю как рекомендовано из каталога скачанной программы.

sudo ./install.sh

Устанавливает без ошибок, в общем обычная процедура.
Выхлоп такой:

$ anki
Traceback (most recent call last):
  File "runanki.py", line 3, in <module>
  File "/home/dae/venv/lib/python3.8/site-packages/PyInstaller-4.0.dev0+g2886519-py3.8.egg/PyInstaller/loader/pyimod03_importers.py", line 625, in exec_module
  File "aqt/__init__.py", line 20, in <module>
  File "/home/dae/venv/lib/python3.8/site-packages/PyInstaller-4.0.dev0+g2886519-py3.8.egg/PyInstaller/loader/pyimod03_importers.py", line 625, in exec_module
  File "aqt/qt.py", line 13, in <module>
ImportError: /usr/local/share/anki/bin/libgnutls.so.30: version `GNUTLS_3_6_9' not found (required by /lib64/libglib-2.0.so.0)
[2295] Failed to execute script runanki

Клонировал из гита исходники (в тарболле для юзеров бинарники), чтобы глянуть что там в этих "runanki.py", "aqt/__init__.py" и "aqt/qt.py", легче не стало, если надо выложу куда-нибудь содержимое.

Решил собрать сам, в надежде понять чего не хватает. Собрал, работает, ни на что не ругается, так бы и оставил, но у них не предусмотрена установка из исходников, они только для разработки, там лишь два варианта старта программы: оптимизированный и нет, но в обоих случаях в память загружается пару гигов java и node и потом стартует программа, выход из программы не освобождает память от этих процессов, дичь какая-то.

Разумеется, после удачной сборки и тестов, я повторил установку из бинарников, в надежде, что настроенное окружение для сборки поможет, но нет.

Кароче, нового ничего не узнал, кроме того, что программа на моей системе в принципе работает.

Чтобы исключить влияние левых репозиториев, я их выключил и синхронизировал пакеты с релизом 8.4, но это тоже не помогло.

У кого есть rhel, centos, alma, oracle версии 8.4, будьте так добры, проверьте у себя, может я чего в системе накосячил или обновилось криво с 8.3. Там ставить ничего не надо, просто скачать тарболл, зайти в каталог и дернуть ./bin/Anki

UPD. Решение: Программисты подскажите! Не работает Anki (комментарий)

Ответ на: комментарий от papin-aziat

А, блин, я не заметил, этот анки свой тащит походу: /usr/local/share/anki/bin/libgnutls.so.30. Костыли какие-то… Может ему симлинком системный подпихнуть? Или с LD_PRELOAD поплясать?

cocucka ★★★★★ ()
Последнее исправление: cocucka (всего исправлений: 1)
Ответ на: комментарий от cocucka

Может ему симлинком системный подпихнуть?

Ок, попробую так.

Я удалял его вариант, тогда он видел системный, но писал тоже что-то нехорошее :-)

Сделаю, выложу оба варианта.

Или с LD_PRELOAD поплясать?

Это мне не понятно.

papin-aziat ★★★★ ()
Ответ на: комментарий от papin-aziat

Это мне не понятно.

С помощью LD_PRELOAD можно явно указать, какие библиотеки надо загружать. Я так в центоси седьмой VS Code запускаю, которая хочет более свежий libstdc++, чем системный. LD_PRELOAD=/opt/my_very_own_built_gcc/lib64/libstdc++.so code.

cocucka ★★★★★ ()
Ответ на: комментарий от cocucka
$ sudo mv /usr/local/share/anki/bin/libgnutls.so.30 /BAK/
$ anki
Traceback (most recent call last):
  File "runanki.py", line 3, in <module>
  File "/home/dae/venv/lib/python3.8/site-packages/PyInstaller-4.0.dev0+g2886519-py3.8.egg/PyInstaller/loader/pyimod03_importers.py", line 625, in exec_module
  File "aqt/__init__.py", line 20, in <module>
  File "/home/dae/venv/lib/python3.8/site-packages/PyInstaller-4.0.dev0+g2886519-py3.8.egg/PyInstaller/loader/pyimod03_importers.py", line 625, in exec_module
  File "aqt/qt.py", line 13, in <module>
ImportError: /lib64/libgnutls.so.30: undefined symbol: nettle_rsa_pss_sha384_sign_digest_tr, version HOGWEED_4
[3025] Failed to execute script runanki
$ ls -l /usr/lib64/libgnutls.so.30*
lrwxrwxrwx. 1 root root      20 Apr  1 16:15 /usr/lib64/libgnutls.so.30 -> libgnutls.so.30.28.0
-rwxr-xr-x. 1 root root 2052344 Apr  1 16:15 /usr/lib64/libgnutls.so.30.28.0

$ anki
Traceback (most recent call last):
  File "runanki.py", line 3, in <module>
  File "/home/dae/venv/lib/python3.8/site-packages/PyInstaller-4.0.dev0+g2886519-py3.8.egg/PyInstaller/loader/pyimod03_importers.py", line 625, in exec_module
  File "aqt/__init__.py", line 20, in <module>
  File "/home/dae/venv/lib/python3.8/site-packages/PyInstaller-4.0.dev0+g2886519-py3.8.egg/PyInstaller/loader/pyimod03_importers.py", line 625, in exec_module
  File "aqt/qt.py", line 13, in <module>
ImportError: /usr/local/share/anki/bin/libgnutls.so.30: undefined symbol: nettle_rsa_pss_sha384_sign_digest_tr, version HOGWEED_4
[3055] Failed to execute script runanki
papin-aziat ★★★★ ()
Последнее исправление: papin-aziat (всего исправлений: 1)
Ответ на: комментарий от papin-aziat

Тащить с собой хз какую версию либы, которая отвечает за шифрование, это такая себе идея. Вот найдут там уязвимость, как они будут ее патчить? А в системную прилетит апдейт.

cocucka ★★★★★ ()
Ответ на: комментарий от cocucka

Ну это должно было бы сработать и с симлинками, да?

Я вообще думал, что опять Пистон барагозит, вечно от него проблемы, но оно там вроде и 3.8 свой тащит, хотя (как писал в стартовом посте) я python-3.8 ставил и настраивал для сборки: в шапках нет симлинка python как в дебах, поэтому я на всякий случай делал такой и в /usr/bin и в /usr/local/bin

papin-aziat ★★★★ ()
Последнее исправление: papin-aziat (всего исправлений: 1)
Ответ на: комментарий от cocucka
$ ldd /usr/local/share/anki/bin/libgnutls.so.30
	linux-vdso.so.1 (0x00007ffd21fa4000)
	libz.so.1 => /lib64/libz.so.1 (0x00007f016c50e000)
	libp11-kit.so.0 => /lib64/libp11-kit.so.0 (0x00007f016c1e4000)
	libidn.so.11 => /lib64/libidn.so.11 (0x00007f016bfb0000)
	libtasn1.so.6 => /lib64/libtasn1.so.6 (0x00007f016bd9d000)
	libnettle.so.6 => /lib64/libnettle.so.6 (0x00007f016bb63000)
	libhogweed.so.4 => /lib64/libhogweed.so.4 (0x00007f016b932000)
	libgmp.so.10 => /lib64/libgmp.so.10 (0x00007f016b69a000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f016b2d5000)
	libffi.so.6 => /lib64/libffi.so.6 (0x00007f016b0cc000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f016aec8000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f016aca8000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f016ca55000)
papin-aziat ★★★★ ()
Ответ на: комментарий от eco_dd

Я оказался там случайно, судьба закинула: комп стареет (хасвелл), а я старый федораст и гномосек, куда ещё податься?

С другой стороны, внезапно, людям стейблы на десктопе тоже нужны!

papin-aziat ★★★★ ()

Причина этой проблемы кроется в общелинуксовом зоопарке, размыто она обозначена в этой теме – Linux-дистрибутивы и дистрибьюция коммерческого ПО

Решение этой проблемы только пердолингом через подмену или обновление/понижение системных библиотек посредсвтвом костылей и хаков вроде переменных окружения LD_PRELOAD или LD_LIBRARY_PATH.

EXL ★★★★★ ()
Ответ на: комментарий от cocucka

Видимо им нужна весьма конкретная версия libgnutls. А что команда ldd /usr/local/share/anki/bin/libgnutls.so.30 говорит?

Вроде всё есть, что он хочет. Должно работать.

Правильные команды для просмотра символов и анализа ситуации ТС были бы следующие:

strings /usr/local/share/anki/bin/libgnutls.so.30 | grep 'GNUTLS_[0-9]'
GNUTLS_3_4
GNUTLS_3_6_0
GNUTLS_3_6_2
GNUTLS_3_6_3
GNUTLS_3_6_4
GNUTLS_3_6_5
GNUTLS_3_6_6
GNUTLS_3_6_8
GNUTLS_3_6_9
GNUTLS_3_6_10
GNUTLS_3_6_12
GNUTLS_3_6_13
GNUTLS_3_6_14

strings /usr/lib/libgnutls.so.30 | grep 'GNUTLS_[0-9]'
GNUTLS_3_4
GNUTLS_3_6_0
GNUTLS_3_6_2
GNUTLS_3_6_3
GNUTLS_3_6_4
GNUTLS_3_6_5
GNUTLS_3_6_6
GNUTLS_3_6_8
GNUTLS_3_6_9
GNUTLS_3_6_10
GNUTLS_3_6_12
GNUTLS_3_6_13
GNUTLS_3_6_14

И дальше на основе этого думать. Но там наверняка всплывут какие-то ещё убогие линуксовые проблемы, с которыми разбираться будет лень.

Так что ТС, твоим выходом может быть установка Wine и запуск виндовой версии Anki в нём.

EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

Ну мой опыт трахания с версиями библиотек не настолько глубок. Я подумал, что мб в той libgnutls.so.30 используется либа(версия либы), которой нет в системе.

cocucka ★★★★★ ()
Ответ на: комментарий от eco_dd

она стала невыносимо анстейбл?

Никак нет! Мне не годятся ядра моложе 5.7, как ты знаешь, у федоры нет лтс-ядер. Да, на Copr собирают лтс-ки, в принципе жить можно, но… Внезапно гномеры подсирают, 3.38 уже не такой плавный как 32 или 34, ну а на 40 сломали овервью, я не терплю низкий фпс!

Всё вышесказаное справедливо только на моём железе и с моими хотелками, что там у других меня будет интересовать, только когда соберусь покупать новое железо.

papin-aziat ★★★★ ()
Ответ на: комментарий от EXL

Так что ТС, твоим выходом может быть установка Wine и запуск виндовой версии Anki в нём.

точно! редхат на десктопе уже костыль, поэтому вайн в костыле за костыль считаться не будет. Логично

anonymous ()
Ответ на: комментарий от d_a

Да, слушай, это интересная тема, но я в этом ничего не понимаю, однако такой примерно расклад видел в доках в исходниках.

## Pre-built Python wheels

Pre-built Python packages are available on PyPI. They are useful if you wish to:

- Run Anki from a local Python installation without building it yourself
- Get code completion when developing add-ons
- Make command line scripts that modify .anki2 files via Anki's Python libraries

You will need the 64 bit version of Python 3.8 or 3.9 installed. If you do not
have Python yet, please see the platform-specific instructions in the "Building
from source" section below for more info.

**Mac/Linux**:

$ python3.8 -m venv ~/pyenv
$ ~/pyenv/bin/pip install --upgrade pip
$ ~/pyenv/bin/pip install aqt

Then to run Anki:
$ ~/pyenv/bin/anki

Не пояснишь, что это за магия? Вижу, что дело происходит в хомяке, значит систему не поломаю?

papin-aziat ★★★★ ()
Последнее исправление: papin-aziat (всего исправлений: 1)
Ответ на: комментарий от cocucka

Вот поэтому я прошу, если у кого есть шапка или дериватив версии 8.4 либо подтвердить, что не работает, либо опровергнуть и тогда я буду искать косяки на своей стороне. В 8.3 всё работает замечательно, вообще без ворнингов даже.

papin-aziat ★★★★ ()
Ответ на: комментарий от papin-aziat

Нет, не поломаешь. Никакой магии нет. С сервера скачивается бинарный пакет (.whl) и распаковывается в локальный каталог. Хотел выяснить, есть ли у них разница по контенту в колесе и в архиве, сгенерированном через PyInstaller. (Вижу что в колесо gnutls они не вкладывают).

d_a ★★★★★ ()
Ответ на: комментарий от EXL

Что-то есть! Как понимать?

$ strings /usr/local/share/anki/bin/libgnutls.so.30 | grep 'GNUTLS_[0-9]'
GNUTLS_3_4

А ведь ищет 3.6!

В системной всё ок.

$ strings /usr/lib64/libgnutls.so.30 | grep 'GNUTLS_[0-9]'
GNUTLS_3_4
GNUTLS_3_6_0
GNUTLS_3_6_2
GNUTLS_3_6_3
GNUTLS_3_6_4
GNUTLS_3_6_5
GNUTLS_3_6_6
GNUTLS_3_6_8
GNUTLS_3_6_9
GNUTLS_3_6_10
GNUTLS_3_6_12
GNUTLS_3_6_13
GNUTLS_3_6_14
papin-aziat ★★★★ ()
Ответ на: комментарий от papin-aziat

ImportError: /usr/local/share/anki/bin/libgnutls.so.30: undefined symbol: nettle_rsa_pss_sha384_sign_digest_tr, version HOGWEED_4

Вот тут ты подменил libgnutls, но не подменил libnettle.

Либа с таким названием есть в каталоге /usr/local/share/anki/bin/?

EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

твоим выходом может быть установка Wine

Вариантов гораздо больше! Флатпак, там правда слоупоки. Пересобрать из федоры (не пробовал), там, однако, ещё древнее. Есть снап (не пробовал), тоже слоупоки, заодно протестить как работает, а то я себе настроил, но ни разу не юзал. Кстати appimage выдаёт такой же выхлоп, так что пока минус один вариант. Ещё можно вернутся на RHEL-8.3, ничего революционного и категорически необходимого этот релиз мне не принёс, а вот косячков прибавилось :-)

Вино надеюсь не придется юзать никогда.

papin-aziat ★★★★ ()
Ответ на: комментарий от papin-aziat

а что это за патчи? Если графика onboard, то перфоменса ожидать все равно не приходиться. Я вообще на мини сижу с интелом и поражаюсь как легко на нем работается(на де давно забил из личных побуждений). Единственные патчи деактивация которых принесла ощутимый резултат от дыр на процессоре с mitigations=off. А в остальном все летает на новых ядрах

eco_dd ()
Ответ на: комментарий от EXL

Сделал, не то :-(

$ ls -l /usr/local/share/anki/bin/libnettle.so.6
lrwxrwxrwx 1 root root 25 Jun  7 14:55 /usr/local/share/anki/bin/libnettle.so.6 -> /usr/lib64/libnettle.so.6
$ ls -l /usr/local/share/anki/bin/libgnutls.so.30
lrwxrwxrwx 1 root root 26 Jun  7 14:54 /usr/local/share/anki/bin/libgnutls.so.30 -> /usr/lib64/libgnutls.so.30
$ anki
Traceback (most recent call last):
  File "runanki.py", line 3, in <module>
  File "/home/dae/venv/lib/python3.8/site-packages/PyInstaller-4.0.dev0+g2886519-py3.8.egg/PyInstaller/loader/pyimod03_importers.py", line 625, in exec_module
  File "aqt/__init__.py", line 20, in <module>
  File "/home/dae/venv/lib/python3.8/site-packages/PyInstaller-4.0.dev0+g2886519-py3.8.egg/PyInstaller/loader/pyimod03_importers.py", line 625, in exec_module
  File "aqt/qt.py", line 13, in <module>
ImportError: /usr/local/share/anki/bin/libgnutls.so.30: undefined symbol: nettle_rsa_pss_sha384_sign_digest_tr, version HOGWEED_4
[4063] Failed to execute script runanki
papin-aziat ★★★★ ()
Ответ на: комментарий от eco_dd

Из-за Анки? Сурово! Во первых есть кучка менее желательных вариантов, во вторых у меня есть прибор для нарезки бумаги, когда-то я на нём делал карточки, так что на крайняк могу вернуться к докомпьютерному варианту :-)

papin-aziat ★★★★ ()
Ответ на: комментарий от papin-aziat

если используешь линукс постоянно, то уверен на 99% что проблемы были и уж точно будут. По крайней мере это старье должно накладывать сильные ограничения на используемый софт. Но может просто я такой человек, у меня просто терпения не хватило бы возюкаться столько времени с простой программой когда я знаю что есть нормальные дистрибутивы. Скорее всего редхатовцы сами используют федору на своих десктопах

eco_dd ()
Последнее исправление: eco_dd (всего исправлений: 1)
Ответ на: комментарий от luke

Спасибо, бро, за предложение, но дело кажется сдвинулось. Анки же не просто так, она со сматрфоном синхронизируется, ну и вообще уважаемый проект, достойная программа!

papin-aziat ★★★★ ()
Ответ на: комментарий от d_a

Ну в гите есть ветка мэйн, где – как я понимаю – идут постоянные коммиты, и есть стейблы и олды, колесо это типа куда постоянные?

Кстати, у меня всё получилось вот этим твоим способом, Анки работает, версия новейшая, офигеть, надо освоить эту магию, может объяснишь, что это вообще за хрень, это питонячий репозиторий, там много полезного софта?

Уже сделал десктоп-файл, всё пучком, зачем вообще тогда этот бинарник с сайта?

Пока тему как решённую помечать не буду, всё таки чего хотел не сделал :-(

papin-aziat ★★★★ ()
Последнее исправление: papin-aziat (всего исправлений: 1)
Ответ на: комментарий от eco_dd

если используешь линукс постоянно

Единственный рабочий комп.

уверен на 99% что проблемы были и уж точно будут

Ну вот так чтобы бах и упёрся в стену? Вот эта с анки пожалуй первая такая. Остальные как-то решаются так или иначе, впрочем вот и с Анки уже решилась, одним из вариантов, причем неожиданно, да ещё и новое узнал, такие дела.

когда я знаю что есть нормальные дистрибутивы

Везёт тебе, а я вот что-то никак не найду нормальный.

papin-aziat ★★★★ ()

ImportError: /usr/local/share/anki/bin/libgnutls.so.30: version `GNUTLS_3_6_9’ not found (required by /lib64/libglib-2.0.so.0)

Похоже, дистрибутив Anki носит с собой некоторые библиотеки. Как минимум, libgnutls.so.30. Но не похоже, чтобы он носил с собой ещё и libglib-2.0.so.0, поэтому используется системная. Но системная libglib-2.0.so.0 слинкована с более новой версией libgnutls.so.30, в которой есть версия GNUTLS_3_6_9. Но этой версии нет в libgnutls.so.30, которую дистрибутив Anki притащил с собой.

Вариантов решения проблемы несколько. Для начала попробовать удалить /usr/local/share/anki/bin/libgnutls.so.30 и запустить без него. Если не запускается, положить копию системного libgnutls.so.30 вместо /usr/local/share/anki/bin/libgnutls.so.30.

Ещё можно найти, из какого дистрибутива они взяли libgnutls.so.30, и взять оттуда ещё libglib-2.0.so.0. У неё уже не будет конфликта версий.

Третий вариант — бекпортировать пакет Anki для своего дистрибутива. Берёшь пакет старой версии, исходники заменяешь на более новую версию Anki, обновляешь версии в метаданных пакета, пересобираешь пакет, ставишь.

Четвёртый — поставить flatpak-версию.

i-rinat ★★★★★ ()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от papin-aziat

Колесо (wheel) - это родной формат упаковки и доставки питоновского кода. Что-то (робот или человек) собирает это колесо и выгружает в репу (pypi.org). Полезного там много (бесполезного тоже). Кроме того, кто-то или что-то дополнительно собирает портабельную сборку, которую ты скачивал с сайта через браузер. Каким-то образом эта сборка оказалась сломана (втянули gnutls, но не втянули glib), вероятно просто колесо тестируется на запускабельность автоматически, а портабельная сборка нет, и начиная с некоторого момента она сломалась. Это стоит зарепортить, сославшись на рабочее колесо, чтобы сделали эквивалентно по контенту.

d_a ★★★★★ ()
Последнее исправление: d_a (всего исправлений: 1)
Ответ на: комментарий от i-rinat

Похоже, дистрибутив Anki носит с собой некоторые библиотеки. Как минимум, libgnutls.so.30. Но не похоже, чтобы он носил с собой ещё и libglib-2.0.so.0, поэтому используется системная. Но системная libglib-2.0.so.0 слинкована с более новой версией libgnutls.so.30, в которой есть версия GNUTLS_3_6_9. Но этой версии нет в libgnutls.so.30, которую дистрибутив Anki притащил с собой.

Похоже на то.

Ещё можно найти, из какого дистрибутива они взяли libgnutls.so.30, и взять оттуда ещё libglib-2.0.so.0. У неё уже не будет конфликта версий.

В исходниках они предлагают делать сборку на демьяне, так что вероятно оттуда и берут, потом поищу у них, может получится сделать, отпишусь.

Третий вариант — бекпортировать пакет Anki для своего дистрибутива. Берёшь пакет старой версии, исходники заменяешь на более новую версию Anki, обновляешь версии в метаданных пакета, пересобираешь пакет, ставишь.

Не, такой квест не по мне, квалификации не хватит, максимум чего могу, это кинуть в mock чего-нить небольшое из федоры, ну на крайняк чутка подправить спек.

Четвёртый — поставить flatpak-версию.

Да, это был бы крайний вариант, ибо слоупоки и других флатпаков у меня нет, а эти вечные гигабайты обновлений из-за одной программулины…

papin-aziat ★★★★ ()