Skip to content

Generate Portable Linux Applications, just portable folders

License

Notifications You must be signed in to change notification settings

belonesox/terrarium_assembler

Repository files navigation

Π˜Π½ΡΡ‚Π°Π»Π»ΡΡ†ΠΈΡ (Crash Course)

Π Π°Π·Π΄Π΅Π» для Ρ‚Π΅Ρ…, ΠΊΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ TA

  • ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с любого рСпозитория, Π³Π΄Π΅ Π²Ρ‹ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ этот тСкст.
    • Π’Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git pull, сСйчас ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ TA Π² Ρ„Π°Π·Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
  • ЗапуститС Π² ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°
sudo python3 -m pip install -e .
  • Π’Π°Ρˆ линукс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² sudoers, Π±Π΅Π· подтвСрТСния ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΌ (Π³ΡƒΠ³Π»ΠΈΡ‚Π΅ Β«sudoers NOPASSWDΒ»)
    • ЗапуститС β€” скорСС всСго поставит Π½ΡƒΠΆΠ½Ρ‹Π΅ систСмныС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π² ваш линукс β†’ β†’ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ Π½Π° Ubuntu 22.04 (Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ слоТности, см Π½ΠΈΠΆΠ΅.) ΠΈ Fedora (ΠΎΡ‚ FC36)
terrarium_assembler systeminstall
  • Π­Ρ‚ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΌΠ°Π»ΠΎ, практичСски Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, всС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ½ скачаСт ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ окруТСния.

  • ΠžΠΏΡ†ΠΈΠΈ ΠΈ всС Ρ‚Π°ΠΊΠΎΠ΅ долгая Ρ‚Π΅ΠΌΠ°, Π½ΠΎ скорСС всСго, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ спСк ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (project.yml) ΠΈ Π΅Π³ΠΎ Π½Π°Π΄ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ, Ρ‚ΠΎ запуститС Π² ΠΏΠ°ΠΏΠΊΠ΅ этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

terrarium_assembler --stage-checkout project.yml

Π½Ρƒ Π° всС сборки-пСрСсборки:

terrarium_assembler --stage-all project.yml

БлоТности с Ubuntu

Π’Π°ΠΌ собраны старыС вСрсии podman, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ совсСм сломанныС. НапримСр, Ссли Ρƒ вас вСрсия

podman 3.4.4+ds1-1ubuntu1.22.04.2, Ρ‚ΠΎ ΠΎΠ½Π° сломана (Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с sudo), ΠΈ Π½Π°Π΄ΠΎ даунгрСйдится

sudo apt-get install podman=3.4.4+ds1-1ubuntu1 -y

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΡ†ΠΈΠΈ ΠΊΠΎΠΌΠ°Π΄Π½ΠΎΠΉ строки

Π§Ρ‚ΠΎΠ±Ρ‹ добится ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ гибкости ΠΈ вСрифицируСмости сборки, Π±Π΅Π· Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎΠΉ ΠΌΠ°Π³ΠΈΠΈ классичСских систСм сборок (make-Scons-…, нСпонятно Ρ‡Ρ‚ΠΎ происходит, Π·Π°Ρ‡Π΅ΠΌ ΠΈ Π³Π΄Π΅)

  • всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Π±ΠΈΡ‚Ρ‹ Π½Π° Π½Π΅ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ шаги-Ρ„Π°Π·Ρ‹, с понятным ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡ
  • для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Π°ΠΊΠΎΠΉ Ρ„Π°Π·Ρ‹ гСнСрится bash-Ρ„Π°ΠΉΠ», с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Ρ„Π°Π·Ρ‹ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ, Π³Π΄Π΅ прописано, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ, этот Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для экспСримСнтв ΠΈ Ρ‚.ΠΏ.
  • ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
    • ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½Ρ‹
    • ΠΏΠΎ возмоТности ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ состояниС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ повторятся, Ссли Β«Π²Ρ€ΠΎΠ΄Π΅ ΠΊΠ°ΠΊΒ» исходныС Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ измСнились (Π½Π΅ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π·Π°Π½ΠΎΠ²ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, Ссли список ΠΈ ΠΎΠΏΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ссли Π½Π΅ измСнился ΠΊΠΎΠ΄ ΠΈ Ρ‚.ΠΏ.) β€” хотя это Π½Π΅ Π΄Π°Π΅Ρ‚ 100% Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ.
  • названия шагов ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅,
    • ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŒΡΡΠ½ΡΡŽΡ‰ΠΈΠΌΠΈ (Π²Π½ΡƒΡ‚Ρ€ΠΈ шСлл-Ρ„Π°ΠΉΠ»Π° Π² коммСнтариях Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ΅ объяснСниС)
    • ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡ… ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Β«ΡΠΊΠΈΠΏΠ°Ρ‚ΡŒΒ» ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ словам (см. дальшС)
    • Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ β€” Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, для скриптов ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, для ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π° ΠΌΠΎΠΆΠ½ΠΎ просто ΠΊΠ»ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΠΎ шСлл-Ρ„Π°ΠΉΠ»Ρƒ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π΅ ΠΈΠ»ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ подсказкой β€” Ρ‚.Π΅. это ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΊ Π²Ρ‹Π·ΠΎΠ² ΠΈΠ· мСню.
  • Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΈ-ΠΊΠΎΠΌΠ±ΠΎ, Ρ‚ΠΈΠΏΠ° --stage-all, Ссли ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ
 terrarium_assembler --help 

ΠΏΡ€ΠΎ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‚Π°ΠΊΡƒΡŽ ΠΎΠ½ расскаТСт ΠΈΠ· Ρ‡Π΅Π³ΠΎ ΠΎΠ½Π° состоии:

  --stage-all           stage-init-box-and-repos + stage-download-base-packages + stage-install-base-rpms + stage-download-rpm-packages + stage-
                        install-rpms + stage-save-file-rpmpackage-info + stage-download-base-wheels + stage-init-python-env + stage-checkout-
                        sources + stage-build-wheels + stage-download-wheels + stage-compile-pip-tars + stage-install-wheels + stage-build-
                        python-projects + stage-build-go + stage-save-sofiles + stage-pack + stage-post-pack + stage-make-packages
  --stage-rebuild       stage-init-box-and-repos + stage-install-base-rpms + stage-install-rpms + stage-save-file-rpmpackage-info + stage-init-
                        python-env + stage-build-wheels + stage-compile-pip-tars + stage-install-wheels + stage-build-python-projects + stage-
                        build-go + stage-save-sofiles + stage-pack + stage-post-pack + stage-make-packages

