Difference between revisions of "TerrariumAssembler"
From Wiki4Intranet
Line 90: | Line 90: | ||
+ | === Секретный ингридиент — Nuitka. === | ||
+ | * Python/CPython для отладки | ||
+ | ** {{@|Производительность, декомпиляция}} | ||
+ | ** Куча IDE, REPL-цикл, Jupyter-ноутбуки, прототипы | ||
− | === Структура террариума === | + | [[File:Nuitka-4-Anuitka.png|256px|right]] |
+ | * http://nuitka.net/ | ||
+ | * Компиляция: Python —→ C/C++ → GCC/MSVC → .EXE + [.DLLS] | ||
+ | ** {{@|Долго}} | ||
+ | ** {{@|Не всегда успешно}} | ||
+ | * Nuitka-компиляция | ||
+ | ** Крутейшая производительность. [https://pybenchmarks.org/u64q/benchmark.php?test=all&lang=nuitka&lang2=numba&data=u64q Заруливают Numba]. | ||
+ | *** {{@|Есть проблемы}} | ||
+ | **** Куча проблем генерации-сборки модулей | ||
+ | **** Внешние модули и утилиты (tesseract/imagick и т.п.). | ||
+ | |||
+ | |||
+ | === Структура террариума . === | ||
;lib64: Все запатченные библиотеки. | ;lib64: Все запатченные библиотеки. | ||
;pbin: Все запатченные бинарники, которых можно загружать только используя свою <tt>ld.so</tt>, она же лежит тут. | ;pbin: Все запатченные бинарники, которых можно загружать только используя свою <tt>ld.so</tt>, она же лежит тут. | ||
Line 99: | Line 115: | ||
=== Этапы сборки === | === Этапы сборки === | ||
+ | ==== --stage-checkout ==== | ||
+ | |||
+ | |||
+ | |||
== Возможные проблемы . == | == Возможные проблемы . == |
Revision as of 19:59, 5 August 2020
- Title
- TerrariumAssembler
- Author
- Stas Fomin
- Subfooter
- Stas Fomin, 17:35, 8 August 2020
Contents
- 1 Проблема.
- 2 Деплой на Linux. Стандартные варианты.
- 3 Деплой на Linux. Их слишком много.
- 4 Деплой на Linux. Статическая линковка.
- 5 Деплой на Linux. Контейнеры.
- 6 Деплой на Linux. Просто папка? .
- 7 TerrariumAssembler .
- 8 Секретный ингридиент — Nuitka.
- 9 Структура террариума .
- 10 Этапы сборки
- 11 Возможные проблемы .
Проблема.
Введение в проблему
https://vimeo.com/408659991/d1627a5c67
Околонаучные/высокотехнологичные приложения:
- Нет альтернативы — Numpy+Scipy+OpenCV+Keras…
- gonum
- Множество других фишек и батареек Python
- Быстрый цикл экспериментов и разработки
- Связь с бандлами приложений (Tesseract, Imagick)
Надо
- Деплой на
- Все версии Windows
- Все версии Linux (включая очень странные)
- Работало быстро
- Секретные алгоритмы
- On Impossibility of Obfuscation [1]
- PYC-файлы, cx_freeze, py2exe — абсолютная открытость.
Деплой на Linux. Стандартные варианты.
Нативная сборка под каждый дистрибутив
- Ад. RPM. DEB. RPM v4, v5, v4+, RPM on APT.
- Dependency hell. API/ABI hell.
- Package policy hell. Deps
- Сертифицированные дистрибутивы — все ископаемое.
- Нет контроля над библиотеками.
- «Ограниченная поддержка» — «мы только собрали, не помним как, а поддержка — »
- Комбинаторный взрыв вариантов тестирования.
- Можно — но за отдельные деньги.
Деплой на Linux. Их слишком много.
Деплой на Linux. Статическая линковка.
- Одна утилита — ОК.
- Надо пересобирать все.
- Бандлы приложений
- Нарушение LGPL/QT-лицензий.
Деплой на Linux. Контейнеры.
Стандартные контейнеры
- Масса вариантов
- Хорошая идея
- Нет стандартов
- Нет на ряде дистрибутивов
- Нужны клиенты-демоны
- AppImage — не обязательно.
- Нужны клиенты-демоны
Ожидания заказчика — «папка, копировать, просто работает, запускаем разные программы в ней, можно взаимодействовать с системой»
- Intel X64 везде, ну ладно, пусть будет Win/Lin отдельно.
Деплой на Linux. Просто папка? .
- «Нельзя просто взять и скопировать»©
- Неочевидно для Windows-пользователей — «работает же с Win95…»
- Там это специально добиваются, и это недешево. SxS
- libc-совместимость → major-изменения в API каждые пару лет.
- Да, с этим можно бороться → «эмуляция старого glibc» + bingcc, но это недешево,
пересобирать все.
- ld-image.so — базовый кирпич «в дженге»
- ELF — все захардкожено жестко, по путям. «RPATH»…
Технически решаемо, но это не просто «скопировать».
TerrariumAssembler .
- Первый вариант CasketAssembler — вообще-то шкатулка.
- но и увы, гроб.
- Условная герметичность и самодостаточность.
- Не специальная изоляция для безопасности.
Секретный ингридиент — Nuitka.
- Python/CPython для отладки
- Производительность, декомпиляция
- Куча IDE, REPL-цикл, Jupyter-ноутбуки, прототипы
- http://nuitka.net/
- Компиляция: Python —→ C/C++ → GCC/MSVC → .EXE + [.DLLS]
- Долго
- Не всегда успешно
- Nuitka-компиляция
- Крутейшая производительность. Заруливают Numba.
- Есть проблемы
- Куча проблем генерации-сборки модулей
- Внешние модули и утилиты (tesseract/imagick и т.п.).
- Есть проблемы
- Крутейшая производительность. Заруливают Numba.
Структура террариума .
- lib64
- Все запатченные библиотеки.
- pbin
- Все запатченные бинарники, которых можно загружать только используя свою ld.so, она же лежит тут.
- ebin
- Внешний интерфейс к террариуму — скрипты запуска чего-то изнутри.
Остальные папки опционально.
Этапы сборки
--stage-checkout
Возможные проблемы .
Концептуальные недостатки .
Очевидные проблемы «трагедии общин»
- На порядок жирнее
- Траты диска, памяти.
- Каждую популярную софтину так нельзя.
- Уязвимости надо отслеживать. «Flatpak - a security nightmare»
- Не стоит для открытых сервисов.
Падения компиляции.
Вероятностное.
{standard input}: Assembler messages: {standard input}:1898: Warning: end of file not at end of a line; newline inserted {standard input}:3538: Error: number of operands mismatch for `movq' {standard input}: Error: open CFI at the end of file; missing .cfi_endproc directive gcc: fatal error: Killed signal terminated program cc1
Что можно сделать:
- Увеличить память в VagrantFile
v.memory = 16000
- Уменьшить «--jobs» в "build*.sh"