sterepando commited on
Commit
565d09a
·
verified ·
1 Parent(s): 6fa644f

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +28 -27
Dockerfile CHANGED
@@ -36,7 +36,6 @@ RUN wget -q https://zlib.net/zlib-1.3.1.tar.gz && tar -xf zlib-1.3.1.tar.gz && c
36
  CFLAGS="-fPIC" ./configure --prefix=$PREFIX --static && make -j4 install
37
 
38
  # 4. OpenSSL (Static + fPIC)
39
- # no-apps и no-tests обязательны, чтобы не пытаться запускать ARM на x86
40
  WORKDIR /build/openssl
41
  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 && \
42
  ./Configure android-arm64 -D__ANDROID_API__=${ANDROID_API} --prefix=$PREFIX \
@@ -51,17 +50,15 @@ RUN wget -q https://curl.se/download/curl-8.5.0.tar.gz && tar -xf curl-8.5.0.tar
51
  CFLAGS="-fPIC -I$PREFIX/include" LDFLAGS="-L$PREFIX/lib" && \
52
  make -j4 install
53
 
54
- # 6. СБОРКА РЕАЛЬНОГО PYTHON 3.11.10 ПОД АНДРОИД
55
- # Это нужно для получения правильной libpython3.11.so для линковки символов
56
- WORKDIR /opt/python-android
57
  RUN wget -q https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tgz && tar -xf Python-3.11.10.tgz
58
- WORKDIR /opt/python-android/Python-3.11.10
59
  RUN ./configure --host=aarch64-linux-android --build=x86_64-linux-gnu \
60
- --with-build-python=python3 --enable-shared --without-ensurepip \
61
- --disable-ipv6 ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no ac_cv_buggy_getaddrinfo=no \
62
- CC="$CC" CXX="$CXX" AR="$AR" RANLIB="$RANLIB" READELF="$READELF" \
63
- CFLAGS="-fPIC" CXXFLAGS="-fPIC" LDFLAGS="-fPIC"
64
- RUN make -j4 libpython3.11.so
65
 
66
  # 7. СБОРКА ПАКЕТОВ (WHEELS)
67
  WORKDIR /build/wheels
@@ -70,43 +67,47 @@ RUN pip install wheel setuptools
70
  # Fake curl-config
71
  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
72
 
73
- # Скрипт сборки без сломанного флага --plat-name
74
  RUN echo '#!/bin/bash\n\
75
  export CC="aarch64-linux-android'${ANDROID_API}'-clang"\n\
76
- export PYTHON_ROOT="/opt/python-android/Python-3.11.10"\n\
77
- # LDSHARED линкует pycurl напрямую к либе питона, чтобы разрешить _Py_NoneStruct\n\
78
- export LDSHARED="'$CC' -shared -L$PYTHON_ROOT -lpython3.11"\n\
79
- export CFLAGS="-I$PYTHON_ROOT/Include -I$PYTHON_ROOT -I'$PREFIX'/include -fPIC -DANDROID"\n\
80
- export LDFLAGS="-L$PYTHON_ROOT -L'$PREFIX'/lib -lpython3.11 -lcurl -lssl -lcrypto -lz"\n\
81
  \n\
82
- echo "--- Сборка wget (Pure Python) ---"\n\
83
- pip wheel wget --no-binary :all: --no-deps -w dist/\n\
 
 
 
84
  \n\
85
- echo "--- Сборка PyCryptodome (C-Extension) ---"\n\
86
- pip wheel pycryptodome --no-binary :all: --no-deps -w dist/\n\
87
  \n\
88
- echo "--- Сборка PyCurl (C-Extension + Static Curl) ---"\n\
89
  export PYCURL_CURL_CONFIG=/usr/bin/curl-config-android\n\
90
  export PYCURL_SSL_LIBRARY=openssl\n\
91
- pip wheel pycurl --no-binary :all: --no-deps -w dist/' > build.sh
 
 
 
 
 
 
92
 
93
  RUN chmod +x build.sh && ./build.sh
94
 
95
- # 8. ПЕРЕИМЕНОВАНИЕ И ПРОВЕРКА
96
  WORKDIR /output
97
  RUN cd /build/wheels/dist && \
98
  for file in *.whl; do \
99
- # Извлекаем имя и версию
100
  NAME=$(echo $file | cut -d"-" -f1) && \
101
  VER=$(echo $file | cut -d"-" -f2) && \
