Skip to content

Проект сборочного образа Python на основе отечественной ОС Astra Linux

License

Notifications You must be signed in to change notification settings

NGRsoftlab/Astra-python-build-utils-image

Repository files navigation

NGRSOFTLAB logo

Python build utils

Dive efficiency Made with love Powered by Docker NGR Team

Python image

Ascii svg art by aasvg.

Description

Среда для сборки контейнера с зависимостями для Python. Основан на сборочных компонентах Python и таблице соотношения Debian-Astra

Присоединяйтесь к нашим социальным сетям:

NGR Social Telegram       NGR Social Media

Contents

Dockerfile для сборки Python, на основе отечественной ОС AstraLinux

Для начала работы необходимо установить pre-commit и хуки

$ pip install pre-commit
$ pre-commit --version

pre-commit 4.2.0

$ pre-commit install

pre-commit installed at .git/hooks/pre-commit
pre-commit installed at .git/hooks/commit-msg
pre-commit installed at .git/hooks/pre-push

Warning

Чтобы проверить свои изменения, воспользуйтесь командой pre-commit run --all-files. Чтобы проверить конкретную задачу, воспользуетесь командой pre-commit run <target> --all-files. Если Вы понимаете что творите и хотите пропустить проверку pre-commit-ом воспользуйтесь --no-verify, пример git commit -m "Добавил изменения и не хочу проверки" --no-verify

Собрать образ Astra Linux based

## Export Python build utils version for 1.7.5
export ASTRA_VERSION='1.7.5-slim'
export PYTHON_BUILD_UTILS_VERSION="1.0.0-astra${ASTRA_VERSION}"

## Python build utils image: 367MB
docker build \
    --progress=plain \
    --no-cache \
    -t python-build-utils:"${PYTHON_BUILD_UTILS_VERSION}" \
    .
Имя Значение по умолчанию Тип Описание
image_registry '' string Адрес до реестра образа. Например: --build-arg image_registry=my-container-registry:1111/
image_name astra string Имя образа.
image_version 1.7.5-slim string Версия образа.
Таблица 1. Переопределяемые аргументы для сборки образа.

 

Tip

Особенности сборки: вспомогательный ресурс по сборке

  • Представление Makefile-а, который используется в CI-е
  • Представление Makefile-а, который используется в анализатором Svace

Данные переменные могут использоваться как для локальной сборки, так и для сборки через CI. Данные переменные применимы и оказывают эффект на скрипт. Данный скрипт работает в следующих режимах:

  • Сборка python с прохождением всех тестов сборки
  • Сборка python без прохождением всех тестов сборки
Имя Значение по умолчанию Тип Описание
PYTHON_VERSION ${CI_COMMIT_REF_NAME} stringspec Ветка/тег собираемого интерпретатора. Если не указно, то использует предопределенные переменные GitLab-a. Если предопределенная переменная отсутствует, то используется значение по умолчанию: test-version.
MAKEFILE_INSTALL_DIR /usr/local string Значение пути, куда будет установлен конечная версия сборки, после сборки.
MAKEFILE_NUMBER_OF_CPUS 20 integer Количество ядер CPU, которое будет использовано по умолчанию. Если значение велико для конкретной сборки, то можно проверить максимум посредством команды nproc --ignore 1
MAKEFILE_PYTHON_DEPLOY_DIR тут stringspec Название директории, куда будет экспортирован артефакт для последующего деплоя в реестр артефактов.
MAKEFILE_SKIP_TEST FALSE string Включить/Отключить пропуск тестов. По умолчанию тесты включены. Чтобы отключить необходимо экспортировать переменную в режиме TRUE: export MAKEFILE_SKIP_TEST=TRUE.
LIBCRYPTO_PATH тут stringspec Путь до общего объекта библиотеки libcrypto.so*. В последующем он будет импортирован в сборку.
LIBSSL_PATH тут stringspec Путь до общего объекта библиотеки libssl.so*. В последующем он будет импортирован в сборку.
Таблица 2. Переопределяемые аргументы для сборки в управлении Makefile.

 

  1. Склонировать репозиторий с компилятором
  2. Войти в интерактивную среду данного образа: docker run -it --rm -v "$(pwd):/build" -w /build python-build-utils:1.0.0-astra1.7.5 bash
  3. Объявить необходимые переменные, чтобы сформировать окружение для работы скрипта
  4. Перенести Makefile в директорию с компилятором: cp ./init/Makefile /path/to/python/repo/Makefile-build
  5. Запустить сборщик: make -f Makefile-build all

Пример запуска сборщика

## Если необходимо пропустить тесты
export MAKEFILE_SKIP_TEST=TRUE
make -f Makefile-build all

