sterepando commited on
Commit
872b425
·
verified ·
1 Parent(s): 81fadce

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +17 -11
Dockerfile CHANGED
@@ -17,7 +17,9 @@ ENV OUTPUT_DIR=/app/wheels
17
  ENV NDK_VERSION=r26b
18
  ENV ANDROID_API=24
19
  ENV ANDROID_ARCH=aarch64
 
20
  ENV NDK_HOME=/opt/android-ndk
 
21
  ENV PYTHON_VERSION=3.11.9
22
  ENV OPENSSL_VERSION=3.3.0
23
  ENV RUSTUP_HOME=/opt/rust
@@ -26,11 +28,12 @@ ENV PATH=$PATH:/opt/rust/bin
26
 
27
  RUN mkdir -p ${WORK_DIR} ${OUTPUT_DIR}
28
 
29
- # 3. Установка Rust (для pydantic-core/maturin)
30
  RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable
31
  RUN rustup target add aarch64-linux-android
32
 
33
- # 4. Установка инструментов сборки (ДОБАВЛЕН pdm-backend)
 
34
  RUN pip install --upgrade pip && \
35
  pip install --no-cache-dir \
36
  Cython wheel setuptools setuptools-scm \
@@ -40,13 +43,13 @@ RUN pip install --upgrade pip && \
40
 
41
  WORKDIR ${WORK_DIR}
42
 
43
- # 5. Установка Android NDK
44
  RUN wget -q https://dl.google.com/android/repository/android-ndk-${NDK_VERSION}-linux.zip && \
45
  unzip -q android-ndk-${NDK_VERSION}-linux.zip && \
46
  mv android-ndk-${NDK_VERSION} ${NDK_HOME} && \
47
  rm android-ndk-${NDK_VERSION}-linux.zip
48
 