102
- # Формируем эталонный тег Chaquopy 3.11\n\
103
  TAG="cp311-cp311-android_21_30_arm64_v8a" && \
104
  mv "$file" "/output/${NAME}-${VER}-${TAG}.whl"; \
105
  done
106
 
107
- # Проверка линковки pycurl.so (чтобы убедиться, что он видит libpython3.11.so)
108
- RUN echo "Checking dependencies of pycurl.so:" && \
109
  unzip -p /output/pycurl-*.whl *.so > /tmp/pycurl.so && \
 
110
  llvm-readelf -d /tmp/pycurl.so | grep "NEEDED"
111
 
112
  # 9. Выдача
 
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 \
 
50
  CFLAGS="-fPIC -I$PREFIX/include" LDFLAGS="-L$PREFIX/lib" && \
51
  make -j4 install
52
 
53
+ # 6. ПОДГОТОВКА ЗАГОЛОВКОВ PYTHON 3.11.10
54
+ # Нам НЕ нужна собранная либа libpython, только хидеры и pyconfig.h
55
+ WORKDIR /opt/python-src
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-src/Python-3.11.10
58
  RUN ./configure --host=aarch64-linux-android --build=x86_64-linux-gnu \
59
+ --with-build-python=python3 --without-ensurepip --disable-ipv6 \
60
+ ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no ac_cv_buggy_getaddrinfo=no \
61
+ CC="$CC" READELF="$READELF"
 
 
62
 
63
  # 7. СБОРКА ПАКЕТОВ (WHEELS)
64
  WORKDIR /build/wheels
 
67
  # Fake curl-config
68
  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
69
 
70
+ # Скрипт сборки БЕЗ линковки к libpython
71
  RUN echo '#!/bin/bash\n\
72
  export CC="aarch64-linux-android'${ANDROID_API}'-clang"\n\
73
+ export PYTHON_INC="/opt/python-src/Python-3.11.10"\n\
 
 
 
 
74
  \n\
75
+ # LDSHARED: только CC и -shared. НИКАКОГО -lpython3.11\n\
76
+ export LDSHARED="'$CC' -shared"\n\
77
+ \n\
78
+ # CFLAGS: только пути к заголовкам\n\
79
+ export CFLAGS="-I$PYTHON_INC/Include -I$PYTHON_INC -I'$PREFIX'/include -fPIC -DANDROID"\n\
80
  \n\
81
+ # LDFLAGS: только наши статические либы (curl, ssl, z)\n\
82
+ export LDFLAGS="-L'$PREFIX'/lib -lcurl -lssl -lcrypto -lz"\n\
83
  \n\
84
+ echo "--- Сборка PyCurl ---"\n\
85
  export PYCURL_CURL_CONFIG=/usr/bin/curl-config-android\n\
86
  export PYCURL_SSL_LIBRARY=openssl\n\
87
+ pip wheel pycurl --no-binary :all: --no-deps -w dist/\n\
88
+ \n\
89
+ echo "--- Сборка wget ---"\n\
90
+ pip wheel wget --no-binary :all: --no-deps -w dist/\n\
91
+ \n\
92
+ echo "--- Сборка PyCryptodome ---"\n\
93
+ pip wheel pycryptodome --no-binary :all: --no-deps -w dist/' > build.sh
94
 
95
  RUN chmod +x build.sh && ./build.sh
96
 
97
+ # 8. ПЕРЕИМЕНОВАНИЕ И ПРОВЕРКА (Readelf)
98
  WORKDIR /output
99
  RUN cd /build/wheels/dist && \
100
  for file in *.whl; do \
 
101
  NAME=$(echo $file | cut -d"-" -f1) && \
102
  VER=$(echo $file | cut -d"-" -f2) && \
 
103
  TAG="cp311-cp311-android_21_30_arm64_v8a" && \
104
  mv "$file" "/output/${NAME}-${VER}-${TAG}.whl"; \
105
  done
106
 
107
+ # ПРОВЕРКА: В выводе НЕ должно быть libpython3.11.so
108
+ RUN echo "!!! ВАЖНАЯ ПРОВЕРКА !!!" && \
109
  unzip -p /output/pycurl-*.whl *.so > /tmp/pycurl.so && \
110
+ echo "Dependencies of pycurl.so (should NOT contain libpython):" && \
111
  llvm-readelf -d /tmp/pycurl.so | grep "NEEDED"
112
 
113
  # 9. Выдача