Π’.Π΅. самая простая опция это Β«--stage-allΒ», Ссли ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΅Ρ‰Π΅ Π½Π΅ чСкаутился, Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ сначала Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Β«--stage-checkoutΒ», ΠΏΠΎΡ‚ΠΎΠΌ Β«--stage-allΒ».

  • МоТно Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΈ, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° Π½ΠΎΠΌΠ΅Ρ€Π° шагов ΠΈΠ»ΠΈ ΠΈΡ… ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ:
    • это Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ для скриптов, Π½ΠΎΠΌΠ΅Ρ€Π° ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡Π°Ρ‰Π΅ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ TA, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Β«Π²ΠΎΡ‚ΠΊΠ½ΡƒΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ шаги»
    • Π½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ для ad-hoc-Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Π²ΠΎΡ‚ прямо здСсь ΠΈ сСйчас.

НапримСр, сломался ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ сборки, Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π΅ΠΏΠΎΠ½ΡΡ‚Π½ΡƒΡŽ Ρ€ΡƒΠ³Π°Ρ‚ΡŒ со словами Β«ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Β», ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ быстро, Ρ‚ΠΈΠΏΠ°

  terrarium_assembler dmi-release.yml --steps=0-7

ΠΈΠ»ΠΈ, Ссли Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΡƒΠΆΠ΅ Π²Ρ‹ΠΊΠ°Ρ‡Π°Π½Ρ‹ ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ (тСорСтичСски, ΠΎΠ½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π²Ρ‹ΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ, Π½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ Π² спСк, Π½ΠΎ сСйчас это Π½Π΅Π²Π°ΠΆΠ½ΠΎ, ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ шаги скачивания)

  terrarium_assembler dmi-release.yml --steps=0,3,7

Ну ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΠΈΡ‚ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π΅Π½Π², ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ· Π½ΠΈΡ… сборку ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹

terrarium_assembler dm-release.yml --steps=21-27,40-59

Π•Ρ‰Π΅ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΡΠΊΠΈΠΏΠ°Ρ‚ΡŒ шаги, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ словарный Ρ„ΠΈΠ»ΡŒΡ‚Ρ€. НапримСр, Π²Ρ‹ Π±Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°, ΠΈ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Ρ‹ скачанных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΏΡ€ΠΎΠΏΠ°Π»ΠΈ, Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π°Π΄ΠΎ, ΠΈ Ρ‡Π΅ΠΊΠ°ΡƒΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅:

  terrarium_assembler dmi-release.yml --steps=0-7 --skip-words=download,checkout

И самоС Π²Π°ΠΆΠ½ΠΎΠ΅ слово, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°Π΄ΠΎ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ (ΠΏΠΎΠΊΠ° я Π½Π΅ вСрнулся ΠΈΠ· отпуска β€” Β«auditΒ») β€” Ρ‚Π°ΠΌ Ρ…ΠΈΡ‚Ρ€Ρ‹Π΅ дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΊΠ°Ρ‡Π°ΡŽΡ‚ сотни Π³ΠΈΠ³ΠΎΠ², Π·Π°ΠΉΠΌΡƒΡ‚ ваш ΠΊΠΎΠΌΠΏ Π½Π° сутки, ΠΈ ΠΏΠΎΠΉΠ΄ΡƒΡ‚ нСсколько Π΄Ρ€ΡƒΠ³ΠΈΠΌ, нСстандартным ΠΏΡƒΡ‚Π΅ΠΌ...

Π’ΠΎΡ‚ это ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈ Β«--stage-allΒ»

  terrarium_assembler dmi-release.yml --steps=0-59 --skip-words=audit

Π—Π°Ρ‡Π΅ΠΌ всС это, обоснованиС Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ

К 2020 Π³ΠΎΠ΄Ρƒ исполнилось 30 Π»Π΅Ρ‚ языку Python, ΠΈ ΠΏΡ€ΠΈ этом ΠΎΠ½ стал самым популярным языком Π² Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³Π΅ TIOBE.

Π—Π° это врСмя Python, Ρ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ язык для обучСния, начиная с уровня ΠΌΠ»Π°Π΄ΡˆΠΈΡ… школьников, стал ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ профСссионалами Π²ΠΎ всСх областях: ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΈ Π² ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ спСктрС Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… областСй, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ астрономия, Π±ΠΈΠΎΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΈΠ»ΠΈ статистика,Β β€” Π² Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎΠΌ смыслС Π²Π΅Π·Π΄Π΅.

МоТно Π΄ΠΎΠ»Π³ΠΎ Ρ€Π°ΡΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ… Ρ‚Π°ΠΊΠΎΠ³ΠΎ успСха: повлиял Π»ΠΈ простой синтаксис, ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΉ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ, Π½ΠΎ ΠΈ Π»ΡŽΠ±Ρ‹ΠΌ Π½Π΅Π³Π»ΡƒΠΏΡ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Β«Π΄Π·Π΅Π½ ΠΏΠΈΡ‚ΠΎΠ½Π°Β», ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° удобство Π½Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, максимальная простота ΠΈ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ, удобство для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Ρ‘.

На самом Π΄Π΅Π»Π΅, это Π½Π΅Π²Π°ΠΆΠ½ΠΎ, Π° Π²Π°ΠΆΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ сСйчас PythonΒ β€” самый ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ язык (ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, для прототипирования ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ высокотСхнологичСских ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ), ΠΈΠ±ΠΎ Π² Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ Β«Π±Π°Ρ‚Π°Ρ€Π΅ΠΉΠΊΠΈΒ» практичСски для всСх областСй высоконаучной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Если Ρ€Π°Π½ΡŒΡˆΠ΅ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ прототипирования Π½ΠΎΠ²Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠ±Π΅Π³Π°Ρ‚ΡŒ ΠΊ использованию спСциализированных Β«ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² для матСматиков» — систСм Ρ‚ΠΈΠΏΠ° Mathematica, Mathcad, Mapple ΠΈΒ Ρ‚.ΠΏ. β€” с пСрСписываниСм ΠΈΡ… для Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ использования Π½Π° языки ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (C/C++/Java), Ρ‚ΠΎ сСйчас Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π½ΠΎΠ²Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² принято вСсти Π½Π° Python, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ замСняя ΠΈΠ»ΠΈ дополняя ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Π΅ Β«ΡΡ‚Π°Ρ‚ΡŒΠΈ с псСвдокодом», Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π±Π΅Π· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π° Jupyter-Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠΈ, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π°ΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎΡΡ тСкста, Ρ„ΠΎΡ€ΠΌΡƒΠ» ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΈ провСряСмого ΠΊΠΎΠ΄Π° Π½Π° Python, Π²Ρ‹Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ Π²Π΅Ρ€ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ paperswithcode.com, ΠΈ мноТСство статСй Ρ‚ΠΈΠΏΠ° Β«Transparency and reproducibility in artificial intelligenceΒ» ΠΊΠΎΠ½ΡΡ‚Π°Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ кризис воспроизводимости Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΈ фактичСски ΠΏΡ€ΠΈΠ·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Π½Π°ΡƒΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π±Ρ‹Π»ΠΈ Π² Π²Ρ‹ΡˆΠ΅ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅.

ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π½ΠΎΠ²Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π½Π° Python ΠΌΠΎΠΆΠ½ΠΎ вСсти ΠΎΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΈΠ΄Π΅ΠΉ, Ρ‡Π΅Ρ€Π΅Π· Π±ΡƒΡ€ΡŽ мноТСства ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, Π΄ΠΎ Π²Ρ‹ΠΊΠ°Ρ‚ΠΊΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ использованиС, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ получая ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ связь ΠΏΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ нСпосрСдствСнно ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π±Π΅Π· Π΄ΠΎΠ»Π³ΠΈΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ² пСрСписывания Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ. И лишь Π² ΠΊΡ€Π°ΠΉΠ½ΠΈΡ… случаях, для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈ критичСских кусков ΠΊΠΎΠ΄Π°, прибСгая ΠΊ ΡƒΡΠΊΠΎΡ€Π΅Π½ΠΈΡŽ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Π²ΠΈΠ΄Π΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… C-ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ сам ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python сущСствуСт практичСски ΠΏΠΎΠ΄ всС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½Π΅ сразу становятся Π²ΠΈΠ΄Π½Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹: Β«ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ ΠΊΠΎΠ΄Ρƒ Π½Π° Python Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Ρ‡Ρ‘ΠΌ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, ΠΎΡ‚ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Ρ… x86 Π΄ΠΎ ARMΠΎΠ², MIPSΠΎΠ² ΠΈ Π­Π»ΡŒΠ±Ρ€ΡƒΡΠΎΠ², ΠΎΡ‚ Π΄Ρ€Π΅Π²Π½ΠΈΡ… вСрсий Windows Π΄ΠΎ сСртифицированных российских линуксов?Β»