Шаги по установке продукта:

  1. Скачать необходимый компилятор из реестра артефактов
  2. Удалить старые бинарные файлы и экспортировать новые tar -C /usr/local --strip-components 1 -xzf python-v3.13.2-linux-amd64.tar.gz
  3. Экспортировать в переменные среды библиотек новый путь export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/ssl"
  4. Проверить версию установленного бинарного файла python3 --version

Пример:

## Скачиваем артефакт
curl --silent \
    https://example.registry.com/python/python-v3.13.2-linux-amd64.tar.gz | tar -C "/usr/local" --strip-components 1 -zx

## Экспортируем динамических/разделяемых библиотек для линкера
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/ssl"

## В качестве проверки проверяем версию продукта
python3 --version
pip3 --version

## Попробуем установить пакет
pip3 install boto3

## Если необходимо очистить Python, то необходимо изучить уровень поставляемой вложенности
tar --exclude="*/*/*/*" -tf python-v3.13.2-linux-amd64.tar.gz

## Получаем что-то вроде такого
rm -rfv /usr/local/bin/pydoc3* \
        /usr/local/bin/pip3* \
        /usr/local/bin/python3* \
        /usr/local/bin/idle* \
        /usr/local/include/python3.13 \
        /usr/local/lib/python3.13 \
        /usr/local/lib/pkgconfig/python-* \
        /usr/local/lib/pkgconfig/python3* \
        /usr/local/lib/libpython3.13.a \
        /usr/local/share/man/man1/python3.1 \
        /usr/local/share/man/man1/python3.13.2

## Также можно протестировать модули
NUMBER_OF_CPUS=$(nproc --ignore 1)
python3 -m test -j "${NUMBER_OF_CPUS}"

## Для теста test.test_asyncio.test_base_events test_socket
## потребуется дополнительно установить пакет:
apt update && apt install -y netbase

## Ожидаемый вывод после тестирования
cat <<EOFTEST
== Tests result: SUCCESS ==

36 tests skipped:
    test.test_asyncio.test_windows_events
    test.test_asyncio.test_windows_utils test.test_gdb.test_backtrace
    test.test_gdb.test_cfunction test.test_gdb.test_cfunction_full
    test.test_gdb.test_misc test.test_gdb.test_pretty_print
    test_android test_apple test_asdl_parser test_clinic test_ctypes
    test_dbm_gnu test_dbm_ndbm test_dbm_sqlite3 test_devpoll
    test_free_threading test_generated_cases test_idle test_ioctl
    test_kqueue test_launcher test_msvcrt test_readline test_sqlite3
    test_stable_abi_ctypes test_startfile test_tcl test_tkinter
    test_ttk test_ttk_textonly test_turtle test_winapi
    test_winconsoleio test_winreg test_wmi

9 tests skipped (resource denied):
    test_curses test_peg_generator test_pyrepl test_smtpnet
    test_socketserver test_urllib2net test_urllibnet test_winsound
    test_zipfile64

435 tests OK.

Total duration: 3 min 1 sec
Total tests: run=42,375 skipped=2,141
Total test files: run=471/480 skipped=36 resource_denied=9
Result: SUCCESS
EOFTEST

Лого для проекта создано при помощи aasvg проекта. Вы можете создать такое же и/или модифицировать имеющееся. Для этого воспользуйтесь сайтом или установите figlet. Если Вы используете способ с установкой figlet, то вдобавок необходимо сказать необходимый шрифт, например я использую Doom. Далее, необходимо воспользоваться aasvg и конвертировать ascii арт в svg. Обратите внимание - по умолчанию будет svg в красном цвете, чтобы изменить цвет, необходимо изменить его определение тут

$ curl 'http://www.figlet.org/fonts/doom.flf' -o /usr/share/figlet/doom.flf
$ curl 'http://www.figlet.org/fonts/larry3d.flf' -o /usr/share/figlet/larry3d.flf
$ figlet -f doom 'Python Build Utils'

______      _   _                ______       _ _     _ _   _ _   _ _
| ___ \    | | | |               | ___ \     (_| |   | | | | | | (_| |
| |_/ _   _| |_| |__   ___  _ __ | |_/ /_   _ _| | __| | | | | |_ _| |___
|  __| | | | __| '_ \ / _ \| '_ \| ___ | | | | | |/ _` | | | | __| | / __|
| |  | |_| | |_| | | | (_) | | | | |_/ | |_| | | | (_| | |_| | |_| | \__ \
\_|   \__, |\__|_| |_|\___/|_| |_\____/ \__,_|_|_|\__,_ \___/ \__|_|_|___/
       __/ |
      |___/

$ aasvg --source --embed < ./docs/ascii.txt > docs/images/logo.svg

About

Проект сборочного образа Python на основе отечественной ОС Astra Linux

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published