sterepando commited on
Commit
131b4c9
·
verified ·
1 Parent(s): 28cc0e6

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +8 -12
Dockerfile CHANGED
@@ -29,6 +29,8 @@ ENV ANDROID_API=24
29
  ENV ANDROID_ARCH=aarch64
30
  ENV ANDROID_HOME=${HOME}/android-sdk
31
  ENV NDK_HOME=${HOME}/android-ndk
 
 
32
  ENV PYTHON_VERSION=3.11.9
33
  ENV OPENSSL_VERSION=3.3.0
34
  ENV RUSTUP_HOME=${HOME}/.rustup
@@ -45,6 +47,7 @@ RUN wget -q https://dl.google.com/android/repository/android-ndk-${NDK_VERSION}-
45
  mv android-ndk-${NDK_VERSION} ${NDK_HOME} && \
46
  rm android-ndk-${NDK_VERSION}-linux.zip
47
 
 
48
  ENV TOOLCHAIN=${NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64
49
  ENV PATH=${TOOLCHAIN}/bin:$PATH
50
  ENV TARGET=${ANDROID_ARCH}-linux-android${ANDROID_API}
@@ -67,6 +70,8 @@ RUN wget -q https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz &&
67
  tar -xf openssl-${OPENSSL_VERSION}.tar.gz
68
 
69
  WORKDIR ${WORK_DIR}/openssl-${OPENSSL_VERSION}
 
 
70
  RUN ./Configure android-arm64 \
71
  -D__ANDROID_API__=${ANDROID_API} \
72
  --prefix=${WORK_DIR}/openssl-install \
@@ -123,7 +128,6 @@ RUN cp ${WORK_DIR}/python-install/lib/python3.11/_sysconfigdata__linux_aarch64-l
123
  USER user
124
 
125
  # 7. УСТАНОВКА ИНСТРУМЕНТОВ СБОРКИ (Build Backends)
126
- # Это исправляет ошибки "Cannot import mesonpy", "maturin not found" и т.д.
127
  RUN pip install --upgrade pip && \
128
  pip install --user --no-cache-dir \
129
  Cython wheel setuptools \
@@ -155,7 +159,6 @@ WORKDIR ${OUTPUT_DIR}
155
  # 9. Скрипт сборки
156
  RUN echo "#!/bin/bash" > build.sh && \
157
  echo "set -e" >> build.sh && \
158
- # Специфичные настройки для Llama.cpp
159
  echo "export CMAKE_ARGS=\"-DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-${ANDROID_API} -DCMAKE_TOOLCHAIN_FILE=${NDK_HOME}/build/cmake/android.toolchain.cmake -DGGML_OPENCL=OFF -DGGML_VULKAN=OFF\"" >> build.sh && \
160
  echo "" >> build.sh && \
161
  echo "build_pkg() {" >> build.sh && \
@@ -163,20 +166,14 @@ RUN echo "#!/bin/bash" > build.sh && \
163
  echo " echo \"--------------------------------------------------\"" >> build.sh && \
164
  echo " echo \"BUILDING: \$PKG\"" >> build.sh && \
165
  echo " echo \"--------------------------------------------------\"" >> build.sh && \
166
- # Используем --no-build-isolation и --no-deps, так как мы сами контролируем окружение
167
- # и не хотим, чтобы pip пытался создать изолированное окружение без наших CFLAGS
168
  echo " python3 -m pip wheel \"\$PKG\" --wheel-dir=${OUTPUT_DIR} --no-binary=:all: --no-build-isolation --no-deps -v || echo \"FAILED: \$PKG\"" >> build.sh && \
169
  echo "}" >> build.sh && \
170
  echo "" >> build.sh && \
171
- # --- ПОРЯДОК СБОРКИ ВАЖЕН ---
172
- # 1. Сначала Numpy (версия 1.26.4 стабильнее для Android чем 2.0)
173
  echo "build_pkg 'numpy<2.0'" >> build.sh && \
174
- # 2. Простые пакеты
175
  echo "build_pkg 'flask'" >> build.sh && \
176
  echo "build_pkg 'flask_compress'" >> build.sh && \
177
- # 3. Rust-зависимые
178
  echo "build_pkg 'tokenizers'" >> build.sh && \
179
- # 4. Тяжелые зависимости
180
  echo "build_pkg 'transformers'" >> build.sh && \
181
  echo "build_pkg 'llama-cpp-python'" >> build.sh && \
182
  echo "build_pkg 'soundfile'" >> build.sh && \
@@ -186,7 +183,7 @@ RUN echo "#!/bin/bash" > build.sh && \
186
  # Запуск сборки
187
  RUN ./build.sh
188
 
189
- # 10. Патчинг (исправление имени библиотеки Python в ELF заголовках)
190
  RUN echo "Patching wheels..." && \
191
  for whl in *.whl; do \
192
  if [ -f "$whl" ]; then \
@@ -194,7 +191,6 @@ RUN echo "Patching wheels..." && \
194
  mkdir -p tmp_wheel; \
195
  unzip -q "$whl" -d tmp_wheel; \
196
  find tmp_wheel -name "*.so" | while read so_file; do \
197
- # Если библиотека ссылается на libpython3.11.so.1.0, меняем на libpython3.11.so (стандарт Android)
198
  if patchelf --print-needed "$so_file" | grep -q "libpython3.11.so.1.0"; then \
199
  echo "Patching $so_file"; \
200
  patchelf --replace-needed "libpython3.11.so.1.0" "libpython3.11.so" "$so_file"; \
@@ -204,7 +200,7 @@ RUN echo "Patching wheels..." && \
204
  fi; \
205
  done
206
 
207
- # 11. Переименование для MandreInstall (замена linux_aarch64 на android_...)
208
  RUN for f in *.whl; do \
209
  if [ -f "$f" ]; then \
210
  new_name=$(echo "$f" | sed 's/linux_aarch64/android_24_arm64_v8a/g'); \
 
29
  ENV ANDROID_ARCH=aarch64
30
  ENV ANDROID_HOME=${HOME}/android-sdk
31
  ENV NDK_HOME=${HOME}/android-ndk
32
+ # !!! ВАЖНО: Дублируем переменную, так как OpenSSL и некоторые тулы ищут именно её
33
+ ENV ANDROID_NDK_ROOT=${HOME}/android-ndk
34
  ENV PYTHON_VERSION=3.11.9
35
  ENV OPENSSL_VERSION=3.3.0
36
  ENV RUSTUP_HOME=${HOME}/.rustup
 
47
  mv android-ndk-${NDK_VERSION} ${NDK_HOME} && \
48
  rm android-ndk-${NDK_VERSION}-linux.zip
49
 
50
+ # Настройка путей тулчейна
51
  ENV TOOLCHAIN=${NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64
52
  ENV PATH=${TOOLCHAIN}/bin:$PATH
53
  ENV TARGET=${ANDROID_ARCH}-linux-android${ANDROID_API}
 
70
  tar -xf openssl-${OPENSSL_VERSION}.tar.gz
71
 
72
  WORKDIR ${WORK_DIR}/openssl-${OPENSSL_VERSION}
73
+ # Явно добавляем PATH к тулчейну в начало, чтобы perl-скрипт Configure нашел clang
74
+ ENV PATH=${TOOLCHAIN}/bin:$PATH
75
  RUN ./Configure android-arm64 \
76
  -D__ANDROID_API__=${ANDROID_API} \
77
  --prefix=${WORK_DIR}/openssl-install \
 
128
  USER user
129
 
130
  # 7. УСТАНОВКА ИНСТРУМЕНТОВ СБОРКИ (Build Backends)
 
131
  RUN pip install --upgrade pip && \
132
  pip install --user --no-cache-dir \
133
  Cython wheel setuptools \
 
159
  # 9. Скрипт сборки
160
  RUN echo "#!/bin/bash" > build.sh && \
161
  echo "set -e" >> build.sh && \
 
162
  echo "export CMAKE_ARGS=\"-DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-${ANDROID_API} -DCMAKE_TOOLCHAIN_FILE=${NDK_HOME}/build/cmake/android.toolchain.cmake -DGGML_OPENCL=OFF -DGGML_VULKAN=OFF\"" >> build.sh && \
163
  echo "" >> build.sh && \
164
  echo "build_pkg() {" >> build.sh && \
 
166
  echo " echo \"--------------------------------------------------\"" >> build.sh && \
167
  echo " echo \"BUILDING: \$PKG\"" >> build.sh && \
168
  echo " echo \"--------------------------------------------------\"" >> build.sh && \
 
 
169
  echo " python3 -m pip wheel \"\$PKG\" --wheel-dir=${OUTPUT_DIR} --no-binary=:all: --no-build-isolation --no-deps -v || echo \"FAILED: \$PKG\"" >> build.sh && \
170
  echo "}" >> build.sh && \
171
  echo "" >> build.sh && \
172
+ # Сборка пакетов (порядок важен)
 
173
  echo "build_pkg 'numpy<2.0'" >> build.sh && \
 
174
  echo "build_pkg 'flask'" >> build.sh && \
175
  echo "build_pkg 'flask_compress'" >> build.sh && \
 
176
  echo "build_pkg 'tokenizers'" >> build.sh && \
 
177
  echo "build_pkg 'transformers'" >> build.sh && \
178
  echo "build_pkg 'llama-cpp-python'" >> build.sh && \
179
  echo "build_pkg 'soundfile'" >> build.sh && \
 
183
  # Запуск сборки
184
  RUN ./build.sh
185
 
186
+ # 10. Патчинг (исправление имени библиотеки Python)
187
  RUN echo "Patching wheels..." && \
188
  for whl in *.whl; do \
189
  if [ -f "$whl" ]; then \
 
191
  mkdir -p tmp_wheel; \
192
  unzip -q "$whl" -d tmp_wheel; \
193
  find tmp_wheel -name "*.so" | while read so_file; do \
 
194
  if patchelf --print-needed "$so_file" | grep -q "libpython3.11.so.1.0"; then \
195
  echo "Patching $so_file"; \
196
  patchelf --replace-needed "libpython3.11.so.1.0" "libpython3.11.so" "$so_file"; \
 
200
  fi; \
201
  done
202
 
203
+ # 11. Переименование
204
  RUN for f in *.whl; do \
205
  if [ -f "$f" ]; then \
206
  new_name=$(echo "$f" | sed 's/linux_aarch64/android_24_arm64_v8a/g'); \