49
- # Настройка тулчейна
50
  ENV TOOLCHAIN=${NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64
51
  ENV PATH=${TOOLCHAIN}/bin:$PATH
52
  ENV TARGET=${ANDROID_ARCH}-linux-android${ANDROID_API}
@@ -62,13 +65,14 @@ ENV CFLAGS="-target ${TARGET} -fPIC -D__ANDROID__"
62
  ENV CXXFLAGS="-target ${TARGET} -fPIC -D__ANDROID__"
63
  ENV LDFLAGS="-target ${TARGET} -fPIC"
64
 
65
- # 6. Сборка OpenSSL
66
  WORKDIR ${WORK_DIR}
67
  RUN wget -q https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz && \
68
  tar -xf openssl-${OPENSSL_VERSION}.tar.gz
69
 
70
  WORKDIR ${WORK_DIR}/openssl-${OPENSSL_VERSION}
71
- RUN ./Configure android-arm64 \
 
72
  -D__ANDROID_API__=${ANDROID_API} \
73
  --prefix=${WORK_DIR}/openssl-install \
74
  --openssldir=${WORK_DIR}/openssl-install \
@@ -80,7 +84,7 @@ ENV OPENSSL_LIB_DIR=${OPENSSL_DIR}/lib64
80
  ENV OPENSSL_INCLUDE_DIR=${OPENSSL_DIR}/include
81
  ENV OPENSSL_STATIC=1
82
 
83
- # 7. Сборка Python (для libpython3.11.so)
84
  WORKDIR ${WORK_DIR}
85
  RUN wget -q https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz && \
86
  tar -xf Python-${PYTHON_VERSION}.tgz
@@ -105,7 +109,7 @@ RUN CONFIG_SITE=config.site ./configure \
105
  make -j$(nproc) libpython3.11.so || true && \
106
  make install -i
107
 
108
- # Исправление sysconfig
109
  RUN mkdir -p ${WORK_DIR}/python-install/lib/python3.11
110
  RUN find ${WORK_DIR}/Python-${PYTHON_VERSION} -name "_sysconfigdata*.py" -not -name "*x86_64*" \
111
  -exec cp {} ${WORK_DIR}/python-install/lib/python3.11/_sysconfigdata__linux_aarch64-linux-android.py \;
@@ -137,14 +141,16 @@ RUN echo "#!/bin/bash" > build.sh && \
137
  echo "export OPENSSL_STATIC=1" >> build.sh && \
138
  echo "" >> build.sh && \
139
  echo "echo 'Starting Build...'" >> build.sh && \
 
140
  echo "pip wheel ${TARGET_PACKAGE} --wheel-dir=${OUTPUT_DIR} --no-binary=:all: --no-build-isolation -v" >> build.sh && \
141
  chmod +x build.sh
142
 
143
  RUN ./build.sh
144
 
145
- # 9. Патчинг колес
146
  RUN echo "Patching wheels..." && \
147
  for whl in *.whl; do \
 
148
  mkdir -p tmp_wheel; unzip -q "$whl" -d tmp_wheel; \
149
  find tmp_wheel -name "*.so" | while read so_file; do \
150
  if patchelf --print-needed "$so_file" | grep -q "libpython3.11.so.1.0"; then \
@@ -154,7 +160,7 @@ RUN echo "Patching wheels..." && \
154
  cd tmp_wheel; zip -r -q "../$whl" .; cd ..; rm -rf tmp_wheel; \
155
  done
156
 
157
- # 10. Переименование
158
  RUN for f in *.whl; do \
159
  if [ -f "$f" ]; then \
160
  new_name=$(echo "$f" | sed 's/linux_aarch64/android_24_arm64_v8a/g'); \
@@ -162,7 +168,7 @@ RUN for f in *.whl; do \
162
  fi \
163
  done
164
 
165
- # 11. Индекс
166
  RUN echo "<html><body><h1>Wheels</h1><ul>" > index.html && \
167
  find . -name "*.whl" -printf "<li><a href=\"%P\">%P</a></li>\n" | sort >> index.html && \
168
  echo "</ul></body></html>" >> index.html
 
17
  ENV NDK_VERSION=r26b
18
  ENV ANDROID_API=24
19
  ENV ANDROID_ARCH=aarch64
20
+ # Важно: OpenSSL требует именно ANDROID_NDK_ROOT
21
  ENV NDK_HOME=/opt/android-ndk
22
+ ENV ANDROID_NDK_ROOT=/opt/android-ndk
23
  ENV PYTHON_VERSION=3.11.9
24
  ENV OPENSSL_VERSION=3.3.0
25
  ENV RUSTUP_HOME=/opt/rust
 
28
 
29
  RUN mkdir -p ${WORK_DIR} ${OUTPUT_DIR}
30
 
31
+ # 3. Установка Rust (нужен для pydantic-core/maturin)
32
  RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable
33
  RUN rustup target add aarch64-linux-android
34
 
35
+ # 4. Установка инструментов сборки Python
36
+ # Добавлен pdm-backend для сборки проектов, использующих PDM
37
  RUN pip install --upgrade pip && \
38
  pip install --no-cache-dir \
39
  Cython wheel setuptools setuptools-scm \
 
43
 
44
  WORKDIR ${WORK_DIR}
45
 
46
+ # 5. Скачивание и установка Android NDK
47
  RUN wget -q https://dl.google.com/android/repository/android-ndk-${NDK_VERSION}-linux.zip && \
48
  unzip -q android-ndk-${NDK_VERSION}-linux.zip && \
49
  mv android-ndk-${NDK_VERSION} ${NDK_HOME} && \
50
  rm android-ndk-${NDK_VERSION}-linux.zip
51
 
52
+ # Настройка путей к тулчейну (компиляторам)
53
  ENV TOOLCHAIN=${NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64
54
  ENV PATH=${TOOLCHAIN}/bin:$PATH
55
  ENV TARGET=${ANDROID_ARCH}-linux-android${ANDROID_API}
 
65
  ENV CXXFLAGS="-target ${TARGET} -fPIC -D__ANDROID__"
66
  ENV LDFLAGS="-target ${TARGET} -fPIC"
67
 
68
+ # 6. Сборка OpenSSL (теперь должна найти ANDROID_NDK_ROOT)
69
  WORKDIR ${WORK_DIR}
70
  RUN wget -q https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz && \
71
  tar -xf openssl-${OPENSSL_VERSION}.tar.gz
72
 
73
  WORKDIR ${WORK_DIR}/openssl-${OPENSSL_VERSION}
74
+ # Добавляем PATH к toolchain явно в команду на всякий случай, хотя ENV PATH должен работать
75
+ RUN PATH=$PATH:${TOOLCHAIN}/bin ./Configure android-arm64 \
76
  -D__ANDROID_API__=${ANDROID_API} \
77
  --prefix=${WORK_DIR}/openssl-install \
78
  --openssldir=${WORK_DIR}/openssl-install \
 
84
  ENV OPENSSL_INCLUDE_DIR=${OPENSSL_DIR}/include
85
  ENV OPENSSL_STATIC=1
86
 
87
+ # 7. Сборка Python (для получения libpython3.11.so)
88
  WORKDIR ${WORK_DIR}
89
  RUN wget -q https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz && \
90
  tar -xf Python-${PYTHON_VERSION}.tgz
 
109
  make -j$(nproc) libpython3.11.so || true && \
110
  make install -i
111
 
112
+ # Копируем sysconfig
113
  RUN mkdir -p ${WORK_DIR}/python-install/lib/python3.11
114
  RUN find ${WORK_DIR}/Python-${PYTHON_VERSION} -name "_sysconfigdata*.py" -not -name "*x86_64*" \
115
  -exec cp {} ${WORK_DIR}/python-install/lib/python3.11/_sysconfigdata__linux_aarch64-linux-android.py \;
 
141
  echo "export OPENSSL_STATIC=1" >> build.sh && \
142
  echo "" >> build.sh && \
143
  echo "echo 'Starting Build...'" >> build.sh && \
144
+ # Используем --no-build-isolation, так как мы сами установили pdm-backend и прочие тулзы
145
  echo "pip wheel ${TARGET_PACKAGE} --wheel-dir=${OUTPUT_DIR} --no-binary=:all: --no-build-isolation -v" >> build.sh && \
146
  chmod +x build.sh
147
 
148
  RUN ./build.sh
149
 
150
+ # 9. Патчинг (исправление зависимостей .so файлов)
151
  RUN echo "Patching wheels..." && \
152
  for whl in *.whl; do \
153
+ echo "Processing $whl..."; \
154
  mkdir -p tmp_wheel; unzip -q "$whl" -d tmp_wheel; \
155
  find tmp_wheel -name "*.so" | while read so_file; do \
156
  if patchelf --print-needed "$so_file" | grep -q "libpython3.11.so.1.0"; then \
 
160
  cd tmp_wheel; zip -r -q "../$whl" .; cd ..; rm -rf tmp_wheel; \
161
  done
162
 
163
+ # 10. Переименование в формат Android
164
  RUN for f in *.whl; do \
165
  if [ -f "$f" ]; then \
166
  new_name=$(echo "$f" | sed 's/linux_aarch64/android_24_arm64_v8a/g'); \
 
168
  fi \
169
  done
170
 
171
+ # 11. HTML индекс
172
  RUN echo "<html><body><h1>Wheels</h1><ul>" > index.html && \
173
  find . -name "*.whl" -printf "<li><a href=\"%P\">%P</a></li>\n" | sort >> index.html && \
174
  echo "</ul></body></html>" >> index.html