#!/data/data/com.termux/files/usr/bin/bash set -e REPO_URL="https://openjdk-8-glibc.pages.dev" GLIBC_REPO_URL="https://packages-cf.termux.dev/apt/termux-glibc/" GLIBC_REPO_LINE="deb ${GLIBC_REPO_URL} glibc stable" KEYRING_DIR="$PREFIX/etc/apt/trusted.gpg.d" KEYRING="$KEYRING_DIR/openjdk-8-glibc.gpg" SOURCES_DIR="$PREFIX/etc/apt/sources.list.d" SOURCES_LIST="$SOURCES_DIR/openjdk-8-glibc.list" SOURCES_LINE="deb $REPO_URL/ stable main" GLIBC_SOURCES_LIST="$SOURCES_DIR/glibc.list" JAVA_HOME_PATH="$PREFIX/opt/openjdk-8" JAVA_WRAPPER="$JAVA_HOME_PATH/wrapper-bin/java" die() { echo "" echo "[!] $*" echo "" exit 1 } is_termux() { case "$PREFIX" in */com.termux/*) return 0 ;; esac return 1 } command_exists() { command -v "$1" >/dev/null 2>&1 } echo "" echo "======================================================================" echo " openjdk-8-glibc installer" echo " Java 8 nativo no Termux, sem proot-distro." echo "======================================================================" echo "" if [ -z "${PREFIX:-}" ]; then die "A variável PREFIX não está definida." fi if ! is_termux; then die "Este instalador funciona somente no Termux." fi case "$(uname -m)" in aarch64) ;; *) die "Arquitetura não suportada: $(uname -m). Este pacote é somente AArch64." ;; esac if [ ! -d "$PREFIX" ]; then die "PREFIX não existe: $PREFIX" fi echo "[+] Preparando diretórios do APT..." mkdir -p "$SOURCES_DIR" mkdir -p "$KEYRING_DIR" if ! command_exists apt-get; then die "apt-get não encontrado." fi if ! command_exists dpkg; then die "dpkg não encontrado." fi if ! command_exists curl; then echo "[+] Instalando curl..." apt-get update -qq apt-get install -y curl fi if ! command_exists gpg; then echo "[+] Instalando gnupg..." apt-get update -qq apt-get install -y gnupg fi echo "[+] Configurando repositório do OpenJDK 8..." if [ ! -f "$KEYRING" ]; then echo "[+] Instalando chave GPG..." TEMP_KEY="$(mktemp)" trap 'rm -f "$TEMP_KEY"' EXIT if ! curl -fsSL \ "$REPO_URL/public.gpg.key" \ -o "$TEMP_KEY"; then rm -f "$TEMP_KEY" die "Não foi possível baixar a chave GPG." fi if ! gpg --dearmor \ < "$TEMP_KEY" \ > "$KEYRING"; then rm -f "$TEMP_KEY" die "Não foi possível instalar a chave GPG." fi rm -f "$TEMP_KEY" fi if [ ! -f "$SOURCES_LIST" ] || [ "$(cat "$SOURCES_LIST" 2>/dev/null || true)" != "$SOURCES_LINE" ]; then printf '%s\n' "$SOURCES_LINE" > "$SOURCES_LIST" fi echo "[+] Configurando repositório glibc..." if [ ! -f "$GLIBC_SOURCES_LIST" ] || [ "$(cat "$GLIBC_SOURCES_LIST" 2>/dev/null || true)" != "$GLIBC_REPO_LINE" ]; then printf '%s\n' "$GLIBC_REPO_LINE" > "$GLIBC_SOURCES_LIST" fi echo "[+] Atualizando índices..." if ! apt-get update -qq; then die "Falha ao atualizar os índices do APT." fi echo "[+] Verificando disponibilidade do glibc..." GLIBC_CANDIDATE="$( apt-cache policy glibc 2>/dev/null | awk '/Candidate:/ { print $2 exit }' )" if [ -z "$GLIBC_CANDIDATE" ] || [ "$GLIBC_CANDIDATE" = "(none)" ]; then echo "" echo "[!] O pacote glibc não está disponível." echo "" echo " Repositório configurado:" echo " $GLIBC_REPO_LINE" echo "" die "Não foi possível encontrar uma versão instalável do glibc." fi echo "[+] glibc disponível: $GLIBC_CANDIDATE" echo "[+] Verificando disponibilidade do openjdk-8-glibc..." OPENJDK_CANDIDATE="$( apt-cache policy openjdk-8-glibc 2>/dev/null | awk '/Candidate:/ { print $2 exit }' )" if [ -z "$OPENJDK_CANDIDATE" ] || [ "$OPENJDK_CANDIDATE" = "(none)" ]; then die "O pacote openjdk-8-glibc não está disponível no repositório." fi echo "[+] openjdk-8-glibc disponível: $OPENJDK_CANDIDATE" OPENJDK_STATUS="$( dpkg-query \ -W \ -f='${Status}' \ openjdk-8-glibc \ 2>/dev/null || true )" if [ "$OPENJDK_STATUS" = "install ok unpacked" ]; then echo "[!] Foi encontrada uma instalação incompleta do openjdk-8-glibc." echo "[+] A instalação será finalizada agora..." fi echo "[+] Instalando/verificando glibc..." if ! apt-get install -y glibc; then die "Não foi possível instalar o glibc." fi echo "[+] Instalando openjdk-8-glibc..." if ! apt-get install -y openjdk-8-glibc; then echo "" echo "[!] A instalação do OpenJDK falhou." echo "" echo "[+] Tentando corrigir dependências..." echo "" if ! apt-get --fix-broken install -y; then die "Não foi possível corrigir as dependências." fi echo "[+] Tentando instalar o OpenJDK novamente..." if ! apt-get install -y openjdk-8-glibc; then die "Não foi possível instalar o openjdk-8-glibc." fi fi FINAL_STATUS="$( dpkg-query \ -W \ -f='${Status}' \ openjdk-8-glibc \ 2>/dev/null || true )" if [ "$FINAL_STATUS" != "install ok installed" ]; then echo "" echo "[!] O pacote foi encontrado, mas não está configurado corretamente." echo "" echo " Estado atual:" echo " ${FINAL_STATUS:-desconhecido}" echo "" die "Instalação do openjdk-8-glibc incompleta." fi if [ ! -x "$JAVA_HOME_PATH/bin/java" ]; then die "Java 8 foi instalado, mas $JAVA_HOME_PATH/bin/java não existe." fi if [ ! -x "$JAVA_HOME_PATH/bin/javac" ]; then die "javac não foi encontrado na instalação do Java 8." fi if [ ! -x "$JAVA_WRAPPER" ]; then die "Wrapper do Java não foi encontrado: $JAVA_WRAPPER" fi GLIBC_LOADER="$PREFIX/glibc/lib/ld-linux-aarch64.so.1" if [ ! -x "$GLIBC_LOADER" ]; then die "O glibc foi instalado, mas o loader não foi encontrado: $GLIBC_LOADER" fi if [ "${OPENJDK8_GLIBC_NO_ACTIVATE:-0}" != "1" ]; then echo "[+] Ativando Java 8 (update-alternatives)..." if ! command_exists update-alternatives; then die "update-alternatives não foi encontrado." fi if ! update-alternatives --set java "$JAVA_WRAPPER"; then echo "" echo "[!] Não foi possível ativar Java 8 automaticamente." echo "[i] O pacote foi instalado corretamente." echo "[i] Você pode ativá-lo manualmente com:" echo "" echo " update-alternatives --config java" echo "" fi else echo "[i] OPENJDK8_GLIBC_NO_ACTIVATE=1" echo "[i] Java 8 não será ativado automaticamente." fi CURRENT_JAVA="" if command_exists java; then CURRENT_JAVA="$(java -version 2>&1 | head -n1 || true)" fi echo "" echo "======================================================================" echo " Instalação concluída!" echo "======================================================================" echo "" echo "[+] Pacote:" echo " openjdk-8-glibc $OPENJDK_CANDIDATE" echo "" echo "[+] glibc:" echo " $GLIBC_CANDIDATE" echo "" echo "[+] Java:" echo " $JAVA_HOME_PATH" echo "" echo "[+] Loader:" echo " $GLIBC_LOADER" if [ -n "$CURRENT_JAVA" ]; then echo "" echo "[+] Java atualmente selecionado:" echo " $CURRENT_JAVA" fi echo "" echo "======================================================================" echo " Próximos passos" echo "======================================================================" echo "" echo "Abra uma nova sessão do Termux para atualizar o ambiente." echo "" echo "Ou, na sessão atual:" echo "" echo " source \"\$PREFIX/etc/profile.d/java.sh\"" echo "" echo "Testes:" echo "" echo " java -version" echo " javac -version" echo " echo \$JAVA_HOME" echo "" echo "Para trocar entre versões:" echo "" echo " update-alternatives --config java" echo "" echo "Para instalar sem ativar automaticamente:" echo "" echo " OPENJDK8_GLIBC_NO_ACTIVATE=1 \\" echo " curl -s https://openjdk-8-glibc.pages.dev | bash" echo "" echo "======================================================================" echo ""