sterepando commited on
Commit
d9529e0
·
verified ·
1 Parent(s): e342572

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +39 -37
Dockerfile CHANGED
@@ -1,60 +1,63 @@
1
  FROM ubuntu:22.04
2
 
3
- # 1. Установка системных зависимостей
4
  ENV DEBIAN_FRONTEND=noninteractive
5
  RUN apt-get update && apt-get install -y \
6
  build-essential cmake wget unzip git python3 \
7
  openjdk-17-jdk-headless gettext libz-dev ninja-build zip \
8
  && rm -rf /var/lib/apt/lists/*
9
 
10
- # 2. Настройка Android NDK r25c
11
  ENV NDK_VERSION=r25c
12
  RUN wget -q https://dl.google.com/android/repository/android-ndk-${NDK_VERSION}-linux.zip \
13
  && unzip -q android-ndk-${NDK_VERSION}-linux.zip -d /opt \
14
  && rm android-ndk-${NDK_VERSION}-linux.zip
15
  ENV ANDROID_NDK_HOME=/opt/android-ndk-${NDK_VERSION}
16
 
17
- # 3. Исправленная установка Android SDK (для компиляции DEX)
18
  RUN wget -q https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip -O sdk.zip \
19
- && mkdir -p /opt/android-sdk/cmdline-tools/latest \
20
  && unzip -q sdk.zip -d /tmp \
21
- && mv /tmp/cmdline-tools/* /opt/android-sdk/cmdline-tools/latest/ \
22
- && rm -rf /tmp/cmdline-tools sdk.zip
 
 
 
 
23
 
24
- ENV PATH="/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/build-tools/30.0.3:${PATH}"
25
  RUN yes | sdkmanager --sdk_root=/opt/android-sdk "platforms;android-30" "build-tools;30.0.3"
26
 
27
- # 4. Переменные кросс-компиляции
28
  ENV TARGET=aarch64-linux-android
29
  ENV API=30
30
- ENV TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64
31
- ENV CC=$TOOLCHAIN/bin/$TARGET$API-clang
32
- ENV CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
33
- ENV AR=$TOOLCHAIN/bin/llvm-ar
34
- ENV LD=$TOOLCHAIN/bin/ld.lld
35
- ENV STRIP=$TOOLCHAIN/bin/llvm-strip
36
  ENV PREFIX=/build/deps
37
-
38
  WORKDIR /build
39
 
 
 
 
 
 
40
  # 5. Сборка ZLIB (Static)
41
  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 \
42
- && ./configure --prefix=$PREFIX --static && make -j$(nproc) install
43
 
44
- # 6. Сборка OPENSSL (Static, для HTTPS)
 
45
  RUN wget -q https://www.openssl.org/source/openssl-1.1.1w.tar.gz && tar -xf openssl-1.1.1w.tar.gz && cd openssl-1.1.1w \
46
- && ./Configure android-arm64 no-shared no-tests --prefix=$PREFIX && make -j$(nproc) install_sw
 
47
 
48
  # 7. Сборка EXPAT (Static)
49
  RUN wget -q https://github.com/libexpat/libexpat/releases/download/R_2_5_0/expat-2.5.0.tar.gz && tar -xf expat-2.5.0.tar.gz && cd expat-2.5.0 \
50
  && ./configure --host=$TARGET --prefix=$PREFIX --enable-static --disable-shared && make -j$(nproc) install
51
 
52
- # 8. Сборка CURL (Static с поддержкой SSL)
53
  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 \
54
  && ./configure --host=$TARGET --prefix=$PREFIX --with-openssl=$PREFIX --with-zlib=$PREFIX \
55
  --enable-static --disable-shared --disable-verbose --disable-ldap && make -j$(nproc) install
56
 
57
- # 9. Сборка GIT (Вшиваем всё внутрь)
58
  RUN wget -q https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.43.0.tar.gz && tar -xf git-2.43.0.tar.gz && cd git-2.43.0 \
59
  && export LDFLAGS="-static -L$PREFIX/lib" \
60
  && export CPPFLAGS="-I$PREFIX/include" \
@@ -63,9 +66,8 @@ RUN wget -q https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.43.0.tar.
63
  ac_cv_fread_reads_directories=yes ac_cv_snprintf_returns_bogus=no \
64
  && make -j$(nproc) install NO_TCLTK=1 NO_GETTEXT=1 NO_PYTHON=1 NO_INSTALL_HARDLINKS=1
65
 
66
- # 10. Java код "умного" инсталлятора с инъекцией PATH
67
- RUN mkdir -p /build/java/ni/mandre/git
68
- RUN echo 'package ni.mandre.git; \n\
69
  import android.content.Context; \n\
70
  import java.io.*; \n\
71
  import java.lang.reflect.*; \n\
@@ -79,30 +81,30 @@ public class GitInstaller { \n\
79
  fos.write(gitData); fos.close(); \n\
80
  gitBin.setExecutable(true, false); \n\
81
  injectPath(binDir.getAbsolutePath()); \n\
82
- System.out.println("MandreGit: Installed to " + gitBin.getAbsolutePath()); \n\
83
  } catch (Exception e) { e.printStackTrace(); } \n\
84
  } \n\
85
- private static void injectPath(String newPath) throws Exception { \n\
86
- Map<String, String> env = System.getenv(); \n\
87
- Class<?> cl = env.getClass(); \n\
88
- Field field = cl.getDeclaredField("m"); \n\
89
- field.setAccessible(true); \n\
90
- Map<String, String> writableEnv = (Map<String, String>) field.get(env); \n\
91
- String path = writableEnv.get("PATH"); \n\
92
- if (path == null || !path.contains(newPath)) { \n\
93
- writableEnv.put("PATH", newPath + ":" + (path == null ? "" : path)); \n\
94
- } \n\
 
95
  } \n\
96
  }' > /build/java/ni/mandre/git/GitInstaller.java
97
 
98
  # Компиляция в DEX
99
  RUN javac -source 8 -target 8 -cp /opt/android-sdk/platforms/android-30/android.jar /build/java/ni/mandre/git/GitInstaller.java \
100
- && /opt/android-sdk/build-tools/30.0.3/d8 --output /build/git_setup.dex /build/java/ni/mandre/git/GitInstaller.class
101
 
102
- # 11. Финальная сборка пакета
103
  RUN cp /data/local/tmp/git/bin/git /build/git_arm64 && \
104
  zip -j /build/git_bundle.zip /build/git_arm64 /build/git_setup.dex
105
 
106
- # Запуск сервера для скачивания
107
  EXPOSE 7860
108
  CMD ["python3", "-m", "http.server", "7860"]
 
1
  FROM ubuntu:22.04
2
 
3
+ # 1. Системные зависимости
4
  ENV DEBIAN_FRONTEND=noninteractive
5
  RUN apt-get update && apt-get install -y \
6
  build-essential cmake wget unzip git python3 \
7
  openjdk-17-jdk-headless gettext libz-dev ninja-build zip \
8
  && rm -rf /var/lib/apt/lists/*
9
 
10
+ # 2. Android NDK r25c
11
  ENV NDK_VERSION=r25c
12
  RUN wget -q https://dl.google.com/android/repository/android-ndk-${NDK_VERSION}-linux.zip \
13
  && unzip -q android-ndk-${NDK_VERSION}-linux.zip -d /opt \
14
  && rm android-ndk-${NDK_VERSION}-linux.zip
15
  ENV ANDROID_NDK_HOME=/opt/android-ndk-${NDK_VERSION}
16
 
17
+ # 3. Android SDK (Command Line Tools + Build Tools для DEX)
18
  RUN wget -q https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip -O sdk.zip \
19
+ && mkdir -p /opt/android-sdk/cmdline-tools \
20
  && unzip -q sdk.zip -d /tmp \
21
+ && mv /tmp/cmdline-tools /opt/android-sdk/cmdline-tools/latest \
22
+ && rm -rf sdk.zip /tmp/cmdline-tools
23
+
24
+ # Добавляем всё в PATH
25
+ ENV TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64
26
+ ENV PATH="/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/build-tools/30.0.3:${TOOLCHAIN}/bin:${PATH}"
27
 
 
28
  RUN yes | sdkmanager --sdk_root=/opt/android-sdk "platforms;android-30" "build-tools;30.0.3"
29
 
30
+ # 4. Настройка Кросс-компиляции (API 30, ARM64)
31
  ENV TARGET=aarch64-linux-android
32
  ENV API=30
 
 
 
 
 
 
33
  ENV PREFIX=/build/deps
 
34
  WORKDIR /build
35
 
36
+ # ФИКС ДЛЯ OPENSSL: Создаем симлинки, чтобы он нашел "gcc"
37
+ RUN ln -s ${TOOLCHAIN}/bin/aarch64-linux-android${API}-clang ${TOOLCHAIN}/bin/aarch64-linux-android-gcc && \
38
+ ln -s ${TOOLCHAIN}/bin/llvm-ar ${TOOLCHAIN}/bin/aarch64-linux-android-ar && \
39
+ ln -s ${TOOLCHAIN}/bin/llvm-ranlib ${TOOLCHAIN}/bin/aarch64-linux-android-ranlib
40
+
41
  # 5. Сборка ZLIB (Static)
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
+ && CC=aarch64-linux-android${API}-clang ./configure --prefix=$PREFIX --static && make -j$(nproc) install
44
 
45
+ # 6. Сборка OPENSSL (Static, HTTPS)
46
+ # Используем ANDROID_NDK_HOME и правильный таргет
47
  RUN wget -q https://www.openssl.org/source/openssl-1.1.1w.tar.gz && tar -xf openssl-1.1.1w.tar.gz && cd openssl-1.1.1w \
48
+ && ./Configure android-arm64 no-shared no-tests -D__ANDROID_API__=$API --prefix=$PREFIX \
49
+ && make -j$(nproc) install_sw
50
 
51
  # 7. Сборка EXPAT (Static)
52
  RUN wget -q https://github.com/libexpat/libexpat/releases/download/R_2_5_0/expat-2.5.0.tar.gz && tar -xf expat-2.5.0.tar.gz && cd expat-2.5.0 \
53
  && ./configure --host=$TARGET --prefix=$PREFIX --enable-static --disable-shared && make -j$(nproc) install
54
 
55
+ # 8. Сборка CURL (Static)
56
  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 \
57
  && ./configure --host=$TARGET --prefix=$PREFIX --with-openssl=$PREFIX --with-zlib=$PREFIX \
58
  --enable-static --disable-shared --disable-verbose --disable-ldap && make -j$(nproc) install
59
 
60
+ # 9. Сборка GIT (Вшиваем зависимости через LDFLAGS)
61
  RUN wget -q https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.43.0.tar.gz && tar -xf git-2.43.0.tar.gz && cd git-2.43.0 \
62
  && export LDFLAGS="-static -L$PREFIX/lib" \
63
  && export CPPFLAGS="-I$PREFIX/include" \
 
66
  ac_cv_fread_reads_directories=yes ac_cv_snprintf_returns_bogus=no \
67
  && make -j$(nproc) install NO_TCLTK=1 NO_GETTEXT=1 NO_PYTHON=1 NO_INSTALL_HARDLINKS=1
68
 
69
+ # 10. Java DEX инсталлятор с инъекцией PATH
70
+ RUN mkdir -p /build/java/ni/mandre/git && echo 'package ni.mandre.git; \n\
 
71
  import android.content.Context; \n\
72
  import java.io.*; \n\
73
  import java.lang.reflect.*; \n\
 
81
  fos.write(gitData); fos.close(); \n\
82
  gitBin.setExecutable(true, false); \n\
83
  injectPath(binDir.getAbsolutePath()); \n\
84
+ System.out.println("MandreGit: Success. Git binary at: " + gitBin.getAbsolutePath()); \n\
85
  } catch (Exception e) { e.printStackTrace(); } \n\
86
  } \n\
87
+ private static void injectPath(String newPath) { \n\
88
+ try { \n\
89
+ Map<String, String> env = System.getenv(); \n\
90
+ Field field = env.getClass().getDeclaredField("m"); \n\
91
+ field.setAccessible(true); \n\
92
+ Map<String, String> writableEnv = (Map<String, String>) field.get(env); \n\
93
+ String path = writableEnv.get("PATH"); \n\
94
+ if (path == null || !path.contains(newPath)) { \n\
95
+ writableEnv.put("PATH", newPath + ":" + (path == null ? "" : path)); \n\
96
+ } \n\
97
+ } catch (Exception e) {} \n\
98
  } \n\
99
  }' > /build/java/ni/mandre/git/GitInstaller.java
100
 
101
  # Компиляция в DEX
102
  RUN javac -source 8 -target 8 -cp /opt/android-sdk/platforms/android-30/android.jar /build/java/ni/mandre/git/GitInstaller.java \
103
+ && d8 --output /build/git_setup.dex /build/java/ni/mandre/git/GitInstaller.class
104
 
105
+ # 11. Финальный экспорт
106
  RUN cp /data/local/tmp/git/bin/git /build/git_arm64 && \
107
  zip -j /build/git_bundle.zip /build/git_arm64 /build/git_setup.dex
108
 
 
109
  EXPOSE 7860
110
  CMD ["python3", "-m", "http.server", "7860"]