К соТалСнию, с этим всС нСпросто:

  • Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π΅ΡΡ‚ΡŒ Π²Π΅Π·Π΄Π΅.
  • Но сборка всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… стСков Python-ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉΒ β€” ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, для старых вСрсий Windows ΠΈ малораспространСнных линукс-дистрибутивов (ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ относятся ΠΈ российскиС сСртифицированныС линукс-дистрибутивы), пакСтная Π±Π°Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² дСсятки Ρ€Π°Π· мСньшС, Ρ‡Π΅ΠΌ Ρƒ популярных дистрибутивов с большим сообщСством ΠΌΠ΅ΠΉΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² (Fedora-Debian-Ubunta), Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎ устарСли, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ соврСмСнный ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ стСк ΠΏΠΎΠ²Π΅Ρ€Ρ… Π½ΠΈΡ… попросту Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
  • ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Β«Π΅Π΄ΠΈΠ½Ρ‹ΠΉ дистрибутив-ΠΏΠ°ΠΊΠ΅Ρ‚Β» с ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ (windows/linux) Π½Π΅ сильно ΠΌΠ΅Π½Π΅Π΅ проста, особСнно Π² связи со слабой ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ (libc, ld.so) линуксов ΠΈ отсутствиСм ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π² старых сСртифицированных линуксах Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ изоляции ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (docker/flatpack/snapd), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ.
  • ОсобСнно, ΠΊΠΎΠ³Π΄Π° собираСтся ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΈΡ‚ΠΎΠ½-ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², со своими зависимостями, ΠΈ Π½Π°Π΄ΠΎ достаточно цСлостно ΡƒΠΌΠ΅Ρ‚ΡŒ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π½Π΅ΠΊΡƒΡŽ Β«ΠΌΠΎΠ½ΠΎΡ€Π΅ΠΏΡƒΒ» с Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±Ρ‰ΠΈΡ… зависимостСй, ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ манипуляции ΠΈΠΌΠΈ (Β«ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ numpy-scipy-opencv…»)
  • ΠŸΡ€ΠΈ этом, часто Π½Π°Π΄ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΈ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (Π°ΡƒΠ΄ΠΈΡ‚) ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ сборки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ-исполняСмого Ρ„Π°ΠΉΠ»Π°, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ исходников β€” для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊ Π½Π΅ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°ΡΡŒ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ PIP-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ с скомпилированными Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС это с нуля, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎ сути Β«ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ линукс-дистрибутив».

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этих Π·Π°Π΄Π°Ρ‡ Π±Ρ‹Π» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ комплСкс управлСния сборкой Terrarium Assembler с вСрсиями ΠΏΠΎΠ΄ Linux ΠΈ Windows.

Основная идСя:

  • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ всС возмоТности ΠΏΠΈΡ‚ΠΎΠ½Π°, всю Π΅Π³ΠΎ магию, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π½Π΅ΠΎΠ±ΡŠΡΡ‚Π½ΠΎΠ΅ число Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΡ‹Ρ… Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… языках Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ
    • Π‘Π΅Π· ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Cython/Numba/Pyston ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… компиляторов ΠΈ транспайлСров, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ вСрсий Python.
  • Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ для ΠΊΠΎΠ΄Π° всС Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ зависимости Π½Π° Python ΠΈ систСмном ΡƒΡ€ΠΎΠ²Π½Π΅.
  • Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Python-ΠΊΠΎΠ΄ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ, Ρ‡Π΅Ρ€Π΅Π· транспайлинг Π² C/C++, добившись ускорСния ΠΈ монолитности.

Основная идСя

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

Π‘ΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ исходный Python-ΠΊΠΎΠ΄, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ускорСниС

Основная рСализация Python β€” CPython, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённая, Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ эталонная рСализация языка программирования Python, являСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, написан Π½Π° C. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° CPython ΠΈΠ΄Π΅Ρ‚ ΡƒΠΆΠ΅ большС Ρ‚Ρ€ΠΈΠ΄Ρ†Π°Ρ‚ΠΈ Π»Π΅Ρ‚: сотни тысяч ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ строк ΠΊΠΎΠ΄Π°, ΠΏΠΎΠ»Ρ‚ΠΎΡ€Ρ‹ тысячи ΠΊΠΎΠ½Ρ‚Ρ€ΠΈΠ±ΡŒΡŽΡ‚ΠΎΡ€ΠΎΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ядра, Π½Π΅ говоря ΡƒΠΆΠ΅ ΠΎ сотнях тысяч ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

Π•ΡΡ‚ΡŒ ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Python-ΠΊΠΎΠ΄Π°

  • Π² Π±ΠΎΠ»Π΅Π΅ эффСктивный Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ PyPy β€” ускорСнная, Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ рСализация Python,
  • Π² JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Pyston β€” ускорСнная, (Π΄ΠΎ 30% ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с CPython) рСализация Python),
  • Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Java-ΠΌΠ°ΡˆΠΈΠ½Ρ‹ β€” Jython.

