sterepando commited on
Commit
908ec85
·
verified ·
1 Parent(s): ab1a186

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +59 -109
Dockerfile CHANGED
@@ -1,19 +1,16 @@
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
14
- ENV ANDROID_ABI=arm64-v8a
15
  ENV NDK_ROOT=/opt/android-ndk
16
- ENV ANDROID_NDK_ROOT=/opt/android-ndk
17
  ENV PATH=$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
18
 
19
  WORKDIR /opt
@@ -22,125 +19,78 @@ RUN wget -q https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_V
22
  mv android-ndk-${ANDROID_NDK_VERSION} android-ndk && \
23
  rm android-ndk-${ANDROID_NDK_VERSION}-linux.zip
24
 
25
- # Переменные компиляции
26
  ENV CC="aarch64-linux-android${ANDROID_API}-clang"
27
  ENV CXX="aarch64-linux-android${ANDROID_API}-clang++"
28
  ENV AR="llvm-ar"
29
  ENV RANLIB="llvm-ranlib"
30
- ENV STRIP="llvm-strip"
31
- ENV READELF="llvm-readelf"
32
  ENV PREFIX=/opt/android-libs
33
 
34
- # ВАЖНО: Добавляем -fPIC во все глобальные флаги
35
- ENV CFLAGS="-fPIC"
36
- ENV CXXFLAGS="-fPIC"
37
 
38
- RUN mkdir -p $PREFIX
39
-
40
- # 3. ZLIB (Static + fPIC)
41
- WORKDIR /build/zlib
42
  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 && \
43
- # zlib configure читает CFLAGS из окружения
44
- export CFLAGS="-fPIC" && \
45
- ./configure --prefix=$PREFIX --static && \
46
- make -j4 && make install
47
 
48
- # 4. OpenSSL (Static + fPIC)
49
- WORKDIR /build/openssl
50
  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 && \
51
- # Добавляем -fPIC явно в опции конфигурации
52
- ./Configure android-arm64 \
53
- -D__ANDROID_API__=${ANDROID_API} \
54
- --prefix=$PREFIX \
55
- no-shared \
56
- -fPIC \
57
- && \
58
- make -j4 && make install_sw
59
 
60
- # 5. Curl (Static + fPIC)
61
- WORKDIR /build/curl
62
  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 && \
63
- ./configure \
64
- --host=aarch64-linux-android \
65
- --prefix=$PREFIX \
66
- --disable-shared --enable-static \
67
- --with-openssl=$PREFIX \
68
- --with-zlib=$PREFIX \
69
- --disable-ldap --disable-ldaps \
70
- --disable-rtsp --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap \
71
- --disable-smtp --disable-gopher --disable-mqtt \
72
- CFLAGS="-I$PREFIX/include -fPIC" LDFLAGS="-L$PREFIX/lib" && \
73
- make -j4 && make install
74
-
75
- # 6. Python заголовки
76
- WORKDIR /opt/python-src
77
- ENV PY_VERSION=3.11.9
78
- RUN wget -q https://www.python.org/ftp/python/${PY_VERSION}/Python-${PY_VERSION}.tgz && \
79
- tar -xzf Python-${PY_VERSION}.tgz && \
80
- mv Python-${PY_VERSION} python3-android
81
-
82
- WORKDIR /opt/python-src/python3-android
83
- RUN ./configure \
84
- --host=aarch64-linux-android \
85
- --build=x86_64-linux-gnu \
86
- --with-build-python=/usr/local/bin/python3 \
87
- --enable-shared \
88
- --disable-ipv6 \
89
- ac_cv_file__dev_ptmx=no \
90
- ac_cv_file__dev_ptc=no \
91
- CC="aarch64-linux-android${ANDROID_API}-clang" \
92
- CXX="aarch64-linux-android${ANDROID_API}-clang++"
93
-
94
- # 7. СБОРКА WHEELS
95
  WORKDIR /build/wheels
