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

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +90 -44
Dockerfile CHANGED
@@ -1,41 +1,78 @@
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,42 +82,51 @@ RUN ./configure \
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 && \
62
- echo 'export CFLAGS="-I/opt/python-src/python3-android -I/opt/python-src/python3-android/Include -DANDROID"' >> build_wheel.sh && \
63
- echo 'export LDFLAGS="-L/opt/python-src/python3-android"' >> build_wheel.sh && \
64
- echo 'mkdir -p dist' >> build_wheel.sh && \
65
- echo 'pip wheel pycryptodome --no-binary :all: --no-deps -w dist/' >> build_wheel.sh
66
-
67
- RUN chmod +x build_wheel.sh
68
- RUN ./build_wheel.sh
 
 
 
 
 
 
 
 
 
 
 
 
69
 
70
- # 7. Финальная обработка файла
71
- RUN mkdir -p /output && \
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"]
 
 
1
  FROM python:3.11
2
 
3
+ # 1. Установка системных утилит
4
  ENV DEBIAN_FRONTEND=noninteractive
5
  RUN apt-get update && apt-get install -y \
6
+ wget unzip build-essential git pkg-config \
7
+ automake autoconf libtool \
 
8
  && rm -rf /var/lib/apt/lists/*
9
 
10
+ # 2. Настройка Android NDK (r25c / API 30)
11
  ENV ANDROID_NDK_VERSION=r25c
12
  ENV ANDROID_API=30
13
  ENV ANDROID_ARCH=arm64
14
  ENV ANDROID_ABI=arm64-v8a
 
 
15
  ENV NDK_ROOT=/opt/android-ndk
16
+ ENV ANDROID_NDK_ROOT=/opt/android-ndk
17
  ENV PATH=$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
18
 
 
19
  WORKDIR /opt
20
  RUN wget -q https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux.zip && \
21
  unzip -q android-ndk-${ANDROID_NDK_VERSION}-linux.zip && \
22
  mv android-ndk-${ANDROID_NDK_VERSION} android-ndk && \
23
  rm android-ndk-${ANDROID_NDK_VERSION}-linux.zip
24
 
25
+ # Переменные компиляции
26
+ ENV CC="aarch64-linux-android${ANDROID_API}-clang"
27
+ ENV CXX="aarch64-linux-android${ANDROID_API}-clang++"
28
+ ENV AR="llvm-ar"
29
+ ENV RANLIB="llvm-ranlib"
30
+ ENV STRIP="llvm-strip"
31
+ ENV READELF="llvm-readelf"
32
+ # Папка для библиотек (OpenSSL, Curl)
33
+ ENV PREFIX=/opt/android-libs
34
+ RUN mkdir -p $PREFIX
35
+
36
+ # 3. Сборка ZLIB (нужен для cURL)
37
+ WORKDIR /build/zlib
38
+ RUN wget -q https://zlib.net/zlib-1.3.1.tar.gz && tar -xf zlib-1.3.1.tar.gz && cd zlib-1.3.1 && \
39
+ ./configure --prefix=$PREFIX --static && \
40
+ make -j4 && make install
41
+
42
+ # 4. Сборка OpenSSL (Статическая, для cURL и PyCurl)
43
+ WORKDIR /build/openssl
44
+ RUN wget -q https://www.openssl.org/source/openssl-3.2.0.tar.gz && tar -xf openssl-3.2.0.tar.gz && cd openssl-3.2.0 && \
45
+ ./Configure android-arm64 \
46
+ -D__ANDROID_API__=${ANDROID_API} \
47
+ --prefix=$PREFIX \
48
+ no-shared \
49
+ && \
50
+ make -j4 && make install_sw
51
+
52
+ # 5. Сборка LibCurl (Статическая)
53
+ # Отключаем всё лишнее (LDAP, RTSP), оставляем HTTP/HTTPS/SSL
54
+ WORKDIR /build/curl
55
+ RUN wget -q https://curl.se/download/curl-8.5.0.tar.gz && tar -xf curl-8.5.0.tar.gz && cd curl-8.5.0 && \
56
+ ./configure \
57
+ --host=aarch64-linux-android \
58
+ --prefix=$PREFIX \
59
+ --disable-shared --enable-static \
60
+ --with-openssl=$PREFIX \
61
+ --with-zlib=$PREFIX \
62
+ --disable-ldap --disable-ldaps \
63
+ --disable-rtsp --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap \
64
+ --disable-smtp --disable-gopher --disable-mqtt \
65
+ CFLAGS="-I$PREFIX/include -fPIC" LDFLAGS="-L$PREFIX/lib" && \
66
+ make -j4 && make install
67
+
68
+ # 6. Подготовка Python Headers (для сборки wheel)
69
  WORKDIR /opt/python-src
70
+ ENV PY_VERSION=3.11.9
71
  RUN wget -q https://www.python.org/ftp/python/${PY_VERSION}/Python-${PY_VERSION}.tgz && \
72
  tar -xzf Python-${PY_VERSION}.tgz && \
73
  mv Python-${PY_VERSION} python3-android
74
 
 
75
  WORKDIR /opt/python-src/python3-android
 
 
76
  RUN ./configure \
77
  --host=aarch64-linux-android \
78
  --build=x86_64-linux-gnu \
 
82
  ac_cv_file__dev_ptmx=no \
83
  ac_cv_file__dev_ptc=no \
84
  CC="aarch64-linux-android${ANDROID_API}-clang" \
85
+ CXX="aarch64-linux-android${ANDROID_API}-clang++"
 
 
 
86
 
87
+ # 7. Сборка пакетов (WHEELS)
88
+ WORKDIR /build/wheels
89
  RUN pip install build wheel
90
 
91
  # Создаем скрипт сборки
92
+ RUN echo '#!/bin/bash' > build_all.sh && \
93
+ # Общие флаги
94
+ echo 'export CC="aarch64-linux-android'${ANDROID_API}'-clang"' >> build_all.sh && \
95
+ echo 'export LDSHARED="aarch64-linux-android'${ANDROID_API}'-clang -shared"' >> build_all.sh && \
96
+ echo 'export CFLAGS="-I/opt/python-src/python3-android -I/opt/python-src/python3-android/Include -I'${PREFIX}'/include -DANDROID -fPIC"' >> build_all.sh && \
97
+ # LDFLAGS: Подключаем статические библиотеки curl, ssl, crypto, z
98
+ echo 'export LDFLAGS="-L/opt/python-src/python3-android -L'${PREFIX}'/lib -lcurl -lssl -lcrypto -lz"' >> build_all.sh && \
99
+ \
100
+ # --- 1. PyCryptodome ---
101
+ echo 'echo "Building PyCryptodome..."' >> build_all.sh && \
102
+ echo 'pip wheel pycryptodome --no-binary :all: --no-deps -w dist/' >> build_all.sh && \
103
+ \
104
+ # --- 2. wget (Pure Python) ---
105
+ echo 'echo "Building wget..."' >> build_all.sh && \
106
+ echo 'pip wheel wget --no-binary :all: --no-deps -w dist/' >> build_all.sh && \
107
+ \
108
+ # --- 3. PyCurl ---
109
+ # Для PyCurl нужно указать backend и сказать, чтобы он не искал динамические либы
110
+ echo 'echo "Building PyCurl..."' >> build_all.sh && \
111
+ echo 'export PYCURL_SSL_LIBRARY=openssl' >> build_all.sh && \
112
+ echo 'export PYCURL_CURL_CONFIG=/bin/true' >> build_all.sh && \
113
+ # Принудительно передаем пути, так как curl-config отключен
114
+ echo 'pip wheel pycurl --no-binary :all: --no-deps -w dist/ --global-option="--curl-dir='$PREFIX'" --global-option="--openssl-dir='$PREFIX'"' >> build_all.sh
115
 
116
+ RUN chmod +x build_all.sh
117
+ RUN ./build_all.sh
 
 
 
 
 
 
 
 
118
 
119
+ # 8. Финальная обработка и переименование
 
 
 
120
  WORKDIR /output
121
+ RUN cd /build/wheels/dist && \
122
+ for file in *.whl; do \
123
+ # Извлекаем имя пакета и версию
124
+ PACKAGE_NAME=$(echo $file | cut -d'-' -f1) && \
125
+ VERSION=$(echo $file | cut -d'-' -f2) && \
126
+ # Формируем имя файла по твоему шаблону
127
+ NEW_NAME="${PACKAGE_NAME}-${VERSION}-cp311-cp311-android_21-30_arm64_v8a.whl" && \
128
+ mv "$file" "/output/$NEW_NAME"; \
129
+ done
130
+
131
+ # 9. Запуск сервера
132
  CMD ["python3", "-m", "http.server", "7860", "--directory", "/output"]