From 6eaba413f7a4e996e06045796ecac25a72b6fded Mon Sep 17 00:00:00 2001 From: edschuy95 Date: Tue, 20 Jan 2026 21:40:01 +0000 Subject: [PATCH] Initial commit --- go.sh | 138 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 go.sh diff --git a/go.sh b/go.sh new file mode 100644 index 0000000..2949f5d --- /dev/null +++ b/go.sh @@ -0,0 +1,138 @@ +#!/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!"