96
- RUN pip install build wheel
97
-
98
- # FAKE curl-config
99
- RUN echo '#!/bin/bash' > /usr/bin/curl-config-android && \
100
- echo 'case "$1" in' >> /usr/bin/curl-config-android && \
101
- echo ' --version) echo "libcurl 8.5.0";;' >> /usr/bin/curl-config-android && \
102
- echo ' --features) echo "SSL IPv6 UnixSockets libz AsynchDNS Largefile HSTS Alt-Svc HTTPS-proxy";;' >> /usr/bin/curl-config-android && \
103
- echo ' --libs|--static-libs) echo "-L'${PREFIX}'/lib -lcurl -lssl -lcrypto -lz";;' >> /usr/bin/curl-config-android && \
104
- echo ' --cflags) echo "-I'${PREFIX}'/include -DANDROID";;' >> /usr/bin/curl-config-android && \
105
- echo ' --prefix) echo "'${PREFIX}'";;' >> /usr/bin/curl-config-android && \
106
- echo ' *) exit 0;;' >> /usr/bin/curl-config-android && \
107
- echo 'esac' >> /usr/bin/curl-config-android && \
108
- chmod +x /usr/bin/curl-config-android
109
-
110
- # Скрипт сборки
111
- RUN echo '#!/bin/bash' > build_wheels.sh && \
112
- echo 'export CC="aarch64-linux-android'${ANDROID_API}'-clang"' >> build_wheels.sh && \
113
- echo 'export LDSHARED="aarch64-linux-android'${ANDROID_API}'-clang -shared"' >> build_wheels.sh && \
114
- # Добавляем -fPIC и сюда для надежности
115
- echo 'export CFLAGS="-I/opt/python-src/python3-android -I/opt/python-src/python3-android/Include -I'${PREFIX}'/include -DANDROID -fPIC"' >> build_wheels.sh && \
116
- echo 'export LDFLAGS="-L/opt/python-src/python3-android -L'${PREFIX}'/lib -lcurl -lssl -lcrypto -lz"' >> build_wheels.sh && \
117
- \
118
- # 1. WGET
119
- echo 'echo "Building wget..."' >> build_wheels.sh && \
120
- echo 'pip wheel wget --no-binary :all: --no-deps -w dist/' >> build_wheels.sh && \
121
- \
122
- # 2. PyCryptodome (добавил, так как был в запросе выше, на всякий случай)
123
- echo 'echo "Building PyCryptodome..."' >> build_wheels.sh && \
124
- echo 'pip wheel pycryptodome --no-binary :all: --no-deps -w dist/' >> build_wheels.sh && \
125
- \
126
- # 3. PYCURL
127
- echo 'echo "Building PyCurl..."' >> build_wheels.sh && \
128
- echo 'export PYCURL_CURL_CONFIG=/usr/bin/curl-config-android' >> build_wheels.sh && \
129
- echo 'export PYCURL_SSL_LIBRARY=openssl' >> build_wheels.sh && \
130
- echo 'pip wheel pycurl --no-binary :all: --no-deps -w dist/' >> build_wheels.sh
131
-
132
- RUN chmod +x build_wheels.sh
133
- RUN ./build_wheels.sh
134
-
135
- # 8. Переименование
136
  WORKDIR /output
137
  RUN cd /build/wheels/dist && \
138
  for file in *.whl; do \
139
- PACKAGE_NAME=$(echo $file | cut -d'-' -f1) && \
140
- VERSION=$(echo $file | cut -d'-' -f2) && \
141
- NEW_NAME="${PACKAGE_NAME}-${VERSION}-cp311-cp311-android_21-30_arm64_v8a.whl" && \
142
- mv "$file" "/output/$NEW_NAME"; \
 
143
  done
144
 
145
- # 9. Выдача
146
  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 \
