sterepando commited on
Commit
96dec2e
·
verified ·
1 Parent(s): dff070e

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +22 -18
Dockerfile CHANGED
@@ -1,40 +1,41 @@
1
- # ИСПОЛЬЗУЕМ PYTHON 3.11 КАК БАЗУ (чтобы версия хоста совпадала с целевой)
2
  FROM python:3.11
3
 
4
- # 1. Установка зависимостей для скачивания и распаковки
 
5
  RUN apt-get update && apt-get install -y \
6
  wget \
7
  unzip \
8
  build-essential \
9
  && rm -rf /var/lib/apt/lists/*
10
 
11
- # 2. Переменные окружения (NDK r25c + API 30)
12
  ENV ANDROID_NDK_VERSION=r25c
13
  ENV ANDROID_API=30
14
  ENV ANDROID_ARCH=arm64
15
  ENV ANDROID_ABI=arm64-v8a
 
 
16
  ENV NDK_ROOT=/opt/android-ndk
17
  ENV PATH=$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
18
 
19
- # 3. Скачиваем Android NDK
20
  WORKDIR /opt
21
  RUN wget -q https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux.zip && \
22
  unzip -q android-ndk-${ANDROID_NDK_VERSION}-linux.zip && \
23
  mv android-ndk-${ANDROID_NDK_VERSION} android-ndk && \
24
  rm android-ndk-${ANDROID_NDK_VERSION}-linux.zip
25
 
26
- # 4. Скачиваем исходники Python 3.11.9 (точно ту же версию, что и база)
27
- # Нам нужны исходники, чтобы сгенерировать pyconfig.h под Android
28
  WORKDIR /opt/python-src
29
- RUN wget -q https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tgz && \
30
- tar -xzf Python-3.11.9.tgz && \
31
- mv Python-3.11.9 python3-android
32
 
33
- # 5. Конфигурируем Python под Android
34
  WORKDIR /opt/python-src/python3-android
35
 
36
- # ВАЖНОЕ ИСПРАВЛЕНИЕ:
37
- # --with-build-python=/usr/local/bin/python3 указывает на python хоста (из образа python:3.11)
38
  RUN ./configure \
39
  --host=aarch64-linux-android \
40
  --build=x86_64-linux-gnu \
@@ -44,14 +45,17 @@ RUN ./configure \
44
  ac_cv_file__dev_ptmx=no \
45
  ac_cv_file__dev_ptc=no \
46
  CC="aarch64-linux-android${ANDROID_API}-clang" \
47
- CXX="aarch64-linux-android${ANDROID_API}-clang++"
 
 
 
48
 
49
  # 6. Сборка PyCryptodome
50
  WORKDIR /build
51
  RUN pip install build wheel
52
 
53
  # Создаем скрипт сборки
54
- # CFLAGS включает пути к заголовкам, которые мы только что сконфигурировали
55
  RUN echo '#!/bin/bash' > build_wheel.sh && \
56
  echo 'export CC="aarch64-linux-android'${ANDROID_API}'-clang"' >> build_wheel.sh && \
57
  echo 'export LDSHARED="aarch64-linux-android'${ANDROID_API}'-clang -shared"' >> build_wheel.sh && \
@@ -68,15 +72,15 @@ RUN mkdir -p /output && \
68
  cd dist && \
69
  # Находим файл
70
  ORIGINAL_WHEEL=$(ls pycryptodome-*.whl | head -n 1) && \
71
- # Выдергиваем версию (например, 3.20.0)
72
  VERSION=$(echo $ORIGINAL_WHEEL | grep -oP 'pycryptodome-\K[0-9.]+') && \
73
- # Формируем имя, которое вы просили
74
  NEW_NAME="pycryptodome-${VERSION}-cp311-cp311-android_21-30_arm64_v8a.whl" && \
75
  mv "$ORIGINAL_WHEEL" "/output/$NEW_NAME"
76
 
77
- # Даем права на скачивание
78
  RUN chmod -R 777 /output
79
 
80
- # 8. Запуск сервера для отдачи файла
81
  WORKDIR /output
82
  CMD ["python3", "-m", "http.server", "7860", "--directory", "/output"]
 
1
+ # Используем Python 3.11 как базу для совпадения версий
2
  FROM python:3.11
3
 
4
+ # 1. Установка системных зависимостей
5
+ ENV DEBIAN_FRONTEND=noninteractive
6
  RUN apt-get update && apt-get install -y \
7
  wget \
8
  unzip \
9
  build-essential \
10
  && rm -rf /var/lib/apt/lists/*
11
 
12
+ # 2. Настройка переменных окружения (NDK r25c + API 30)
13
  ENV ANDROID_NDK_VERSION=r25c
14
  ENV ANDROID_API=30
15
  ENV ANDROID_ARCH=arm64
16
  ENV ANDROID_ABI=arm64-v8a
17
+ # Обновляем версию исходников до более свежей, чтобы снизить риск warning-ов
18
+ ENV PY_VERSION=3.11.11
19
  ENV NDK_ROOT=/opt/android-ndk
20
  ENV PATH=$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
21
 
22
+ # 3. Скачивание Android NDK
23
  WORKDIR /opt
24
  RUN wget -q https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux.zip && \
25
  unzip -q android-ndk-${ANDROID_NDK_VERSION}-linux.zip && \
26
  mv android-ndk-${ANDROID_NDK_VERSION} android-ndk && \
27
  rm android-ndk-${ANDROID_NDK_VERSION}-linux.zip
28
 
29
+ # 4. Скачивание исходников Python (для заголовков pyconfig.h)
 
30
  WORKDIR /opt/python-src
31
+ RUN wget -q https://www.python.org/ftp/python/${PY_VERSION}/Python-${PY_VERSION}.tgz && \
32
+ tar -xzf Python-${PY_VERSION}.tgz && \
33
+ mv Python-${PY_VERSION} python3-android
34
 
35
+ # 5. Конфигурация Python (Генерация pyconfig.h)
36
  WORKDIR /opt/python-src/python3-android
37
 
38
+ # ИСПРАВЛЕНИЕ: Явно передаем AR, READELF, RANLIB, указывая на llvm-версии из NDK
 
39
  RUN ./configure \
40
  --host=aarch64-linux-android \
41
  --build=x86_64-linux-gnu \
 
45
  ac_cv_file__dev_ptmx=no \
46
  ac_cv_file__dev_ptc=no \
47
  CC="aarch64-linux-android${ANDROID_API}-clang" \
48
+ CXX="aarch64-linux-android${ANDROID_API}-clang++" \
49
+ AR=llvm-ar \
50
+ RANLIB=llvm-ranlib \
51
+ READELF=llvm-readelf
52
 
53
  # 6. Сборка PyCryptodome
54
  WORKDIR /build
55
  RUN pip install build wheel
56
 
57
  # Создаем скрипт сборки
58
+ # Важно: Передаем флаги CFLAGS/LDFLAGS, указывающие на только что настроенный Python
59
  RUN echo '#!/bin/bash' > build_wheel.sh && \
60
  echo 'export CC="aarch64-linux-android'${ANDROID_API}'-clang"' >> build_wheel.sh && \
61
  echo 'export LDSHARED="aarch64-linux-android'${ANDROID_API}'-clang -shared"' >> build_wheel.sh && \
 
72
  cd dist && \
73
  # Находим файл
74
  ORIGINAL_WHEEL=$(ls pycryptodome-*.whl | head -n 1) && \
75
+ # Выдергиваем версию
76
  VERSION=$(echo $ORIGINAL_WHEEL | grep -oP 'pycryptodome-\K[0-9.]+') && \
77
+ # Формируем имя под ваш запрос
78
  NEW_NAME="pycryptodome-${VERSION}-cp311-cp311-android_21-30_arm64_v8a.whl" && \
79
  mv "$ORIGINAL_WHEEL" "/output/$NEW_NAME"
80
 
81
+ # Права доступа
82
  RUN chmod -R 777 /output
83
 
84
+ # 8. Запуск сервера
85
  WORKDIR /output
86
  CMD ["python3", "-m", "http.server", "7860", "--directory", "/output"]