Libseccomp: RFE: اجعل روابط الثعبان متاحة عبر النقطة

تم إنشاؤها على ٢٤ ديسمبر ٢٠١٦  ·  9تعليقات  ·  مصدر: seccomp/libseccomp

enhancement prioritlow

ال 9 كومينتر

سأفكر في ذلك ، لكنني أعتبر أن هذا يمثل أولوية منخفضة للغاية في الوقت الحالي (يمكن أن يتغير دائمًا).

للرجوع إليها في المستقبل ، وثائق Python حول تغليف / توزيع الكود:

شكرًا pcmoore على التعليقات على العلاقات العامة. كنت آمل أن أساعد في تغليف روابط الثعبان وبدأت في البحث عنها الليلة الماضية.

كانت بعض الإصلاحات السريعة تضيف الملف MANIFEST.in وتقوم بتحديث ملفات setup.py. تمكنت من الحصول على setup.py المحدث للعمل مع pip install ، لكنه بالتأكيد يحتاج إلى مزيد من العمل للعمل بالفعل مع إصدار التطوير (لم أنظر في فشل # 217 حتى الآن ، ولكن ربما قريبًا ).

IMO ، سيكون من المنطقي اقتطاع ارتباطات Python إلى repo منفصل لتحسين سير عمل dev / test / release. لقد عملت في مشاريع Python ، لكن ليس كثيرًا على المشاريع Cythonized ، لكنني سعيد بالمساعدة بأي صفة ممكنة.

وكنت آمل أن يساعد خارجا على إنشاء مستندات بعد تحديد رقم 61 (والتي من المحتمل أن تكون مبسطة إذا انتقلنا هذا الريبو الجديد، على الرغم من، أتساءل كيف sphinx بيثون مقابض أداة الوثائق cython الملفات).

من تعليق pcmoore في العدد 216:

نحتاج أساسًا إلى تحديد ما إذا كنا نريد الاستمرار في دعم روابط Python كجزء من توزيع مصدر libseccomp الرئيسي أو إذا كنا نريد تقسيمها كما نفعل مع روابط golang.

تعجبني فكرة فصل روابط python من حزمة libseccomp الرئيسية ، وأوافق أيضًا على أنها ذات أولوية منخفضة إلى حد ما بالنسبة لي. إذا كان شخص آخر مهتمًا بالتقاط العمل ، فسأساعد بكل سرور في مراجعته ، على الرغم من :).

راجع للشغل أوافق على أن روابط الثعبان يجب أن تكون في ريبو منفصل. على الرغم من أنني لا أتطوع. : ^)

إذا كان بإمكان أي شخص لديه أذونات لإنشاء repo جديد ضمن مؤسسة seccomp إعداده ، فيمكنني سحب روابط Python من الريبو وإنشاء علاقات عامة.

