32bit_support_linux/go.sh

139 lines
4 KiB
Bash
Raw Normal View History

2026-01-20 21:40:01 +00:00
#!/usr/bin/env bash
set -e
DRY_RUN=false
# Check for dry-run flag
if [[ "$1" == "--dry-run" ]]; then
DRY_RUN=true
echo "Running in dry-run mode. No changes will be made."
fi
run_cmd() {
# Run the command or just print it if dry-run
if [ "$DRY_RUN" = true ]; then
echo "[DRY-RUN] $*"
else
eval "$@"
fi
}
echo "Detecting Linux distribution..."
# Detect distro
if [ -f /etc/os-release ]; then
. /etc/os-release
DISTRO=$ID
VERSION=$VERSION_ID
else
echo "Cannot detect Linux distribution."
exit 1
fi
# Detect if immutable (rpm-ostree or SteamOS readonly)
IMMUTABLE=false
IS_STEAMOS=false
if command -v rpm-ostree &>/dev/null; then
IMMUTABLE=true
elif command -v steamos-readonly &>/dev/null; then
IMMUTABLE=true
IS_STEAMOS=true
fi
echo "Distribution detected: $DISTRO $VERSION"
echo "Immutable system: $IMMUTABLE"
# -----------------------------
# Debian/Ubuntu installer
# -----------------------------
install_debian() {
echo "Adding i386 architecture..."
run_cmd "sudo dpkg --add-architecture i386"
run_cmd "sudo apt update"
echo "Installing 32-bit runtime libraries..."
run_cmd "sudo apt install -y libc6:i386 libncurses5:i386 libstdc++6:i386"
echo "Installing 32-bit development libraries..."
run_cmd "sudo apt install -y gcc-multilib g++-multilib"
}
# -----------------------------
# Fedora/Bazzite installer
# -----------------------------
install_fedora() {
if [ "$IMMUTABLE" = true ]; then
echo "Immutable Fedora/Bazzite detected."
echo "Layering 32-bit libraries via rpm-ostree..."
run_cmd "sudo rpm-ostree install glibc.i686 libstdc++.i686 zlib.i686 ncurses-libs.i686 glibc-devel.i686 libstdc++-devel.i686"
echo "Reboot required for layered packages to take effect."
else
echo "Installing 32-bit libraries via dnf..."
run_cmd "sudo dnf install -y glibc.i686 libstdc++.i686 zlib.i686 ncurses-libs.i686"
run_cmd "sudo dnf install -y gcc gcc-c++ glibc-devel.i686 libstdc++-devel.i686"
fi
}
# -----------------------------
# Arch/Manjaro/SteamOS 3+ installer
# -----------------------------
install_arch() {
if [ "$IS_STEAMOS" = true ]; then
echo "Immutable SteamOS 3+ detected."
read -p "Do you want to temporarily disable read-only mode to install 32-bit libraries? (y/N): " RESP
if [[ "$RESP" =~ ^[Yy]$ ]]; then
echo "Disabling read-only mode..."
run_cmd "sudo steamos-readonly disable"
echo "Installing 32-bit libraries..."
run_cmd "sudo pacman -S --noconfirm lib32-glibc lib32-gcc-libs lib32-zlib gcc-multilib"
echo "Re-enabling read-only mode..."
run_cmd "sudo steamos-readonly enable"
echo "32-bit libraries installed successfully!"
else
echo "Operation canceled. You can manually disable read-only mode later and rerun the script."
fi
return
fi
# Regular Arch / Manjaro
if ! grep -q '^\[multilib\]' /etc/pacman.conf; then
echo "Enabling multilib repository..."
run_cmd "sudo sed -i '/\[multilib\]/,/Include/s/^#//' /etc/pacman.conf"
run_cmd "sudo pacman -Syu --noconfirm"
fi
echo "Installing 32-bit runtime libraries..."
run_cmd "sudo pacman -S --noconfirm lib32-glibc lib32-gcc-libs lib32-zlib"
echo "Installing 32-bit development libraries..."
run_cmd "sudo pacman -S --noconfirm gcc-multilib"
}
# -----------------------------
# Execute per detected distro
# -----------------------------
case "$DISTRO" in
ubuntu|debian)
echo "Installing 32-bit libraries for Debian/Ubuntu..."
install_debian
;;
fedora|bazzite)
echo "Installing 32-bit libraries for Fedora/Bazzite..."
install_fedora
;;
arch|manjaro)
echo "Installing 32-bit libraries for Arch/Manjaro/SteamOS 3+..."
install_arch
;;
*)
echo "Unsupported distribution: $DISTRO"
exit 1
;;
esac
echo "32-bit multilib support installation complete!"