#!/usr/bin/env bash # Instalador de Samba + mDNS + scripts de red para Termux # Uso: bash install.sh set -e RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' SAMBA_DIR="$HOME/.config/samba" BIN_DIR="$HOME/.local/bin" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" info() { echo -e "${GREEN}[+]${NC} $1"; } warn() { echo -e "${YELLOW}[!]${NC} $1"; } error() { echo -e "${RED}[x]${NC} $1"; exit 1; } # 1. Verificar Termux [ -n "$PREFIX" ] || error "No es Termux. Este script solo funciona en Termux." # 2. Storage de Android if [ ! -d "$HOME/storage" ]; then info "Configurando acceso al almacenamiento Android..." termux-setup-storage sleep 3 fi # 3. Instalar dependencias info "Instalando paquetes..." pkg install -y samba python netcat-openbsd 2>/dev/null pip install -q zeroconf 2>/dev/null # 4. Crear directorios info "Creando directorios..." mkdir -p "$SAMBA_DIR"/{private,lock,state,cache} chmod 0755 "$SAMBA_DIR"/{lock,state,cache} mkdir -p "$BIN_DIR" # 5. Preguntar configuracion personalizada echo "" info "=== Configuracion ===" read -p "Usuario Samba [andres]: " SMB_USER SMB_USER="${SMB_USER:-andres}" read -s -p "Contrasena Samba: " SMB_PASS echo "" read -p "Nombre del dispositivo en la red [movil]: " DEVICE_NAME DEVICE_NAME="${DEVICE_NAME:-movil}" # 6. Copiar y personalizar smb.conf info "Configurando Samba..." sed "s/valid users = andres/valid users = $SMB_USER/g; \ s/netbios name = MOVIL/netbios name = ${DEVICE_NAME^^}/g" \ "$SCRIPT_DIR/smb.conf" > "$SAMBA_DIR/smb.conf" # 7. Copiar y personalizar scripts de red info "Instalando scripts de red..." for script in mdns-publish.py mdns-resolve ssh-mdns-proxy ssh-fallback; do cp "$SCRIPT_DIR/scripts/$script" "$BIN_DIR/$script" chmod +x "$BIN_DIR/$script" done # Personalizar hostname en mdns-publish.py sed -i "s/HOSTNAME = 'movil'/HOSTNAME = '$DEVICE_NAME'/" "$BIN_DIR/mdns-publish.py" info " mdns-publish.py - Publica SSH + SMB via mDNS" info " mdns-resolve - Resuelve hostnames .local" info " ssh-mdns-proxy - ProxyCommand SSH con mDNS + fallback" info " ssh-fallback - ProxyCommand SSH Tailscale + LAN" # 8. Crear usuario Samba info "Creando usuario Samba '$SMB_USER'..." printf '%s\n%s\n' "$SMB_PASS" "$SMB_PASS" | \ smbpasswd -L -s -c "$SAMBA_DIR/smb.conf" -a "$SMB_USER" 2>/dev/null || \ printf '%s\n%s\n' "$SMB_PASS" "$SMB_PASS" | \ smbpasswd -L -s -c "$SAMBA_DIR/smb.conf" "$SMB_USER" # 9. Agregar a .bashrc si no existe if ! grep -q "smbd" "$HOME/.bashrc" 2>/dev/null; then info "Agregando autostart a .bashrc..." cat "$SCRIPT_DIR/bashrc-snippet.sh" >> "$HOME/.bashrc" else warn "Autostart ya existe en .bashrc, no se modifica" fi # 10. Verificar PATH if ! echo "$PATH" | grep -q "$BIN_DIR"; then if ! grep -q '.local/bin' "$HOME/.bashrc" 2>/dev/null; then echo 'export PATH="$HOME/.local/bin:$PATH"' >> "$HOME/.bashrc" info "PATH actualizado en .bashrc" fi export PATH="$BIN_DIR:$PATH" fi # 11. Iniciar servicios info "Iniciando Samba..." pkill smbd 2>/dev/null || true sleep 1 smbd -D -s "$SAMBA_DIR/smb.conf" info "Iniciando mDNS..." pkill -f mdns-publish.py 2>/dev/null || true sleep 1 nohup python "$BIN_DIR/mdns-publish.py" > /dev/null 2>&1 & disown # 12. Verificar sleep 2 if pgrep -x smbd > /dev/null && pgrep -f mdns-publish > /dev/null; then LOCAL_IP=$(python -c "import socket; s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM); s.connect(('8.8.8.8',80)); print(s.getsockname()[0]); s.close()" 2>/dev/null || echo "???") info "Todo corriendo." echo "" echo " Nombre en red: $DEVICE_NAME" echo " Puerto: 4450" echo " Usuario: $SMB_USER" echo " IP actual: $LOCAL_IP" echo "" echo " Desde Linux: smb://${DEVICE_NAME}.local:4450/" echo " Desde Windows: \\\\${LOCAL_IP}:4450\\" echo "" echo " Para SSH inteligente, copia ssh-config.example a ~/.ssh/config" echo "" else error "Algo fallo. Revisa: smb-status / mdns-status" fi