From 041a8c33ea2a99504c9e9b04f9ee86844691b011 Mon Sep 17 00:00:00 2001 From: Pepe44DEV Date: Fri, 29 May 2026 00:31:25 +0200 Subject: [PATCH] fix: build paru from source when paru-bin has libalpm.so version mismatch --- lib/utils.sh | 70 ++++++++++++++++++++++++++++------------------------ 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/lib/utils.sh b/lib/utils.sh index 0981920..d3d2f4e 100755 --- a/lib/utils.sh +++ b/lib/utils.sh @@ -260,6 +260,21 @@ install_aur_package() { return $rc } +_install_paru_bin() { + local build_dir="$1" + git clone https://aur.archlinux.org/paru-bin.git "$build_dir/paru-bin" 2>/dev/null || return 1 + (cd "$build_dir/paru-bin" && makepkg -si --needed --noconfirm) 2>/dev/null || return 1 + return 0 +} + +_install_paru_source() { + local build_dir="$1" + sudo_run pacman -S --needed --noconfirm go + git clone https://aur.archlinux.org/paru.git "$build_dir/paru" 2>/dev/null || return 1 + (cd "$build_dir/paru" && makepkg -si --needed --noconfirm) 2>/dev/null || return 1 + return 0 +} + install_aur_helper() { if have paru || have yay; then return 0 @@ -279,48 +294,39 @@ install_aur_helper() { local build_dir build_dir="$(mktemp -d)" - tui_info "Downloading paru-bin from AUR..." - if ! git clone https://aur.archlinux.org/paru-bin.git "$build_dir/paru-bin"; then - tui_error "Failed to download paru-bin. Check network connectivity." + tui_info "Installing paru-bin (binary AUR helper)..." + if _install_paru_bin "$build_dir" && paru --version >/dev/null 2>&1; then + tui_success "paru works" rm -rf "$build_dir" - return 1 + return 0 fi - tui_info "Building paru-bin with makepkg..." - if (cd "$build_dir/paru-bin" && makepkg -si --needed --noconfirm); then - tui_success "paru installed successfully" - rm -rf "$build_dir" - else - local rc=$? - tui_warn "makepkg failed (exit $rc). Trying yay-bin..." - rm -rf "$build_dir/paru-bin" + tui_warn "paru-bin failed or has library mismatch. Building paru from source..." + rm -rf "$build_dir"/* + mkdir -p "$build_dir" - if git clone https://aur.archlinux.org/yay-bin.git "$build_dir/yay-bin"; then - if (cd "$build_dir/yay-bin" && makepkg -si --needed --noconfirm); then - tui_success "yay installed successfully" - rm -rf "$build_dir" - else - tui_warn "Could not install AUR helper. Install manually:" - tui_info " cd /tmp && git clone https://aur.archlinux.org/paru-bin.git" - tui_info " cd paru-bin && makepkg -si" - rm -rf "$build_dir" - return 1 - fi - fi + if _install_paru_source "$build_dir"; then + tui_success "paru built and installed from source" + rm -rf "$build_dir" + return 0 fi - if have paru; then - tui_info "Verifying paru..." - if paru --version >/dev/null 2>&1; then - tui_success "paru works" + tui_warn "paru source build failed. Trying yay as fallback..." + rm -rf "$build_dir"/* + + if git clone https://aur.archlinux.org/yay-bin.git "$build_dir/yay-bin" 2>/dev/null; then + if (cd "$build_dir/yay-bin" && makepkg -si --needed --noconfirm) 2>/dev/null; then + tui_success "yay installed successfully" + rm -rf "$build_dir" return 0 - else - tui_warn "paru binary installed but fails to run. Falling back to direct AUR installs." - tui_info "Will install AUR packages via git clone + makepkg instead." fi fi - return 0 + tui_warn "Could not install any AUR helper. Install manually:" + tui_info " sudo pacman -S go && git clone https://aur.archlinux.org/paru.git" + tui_info " cd paru && makepkg -si" + rm -rf "$build_dir" + return 1 } install_aur() {