From c2a2124badd1ec2eecb32c5419f9f49bbc5537e7 Mon Sep 17 00:00:00 2001 From: prototypeall850-creator Date: Thu, 20 Aug 2026 06:18:56 +0700 Subject: [PATCH 1/3] feat: add aarch64 setup script for Termux (force pacman arch + verify linker) --- setup-openclaw-aarch64.sh | 62 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 setup-openclaw-aarch64.sh diff --git a/setup-openclaw-aarch64.sh b/setup-openclaw-aarch64.sh new file mode 100644 index 00000000..5e93778f --- /dev/null +++ b/setup-openclaw-aarch64.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +# Setup openclaw-android di Termux — paksa pacman ke aarch64 lalu install OpenClaw. +# Idempotent: aman dijalankan ulang. Design untuk Android aarch64/Termux saja. +set -euo pipefail + +PREFIX="${PREFIX:-/data/data/com.termux/files/usr}" +PACMAN_CONF="$PREFIX/etc/pacman.conf" +CACHE="$PREFIX/var/cache/pacman/pkg" +KEYRING_DIR="$PREFIX/etc/pacman.d/gnupg" +LINKER="$PREFIX/glibc/lib/ld-linux-aarch64.so.1" +INSTALLER_URL="${INSTALLER_URL:-https://myopenclawhub.com/install}" + +info() { printf '[INFO] %s\n' "$*"; } +die() { printf '[FAIL] %s\n' "$*" >&2; exit 1; } + +# --- Guard: hanya Termux/Android --- +[ -d /data/data/com.termux ] || die "bukan lingkungan Termux/Android. Jangan dijalankan di PC." + +# --- Guard: host arch harus aarch64 (eksak, sama seperti install-glibc.sh upstream) --- +[ "$(uname -m)" = "aarch64" ] || die "arch tidak didukung: $(uname -m). Install-glibc.sh upstream butuh aarch64." +info "Host arch: $(uname -m)" + +# --- Install pacman bila belum ada (sama seperti install-glibc.sh upstream) --- +command -v pacman >/dev/null || { info "Install pacman dulu..."; pkg install -y pacman; } + +# --- Paksa Architecture = aarch64 di pacman.conf (ganti nilai apapun sebelumnya) --- +if [ -f "$PACMAN_CONF" ]; then + sed -i 's/^Architecture\s*=.*/Architecture = aarch64/' "$PACMAN_CONF" + grep -q '^Architecture = aarch64' "$PACMAN_CONF" || echo 'Architecture = aarch64' >> "$PACMAN_CONF" +else + die "pacman.conf tidak ada di $PACMAN_CONF. Periksa instalasi pacman." +fi +info "pacman.conf: $(grep '^Architecture' "$PACMAN_CONF")" + +# --- Init keyring bila belum pernah --- +if [ ! -d "$KEYRING_DIR" ]; then + info "Inisialisasi keyring..." + pacman-key --init + pacman-key --populate +fi + +# --- Buang cache package arch-salah / corrupt --- +info "Bersihkan cache glibc lama..." +rm -f "$CACHE"/glibc-*.pkg.tar.xz "$CACHE"/glibc-runner-*.pkg.tar.xz + +# --- Install glibc + glibc-runner aarch64 --- +# --assume-installed: sama seperti install-glibc.sh upstream (paket disediakan apt Termux, pacman tak kenal) +info "Install glibc dan glibc-runner..." +pacman -Sy glibc glibc-runner --noconfirm --assume-installed bash,patchelf,resolv-conf + +# --- Verifikasi dynamic linker aarch64 benar-benar ada --- +[ -f "$LINKER" ] || die "linker aarch64 tidak ditemukan: $LINKER. Versi x86_64 masih menempel?" +info "Linker OK: $LINKER" + +# --- Download installer, patch defensif x86_64->aarch64 (no-op bila sudah bersih), jalankan --- +info "Download installer dari $INSTALLER_URL (jangan simpan di /tmp, noexec)..." +curl -fsSL "$INSTALLER_URL" > "$HOME/oa_install.sh" +sed -i 's/Architecture = x86_64/Architecture = aarch64/g' "$HOME/oa_install.sh" +info "Jalankan installer..." +bash "$HOME/oa_install.sh" + +info "Selesai. Mulai pakai: source ~/.bashrc && oa" \ No newline at end of file From 789b109f399086592ece5564d056e5d9efef3d15 Mon Sep 17 00:00:00 2001 From: prototypeall850-creator Date: Thu, 20 Aug 2026 08:33:40 +0700 Subject: [PATCH 2/3] fix: install gcc-libs-glibc and purge non-aarch64 libs to stop node SIGSEGV --- setup-openclaw-aarch64.sh | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/setup-openclaw-aarch64.sh b/setup-openclaw-aarch64.sh index 5e93778f..a77e2196 100644 --- a/setup-openclaw-aarch64.sh +++ b/setup-openclaw-aarch64.sh @@ -45,8 +45,23 @@ rm -f "$CACHE"/glibc-*.pkg.tar.xz "$CACHE"/glibc-runner-*.pkg.tar.xz # --- Install glibc + glibc-runner aarch64 --- # --assume-installed: sama seperti install-glibc.sh upstream (paket disediakan apt Termux, pacman tak kenal) -info "Install glibc dan glibc-runner..." -pacman -Sy glibc glibc-runner --noconfirm --assume-installed bash,patchelf,resolv-conf +info "Install glibc, glibc-runner, dan gcc-libs-glibc (libstdc++ untuk Node.js)..." +pacman -Sy glibc glibc-runner gcc-libs-glibc --noconfirm --assume-installed bash,patchelf,resolv-conf + +# --- Purge library arch-salah (sisa era pacman.conf x86_64) --- +# glibc aarch64 hanya menimpa file milik paketnya sendiri. lib x86_64 lain +# (mis. libstdc++.so.6 dari gcc-libs-glibc versi lama) tetap nempel dan +# membuat node.real segfault saat di-load. Hapus semua .so yang bukan aarch64. +info "Bersihkan library non-aarch64 di $PREFIX/glibc/lib..." +if [ -d "$PREFIX/glibc/lib" ]; then + for _lib in "$PREFIX"/glibc/lib/*.so*; do + [ -e "$_lib" ] || continue + if file "$_lib" 2>/dev/null | grep -q 'ELF' && ! file "$_lib" 2>/dev/null | grep -q 'aarch64'; then + rm -f "$_lib" + info " hapus: $(basename "$_lib")" + fi + done +fi # --- Verifikasi dynamic linker aarch64 benar-benar ada --- [ -f "$LINKER" ] || die "linker aarch64 tidak ditemukan: $LINKER. Versi x86_64 masih menempel?" From 6dadfa9241920cdf1c6381ca1c87eab27181ea21 Mon Sep 17 00:00:00 2001 From: prototypeall850-creator Date: Thu, 20 Aug 2026 10:02:35 +0700 Subject: [PATCH 3/3] fix: add --overwrite to pacman glibc install (partial-install file conflicts cause node SIGSEGV) --- setup-openclaw-aarch64.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/setup-openclaw-aarch64.sh b/setup-openclaw-aarch64.sh index a77e2196..db1c7626 100644 --- a/setup-openclaw-aarch64.sh +++ b/setup-openclaw-aarch64.sh @@ -45,8 +45,11 @@ rm -f "$CACHE"/glibc-*.pkg.tar.xz "$CACHE"/glibc-runner-*.pkg.tar.xz # --- Install glibc + glibc-runner aarch64 --- # --assume-installed: sama seperti install-glibc.sh upstream (paket disediakan apt Termux, pacman tak kenal) +# --overwrite='*': wajib — tanpa ini pacman GAGAL parsial saat file bentrok dengan paket apt +# (mis. bash.info), glibc terpasang tidak lengkap, node lalu segfault. Reproduce +# di emulator Android x86_64 membuktikan ini fail mode nyata. info "Install glibc, glibc-runner, dan gcc-libs-glibc (libstdc++ untuk Node.js)..." -pacman -Sy glibc glibc-runner gcc-libs-glibc --noconfirm --assume-installed bash,patchelf,resolv-conf +pacman -Sy glibc glibc-runner gcc-libs-glibc --noconfirm --overwrite='*' --assume-installed bash,patchelf,resolv-conf # --- Purge library arch-salah (sisa era pacman.conf x86_64) --- # glibc aarch64 hanya menimpa file milik paketnya sendiri. lib x86_64 lain