TerrariumAssembler

From Wiki4Intranet
Revision as of 17:07, 6 August 2020 by StasFomin (Talk | contribs)

Jump to: navigation, search
Title

TerrariumAssembler
Author
Stas Fomin
Subfooter

Stas Fomin, 17:35, 8 August 2020

Проблема.

Tesseract-expert.jpg

Околонаучные/высокотехнологичные приложения:

  • Нет альтернативы — Numpy+Scipy+OpenCV+Keras…
    • gonum
  • Множество других фишек и батареек Python
  • Быстрый цикл экспериментов и разработки
  • Связь с бандлами приложений (Tesseract, Imagick)

Надо

  • Деплой на
    • Все версии Windows
    • Все версии Linux (включая очень странные)
  • Работало быстро
  • Секретные алгоритмы
    • On Impossibility of Obfuscation [1]
    • PYC-файлы, cx_freeze, py2exe — абсолютная открытость.

Смотри меня .

https://vimeo.com/408659991/d1627a5c67

Деплой на Linux. Стандартные варианты.

LotOfLinuxes.jpg

Нативная сборка под каждый дистрибутив

  • Ад. RPM. DEB. RPM v4, v5, v4+, RPM on APT.
  • Dependency hell. API/ABI hell.
  • Package policy hell. Deps
  • Сертифицированные дистрибутивы — все ископаемое.
  • Нет контроля над библиотеками.
    • «Ограниченная поддержка» — «мы только собрали, не помним как, а поддержка — »
  • Комбинаторный взрыв вариантов тестирования.
Maintaining-is-complex.png
  • Можно — но за отдельные деньги.


Деплой на Linux. Их слишком много.

Periodic-table-of-distro.png

Деплой на Linux. Статическая линковка.

  • Одна утилита — ОК.
  • Надо пересобирать все.
  • Бандлы приложений
  • Нарушение LGPL/QT-лицензий.

Деплой на Linux. Контейнеры.


Стандартные контейнеры

  • Масса вариантов
  • Хорошая идея
  • Нет стандартов
  • Нет на ряде дистрибутивов
    • Нужны клиенты-демоны
      • AppImage — не обязательно.

Ожидания заказчика — «папка, копировать, просто работает, запускаем разные программы в ней, можно взаимодействовать с системой»

  • Intel X64 везде, ну ладно, пусть будет Win/Lin отдельно.

Деплой на Linux. Просто папка? .

  • «Нельзя просто взять и скопировать»©
  • Неочевидно для Windows-пользователей — «работает же с Win95…»
    • Там это специально добиваются, и это недешево. SxS
  • libc-совместимость → major-изменения в API каждые пару лет.

пересобирать все.

  • ld-image.so — базовый кирпич «в дженге»
  • ELF — все захардкожено жестко, по путям. «RPATH»…

Технически решаемо, но это не просто «скопировать».


TerrariumAssembler .

Casketassembler-ikea.png
  • Первый вариант CasketAssembler — вообще-то шкатулка.
    • но и увы, гроб.
Террариум с питонами.jpg
  • Условная герметичность и самодостаточность.
    • Не специальная изоляция для безопасности.

Секретный ингридиент — Nuitka.

Nuitka-4-Anuitka.png
  • Python/CPython для отладки
    • Производительность, декомпиляция
    • Куча IDE, REPL-цикл, Jupyter-ноутбуки, прототипы
  • http://nuitka.net/
  • Компиляция: Python —→ C/C++ → GCC/MSVC → .EXE + [.DLLS]
    • Долго
    • Не всегда успешно
  • Nuitka-компиляция
    • Крутейшая производительность. Заруливают Numba.
      • Есть проблемы
        • Куча проблем генерации-сборки модулей
        • Внешние модули и утилиты (tesseract/imagick и т.п.).

Смотри меня .

📹


Структура террариума .

lib64
Все запатченные библиотеки.
pbin
Все запатченные бинарники, которых можно загружать только используя свою ld.so, она же лежит тут.
ebin
Внешний интерфейс к террариуму — скрипты запуска чего-то изнутри.

Остальные папки опционально.

Смотри меня .

https://vimeo.com/408659814/0d0a98f7ff

YAML-файл спецификации .

src_dir
где размещать исходные файлы.

packages
Списки пакетов для ОС
build
Пакеты, небходимые только для сборки
terra
Пакеты, неоходимые для работы «террариума»

Каждый пакет может задаваться либо просто названием, либо названием и URLом

   - name: unitedrpms
     url:  https://github.com/UnitedRPMs/unitedrpms/releases/download/17/unitedrpms-32-17.fc32.noarch.rpm
exclude_prefix
префиксы пакетов, которых нужно исключить при замыкании.
exclude_suffix
суффиксы пакетов, которых нужно исключить при замыкании.

nuitka
std_flags
стандартный набор флагов
force_packages
пакеты, которых точно нужно включить
force_modules
модули, которых точно нужно включить
block_packages
наоборот, пакеты, которых нужно избегать.

builds
список питон-исходников для компиляции
folder
папка, отнотельно каталога исходников.
utility
название к утилиты (без «.py»)

bin_regexps
Регулярки, выделяющие необходимые террариуму бинарные файлы
need_patch
Утилиты, которые неоходимо вызывать снаружи террариума, и их нужно патчить.
just_copy
Бинарники, которых просто нужно скопировать.

python_packages
Наполнение террариума «питонами»
pip
Просто список PIP-пакетов.
build
Список исходников для checkout, которые необходимы для сборки.
terra
Список исходников для checkout, которые необходимы в террариуме для работающего там питона.

Исходники можно задавать либо просто git-urlом, либо с указанием ветки или патча.

   - git@gitlab.ispras.ru:fomin/komodo_python3_dbgp.git 
   - url: https://github.com/tomerfiliba/reedsolomon.git
     branch: v1.5.3

templates_dirs: Шаблон террариума (файлы обрабатываются «jinja-шаблонизатором»)

Этапы сборки

--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"