هناك نوعان من التغييرات التي أتوقعها:

  • استخدم أدوات بناء لغة Python الأصلية ، يجب أن يكون setup.py build كافيًا
  • يمكن ترميز أرقام الإصدارات بشكل ثابت في setup.py أو التقاطها من علامات git بدلاً من ذلك (باستخدام حزمة setuptools-scm) إذا لزم الأمر.
  • الربط الديناميكي إلى libseccomp الرئيسي بدلاً من الربط الثابت. (سبق اقتراحه في # 217)

لم أبحث كثيرًا في أداة الاختبار لمعرفة ما إذا كانت هناك طريقة جيدة لنقلها لاستخدام اختبارات Python الأصلية عبر أطر اختبار نمط pytest أو nose2 .

أخيرًا ، بعض الوثائق الإضافية لبناء حزم التوزيع كلاً من التوزيعات المصدر والثنائية.

سأقوم بوضع علامة مبدئيًا على هذا لـ v2.6 ، والذي يعني حقًا "في وقت ما بعد أن نخرج v2.5 من الباب". الحصول على الإصدار 2.5 هو أولويتنا الآن ، يمكننا إعادة النظر في هذه المشكلة لاحقًا.

إن جعل libseccomp pip قابل للتثبيت سيكون مفيدًا جدًا بالنسبة لي أيضًا. هذا هو عملي للهواة حول استخدام make / poetry / docker (و patching setup.py) إذا كان أي شخص آخر يحاول معرفة ذلك. لقد قمت أيضًا بتعديل / ضبط معلمات البناء بحيث لا يتطلب الأمر sudo.

build-seccomp / setup.py (تم تعديله قليلاً /src/python/setup.py ):

# OLD IMPORTS
# -----------------------------------------
# import os 
# 
# from distutils.core import setup
# from distutils.extension import Extension
# from Cython.Distutils import build_ext
# -----------------------------------------

# Replace with these NEW IMPORTS
# -----------------------------------------
import os

from setuptools import setup, Extension
from Cython.Distutils import build_ext
# -----------------------------------------

# rest of the file unmodified...

Makefile :

.ONESHELL: install-libseccomp-native install-libseccomp-deps install-libseccomp build-whl-libseccomp

SECCOMP_BUILD_ENV = VERSION_RELEASE="0.0.0" \
                    CPPFLAGS="-I ../../include " \
                    CFLAGS="-Wall -g -O2" \
                    LDFLAGS="-Wl,-z -Wl,relro "
WHEEL_DIR = $(CURDIR)/dist

install-libseccomp-native:
ifeq (,$(wildcard libseccomp/.)) # If already cloned/built ignore
    git clone https://github.com/seccomp/libseccomp.git --branch v2.4.3 --depth 1
    cp build-seccomp/setup.py libseccomp/src/python/setup.py
    cd libseccomp
    ./autogen.sh
    ./configure --prefix=$(CURDIR)/libseccomp/build-aux
    make install
endif

install-deps:
    poetry install --no-root

# `make install-libseccomp` will install seccomp library into poetry virtual environment.
# this is a good option for local development
install-libseccomp: install-libseccomp-native install-deps
    cd libseccomp/src/python
    export $(SECCOMP_BUILD_ENV)
    poetry run python setup.py install

# `make build-whl-libseccomp` will create a .whl file for the seccomp library
# this is a good option for generating a build artifact in CI/CD or Docker
build-whl-libseccomp: install-libseccomp-native install-deps
    cd libseccomp/src/python
    export $(SECCOMP_BUILD_ENV)
    poetry run python setup.py bdist_wheel --dist-dir=$(WHEEL_DIR)

build-docker:
    docker build -t libseccomp-python .

run-docker:
    docker run --env SOME_VAR_1=42 --env SOME_VAR_2="Hello, World!" libseccomp-python

Dockerfile (لدي إصدار مكافئ ولكنه أقبح / أكثر ملاءمة لذاكرة التخزين المؤقت في تطبيقي):

# ============= BUILD STAGE ============= #
FROM python:3.8.3-buster as builder

# Install poetry
RUN pip install "poetry==1.0.5"

# Build/install wheels
WORKDIR /app
COPY pyproject.toml poetry.lock Makefile ./
COPY build-seccomp ./build-seccomp
RUN make build-whl-libseccomp

# ========== FINAL IMAGE STAGE ========== #
FROM python:3.8.3-slim-buster

# Install application
COPY --from=builder /app/dist /app/dist
WORKDIR /app
RUN pip install --no-index --find-links dist seccomp
COPY app ./app

# Configure
ENV SOME_VAR_1=
ENV SOME_VAR_2=

# Run the application
CMD ["python", "app/main.py"]

pyproject.toml :

[tool.poetry]
name = "libseccomp-demo"
version = "0.1.0"
description = "Building libseccomp for Python projects."
authors = ["Han Solo"]

[tool.poetry.dependencies]
python = "^3.8"

[tool.poetry.dev-dependencies]
cython = "^0.29.19"
wheel = "^0.34.2"

[build-system]
requires = ["poetry==1.0.5"]
build-backend = "poetry.masonry.api"

app / main.py :

import os
import seccomp

print(os.environ['SOME_VAR_1'])
print(os.environ['SOME_VAR_2'])

أردت فقط مشاركة عبارة "شكرًا" على كل المساعدة في هذا الشأن. drakenclimber وأنا ما زلنا مشغولين بمحاولة الحصول على إصدار v2.5.0 منتهي ، لذلك قد لا نرى الكثير من الاهتمام منا حتى يتم ذلك ، لكن يمكنني أن أعدك بأننا لن ننسى هذا :)

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات