sterepando commited on
Commit
7bec31a
·
verified ·
1 Parent(s): 4dc8ccb

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +15 -22
Dockerfile CHANGED
@@ -1,6 +1,6 @@
1
  FROM python:3.11.10-bookworm
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 \
@@ -26,23 +26,23 @@ ENV CXX="aarch64-linux-android${ANDROID_API}-clang++"
26
  ENV AR="llvm-ar"
27
  ENV RANLIB="llvm-ranlib"
28
  ENV STRIP="llvm-strip"
 
29
  ENV PREFIX=/opt/android-libs
30
  RUN mkdir -p $PREFIX
31
 
32
- # 3. Сборка ZLIB (Static + fPIC)
33
  WORKDIR /build/zlib
34
  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 && \
35
  CFLAGS="-fPIC" ./configure --prefix=$PREFIX --static && make -j4 install
36
 
37
- # 4. Сборка OpenSSL (Static + fPIC)
38
- # no-apps и no-tests критичны для кросс-компиляции
39
  WORKDIR /build/openssl
40
  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 && \
41
  ./Configure android-arm64 -D__ANDROID_API__=${ANDROID_API} --prefix=$PREFIX \
42
  no-shared no-apps no-tests no-docs -fPIC && \
43
  make -j4 && make install_sw
44
 
45
- # 5. Сборка LibCurl (Static + fPIC)
46
  WORKDIR /build/curl
47
  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 && \
48
  ./configure --host=aarch64-linux-android --prefix=$PREFIX --disable-shared --enable-static \
@@ -50,30 +50,29 @@ RUN wget -q https://curl.se/download/curl-8.5.0.tar.gz && tar -xf curl-8.5.0.tar
50
  CFLAGS="-fPIC -I$PREFIX/include" LDFLAGS="-L$PREFIX/lib" && \
51
  make -j4 install
52
 
53
- # 6. СБОРКА РЕАЛЬНОГО PYTHON 3.11.10 ДЛЯ ANDROID
54
- # Это НЕ заглушка. Нам нужна libpython3.11.so для линковки расширений.
55
  WORKDIR /opt/python-android
56
  RUN wget -q https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tgz && tar -xf Python-3.11.10.tgz
57
  WORKDIR /opt/python-android/Python-3.11.10
 
58
  RUN ./configure --host=aarch64-linux-android --build=x86_64-linux-gnu \
59
  --with-build-python=python3 --enable-shared --without-ensurepip \
60
  ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no \
61
- CC="$CC" CXX="$CXX" AR="$AR" RANLIB="$RANLIB"
62
- # Собираем библиотеку
63
  RUN make -j4 libpython3.11.so
64
 
65
- # 7. СБОРКА WHEELS
66
  WORKDIR /build/wheels
67
  RUN pip install wheel setuptools
68
 
69
- # Fake curl-config (нужен для парсинга версий в setup.py)
70
  RUN echo '#!/bin/bash\ncase "$1" in --version) echo "libcurl 8.5.0";; --features) echo "SSL libz HTTPS";; --libs|--static-libs) echo "-L'$PREFIX'/lib -lcurl -lssl -lcrypto -lz";; --cflags) echo "-I'$PREFIX'/include -DANDROID";; --prefix) echo "'$PREFIX'";; *) exit 0;; esac' > /usr/bin/curl-config-android && chmod +x /usr/bin/curl-config-android
71
 
72
  # Скрипт сборки
73
  RUN echo '#!/bin/bash\n\
74
  export CC="aarch64-linux-android'${ANDROID_API}'-clang"\n\
75
  export PYTHON_ROOT="/opt/python-android/Python-3.11.10"\n\
76
- # СУПЕР ВАЖНО: Линкуем pycurl с реальной либой питона, которую мы только что собрали\n\
77
  export LDSHARED="'$CC' -shared -L$PYTHON_ROOT -lpython3.11"\n\
78
  export CFLAGS="-I$PYTHON_ROOT/Include -I$PYTHON_ROOT -I'$PREFIX'/include -fPIC -DANDROID"\n\
79
  export LDFLAGS="-L$PYTHON_ROOT -L'$PREFIX'/lib -lpython3.11 -lcurl -lssl -lcrypto -lz"\n\
@@ -91,21 +90,15 @@ pip wheel pycryptodome --no-binary :all: --no-deps -w dist/ --plat-name android_
91
 
92
  RUN chmod +x build.sh && ./build.sh
93
 
94
- # 8. ПЕРЕИМЕНОВАНИЕ И ПРОВЕРКА
95
  WORKDIR /output
96
  RUN cd /build/wheels/dist && \
97
  for file in *.whl; do \
98
  NAME=$(echo $file | cut -d"-" -f1) && \
99
  VER=$(echo $file | cut -d"-" -f2) && \
100
- # Финальный формат: имя-версия-cp311-cp311-android_21_30_arm64_v8a.whl\n\
101
- FINAL_NAME="${NAME}-${VER}-cp311-cp311-android_21_30_arm64_v8a.whl" && \
102
- mv "$file" "/output/$FINAL_NAME"; \
103
  done
104
 
105
- # Дополнительно: выведем инфу о линковке в логи для проверки (readelf)
106
- RUN echo "Checking pycurl.so linkage:" && \
107
- unzip -p /output/pycurl-*.whl *.so > /tmp/pycurl.so && \
108
- llvm-readelf -d /tmp/pycurl.so | grep "NEEDED"
109
-
110
- # 9. Запуск сервера
111
  CMD ["python3", "-m", "http.server", "7860", "--directory", "/output"]
 
1
  FROM python:3.11.10-bookworm
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 \
 
26
  ENV AR="llvm-ar"
27
  ENV RANLIB="llvm-ranlib"
28
  ENV STRIP="llvm-strip"
29
+ ENV READELF="llvm-readelf"
30
  ENV PREFIX=/opt/android-libs
31
  RUN mkdir -p $PREFIX
32
 
33
+ # 3. ZLIB (Static + fPIC)
34
  WORKDIR /build/zlib
35
  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 && \
36
  CFLAGS="-fPIC" ./configure --prefix=$PREFIX --static && make -j4 install
37
 
38
+ # 4. OpenSSL (Static + fPIC)
 
39
  WORKDIR /build/openssl
40
  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 && \
41
  ./Configure android-arm64 -D__ANDROID_API__=${ANDROID_API} --prefix=$PREFIX \
42
  no-shared no-apps no-tests no-docs -fPIC && \
43
  make -j4 && make install_sw
44
 
45
+ # 5. LibCurl (Static + fPIC)
46
  WORKDIR /build/curl
47
  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 && \
48
  ./configure --host=aarch64-linux-android --prefix=$PREFIX --disable-shared --enable-static \
 
50
  CFLAGS="-fPIC -I$PREFIX/include" LDFLAGS="-L$PREFIX/lib" && \
51
  make -j4 install
52
 
53
+ # 6. СБОРКА PYTHON 3.11.10 ДЛЯ ANDROID (Headers + libpython)
 
54
  WORKDIR /opt/python-android
55
  RUN wget -q https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tgz && tar -xf Python-3.11.10.tgz
56
  WORKDIR /opt/python-android/Python-3.11.10
57
+ # ИСПРАВЛЕНИЕ: Явно передаем READELF
58
  RUN ./configure --host=aarch64-linux-android --build=x86_64-linux-gnu \
59
  --with-build-python=python3 --enable-shared --without-ensurepip \
60
  ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no \
61
+ CC="$CC" CXX="$CXX" AR="$AR" RANLIB="$RANLIB" READELF="$READELF"
 
62
  RUN make -j4 libpython3.11.so
63
 
64
+ # 7. СБОРКА ПАКЕТОВ
65
  WORKDIR /build/wheels
66
  RUN pip install wheel setuptools
67
 
68
+ # Fake curl-config
69
  RUN echo '#!/bin/bash\ncase "$1" in --version) echo "libcurl 8.5.0";; --features) echo "SSL libz HTTPS";; --libs|--static-libs) echo "-L'$PREFIX'/lib -lcurl -lssl -lcrypto -lz";; --cflags) echo "-I'$PREFIX'/include -DANDROID";; --prefix) echo "'$PREFIX'";; *) exit 0;; esac' > /usr/bin/curl-config-android && chmod +x /usr/bin/curl-config-android
70
 
71
  # Скрипт сборки
72
  RUN echo '#!/bin/bash\n\
73
  export CC="aarch64-linux-android'${ANDROID_API}'-clang"\n\
74
  export PYTHON_ROOT="/opt/python-android/Python-3.11.10"\n\
75
+ # Линкуем pycurl с реальной либой питона для решения проблемы _Py_NoneStruct\n\
76
  export LDSHARED="'$CC' -shared -L$PYTHON_ROOT -lpython3.11"\n\
77
  export CFLAGS="-I$PYTHON_ROOT/Include -I$PYTHON_ROOT -I'$PREFIX'/include -fPIC -DANDROID"\n\
78
  export LDFLAGS="-L$PYTHON_ROOT -L'$PREFIX'/lib -lpython3.11 -lcurl -lssl -lcrypto -lz"\n\
 
90
 
91
  RUN chmod +x build.sh && ./build.sh
92
 
93
+ # 8. ПЕРЕИМЕНОВАНИЕ
94
  WORKDIR /output
95
  RUN cd /build/wheels/dist && \
96
  for file in *.whl; do \
97
  NAME=$(echo $file | cut -d"-" -f1) && \
98
  VER=$(echo $file | cut -d"-" -f2) && \
99
+ FINAL="${NAME}-${VER}-cp311-cp311-android_21_30_arm64_v8a.whl" && \
100
+ mv "$file" "/output/$FINAL"; \
 
101
  done
102
 
103
+ # 9. Выдача
 
 
 
 
 
104
  CMD ["python3", "-m", "http.server", "7860", "--directory", "/output"]