Привет всем!
Мне уже удавалось собирать код на Python3 с помощью cx-freeze или pyinstaller, но мне хотелось бы собрать AppImage для всех линуксовых дистрибутивов. Оставить в исходном коде - не совсем вариант. Запуск питона со всеми pip-зависимостями и (иногда) исправленными багами в site-packages для новичка нелегок будет. Заморачиваться с пакетированием под все основные системы не очень хочется, решил остановиться на AppImage.
Как я это делаю сейчас:
1) запускаю cx_freeze/pyinstaller, получаю каталог с бинарниками.
2) Создаю usr/bin, перемещаю бинарники в него
3) Копирую в текущий каталог AppRun (ELF), MyApp.desktop, MyApp.png.
4) Делаю
strace -eopen -f ./AppRun 2>&1 | grep / | grep -v ENOENT | cut -d "\"" -f 2 | sort | uniq > copyfiles
5) Удаляю из copyfiles то, что, скорее всего, копировать не нужно (/etc/passwd, /dev/null и т.д.).
6) Копирую в каталог с AppRun файлы из copyfiles, принимая текущий каталог за /. Т.е., /lib/somelib.so -> ./lib/somelib.so, /etc/fonts/somefont -> ./etc/fonts/somefont и т.д.
7) Для каталога с AppRun применяю appimagetool, он собирает AppImage.
Проблема в том, что такая сборка использует как локальные, так и системные файлы. Например, после запуска на другой ОС я получаю segmentation fault, но после удаления из ./lib libgc, libpthread и lipdl, программа запускается. Т.е., какие-то библиотеки из ./lib используются. Однако, не используются шрифты из ./etc/fonts - я получаю сообщения об ошибках (обращение, по всей видимости, по-прежнему идет к /etc/fonts), на некотых ОС я получаю квадраты.
Также проблема с сертификатами, получаю ошибку SSL: CERTIFICATE_VERIFY_FAILED. Иногда помогает установка ca_certificates, но на разных ОС сертификаты находятся в РАЗНЫХ каталогах! ЕМНИП, для centos - /etc/pki/tls, для debian - /etc/ssl/certs, для TinyCore - /usr/local/etc/ssl/certs. После создания /etc/pki/tls/cert.pem программа, собранная на centos, завелась на debian. Однако, ни сборка на centos, ни сборка на debian8 не завелась полностью на TinyCore - CERTIFICATE_VERIFY_FAILED и квадраты вместо кириллицы.
В общем, вопрос: как грамотно сделать сборку? Может, требуется пропатчить libpython в сборке (если там есть жесткая привязка к системным файлам)?
P.S. Я знаю про существование yml и TravisCI, но я пока не понял, что оно делает, какого рода скрипты можно вставить в yml и что вообще получается на выходе. Хочется пока руками, чтобы разобраться.