Однако всС эти Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, приводят ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ совмСстимости с ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌΠΈ стСками Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ ΠΏΡ€ΠΈ этом Π½Π΅ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ одностороннСй компиляции со слоТным восстановлСниСм.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π² послСдниС Π³ΠΎΠ΄Ρ‹ появился быстро Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Nuitka (произносится ΠΊΠ°ΠΊ Β«Π½ΡŒΡŽΡ‚ΠΊΠ°Β», см. Π΄ΠΎΠΊΠ»Π°Π΄ Π°Π²Ρ‚ΠΎΡ€Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° с Ρ€Π°Π·ΡŠΡΡΠ½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π½ΠΎΡˆΠ΅Π½ΠΈΡ), Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΉ Π½Π΅ΠΌΠ΅Ρ†ΠΊΠΈΠΌ программистом Π² Ρ‡Π΅ΡΡ‚ΡŒ своСй русской ΠΆΠ΅Π½Ρ‹ (Β«ΠΠ½ΡŒΡŽΡ‚ΠΊΠ°Β»), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ:

  • Π’ Ρ†Π΅Π»ΠΎΠΌ, совмСстим с CPython-стСком: ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ практичСски всё, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π² стандартный CPython (дистрибутивы Python Π² Linux-дистрибутивах, Anaconda);
  • ВранслируСт Python-ΠΊΠΎΠ΄ Π² Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π‘/C++ ΠΊΠΎΠ΄, послС Ρ‡Π΅Π³ΠΎ компилируСтся стандартными Π‘/C++ компиляторами (gcc, clang, msvc); Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, благодаря ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΌΡƒ ΠΎΠΏΡ‹Ρ‚Ρƒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ C++ компиляции, часто достигаСтся ускорСниС β€” Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Nuitka Π² сравнСнии со стандартными CPython Π»ΡƒΡ‡ΡˆΠ΅ Π² Ρ€Π°Π·Ρ‹, Π° мСстами ΠΈ Π½Π° порядки;
    • ΠŸΡ€ΠΈ этом получаСтся (особСнно Π² коммСрчСской вСрсии), Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΉ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ слоТно Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ исходныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹: слоТнСС Π΄Π°ΠΆΠ΅, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ дСкомпиляции Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², написанных нСпосрСдствСнно Π½Π° Π‘/C++;
  • ΠŸΡ€ΠΈ сборкС Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ зависимости ΠΎΡ‚ скомпилированных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (DLL, .so) ΠΈ автоматичСски собираСт ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ со всСми зависимостями.

РазумССтся, Π½Π΅ всС Ρ‚Π°ΠΊ идСально, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ:

  • БистСма вычислСния зависимостСй ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ статичСского Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ
    • пропускаСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Python-ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Π±Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ;
    • Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠΌ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ΠΌ «приносит» ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ эксплуатации ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π½ΠΎ ΠΏΡ€ΠΈ этом Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ мСста Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ сборкС.

ВсС это ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Β«Π³ΠΎΠ»ΠΎΠ²ΠΎΠ»ΠΎΠΌΠ½Ρ‹Ρ…Β» ΠΎΠΏΡ†ΠΈΠΉ, ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ собираСмой ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, для удобства, ΠΏΠΎΠ²Π΅Ρ€Ρ… Nuitka Π΄ΠΎΠ»ΠΆΠ½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΈΠ±ΠΊΠΎ конфигурируСмая систСма сборки.

Гибкая конфигурация β€” YAML + Jinja templates

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° описания сборки ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ³ΠΎ языка для Π½Π΅Π΅ стара, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Когда-Ρ‚ΠΎ Π΅Π΅ сильно Π½Π΅Π΄ΠΎΠΎΡ†Π΅Π½ΠΈΠ²Π°Π»ΠΈ. Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π°Π²Ρ‚ΠΎΡ€ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° make-Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π΅ осилил сходу Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ парсСр, ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ строк ΠΈ отступы, ΠΈ залоТился Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ использования символов табуляции для Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ», Ρ‚Π΅ΠΌ самым обрСкая Π½Π° дСсятилСтия Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ программистов Π½Π° поиск Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΠ½Π°Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ошибок.

Π‘Ρ‹Π»ΠΈ ΠΈ эпохи ΠΌΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Ρ… XML-Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅ΠΌΡ‹Π΅ DSL-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ с ΡΠ°ΠΌΠΎΠ΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ парсСрами. Π’ Ρ†Π΅Π»ΠΎΠΌ, сСйчас наибольшСС распространСниС ΠΈΠΌΠ΅ΡŽΡ‚ JSON- ΠΈ YAML-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

ΠŸΡ€ΠΈ этом Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ бСзусловно Π»ΡƒΡ‡ΡˆΠ΅ Ρƒ YAML, вСдь, ΠΊΠ°ΠΊ ΠΈ Python, ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ, Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Π² восприятиС Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ структуру тСкста, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° отступах ΠΈ пропусках β€” Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ чСловСчСство освоило с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° изобрСтСния ΠΏΠ΅Ρ‡Π°Ρ‚Π½ΠΎΠ³ΠΎ слова.

Однако Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ YAML Π½Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½. К соТалСнию, Π² Π½Π΅ΠΌ Π½Π΅Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ гибкости, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Π§Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ Π² своС врСмя Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Β«YAML anchorsΒ» (Β«Node AnchorsΒ»), Π½ΠΎ, ΠΊ соТалСнию, это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎΠ³ΠΎ количСства случаСв.

А это просто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ β€”Β Ρ‡Ρ‚ΠΎΠ±Ρ‹ помСняв ΠΎΠ΄Π½Ρƒ Ρ†ΠΈΡ„Ρ€Ρƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² вСрсии Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ (ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, модуля, вСрсии Python), ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡƒΡŽ пСрСстройку процСсса сборки: Π²Ρ‹ΠΊΠ°Ρ‡ΠΊΡƒ Π½ΠΎΠ²ΠΎΠΉ вСрсии, Π²Ρ‹ΠΊΠ°Ρ‡ΠΊΡƒ всСх ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ сборку ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ.

Π Π°Π½Π΅Π΅, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π² сборочных систСмах Ρ€Π΅ΡˆΠ°Π»ΠΈΡΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ прСпроцСссора, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ cxx ΠΈΠ»ΠΈ m4.

БСйчас ситуация Π½Π΅ сильно измСнилась: Π² самой ΠΌΠΎΠ΄Π½ΠΎΠΉ систСмС управлСния конфигурациями, Ansible, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ комбинация YAML ΠΈ шаблонов Jinja.

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ схоТий ΠΏΠΎΠ΄Ρ…ΠΎΠ΄: ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π°Π·Π±ΠΎΡ€ΠΎΠΌ YAML-Ρ„Π°ΠΉΠ»Π° выполняСтся ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ Jinja-прСпроцСссированиС с подстановкой YAML-ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π³ΠΈΠ±ΠΊΡƒΡŽ систСму спСцификации сборки. Π’Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ систСму наслСдования Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΈ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Π΄Π°Π±Ρ‹ любоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС, Π±Π΅Π· нСобходимости Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ мноТСствСнного распространСния Π΅Π³ΠΎ Π² ΠΊΠΎΠ΄Π΅.