7
+ automake autoconf libtool zip \
8
  && rm -rf /var/lib/apt/lists/*
9
 
10
+ # 2. Настройка NDK (r25c для API 30)
11
  ENV ANDROID_NDK_VERSION=r25c
12
  ENV ANDROID_API=30
 
 
13
  ENV NDK_ROOT=/opt/android-ndk
 
14
  ENV PATH=$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
15
 
16
  WORKDIR /opt
 
19
  mv android-ndk-${ANDROID_NDK_VERSION} android-ndk && \
20
  rm android-ndk-${ANDROID_NDK_VERSION}-linux.zip
21
 
22
+ # Переменные компилятора
23
  ENV CC="aarch64-linux-android${ANDROID_API}-clang"
24
  ENV CXX="aarch64-linux-android${ANDROID_API}-clang++"
25
  ENV AR="llvm-ar"
26
  ENV RANLIB="llvm-ranlib"
 
 
27
  ENV PREFIX=/opt/android-libs
28
 
29
+ # 3. Сборка статических зависимостей (fPIC обязательно)
30
+ WORKDIR /build/deps
 
31
 
32
+ # ZLIB
 
 
 
33
  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 && \
34
+ CFLAGS="-fPIC" ./configure --prefix=$PREFIX --static && make -j4 install
 
 
 
35
 
36
+ # OPENSSL
 
37
  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 && \
38
+ ./Configure android-arm64 -D__ANDROID_API__=${ANDROID_API} --prefix=$PREFIX no-shared -fPIC && \
39
+ make -j4 install_sw
 
 
 
 
 
 
40
 
41
+ # CURL
 
42
  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 && \
43
+ ./configure --host=aarch64-linux-android --prefix=$PREFIX --disable-shared --enable-static \
44
+ --with-openssl=$PREFIX --with-zlib=$PREFIX --disable-ldap \
45
+ CFLAGS="-fPIC -I$PREFIX/include" LDFLAGS="-L$PREFIX/lib" && \
46
+ make -j4 install
47
+
48
+ # 4. ПОДГОТОВКА PYTHON 3.11.10 ДЛЯ АНДРОИД
49
+ # Нам нужно собрать "заготовку" питона, чтобы получить libpython3.11.so и правильные хидеры
50
+ WORKDIR /opt/python-android
51
+ RUN wget -q https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tgz && tar -xf Python-3.11.10.tgz
52
+ WORKDIR /opt/python-android/Python-3.11.10
53
+ RUN ./configure --host=aarch64-linux-android --build=x86_64-linux-gnu \
54
+ --with-build-python=python3 --enable-shared --without-ensurepip \
55
+ ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no \
56
+ CC="$CC" CXX="$CXX" AR="$AR" RANLIB="$RANLIB"
57
+ # Нам нужна только библиотека и конфиг
58
+ RUN make -j4 libpython3.11.so
59
+
60
+ # 5. СБОРКА WHEELS (PyCurl & Wget)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  WORKDIR /build/wheels
62
+ RUN pip install wheel setuptools
63
+
64
+ # Создаем скрипт-обманку curl-config
65
+ 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
66
+
67
+ # Сборка
68
+ RUN echo '#!/bin/bash\n\
69
+ export CC="aarch64-linux-android'${ANDROID_API}'-clang"\n\
70
+ export LDSHARED="'$CC' -shared -L/opt/python-android/Python-3.11.10 -lpython3.11"\n\
71
+ export CFLAGS="-I/opt/python-android/Python-3.11.10/Include -I/opt/python-android/Python-3.11.10 -I'$PREFIX'/include -fPIC -DANDROID"\n\
72
+ export LDFLAGS="-L/opt/python-android/Python-3.11.10 -L'$PREFIX'/lib -lpython3.11 -lcurl -lssl -lcrypto -lz"\n\
73
+ \n\
74
+ echo "--- Сборка PyCurl ---"\n\
75
+ export PYCURL_CURL_CONFIG=/usr/bin/curl-config-android\n\
76
+ export PYCURL_SSL_LIBRARY=openssl\n\
77
+ # Мы используем --plat-name, чтобы заставить pip поставить правильный тег\n\
78
+ pip wheel pycurl --no-binary :all: --no-deps -w dist/ --plat-name android_arm64\n\
79
+ \n\
80
+ echo "--- Сборка wget ---"\n\
81
+ pip wheel wget --no-binary :all: --no-deps -w dist/ --plat-name android_arm64' > build.sh
82
+
83
+ RUN chmod +x build.sh && ./build.sh
84
+
85
+ # 6. ПЕРЕИМЕНОВАНИЕ И ВЫДАЧА
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
  WORKDIR /output
87
  RUN cd /build/wheels/dist && \
88
  for file in *.whl; do \
89
+ # Меняем linux_x86_64 на твой специфичный тег
90
+ NEW_NAME=$(echo $file | sed "s/linux_x86_64/android_21_30_arm64_v8a/g" | sed "s/any/android_21_30_arm64_v8a/g"); \
91
+ # Если в имени всё еще нет нужного формата, форсируем его
92
+ FINAL_NAME=$(echo $NEW_NAME | cut -d"-" -f1,2)"-cp311-cp311-android_21-30_arm64_v8a.whl"; \
93
+ mv "$file" "/output/$FINAL_NAME"; \
94
  done
95
 
 
96
  CMD ["python3", "-m", "http.server", "7860", "--directory", "/output"]