Update Dockerfile
Browse files- Dockerfile +23 -8
Dockerfile
CHANGED
|
@@ -39,7 +39,7 @@ ENV LD=$TOOLCHAIN/bin/ld
|
|
| 39 |
ENV RANLIB=$TOOLCHAIN/bin/llvm-ranlib
|
| 40 |
ENV STRIP=$TOOLCHAIN/bin/llvm-strip
|
| 41 |
ENV PREFIX=/opt/git-build
|
| 42 |
-
ENV CFLAGS="-O2 -fPIC"
|
| 43 |
ENV LDFLAGS="-L$PREFIX/lib -static-libstdc++"
|
| 44 |
ENV CPPFLAGS="-I$PREFIX/include"
|
| 45 |
|
|
@@ -77,30 +77,45 @@ RUN cd /build && \
|
|
| 77 |
--disable-tftp --without-libpsl --without-libidn2 --without-brotli --without-zstd --without-nghttp2 && \
|
| 78 |
make -j$(nproc) && make install
|
| 79 |
|
| 80 |
-
# 4. Компиляция GIT (С
|
| 81 |
RUN cd /build && \
|
| 82 |
wget -q https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.43.0.tar.gz && \
|
| 83 |
tar xzf git-2.43.0.tar.gz && \
|
| 84 |
cd git-2.43.0 && \
|
| 85 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 86 |
make -j$(nproc) V=1 \
|
| 87 |
CC="$CC" AR="$AR" CURLDIR="$PREFIX" OPENSSLDIR="$PREFIX" ZLIB_PATH="$PREFIX" EXPATDIR="$PREFIX" \
|
| 88 |
NO_GETTEXT=1 NO_TCLTK=1 NO_PYTHON=1 NO_PERL=1 NO_ICONV=1 NO_INSTALL_HARDLINKS=1 NO_R_TO_GCC_LINKER=1 \
|
| 89 |
NO_PTHREADS=1 NO_SYNC_FILE_RANGE=1 HAVE_ALLOCA_H=1 \
|
| 90 |
LDFLAGS="$LDFLAGS -L$PREFIX/lib" CFLAGS="$CFLAGS -I$PREFIX/include" \
|
| 91 |
libgit.a xdiff/lib.a reftable/libreftable.a && \
|
| 92 |
-
# 2. Теперь линкуем бинарники, явно указывая внутренние .a файлы
|
| 93 |
make -j$(nproc) V=1 \
|
| 94 |
CC="$CC" AR="$AR" CURLDIR="$PREFIX" OPENSSLDIR="$PREFIX" ZLIB_PATH="$PREFIX" EXPATDIR="$PREFIX" \
|
| 95 |
NO_GETTEXT=1 NO_TCLTK=1 NO_PYTHON=1 NO_PERL=1 NO_ICONV=1 NO_INSTALL_HARDLINKS=1 NO_R_TO_GCC_LINKER=1 \
|
| 96 |
NO_PTHREADS=1 NO_SYNC_FILE_RANGE=1 HAVE_ALLOCA_H=1 \
|
| 97 |
LDFLAGS="$LDFLAGS -L$PREFIX/lib" CFLAGS="$CFLAGS -I$PREFIX/include" \
|
| 98 |
-
# ВАЖНО: Добавляем xdiff/lib.a и reftable/libreftable.a в LIBS
|
| 99 |
LIBS="libgit.a xdiff/lib.a reftable/libreftable.a -lcurl -lssl -lcrypto -lz -lexpat" \
|
| 100 |
git git-remote-http git-http-fetch && \
|
| 101 |
-
# Стрипаем
|
| 102 |
$STRIP git git-remote-http git-http-fetch && \
|
| 103 |
-
# Пакуем
|
| 104 |
mkdir -p /output/git-bundle && \
|
| 105 |
cp git /output/git-bundle/libgit.so && \
|
| 106 |
cp git-remote-http /output/git-bundle/libgit-remote-http.so && \
|
|
@@ -111,7 +126,7 @@ RUN cd /build && \
|
|
| 111 |
|
| 112 |
# 5. Финал
|
| 113 |
WORKDIR /output
|
| 114 |
-
RUN echo '<html><body><h1>Mandre GIT Bundle (Fix
|
| 115 |
RUN chmod -R 777 /output
|
| 116 |
EXPOSE 7860
|
| 117 |
CMD ["python3", "-m", "http.server", "7860"]
|
|
|
|
| 39 |
ENV RANLIB=$TOOLCHAIN/bin/llvm-ranlib
|
| 40 |
ENV STRIP=$TOOLCHAIN/bin/llvm-strip
|
| 41 |
ENV PREFIX=/opt/git-build
|
| 42 |
+
ENV CFLAGS="-O2 -fPIC -D__ANDROID__"
|
| 43 |
ENV LDFLAGS="-L$PREFIX/lib -static-libstdc++"
|
| 44 |
ENV CPPFLAGS="-I$PREFIX/include"
|
| 45 |
|
|
|
|
| 77 |
--disable-tftp --without-libpsl --without-libidn2 --without-brotli --without-zstd --without-nghttp2 && \
|
| 78 |
make -j$(nproc) && make install
|
| 79 |
|
| 80 |
+
# 4. Компиляция GIT (С ПАТЧЕМ)
|
| 81 |
RUN cd /build && \
|
| 82 |
wget -q https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.43.0.tar.gz && \
|
| 83 |
tar xzf git-2.43.0.tar.gz && \
|
| 84 |
cd git-2.43.0 && \
|
| 85 |
+
# --- MANDRE PATCH: Linker Bypass ---
|
| 86 |
+
# Мы внедряем код прямо в prepare_cmd функцию в run-command.c
|
| 87 |
+
# Ищем строку "if (cmd->no_stdin)" (она есть в начале prepare_cmd) и вставляем перед ней патч
|
| 88 |
+
sed -i '/if (cmd->no_stdin)/i \
|
| 89 |
+
/* MANDRE PATCH START */ \
|
| 90 |
+
if (cmd->file && strncmp(cmd->file, "/data/", 6) == 0) { \
|
| 91 |
+
const char **new_argv = malloc(sizeof(char *) * (256)); \
|
| 92 |
+
new_argv[0] = "/system/bin/linker64"; \
|
| 93 |
+
new_argv[1] = cmd->file; \
|
| 94 |
+
int i = 0; \
|
| 95 |
+
while (cmd->argv[i] && i < 250) { \
|
| 96 |
+
new_argv[i + 2] = cmd->argv[i]; \
|
| 97 |
+
i++; \
|
| 98 |
+
} \
|
| 99 |
+
new_argv[i + 2] = NULL; \
|
| 100 |
+
cmd->argv = new_argv; \
|
| 101 |
+
cmd->file = new_argv[0]; \
|
| 102 |
+
} \
|
| 103 |
+
/* MANDRE PATCH END */' run-command.c && \
|
| 104 |
+
# --- КОМПИЛЯЦИЯ ---
|
| 105 |
make -j$(nproc) V=1 \
|
| 106 |
CC="$CC" AR="$AR" CURLDIR="$PREFIX" OPENSSLDIR="$PREFIX" ZLIB_PATH="$PREFIX" EXPATDIR="$PREFIX" \
|
| 107 |
NO_GETTEXT=1 NO_TCLTK=1 NO_PYTHON=1 NO_PERL=1 NO_ICONV=1 NO_INSTALL_HARDLINKS=1 NO_R_TO_GCC_LINKER=1 \
|
| 108 |
NO_PTHREADS=1 NO_SYNC_FILE_RANGE=1 HAVE_ALLOCA_H=1 \
|
| 109 |
LDFLAGS="$LDFLAGS -L$PREFIX/lib" CFLAGS="$CFLAGS -I$PREFIX/include" \
|
| 110 |
libgit.a xdiff/lib.a reftable/libreftable.a && \
|
|
|
|
| 111 |
make -j$(nproc) V=1 \
|
| 112 |
CC="$CC" AR="$AR" CURLDIR="$PREFIX" OPENSSLDIR="$PREFIX" ZLIB_PATH="$PREFIX" EXPATDIR="$PREFIX" \
|
| 113 |
NO_GETTEXT=1 NO_TCLTK=1 NO_PYTHON=1 NO_PERL=1 NO_ICONV=1 NO_INSTALL_HARDLINKS=1 NO_R_TO_GCC_LINKER=1 \
|
| 114 |
NO_PTHREADS=1 NO_SYNC_FILE_RANGE=1 HAVE_ALLOCA_H=1 \
|
| 115 |
LDFLAGS="$LDFLAGS -L$PREFIX/lib" CFLAGS="$CFLAGS -I$PREFIX/include" \
|
|
|
|
| 116 |
LIBS="libgit.a xdiff/lib.a reftable/libreftable.a -lcurl -lssl -lcrypto -lz -lexpat" \
|
| 117 |
git git-remote-http git-http-fetch && \
|
|
|
|
| 118 |
$STRIP git git-remote-http git-http-fetch && \
|
|
|
|
| 119 |
mkdir -p /output/git-bundle && \
|
| 120 |
cp git /output/git-bundle/libgit.so && \
|
| 121 |
cp git-remote-http /output/git-bundle/libgit-remote-http.so && \
|
|
|
|
| 126 |
|
| 127 |
# 5. Финал
|
| 128 |
WORKDIR /output
|
| 129 |
+
RUN echo '<html><body><h1>Mandre GIT Bundle (Fix 8: Linker Patch)</h1><ul><li><a href="android-git-bundle.zip" download>Download ZIP</a></li></ul></body></html>' > index.html
|
| 130 |
RUN chmod -R 777 /output
|
| 131 |
EXPOSE 7860
|
| 132 |
CMD ["python3", "-m", "http.server", "7860"]
|