Jinja-ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, Π΄Π°ΠΆΠ΅ Π±Π΅Π· YAML, Ρƒ нас Ρ‚Π°ΠΊΠΆΠ΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² Linux-сборкС (см. Π΄Π°Π»Π΅Π΅) для прСпроцСссирования ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², скриптов выполнСния

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ сборки ΠΏΠΎΠ΄ Linux ΠΈ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ обСспСчСния пСрСносимой сборки ΠΏΠΎΠ΄ Linux, Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Π΅ΠΉ, Ρ‡Π΅ΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΠΎΠ΄ Windows. БобствСнно, настоящий успСх ΠΈ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ Windows обСспСчиваСтся Π² большСй стСпСни ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌΠΈ инвСстициями Π² ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ΄ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ вСрсии.

Π—Π΄Π΅ΡΡŒ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΈ ΠΎ совмСстимости интСрфСйсов: всС интСрфСйсы (API/ABI/…) Windows ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ «с запасом», с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ полями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ для Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсиях, Π½Π΅ ломая API/ABI ΠΈ обСспСчивая ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ.

По Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ счСту, ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ каТдая ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ вСрсия Windows содСрТит Π² сСбС, ΠΊΠ°ΠΊ ΠΌΠ°Ρ‚Ρ€Π΅ΡˆΠΊΠ°, всС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅, Ρ‡Ρ‚ΠΎ, ΠΏΠΎ сути, позволят Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ скомпилированныС прилоТСния, написанныС Ρ…ΠΎΡ‚ΡŒ дСсятки Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄ ΠΏΠΎΠ΄ 32-Π±ΠΈΡ‚Π½ΡƒΡŽ Windows 95, ΠΏΠΎΠ΄ соврСмСнной 64-Π±ΠΈΡ‚Π½ΠΎΠΉ Windows 10.

Π’ Linux, ΠΊ соТалСнию ΠΈΠ»ΠΈ ΠΊ ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. API/ABI всСх Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ самыС ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Β«libcΒ», постоянно ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ€Π°Π· Π² Π΄Π²Π° Π³ΠΎΠ΄Π° приводя ΠΊ ΠΌΠ°ΠΆΠΎΡ€Π½Ρ‹ΠΌ измСнСниям ΠΈ нСсовмСстимости ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ прилоТСния, скомпилированныС со старой вСрсиСй. Многим Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹ ошибки Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°:

  Error: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found 

Если ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Windows-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΊΠΎΠ³Π΄Π°, ΠΏΠΎ сути, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ нСсСт с собой ΠΏΠΎΡ‡Ρ‚ΠΈ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ вСрсии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π° систСма нСсСт с собой всС вСрсии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ интСрфСйсов всСх ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… вСрсий, с Linux-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ, Π³Π΄Π΅ Π² систСмС всС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ цСлостно: Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΡƒΠΆΠ½Ρ‹Ρ… вСрсий β€” Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ нСльзя Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ побСдитСля.

  • Linux-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄:

    • ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°: ΠœΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ объСма диска ΠΏΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ минимизация объСма памяти ΠΏΠΎΠ΄ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ вСрсии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (всСгда Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° ΠΎΠ΄Π½Π° вСрсия ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ). ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡ. БобствСнно, поэтому Linux-инсталляции, Π΄Π°ΠΆΠ΅ со всСми поставлСнными прилоТСниями, цСлостно скомпилированными ΠΌΠ΅ΠΉΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Π½Π° порядки мСньшС мСста ΠΈ Сдят мСньшС памяти, Ρ‡Π΅ΠΌ Windows-инсталляции со схоТим Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
    • ΠœΠΈΠ½ΡƒΡΡ‹: НуТно рСгулярно ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ прилоТСния ΠΏΠΎΠ΄ Π½ΠΎΠ²Ρ‹Π΅ вСрсии систСмных интСрфСйсов (ядра, Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Β«libcΒ»). ΠŸΡ€ΠΈ этом Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ рСгулярно ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Β«dependency hellΒ». Или Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ всС с собой, Π½ΠΎ это нСпросто (Π΄Π°Π»Π΅Π΅ ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ это принято Π΄Π΅Π»Π°Ρ‚ΡŒ).
  • Windows-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄:

    • ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°: ΠžΠ΄Π½Π°ΠΆΠ΄Ρ‹ собранноС ΠΈ скомпилированноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, скорСС всСго, Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ всСгда.
    • ΠœΠΈΠ½ΡƒΡΡ‹: ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡΡ Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ ΠΊΡƒΡ‡Ρƒ вСрсий ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Β«DLL HellΒ». К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ диска ΠΈ памяти Π±ΡƒΠ΄Π΅Ρ‚ большоС.

Β«Dependency HellΒ» vs Β«DLL HellΒ» β€” это классичСская Π΄ΠΈΠ»Π΅ΠΌΠΌΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Π²Ρ‹ΠΊΠ°Ρ‚ΠΊΠΈ, ΠΈ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² послСдниС Π³ΠΎΠ΄Ρ‹ Π² большСй части ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π³Π΄Π΅ Π½Π΅ Π½Π°Π΄ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π°ΠΉΡ‚ памяти ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° (встроСнныС систСмы ΠΈ Ρ‚.ΠΏ.), ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° стала Ρ€Π΅ΡˆΠ°Ρ‚ΡŒΡΡ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ Ρ‚ΠΎΠΉ ΠΈΠ΄Π΅ΠΈ, которая ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Β«ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ нСсти всС своС с собой», Π²Π½Π΅ зависимости ΠΎΡ‚ систСмы. Π’Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈ Java-прилоТСния со скомпилированными JAR-/WAR-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΠΈ мноТСство ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (docker, crio, openvz), давшиС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ микросСрвисной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, Π³Π΄Π΅, ΠΏΠΎ сути, Π΄Π°ΠΆΠ΅ для минимальной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠΉ ΠΌΠΈΠ½ΠΈ-ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π·Π° нСдСлю, Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ΠΈΠ΄Π΅Ρ‚ своя вСрсия Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ОБ ΠΈ вСсь Π½ΡƒΠΆΠ½Ρ‹ΠΉ стСк Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

И Π΄Π°ΠΆΠ΅ Π² дСсктопных Linux-прилоТСниях, Π΄Π°ΠΆΠ΅ Π² популярных дистрибутивах, Π³Π΄Π΅ тысячи ΠΌΠ΅ΠΉΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΡƒΡŽ сборку ΠΏΠΎΡ‡Ρ‚ΠΈ всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… opensource-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, появились ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Ρ‚ΠΈΠΏΠ° AppImage, Flatpack ΠΈ Snap, Π½Π΅ говоря ΡƒΠΆΠ΅ ΠΎ Wine-bottles для Windows-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, запускаСмых ΠΏΠΎΠ΄ Linux.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ для Ρ€Π΅Π΄ΠΊΠΈΡ…, высокотСхнологичСских-Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ, ΡƒΠ²Ρ‹, Β«Π½Π΅ с ΠΊΠ΅ΠΌΒ» Π² систСмС Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ свои Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ машинного обучСния ΠΈ распознавания ΠΎΠ±Ρ€Π°Π·ΠΎΠ², Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ «всС с собой», особСнно ΠΊΠΎΠ³Π΄Π° стоит Π·Π°Π΄Π°Ρ‡Π° Π²Ρ‹ΠΊΠ°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Π½Π° Ρ†Π΅Π»Ρ‹ΠΉ спСктр часто ΠΎΡ‡Π΅Π½ΡŒ Π΄Ρ€Π΅Π²Π½ΠΈΡ… «сСртифицированных линуксов», Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ.

