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

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +45 -39
Dockerfile CHANGED
@@ -1,13 +1,13 @@
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
@@ -29,17 +29,17 @@ 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 \
@@ -49,8 +49,7 @@ RUN wget -q https://www.openssl.org/source/openssl-3.2.0.tar.gz && tar -xf opens
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 \
@@ -65,7 +64,7 @@ RUN wget -q https://curl.se/download/curl-8.5.0.tar.gz && tar -xf curl-8.5.0.tar
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 && \
@@ -84,49 +83,56 @@ RUN ./configure \
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"]
 
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
 
29
  ENV RANLIB="llvm-ranlib"
30
  ENV STRIP="llvm-strip"
31
  ENV READELF="llvm-readelf"
 
32
  ENV PREFIX=/opt/android-libs
33
+
34
  RUN mkdir -p $PREFIX
35
 
36
+ # 3. ZLIB (Static)
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 (Static)
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 \
 
49
  && \
50
  make -j4 && make install_sw
51
 
52
+ # 5. Curl (Static)
 
53
  WORKDIR /build/curl
54
  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 && \
55
  ./configure \
 
64
  CFLAGS="-I$PREFIX/include -fPIC" LDFLAGS="-L$PREFIX/lib" && \
65
  make -j4 && make install
66
 
67
+ # 6. Python заголовки (нужны для сборки wheel)
68
  WORKDIR /opt/python-src
69
  ENV PY_VERSION=3.11.9
70
  RUN wget -q https://www.python.org/ftp/python/${PY_VERSION}/Python-${PY_VERSION}.tgz && \
 
83
  CC="aarch64-linux-android${ANDROID_API}-clang" \
84
  CXX="aarch64-linux-android${ANDROID_API}-clang++"
85
 
86
+ # 7. СБОРКА ПАКЕТОВ
87
  WORKDIR /build/wheels
88
  RUN pip install build wheel
89
 
90
+ # === Создаем FAKE curl-config ===
91
+ # PyCurl вызывает этот скрипт, чтобы узнать пути к либам.
92
+ # Мы подсовываем ему наши статические пути.
93
+ RUN echo '#!/bin/bash' > /usr/bin/curl-config-android && \
94
+ echo 'case "$1" in' >> /usr/bin/curl-config-android && \
95
+ echo ' --version) echo "libcurl 8.5.0";;' >> /usr/bin/curl-config-android && \
96
+ echo ' --features) echo "SSL IPv6 UnixSockets libz AsynchDNS Largefile HSTS Alt-Svc HTTPS-proxy";;' >> /usr/bin/curl-config-android && \
97
+ # Важно: перечисляем все либы (curl, ssl, crypto, z)
98
+ echo ' --libs|--static-libs) echo "-L'${PREFIX}'/lib -lcurl -lssl -lcrypto -lz";;' >> /usr/bin/curl-config-android && \
99
+ echo ' --cflags) echo "-I'${PREFIX}'/include -DANDROID";;' >> /usr/bin/curl-config-android && \
100
+ echo ' --prefix) echo "'${PREFIX}'";;' >> /usr/bin/curl-config-android && \
101
+ echo ' *) exit 0;;' >> /usr/bin/curl-config-android && \
102
+ echo 'esac' >> /usr/bin/curl-config-android && \
103
+ chmod +x /usr/bin/curl-config-android
104
+
105
+ # Скрипт сборки wheels
106
+ RUN echo '#!/bin/bash' > build_wheels.sh && \
107
+ echo 'export CC="aarch64-linux-android'${ANDROID_API}'-clang"' >> build_wheels.sh && \
108
+ echo 'export LDSHARED="aarch64-linux-android'${ANDROID_API}'-clang -shared"' >> build_wheels.sh && \
109
+ echo 'export CFLAGS="-I/opt/python-src/python3-android -I/opt/python-src/python3-android/Include -I'${PREFIX}'/include -DANDROID -fPIC"' >> build_wheels.sh && \
110
+ echo 'export LDFLAGS="-L/opt/python-src/python3-android -L'${PREFIX}'/lib -lcurl -lssl -lcrypto -lz"' >> build_wheels.sh && \
111
  \
112
+ # 1. WGET
113
+ echo 'echo "Building wget..."' >> build_wheels.sh && \
114
+ echo 'pip wheel wget --no-binary :all: --no-deps -w dist/' >> build_wheels.sh && \
115
  \
116
+ # 2. PYCURL
117
+ echo 'echo "Building PyCurl..."' >> build_wheels.sh && \
118
+ # Говорим PyCurl использовать наш фейковый конфиг
119
+ echo 'export PYCURL_CURL_CONFIG=/usr/bin/curl-config-android' >> build_wheels.sh && \
120
+ echo 'export PYCURL_SSL_LIBRARY=openssl' >> build_wheels.sh && \
121
+ echo 'pip wheel pycurl --no-binary :all: --no-deps -w dist/' >> build_wheels.sh
122
+
123
+ RUN chmod +x build_wheels.sh
124
+ RUN ./build_wheels.sh
125
+
126
+ # 8. Переименование под Android
 
127
  WORKDIR /output
128
  RUN cd /build/wheels/dist && \
129
  for file in *.whl; do \
 
130
  PACKAGE_NAME=$(echo $file | cut -d'-' -f1) && \
131
  VERSION=$(echo $file | cut -d'-' -f2) && \
132
+ # Жесткое имя, как вы просили
133
  NEW_NAME="${PACKAGE_NAME}-${VERSION}-cp311-cp311-android_21-30_arm64_v8a.whl" && \
134
  mv "$file" "/output/$NEW_NAME"; \
135
  done
136
 
137
+ # 9. Выдача файлов
138
  CMD ["python3", "-m", "http.server", "7860", "--directory", "/output"]