#!/usr/bin/env bash set -euo pipefail # ==== Configuración de Kasm ================================================= # Para bumpear: mirá https://kasm.com/downloads y actualizá VERSION + SHA256. KASM_VERSION="1.17.0" KASM_HASH="7f020d" KASM_TARBALL="kasm_release_${KASM_VERSION}.${KASM_HASH}.tar.gz" KASM_URL="https://kasm-static-content.s3.amazonaws.com/${KASM_TARBALL}" KASM_SHA256="22a293ea52b2adb7f3f72a2de8e9be799f443b9da040e066df403478da77f62d" # Versión simple (sin Docker preinstall, sin swap, sin SHA256 check). KASM_SIMPLE_VERSION="1.18.1" KASM_SIMPLE_TARBALL="kasm_release_${KASM_SIMPLE_VERSION}.tar.gz" KASM_SIMPLE_URL="https://kasm-static-content.s3.amazonaws.com/${KASM_SIMPLE_TARBALL}" # ============================================================================ # ==== Modo simple vs completo ============================================== echo "¿Ejecutar versión simple? (sólo descarga + install.sh, sin Docker preinstall ni swap)" echo " 1) Sí — versión simple (Kasm ${KASM_SIMPLE_VERSION})" echo " 2) No — versión completa (Docker + swap + SHA256, Kasm ${KASM_VERSION})" read -rp "Opción [1/2]: " modo if [ "$modo" = "1" ]; then cd /tmp curl -O "$KASM_SIMPLE_URL" tar -xf "$KASM_SIMPLE_TARBALL" sudo bash kasm_release/install.sh exit 0 fi if [ "$modo" != "2" ]; then echo "Error: opción inválida '$modo'." >&2 exit 1 fi # Paquetes base: Docker Engine + Compose V2 (V1 está EOL desde junio 2023). paquetes_apt=("docker.io" "docker-compose") paquetes_rhel=("docker" "docker-compose-plugin") paquetes_arch=("docker" "docker-compose") paquete_instalado_apt() { dpkg -s "$1" &>/dev/null; } paquete_instalado_yum() { yum list installed "$1" &>/dev/null; } paquete_instalado_dnf() { dnf list installed "$1" &>/dev/null; } paquete_instalado_pacman() { pacman -Qi "$1" &>/dev/null; } # Detectar el sistema operativo if [ ! -f /etc/os-release ]; then echo "Error: no se puede detectar el OS (/etc/os-release no existe)." >&2 exit 1 fi . /etc/os-release OS="${ID:-unknown}" install_packages() { local pkgs=("$@") case "$OS" in debian|ubuntu|kali) for p in "${pkgs[@]}"; do if ! paquete_instalado_apt "$p"; then echo "Instalando $p..." sudo apt-get update -qq sudo apt-get install -y "$p" fi done ;; centos|rhel) for p in "${pkgs[@]}"; do if ! paquete_instalado_yum "$p"; then echo "Instalando $p..." sudo yum install -y "$p" fi done ;; fedora) for p in "${pkgs[@]}"; do if ! paquete_instalado_dnf "$p"; then echo "Instalando $p..." sudo dnf install -y "$p" fi done ;; arch) for p in "${pkgs[@]}"; do if ! paquete_instalado_pacman "$p"; then echo "Instalando $p..." sudo pacman -S --noconfirm "$p" fi done ;; *) echo "Error: OS '$OS' no soportado." >&2 exit 1 ;; esac } case "$OS" in debian|ubuntu|kali) install_packages "${paquetes_apt[@]}" ;; centos|rhel|fedora) install_packages "${paquetes_rhel[@]}" ;; arch) install_packages "${paquetes_arch[@]}" ;; *) echo "Error: OS '$OS' no soportado." >&2 exit 1 ;; esac # ==== Swap ================================================================== read -rp "¿Cuántos GB de RAM desea asignar al swap? (4, 6, 8...): " ram_gb if ! [[ "$ram_gb" =~ ^[0-9]+$ ]] || [ "$ram_gb" -le 0 ]; then echo "Error: ingresá un entero positivo." >&2 exit 1 fi swap_size_mb=$((ram_gb * 1024)) swap_file="/mnt/${ram_gb}GiB.swap" if [ -f "$swap_file" ]; then echo "El swap '$swap_file' ya existe, lo salteo." else echo "Creando swap de ${ram_gb}GiB en $swap_file..." # fallocate es órdenes de magnitud más rápido que dd en ext4/xfs. if ! sudo fallocate -l "${swap_size_mb}M" "$swap_file" 2>/dev/null; then echo "fallocate no soportado, fallback a dd..." sudo dd if=/dev/zero bs=1M count="$swap_size_mb" of="$swap_file" status=progress fi sudo chmod 600 "$swap_file" sudo mkswap "$swap_file" sudo swapon "$swap_file" fi # Idempotencia: solo agregar a fstab si no está. if ! grep -qF "$swap_file" /etc/fstab; then echo "$swap_file swap swap defaults 0 0" | sudo tee -a /etc/fstab >/dev/null fi # ==== Kasm ================================================================== cd /tmp if [ ! -f "$KASM_TARBALL" ]; then echo "Descargando Kasm ${KASM_VERSION}..." curl -fLO "$KASM_URL" fi echo "Verificando SHA256..." echo "${KASM_SHA256} ${KASM_TARBALL}" | sha256sum -c - tar -xf "$KASM_TARBALL" sudo bash kasm_release/install.sh