Π‘Π°ΠΌΠΎΠ΅ грустноС Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° этих систСмах Π½Π΅Ρ‚ ΠΈ Ρ‚Π΅Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Β«ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΉΒ» ΠΈΠ»ΠΈ Β«ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠΉΒ» доставки β€” Π½ΠΈ docker/openvz, Π½ΠΈ AppImage, Π½ΠΈ Snap, Π½ΠΈ Flatpack. НСдавно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ объявили, Ρ‡Ρ‚ΠΎ Π² скоро Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ сСртифицированной вСрсии ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ дистрибутива docker, Π½ΠΎ вСдь Π΅Ρ‰Π΅ придСтся ΠΆΠ΄Π°Ρ‚ΡŒ Π»Π΅Ρ‚ 10-15, ΠΏΠΎΠΊΠ° замСнят старыС Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ мСста с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌΠΈ вСрсиями сСртифицированных систСм ΠΈ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π° всСх Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… мСстах. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, docker Π½Π΅ панацСя, ΠΊΠΎΠ³Π΄Π°, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ ОБ: Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ-Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с экраном ΠΈ ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€ΠΎΠΌ ΠΈ Ρ‚.Π΄. К соТалСнию, Π½Π°Π΄ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π½Π΅Ρ‚ ΠΈ придСтся Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ своС.

БобствСнно, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ΄ сСртифицированныС вСрсии Ρ‚Π°ΠΊ ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚, маскируя притаскиваниС «своСй систСмы» ΠΏΠΎΠ΄ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ RPM-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ принСсСнныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π΄Π°ΠΆΠ΅ Β«Ρ€Π°Π·Ρ€ΡƒΡˆΠ°ΡŽΡ‚Β» Ρ†Π΅Π»Π΅Π²ΡƒΡŽ систСму.

Но ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ линуксы c RPM- ΠΈ DEB-ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ ΠΈ Π½Π°Π΄ΠΎ Π±Ρ‹Π»ΠΎ просто ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

  • ΡΡ‚Π°Π²ΠΈΠ»ΠΎΡΡŒ простым ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π±Π΅Π· доступа ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Ρƒ;
  • Π·Π°ΠΏΡƒΡΠΊΠ°Π»ΠΎΡΡŒ ΠΈ настраивало всС Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ само;
  • Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ ΠΏΠΎΠ΄ всС сСртифицированныС линуксы.

На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³-Β«Ρ‚Π΅Ρ€Ρ€Π°Ρ€ΠΈΡƒΠΌΒ» β€” Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π½ΠΎ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ систСмы, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. А Β«Ρ‚Π΅Ρ€Ρ€Π°Ρ€ΠΈΡƒΠΌΠΎΠΌΒ» ΠΎΠ½ Ρƒ нас называСтся, ΠΈΠ±ΠΎ основноС Π΅Π³ΠΎ Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ β€” Β«Π·Π΅ΠΌΠ½ΠΎΠ²ΠΎΠ΄Π½Ρ‹Π΅Β», скомпилированныС ΠΈΠ»ΠΈ поставляСмыС Π² исходниках Python-прилоТСния.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° вычислСния зависимостСй

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ зависимостСй, ΠΊΠ°ΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ систСму распространСнного Linux-дистрибутива с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ числом ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², послС Ρ‡Π΅Π³ΠΎ Β«Π²Ρ‹Ρ€Π°Π²Π½ΡΡ‚ΡŒΒ» спСцификации сборки, указывая Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π² соотвСтствии с этим дистрибутивом ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ инструмСнты ΠΌΠ΅ΠΉΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² этого дистрибутива для вычислСния зависимостСй.

