Difference between revisions of "TerrariumAssembler"

From Wiki4Intranet
Jump to: navigation, search
(YAML-файл спецификации .)
Line 124: Line 124:
  
 
=== YAML-файл спецификации . ===
 
=== YAML-файл спецификации . ===
 +
==== Исходники . ====
 +
 
;src_dir: где размещать исходные файлы.
 
;src_dir: где размещать исходные файлы.
 +
----
 +
;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-шаблонизатором»)
 +
 
 +
==== Пакеты для Linux OS . ====
 
;packages: Списки пакетов для ОС
 
;packages: Списки пакетов для ОС
 
:;build: Пакеты, небходимые только для сборки
 
:;build: Пакеты, небходимые только для сборки
Line 139: Line 155:
 
:;exclude_suffix: суффиксы пакетов, которых нужно исключить при замыкании.
 
:;exclude_suffix: суффиксы пакетов, которых нужно исключить при замыкании.
  
----
+
==== Компиляция и сборка . ====
 
+
 
;nuitka:
 
;nuitka:
 
:;std_flags: стандартный набор флагов
 
:;std_flags: стандартный набор флагов
Line 156: Line 171:
 
:;need_patch:  Утилиты, которые неоходимо вызывать снаружи террариума, и их нужно патчить.
 
:;need_patch:  Утилиты, которые неоходимо вызывать снаружи террариума, и их нужно патчить.
 
:;just_copy:  Бинарники, которых просто нужно скопировать.
 
:;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-шаблонизатором»)
 
  
 
=== Этапы сборки ===
 
=== Этапы сборки ===

Revision as of 17:12, 6 August 2020

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
где размещать исходные файлы.

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-шаблонизатором»)

Пакеты для Linux OS .

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
Бинарники, которых просто нужно скопировать.

Этапы сборки

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