2026-03-26 12:04:52 +00:00
|
|
|
#!/usr/bin/env bash
|
2026-03-26 12:01:52 +00:00
|
|
|
# Instalador de Samba + mDNS + scripts de red para Termux
|
2026-03-26 11:49:26 +00:00
|
|
|
# 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"
|
2026-03-26 12:01:52 +00:00
|
|
|
BIN_DIR="$HOME/.local/bin"
|
2026-03-26 11:49:26 +00:00
|
|
|
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."
|
|
|
|
|
|
2026-03-26 12:04:52 +00:00
|
|
|
# 2. Storage de Android
|
|
|
|
|
if [ ! -d "$HOME/storage" ]; then
|
|
|
|
|
info "Configurando acceso al almacenamiento Android..."
|
|
|
|
|
termux-setup-storage
|
|
|
|
|
sleep 3
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# 3. Instalar dependencias
|
2026-03-26 11:49:26 +00:00
|
|
|
info "Instalando paquetes..."
|
2026-03-26 12:04:52 +00:00
|
|
|
pkg install -y samba python netcat-openbsd 2>/dev/null
|
2026-03-26 11:49:26 +00:00
|
|
|
pip install -q zeroconf 2>/dev/null
|
|
|
|
|
|
2026-03-26 12:04:52 +00:00
|
|
|
# 4. Crear directorios
|
2026-03-26 11:49:26 +00:00
|
|
|
info "Creando directorios..."
|
|
|
|
|
mkdir -p "$SAMBA_DIR"/{private,lock,state,cache}
|
|
|
|
|
chmod 0755 "$SAMBA_DIR"/{lock,state,cache}
|
2026-03-26 12:01:52 +00:00
|
|
|
mkdir -p "$BIN_DIR"
|
2026-03-26 11:49:26 +00:00
|
|
|
|
2026-03-26 12:04:52 +00:00
|
|
|
# 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}"
|
2026-03-26 11:49:26 +00:00
|
|
|
|
2026-03-26 12:04:52 +00:00
|
|
|
# 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
|
2026-03-26 12:01:52 +00:00
|
|
|
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
|
2026-03-26 12:04:52 +00:00
|
|
|
|
|
|
|
|
# Personalizar hostname en mdns-publish.py
|
|
|
|
|
sed -i "s/HOSTNAME = 'movil'/HOSTNAME = '$DEVICE_NAME'/" "$BIN_DIR/mdns-publish.py"
|
|
|
|
|
|
2026-03-26 12:01:52 +00:00
|
|
|
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"
|
2026-03-26 11:49:26 +00:00
|
|
|
|
2026-03-26 12:04:52 +00:00
|
|
|
# 8. Crear usuario Samba
|
|
|
|
|
info "Creando usuario Samba '$SMB_USER'..."
|
2026-03-26 11:49:26 +00:00
|
|
|
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"
|
|
|
|
|
|
2026-03-26 12:04:52 +00:00
|
|
|
# 9. Agregar a .bashrc si no existe
|
2026-03-26 11:49:26 +00:00
|
|
|
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
|
|
|
|
|
|
2026-03-26 12:04:52 +00:00
|
|
|
# 10. Verificar PATH
|
2026-03-26 12:01:52 +00:00
|
|
|
if ! echo "$PATH" | grep -q "$BIN_DIR"; then
|
2026-03-26 12:04:52 +00:00
|
|
|
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"
|
2026-03-26 12:01:52 +00:00
|
|
|
fi
|
|
|
|
|
|
2026-03-26 12:04:52 +00:00
|
|
|
# 11. Iniciar servicios
|
2026-03-26 11:49:26 +00:00
|
|
|
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
|
2026-03-26 12:01:52 +00:00
|
|
|
nohup python "$BIN_DIR/mdns-publish.py" > /dev/null 2>&1 &
|
2026-03-26 11:49:26 +00:00
|
|
|
disown
|
|
|
|
|
|
2026-03-26 12:04:52 +00:00
|
|
|
# 12. Verificar
|
2026-03-26 11:49:26 +00:00
|
|
|
sleep 2
|
|
|
|
|
if pgrep -x smbd > /dev/null && pgrep -f mdns-publish > /dev/null; then
|
2026-03-26 12:04:52 +00:00
|
|
|
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 "???")
|
2026-03-26 11:49:26 +00:00
|
|
|
info "Todo corriendo."
|
|
|
|
|
echo ""
|
2026-03-26 12:04:52 +00:00
|
|
|
echo " Nombre en red: $DEVICE_NAME"
|
2026-03-26 11:49:26 +00:00
|
|
|
echo " Puerto: 4450"
|
|
|
|
|
echo " Usuario: $SMB_USER"
|
2026-03-26 12:04:52 +00:00
|
|
|
echo " IP actual: $LOCAL_IP"
|
|
|
|
|
echo ""
|
|
|
|
|
echo " Desde Linux: smb://${DEVICE_NAME}.local:4450/"
|
|
|
|
|
echo " Desde Windows: \\\\${LOCAL_IP}:4450\\"
|
2026-03-26 11:49:26 +00:00
|
|
|
echo ""
|
2026-03-26 12:04:52 +00:00
|
|
|
echo " Para SSH inteligente, copia ssh-config.example a ~/.ssh/config"
|
2026-03-26 11:49:26 +00:00
|
|
|
echo ""
|
|
|
|
|
else
|
|
|
|
|
error "Algo fallo. Revisa: smb-status / mdns-status"
|
|
|
|
|
fi
|