Как ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ, ΠΌΡ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ RPM-дистрибутивы сСрии Fedora Core, Π½ΠΎ тСхничСски ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ [любой RPM-based дистрибутив](http://ru.wikipedia.org/wiki/Бписок_дистрибутивов_Linux#ΠžΡΠ½ΠΎΠ²Π°Π½Π½Ρ‹Π΅_Π½Π°_RPM β€” список RPM-дистрибутивов), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΅ΡΡ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° dnf repoquerΡƒ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ зависимости ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Β«Π»ΠΎΠΊΠΈΠ½Π³Π°Β» ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° связана с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎΠ΄ Linux.

Если Β«Portable_ExecutableΒ» β€” Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ выполнСния Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎΠ΄ Windows достаточно ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ (любая вСрсия Windows ΠΏΠΎΠΉΠΌΠ΅Ρ‚ ΠΈ смоТСт ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ скомпилированный windows-bin-Ρ„Π°ΠΉΠ», ΠΈ благодаря ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΡƒΠΆΠ΅ обсуТдали Π²Ρ‹ΡˆΠ΅, всС скорСС всСго Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ), Ρ‚ΠΎ ELF β€” Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ выполняСмого Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠ΄ Linux Π±ΠΎΠ»Π΅Π΅ Ρ…ΠΈΡ‚Ρ€Ρ‹ΠΉ, содСрТащий ΠΆΠ΅ΡΡ‚ΠΊΡƒΡŽ ссылку Π½Π° Β«ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€-Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΒ», ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ спСцифичноС для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ дистрибутива Ρ‚ΠΈΠΏΠ° /lib64/ld-linux-x86-64.so.2. Π’ΠΎΠ³Π΄Π°, соотвСтствСнно, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ Π·Π°ΠΌΠΊΠ½ΡƒΡ‚ΠΎΠ΅ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ систСмС, Π½Π°Π΄ΠΎ:

  • Π²Π·ΡΡ‚ΡŒ ΠΈΠ· сборочной систСмы ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ β€” это Π±ΡƒΠ΄Π΅Ρ‚ наш ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ ld.so;
  • Π²Π·ΡΡ‚ΡŒ всС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ-зависимости;
  • Π·Π°ΠΏΠ°Ρ‚Ρ‡ΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ patchelf, всС исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π±Π΅Ρ€Π΅ΠΌ с собой, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ завязаны Π½Π° наш Β«ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Β»;
  • для запуска нашСго Π·Π°ΠΏΠ°Ρ‚Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ bin-Ρ„Π°ΠΉΠ»Π° ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ систСмы Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π΅Π³ΠΎ, запуская наш ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ пСрСдавая Π΅ΠΌΡƒ Π·Π°ΠΏΠ°Ρ‚Ρ‡Π΅Π½Π½Ρ‹ΠΉ exe-Ρ„Π°ΠΉΠ» Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.
#!/bin/bash
x="$(readlink -f "$0")"
b="python3.8"
d="$(dirname "$x")/.."
ldso="$d/pbin/ld.so"
realexe="$d/pbin/$b"
ulimit -S -c unlimited 
export GI_TYPELIB_PATH="$d/lib64/girepository-1.0"
export GDK_PIXBUF_MODULE_FILE="$d/lib64/gdk-pixbuf-2.0/2.10.0/loaders.cache"
export GDK_PIXBUF_MODULEDIR="$d/lib64/gdk-pixbuf-2.0/2.10.0/loaders"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$d/lib64"
LANG=C LC_ALL=C PYTHONPATH="$d/local/lib/python3.8/site-packages:$d/local/lib64/python3.8/site-packages:$PYTHONPATH" exec -a "$0" "$ldso" "$realexe" -s "$@"

Однако, Ссли ΠΈΠ΄Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ² ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, Ρ‚ΠΎ ΠΏΠ°Ρ‚Ρ‡ Π½Π΅ Π½ΡƒΠΆΠ΅Π½, ΠΈ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ просто ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.

КакиС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… Π·Π°ΠΏΠ°Ρ‚Ρ‡ΠΈΡ‚ΡŒ (опрСдСляСтся рСгулярными выраТСниями), Π° ΠΊΠ°ΠΊΠΈΠ΅ просто ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ сСкциСй Ρ„Π°ΠΉΠ»Π° спСцификаций:

bin_regexps:
  need_patch:
    - /usr/bin/python3.\d
    - /usr/bin/bash
    - /usr/bin/pdftoppm
    - /usr/lib/cups/filter/imagetopdf
    - /usr/lib/cups/filter/imagetoraster
    - /usr/lib/cups/filter/pdftopdf
    - /usr/bin/gs
    - /usr/bin/tesseract
    - .*screenmark
    - .*dmextract-printer
    - .*dmextract-screen
    - .*smoketest

  just_copy:  
    - /usr/bin/gs
    - /usr/local/bin/dmprinter  #need rewrite

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Linux-Ρ‚Π΅Ρ€Ρ€Π°Ρ€ΠΈΡƒΠΌΠ°

На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Β«ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³-Ρ‚Π΅Ρ€Ρ€Π°Ρ€ΠΈΡƒΠΌΒ» со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΠ°ΠΏΠΊΠ°ΠΌΠΈ:

  • lib64 β€” Бюда ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ всС динамичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ вычислили ΠΏΠΎ зависимостям;
  • pbin β€” Бюда ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ всС выполняСмыС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ нашли Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…; ΠΎΠ½ΠΈ ΠΏΠΎΠΏΠ°Π»ΠΈ ΠΏΠΎΠ΄ ΠΎΡ‚Π±ΠΎΡ€ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Β«need_patchΒ», ΠΌΡ‹ ΠΈΡ… Π·Π°ΠΏΠ°Ρ‚Ρ‡ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ наш ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€-Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ;
  • bin β€”
    • usr/bin β€” Π£Ρ‚ΠΈΠ»ΠΈΡ‚Ρ‹, попавшиС ΠΏΠΎΠ΄ Β«just_copyΒ», просто скопированныС;
    • ebin β€” Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π° Π½Π°ΡˆΠΈΡ… ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ ΠΈΠ· систСмы-носитСля.

ΠœΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, Ρ„Π°ΠΉΠ»Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, тСстов, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ. ВСхничСски, шаблон для сборки Ρ‚Π΅Ρ€Ρ€Π°Ρ€ΠΈΡƒΠΌΠ° опрСдСляСтся Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ Π½Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ шаблонов:

templates_dirs: 
    - linux-deploy-template

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² этом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Ссли ΠΎΠ½ тСкстовый, считаСтся шаблоном ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Jinja-шаблонов, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ само имя, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ python{{ python_version_1 }}.{{ python_version_2 }} прСвращаСтся, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² python3.10.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Π½ΡƒΡ‚Ρ€ΠΈ скриптов запуска, Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… Π² Β«ebinΒ», ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊΠΈΠ΅ Π±Π»ΠΎΠΊΠΈ:

{% if release %}
b="screenmark"
{% else %}
b="python{{ python_version_1 }}.{{ python_version_2 }}"
{% endif %}

…

{% if release %}
LANG=C LC_ALL=C PYTHONPATH="$d/local/lib/python{{ python_version_1 }}.{{ python_version_2 }}/site-packages:$d/local/lib64/python{{ python_version_1 }}.{{ python_version_2 }}/site-packages:$PYTHONPATH" exec -a "$0" "$ldso" "$realexe" "$@"
{% else %}
LANG=C LC_ALL=C PYTHONPATH="$d/local/lib/python{{ python_version_1 }}.{{ python_version_2 }}/site-packages:$d/local/lib64/python{{ python_version_1 }}.{{ python_version_2 }}/site-packages:$PYTHONPATH" exec -a "$0" "$ldso" "$realexe" -m screenmark "$@"
{% endif %}

Π’.Π΅. Π² случаС установлСнной ΠΎΠΏΡ†ΠΈΠΈ Β«releaseΒ» β€” Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ скомпилированный выполняСмый Ρ„Π°ΠΉΠ», Π° Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС (Ρ€Π΅ΠΆΠΈΠΌ Β«ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ сырого ΠΏΠΈΡ‚ΠΎΠ½Π°Β») β€” Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Python-ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.

Π§Ρ‚ΠΎ касаСтся Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΠ½ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π±Π΅Π· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Terrarium Adapter: Запуск Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой

Основой плюс нашСго ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ТСсткой ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ (docker/flatpack ΠΈ Ρ‚.ΠΏ.) β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹/устройства Ρ†Π΅Π»Π΅Π²ΠΎΠΉ систСмы ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² нашСм Β«Ρ‚Π΅Ρ€Ρ€Π°Ρ€ΠΈΡƒΠΌΠ΅Β».

Однако, это Π±Ρ‹Π»ΠΎ нСпросто ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Π’Π΅Π΄ΡŒ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ находимся Π²Π½ΡƒΡ‚Ρ€ΠΈ процСсса, с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ Β«Ρ‚Π΅Ρ€Ρ€Π°Ρ€ΠΈΡƒΠΌΠ°Β», Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ процСсс, с ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ систСмы, нСпросто. Π”Π° ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅, Π½Π°Π΄ΠΎ сначала Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ: Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π»ΠΈ Π½Π°ΠΌ «внСшнюю» ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ, ΠΈΠ»ΠΈ Β«Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽΒ».

ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΡ‹ это Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ: запуск ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π³Π΄Π΅-Ρ‚ΠΎ Π² Π³Π»ΡƒΠ±ΠΈΠ½Π°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π½Π°ΠΌΠΈ Python-ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Ρ„ΠΎΡ€ΠΊΠ°Ρ‚ΡŒ ΠΈ ΠΏΠ°Ρ‚Ρ‡ΠΈΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π½Π°ΠΌ Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… сил.

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π΅ΡΡ‚ΡŒ Python-ΠΏΠ°ΠΊΠ΅Ρ‚ terrarium_adapter β€” ΠΏΠ°ΠΊΠ΅Ρ‚ обСспСчСния Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ совмСстимости Linux-Ρ‚Π΅Ρ€Ρ€Π°Ρ€ΠΈΡƒΠΌΠ°.

Достаточно ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° python…

import terrarium_adapter

… ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ monkey-ΠΏΠ°Ρ‚Ρ‡ΠΈΠ½Π³Π° всС Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Β«subprocessΒ» Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ…ΠΈΡ‚Ρ€Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ·, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт:

  • Π² случаС наличия Ρƒ Π² нашСм Ρ‚Π΅Ρ€Ρ€Π°Ρ€ΠΈΡƒΠΌΠ΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΡ…;
  • Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Ρ…ΠΈΡ‚Ρ€Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ внСшниС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΈΠ· Ρ†Π΅Π»Π΅Π²ΠΎΠΉ систСмы.

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ схСма для понимания

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ схСма для понимания

НСсколько ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€ΠΎΠ»Π΅ΠΉ.

Π’ΠΎΠΎΠ±Ρ‰Π΅, это Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ, Ρ‚.Π΅. ΠΌΡ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΡƒΡ‚ΡŒ «супСраппа», ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅Π΄ΠΈΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ гСнСрится ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр- ΠΈ Ρ‚.ΠΏ. β†’ это ΠΏΡƒΡ‚ΡŒ ΠΊ Π³Π»ΡƒΡ…ΠΎΠΌΡƒ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Ρƒ (Π³Π΄Π΅ практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ быстро Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния, Π»ΠΈΠ±ΠΎ Π½Π΅ сломав всС, Π»ΠΈΠ±ΠΎ Π±Π΅Π· свСрхдолгих пСрСтСстирований всСго), Ρ‚.Π΅. Ссли ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ (обновлСния, трСбования ΠΊ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ надСТности) β€” Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ сразу ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ Π½Π° Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, ΠΈΠ±ΠΎ нСсмотря Π½Π° ΠΎΠ±Ρ‰Π΅ΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²-исходников Ρ‚ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΡƒΡ‡Π° ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ гибкости, ΠΊΠΎΠ³Π΄Π° ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ, ΠΈ ΠΏΠ΅Ρ€Π΅Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

НС говоря ΡƒΠΆ ΠΎ Π΄ΠΈΡ‡Π°ΠΉΡˆΠ΅ΠΉ слоТности Β«Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ уровня косвСнности», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сдСлаСт ΠΈ Ρ‚Π°ΠΊ нСпростой спСк-Ρ„Π°ΠΉΠ» вовсС нСвмСняСмо слоТным.

Но ΠΏΠΎΠΊΠ° оставлСна нСкая (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ) Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСсколько ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ставят ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Π² ΠΎΠ΄Π½Ρƒ ΠΏΠ°ΠΏΠΊΡƒ β€” ΠΎΡ‚Π»ΠΈΡ‡Π°ΡΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ β€” Ρ„Π°ΠΉΠ»ΠΎΠΌ Β«isodistr.txtΒ» (Π³Π΄Π΅ прописано Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Β«Π² ΠΊΠ°ΠΊΠΎΠΉ Ρ€ΠΎΠ»ΠΈ участвуСт этот ΠΏΠ°ΠΊΠ΅Ρ‚Β».

Π’.Π΅. Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя всС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ для условно Π½Π΅ΠΊΠΎΠΉ Π±Π°Π·Ρ‹ с интСрфСйсами ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ прокси-сСрвисами. ВсС сразу. И Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… β€” всС сСрвисы Π½Π° ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΎΠ΄Π΅, Ρ‡Π°ΡΡ‚ΡŒ сСрвисов (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ прокси), (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°Π·Π°) ΠΈ Ρ‚.ΠΏ.

Один ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² β€” ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ этот ΠΏΠ°ΠΊΠ΅Ρ‚ Π²Π΅Π·Π΄Π΅, Π½Π° всС Π½ΠΎΠ΄Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ конфигурируя Π² ΠΊΠ°ΠΊΠΎΠΉ Ρ€ΠΎΠ»ΠΈ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ (Ρ…ΠΎΡ‚ΡŒ Π² /etc/xxx/config.yml, Ρ…ΠΎΡ‚ΡŒ Π² /etc/xxx/config.yml ΠΊΠ»Π°ΡΡ‚ΡŒ, Ρ…ΠΎΡ‚ΡŒ ΠΊΡƒΠ΄Π°). ВсС это Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ…ΠΎΡ‚ΡŒ AnsiblΠΎΠΌ-SoltStackΠΎΠΌ-Puppetβ€”, Π΄Π° Ρ…ΠΎΡ‚ΡŒ rsync c ssh, ΠΈΠ»ΠΈ Ρ‚ΡƒΠΏΡ‹ΠΌΠΈ инструкциями для Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Но, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, это

  • ΠΊΠΎΠ³Π΄Π° ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ сборкС сразу Π΄Π΅Π»Π°Π΅ΠΌ нСсколько ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠΌ Β«isodistr.txtΒ» (вСрсии, таймстампы — всС ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅)
  • эти ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ставятся Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΠ²ΡƒΡŽΡ‰ΠΈΠ΅ Π½ΠΎΠ΄Ρ‹ (Ρ…ΠΎΡ‚ΡŒ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΏΠ°, Ρ…ΠΎΡ‚ΡŒ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΡΠ΅Π»Π΅ΠΊΡ‚ΠΈΡ€ΡƒΡΡΡŒ Π²ΠΈΠ»Π΄ΠΊΠ°Ρ€Π΄Π°ΠΌΠΈ)
   ssh proxy.site.gov apt-get install -y "product-proxy*.deb"
   ssh frontend.site.gov apt-get install -y "product-frontend*.deb"
   ssh db.site.gov apt-get install -y "product-database*.deb"

Π’ΠΎΠ³Π΄Π° настроСчным скриптам инсталляции-запуска Π½Π°Π΄ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° всСгда ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉΡΡ isodistr.txt, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΉ Ρ€ΠΎΠ»ΠΈ вСсь этот софт ΡƒΠΆΠ΅ оказался Π½Π° этой Π½ΠΎΠ΄Π΅.

Вакая ΡˆΡ‚ΡƒΠΊΠ° сСйчас дСлаСтся «самыми Π»Π΅Π³ΠΊΠΈΠΌΠΈ касаниями β€” Ссли Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ строковый label Π² спСкС Π½Π° список Ρ‚ΠΈΠΏΠ°:

label:
  - dmic
  - dmic-balancer
  - dmic-proxy
  - dmic-storage

About

Generate Portable Linux Applications, just portable folders

Resources

License

Stars

Watchers

Forks

Packages

No packages published