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

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +22 -21
Dockerfile CHANGED
@@ -1,26 +1,30 @@
1
  FROM ubuntu:22.04
2
 
3
- # 1. Подготовка среды (NDK r25c + SDK Tools)
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
  ENV NDK_VERSION=r25c
11
  RUN wget -q https://dl.google.com/android/repository/android-ndk-${NDK_VERSION}-linux.zip \
12
  && unzip -q android-ndk-${NDK_VERSION}-linux.zip -d /opt \
13
  && rm android-ndk-${NDK_VERSION}-linux.zip
14
  ENV ANDROID_NDK_HOME=/opt/android-ndk-${NDK_VERSION}
15
 
16
- # Инструменты для сборки DEX (d8)
17
  RUN wget -q https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip -O sdk.zip \
18
- && mkdir -p /opt/android-sdk/cmdline-tools \
19
- && unzip -q sdk.zip -d /tmp && mv /tmp/cmdline-tools/* /opt/android-sdk/cmdline-tools/latest && rm sdk.zip
 
 
 
20
  ENV PATH="/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/build-tools/30.0.3:${PATH}"
21
  RUN yes | sdkmanager --sdk_root=/opt/android-sdk "platforms;android-30" "build-tools;30.0.3"
22
 
23
- # 2. Настройка Кросс-компиляции (ARM64, API 30)
24
  ENV TARGET=aarch64-linux-android
25
  ENV API=30
26
  ENV TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64
@@ -28,31 +32,29 @@ ENV CC=$TOOLCHAIN/bin/$TARGET$API-clang
28
  ENV CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
29
  ENV AR=$TOOLCHAIN/bin/llvm-ar
30
  ENV LD=$TOOLCHAIN/bin/ld.lld
31
- ENV RANLIB=$TOOLCHAIN/bin/llvm-ranlib
32
  ENV STRIP=$TOOLCHAIN/bin/llvm-strip
33
  ENV PREFIX=/build/deps
34
 
35
  WORKDIR /build
36
 
37
- # 3. Сборка всех зависимостей В СТАТИКЕ
38
- # ZLIB
39
  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 \
40
  && ./configure --prefix=$PREFIX --static && make -j$(nproc) install
41
 
42
- # OPENSSL (Важнейший компонент для HTTPS)
43
  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 \
44
  && ./Configure android-arm64 no-shared no-tests --prefix=$PREFIX && make -j$(nproc) install_sw
45
 
46
- # EXPAT (Для разбора XML/WebDAV)
47
  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 \
48
  && ./configure --host=$TARGET --prefix=$PREFIX --enable-static --disable-shared && make -j$(nproc) install
49
 
50
- # CURL (Транспорт для Git)
51
  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 \
52
  && ./configure --host=$TARGET --prefix=$PREFIX --with-openssl=$PREFIX --with-zlib=$PREFIX \
53
  --enable-static --disable-shared --disable-verbose --disable-ldap && make -j$(nproc) install
54
 
55
- # 4. Сборка GIT (Монструозная статика)
56
  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 \
57
  && export LDFLAGS="-static -L$PREFIX/lib" \
58
  && export CPPFLAGS="-I$PREFIX/include" \
@@ -61,7 +63,7 @@ RUN wget -q https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.43.0.tar.
61
  ac_cv_fread_reads_directories=yes ac_cv_snprintf_returns_bogus=no \
62
  && make -j$(nproc) install NO_TCLTK=1 NO_GETTEXT=1 NO_PYTHON=1 NO_INSTALL_HARDLINKS=1
63
 
64
- # 5. Создание "Умного" Java-установщика
65
  RUN mkdir -p /build/java/ni/mandre/git
66
  RUN echo 'package ni.mandre.git; \n\
67
  import android.content.Context; \n\
@@ -73,13 +75,11 @@ public class GitInstaller { \n\
73
  try { \n\
74
  File binDir = ctx.getDir("bin", Context.MODE_PRIVATE); \n\
75
  File gitBin = new File(binDir, "git"); \n\
76
- // Пишем бинарник \n\
77
  FileOutputStream fos = new FileOutputStream(gitBin); \n\
78
  fos.write(gitData); fos.close(); \n\
79
  gitBin.setExecutable(true, false); \n\
80
- // ХАК: Регистрация в PATH текущего процесса через рефлексию \n\
81
  injectPath(binDir.getAbsolutePath()); \n\
82
- System.out.println("MandreGit: Installed and Path Injected!"); \n\
83
  } catch (Exception e) { e.printStackTrace(); } \n\
84
  } \n\
85
  private static void injectPath(String newPath) throws Exception { \n\
@@ -90,18 +90,19 @@ public class GitInstaller { \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); \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
- && d8 --output /build/git_setup.dex /build/java/ni/mandre/git/GitInstaller.class
101
 
102
- # 6. Финальный экспорт
103
- RUN cp /data/local/tmp/git/bin/git /build/git_arm64
104
- RUN zip -j /build/git_plugin_pack.zip /build/git_arm64 /build/git_setup.dex
105
 
 
106
  EXPOSE 7860
107
  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 (для компиляции 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
 
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
  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\
 
75
  try { \n\
76
  File binDir = ctx.getDir("bin", Context.MODE_PRIVATE); \n\
77
  File gitBin = new File(binDir, "git"); \n\
 
78
  FileOutputStream fos = new FileOutputStream(gitBin); \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\
 
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"]