https://github.com/ngrsoftlab/astra-python-build-utils-image
Проект сборочного образа Python на основе отечественной ОС Astra Linux
https://github.com/ngrsoftlab/astra-python-build-utils-image
astralinux build devops docker makefile podman pre-commit python shell
Last synced: about 1 month ago
JSON representation
Проект сборочного образа Python на основе отечественной ОС Astra Linux
- Host: GitHub
- URL: https://github.com/ngrsoftlab/astra-python-build-utils-image
- Owner: NGRsoftlab
- License: mit
- Created: 2025-08-06T13:19:25.000Z (11 months ago)
- Default Branch: master
- Last Pushed: 2026-01-29T09:53:19.000Z (5 months ago)
- Last Synced: 2026-04-10T17:37:26.561Z (2 months ago)
- Topics: astralinux, build, devops, docker, makefile, podman, pre-commit, python, shell
- Language: Makefile
- Homepage: https://www.ngrsoftlab.ru
- Size: 264 KB
- Stars: 1
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README

# Python build utils

Ascii svg art by aasvg.
## Description
Среда для сборки контейнера с зависимостями для Python. Основан на [сборочных компонентах Python](https://devguide.python.org/getting-started/setup-building) и таблице соотношения [Debian-Astra](https://wiki.astralinux.ru/pages/viewpage.action?pageId=53646577)
Присоединяйтесь к нашим социальным сетям:
## Contents
- [Python build utils](#python-build-utils)
- [Description](#description)
- [Contents](#contents)
- [What it is](#what-it-is)
- [How to work with](#how-to-work-with)
- [Build variables](#build-variables)
- [Assembly concept](#assembly-concept)
- [Assembly variables](#assembly-variables)
- [How test local](#how-test-local)
- [How to install it](#how-to-install-it)
- [Miscellaneous](#miscellaneous)
## [What it is](#contents)
Dockerfile для сборки Python, на основе отечественной ОС AstraLinux
## [How to work with](#contents)
Для начала работы необходимо установить [pre-commit](https://pre-commit.com/) и хуки
```console
$ 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 --all-files`.
> Если Вы понимаете что творите и хотите пропустить проверку `pre-commit`-ом воспользуйтесь `--no-verify`, пример `git commit -m "Добавил изменения и не хочу проверки" --no-verify`
Собрать образ `Astra Linux based`
```shell
## 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}" \
.
```
### [Build variables](#contents)
| Имя | Значение по умолчанию | Тип | Описание |
| :--------------- | :-------------------: | :----: | ------------------------------------------------------------------------------------------: |
| `image_registry` | '' | string | Адрес до реестра образа. Например: `--build-arg image_registry=my-container-registry:1111/` |
| `image_name` | astra | string | Имя образа. |
| `image_version` | 1.7.5-slim | string | Версия образа. |
Таблица 1. Переопределяемые аргументы для сборки образа.
> [!tip]
> Особенности сборки:
> вспомогательный [ресурс](https://www.build-python-from-source.com) по сборке
## [Assembly concept](#contents)
- Представление [Makefile-а](init/Makefile.default.mk), который используется в CI-е
- Представление [Makefile-а](init/Makefile.svace.mk), который используется в анализатором Svace
### [Assembly variables](#contents)
Данные переменные могут использоваться как для локальной сборки, так и для сборки через CI. Данные переменные применимы и оказывают эффект на [скрипт](init/Makefile.default.mk). Данный скрипт работает в следующих режимах:
- Сборка `python` с прохождением всех тестов сборки
- Сборка `python` без прохождением всех тестов сборки
| Имя | Значение по умолчанию | Тип | Описание |
| :--------------------------- | :---------------------------------: | :--------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| `PYTHON_VERSION` | `${CI_COMMIT_REF_NAME}` | stringspec | Ветка/тег собираемого интерпретатора. Если не указно, то использует [предопределенные переменные GitLab-a](https://docs.gitlab.com/ci/variables/predefined_variables). Если предопределенная переменная отсутствует, то используется значение по умолчанию: `test-version`. |
| `MAKEFILE_INSTALL_DIR` | /usr/local | string | Значение пути, куда будет установлен конечная версия сборки, после сборки. |
| `MAKEFILE_NUMBER_OF_CPUS` | 20 | integer | Количество ядер `CPU`, которое будет использовано по умолчанию. Если значение велико для конкретной сборки, то можно проверить максимум посредством команды `nproc --ignore 1` |
| `MAKEFILE_PYTHON_DEPLOY_DIR` | [тут](init/Makefile.default.mk#L78) | stringspec | Название директории, куда будет экспортирован артефакт для последующего деплоя в реестр артефактов. |
| `MAKEFILE_SKIP_TEST` | FALSE | string | Включить/Отключить пропуск тестов. По умолчанию тесты включены. Чтобы отключить необходимо экспортировать переменную в режиме `TRUE`: `export MAKEFILE_SKIP_TEST=TRUE`. |
| `LIBCRYPTO_PATH` | [тут](init/Makefile.default.mk#L74) | stringspec | Путь до общего объекта библиотеки `libcrypto.so*`. В последующем он будет импортирован в сборку. |
| `LIBSSL_PATH` | [тут](init/Makefile.default.mk#L75) | stringspec | Путь до общего объекта библиотеки `libssl.so*`. В последующем он будет импортирован в сборку. |
Таблица 2. Переопределяемые аргументы для сборки в управлении Makefile.
### [How test local](#contents)
1. Склонировать репозиторий с компилятором
2. Войти в интерактивную среду данного образа: `docker run -it --rm -v "$(pwd):/build" -w /build python-build-utils:1.0.0-astra1.7.5 bash`
3. Объявить [необходимые](#assembly-variables) переменные, чтобы сформировать окружение для работы скрипта
4. Перенести `Makefile` в директорию с компилятором: `cp ./init/Makefile /path/to/python/repo/Makefile-build`
5. Запустить сборщик: `make -f Makefile-build all`
Пример запуска сборщика
```shell
## Если необходимо пропустить тесты
export MAKEFILE_SKIP_TEST=TRUE
make -f Makefile-build all
```
## [How to install it](#contents)
**Шаги по установке продукта**:
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`
Пример:
```shell
## Скачиваем артефакт
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 < docs/images/logo.svg
```