Skip to content

Instantly share code, notes, and snippets.

@ronitzdev
Last active March 13, 2025 21:38
Show Gist options
  • Select an option

  • Save ronitzdev/a11a4edc469d04fd3bb35543be27c8df to your computer and use it in GitHub Desktop.

Select an option

Save ronitzdev/a11a4edc469d04fd3bb35543be27c8df to your computer and use it in GitHub Desktop.
#!/bin/bash
# Función para verificar si un paquete está instalado
check_and_install() {
if ! command -v "$1" &> /dev/null; then
echo "$1 no está instalado. Instalando..."
sudo apt-get install "$1" -y
else
echo "$1 ya está instalado. Se salta la instalación."
fi
}
# Función para verificar si Zsh es la shell predeterminada
check_shell() {
current_shell=$(grep "$USER" /etc/passwd | cut -d: -f7)
if [ "$current_shell" != "/bin/zsh" ]; then
echo "La shell no es Zsh. Cambiando la shell por defecto a Zsh..."
chsh --shell /bin/zsh "$USER"
else
echo "La shell ya es Zsh."
fi
}
# Verificar si Git está instalado
check_and_install git-all
# Verificar la versión de Git
echo "Verificando la versión de Git..."
git version
# Configurar Git si no está configurado
if ! git config --global user.name &> /dev/null; then
echo "Configurando Git..."
read -p "Ingrese su nombre de usuario de Git: " git_user
read -p "Ingrese su correo electrónico de Git: " git_email
git config --global user.name "$git_user"
git config --global user.email "$git_email"
git config --global color.ui auto
git config --global pull.rebase false
git config --global init.defaultBranch main
git config --global core.editor "code --wait"
else
echo "Git ya está configurado."
fi
# Generar clave SSH si no existe
if [ ! -f ~/.ssh/id_ed25519 ]; then
echo "Generando clave SSH..."
read -p "Ingrese su correo electrónico para la clave SSH: " git_email
ssh-keygen -t ed25519 -C "$git_email" -f ~/.ssh/id_ed25519
else
echo "Clave SSH ya existe."
fi
# Iniciar el agente SSH si no está corriendo
if ! pgrep -x "ssh-agent" > /dev/null; then
echo "Iniciando el agente SSH..."
eval "$(ssh-agent -s)"
else
echo "El agente SSH ya está en ejecución."
fi
# Añadir la clave SSH al agente
if ! ssh-add -l | grep -q "id_ed25519"; then
echo "Añadiendo la clave SSH al agente..."
ssh-add ~/.ssh/id_ed25519
else
echo "La clave SSH ya está añadida al agente."
fi
# Verificar e instalar Node.js y NVM
check_and_install curl
if ! command -v nvm &> /dev/null; then
echo "Instalando NVM..."
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | zsh
source ~/.zshrc
else
echo "NVM ya está instalado."
fi
if ! command -v node &> /dev/null; then
echo "Instalando Node.js LTS..."
nvm install --lts
else
echo "Node.js ya está instalado."
fi
# Verificar la versión de Node.js y npm
echo "Versión de Node.js:"
node --version
echo "Versión de npm:"
npm --version
# Verificar si Apache está instalado
check_and_install apache2
# Verificar si MySQL está instalado
check_and_install mysql-server
# Iniciar Apache y MySQL si no están en ejecución
if ! systemctl is-active --quiet apache2; then
echo "Iniciando Apache..."
sudo systemctl start apache2
else
echo "Apache ya está en ejecución."
fi
if ! systemctl is-active --quiet mysql; then
echo "Iniciando MySQL..."
sudo systemctl start mysql
else
echo "MySQL ya está en ejecución."
fi
# Habilitar Apache y MySQL para que inicien al arranque
echo "Habilitando Apache al inicio..."
sudo systemctl enable apache2
echo "Habilitando MySQL al inicio..."
sudo systemctl enable mysql
# Instalar Zsh si no está instalado
check_and_install zsh
# Instalar Oh My Zsh si no está instalado
if [ ! -d "$HOME/.oh-my-zsh" ]; then
echo "Instalando Oh My Zsh..."
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
else
echo "Oh My Zsh ya está instalado."
fi
# Comprobar si la shell por defecto es Zsh
check_shell
# Verificar estado de Apache y MySQL
echo "Estado de Apache:"
sudo systemctl status apache2 | grep "Active"
echo "Estado de MySQL:"
sudo systemctl status mysql | grep "Active"
# **Instalación de XAMPP desde la terminal:**
# Definir la versión de XAMPP (reemplázalo si es necesario)
XAMPP_VERSION="7.4.28-0"
XAMPP_FILE="xampp-linux-x64-${XAMPP_VERSION}.run"
# Descargar XAMPP
echo "Descargando XAMPP ${XAMPP_VERSION}..."
wget "https://downloadsapachefriends.global.ssl.fastly.net/xampp/${XAMPP_FILE}" -P /tmp
# Comprobar si la descarga fue exitosa
if [ $? -ne 0 ]; then
echo "Hubo un error al descargar el archivo XAMPP. Verifica tu conexión a internet y vuelve a intentarlo."
exit 1
fi
# Dar permisos de ejecución al archivo descargado
echo "Dando permisos de ejecución al archivo descargado..."
chmod +x /tmp/${XAMPP_FILE}
# Ejecutar el instalador
echo "Iniciando instalación de XAMPP..."
sudo /tmp/${XAMPP_FILE} && rm -f /tmp/${XAMPP_FILE}
# Verificar si XAMPP está instalado correctamente
if [ -d "/opt/lampp" ]; then
echo "XAMPP instalado exitosamente en /opt/lampp."
else
echo "Hubo un error en la instalación de XAMPP."
exit 1
fi
# Iniciar XAMPP
echo "Iniciando XAMPP..."
sudo /opt/lampp/lampp start
# Verificar si XAMPP se inició correctamente
if ! pgrep -x "httpd" > /dev/null; then
echo "Error: Apache no pudo iniciarse correctamente."
exit 1
fi
if ! pgrep -x "mysqld" > /dev/null; then
echo "Error: MySQL no pudo iniciarse correctamente."
exit 1
fi
# Habilitar XAMPP para que se inicie al arrancar el sistema (opcional)
echo "¿Deseas que XAMPP se inicie automáticamente cuando arranque el sistema? (sí/no)"
read -p "Respuesta: " auto_start
if [[ "$auto_start" == "sí" || "$auto_start" == "si" ]]; then
# Crear un archivo de servicio systemd para XAMPP
echo "Creando archivo de servicio para iniciar XAMPP al arrancar..."
sudo tee /etc/systemd/system/xampp.service > /dev/null <<EOL
[Unit]
Description=XAMPP
After=network.target
[Service]
ExecStart=/opt/lampp/lampp start
ExecStop=/opt/lampp/lampp stop
RemainAfterExit=true
User=root
[Install]
WantedBy=multi-user.target
EOL
# Habilitar el servicio de XAMPP para que se inicie al arranque
sudo systemctl enable xampp.service
echo "XAMPP se iniciará automáticamente al arrancar el sistema."
fi
# Instrucciones finales
echo "Instalación completada. XAMPP está en funcionamiento."
# Información sobre cómo gestionar XAMPP desde la terminal
echo "Puedes gestionar XAMPP con los siguientes comandos:"
echo "Para iniciar XAMPP: sudo /opt/lampp/lampp start"
echo "Para detener XAMPP: sudo /opt/lampp/lampp stop"
echo "Para reiniciar XAMPP: sudo /opt/lampp/lampp restart"
echo "Para verificar el estado de Apache y MySQL: sudo /opt/lampp/lampp status"
# Finalizar el script
echo "¡Todo listo! Puedes ahora gestionar XAMPP completamente desde la terminal."
@ronitzdev
Copy link
Author

ronitzdev commented Mar 13, 2025

Explicación del Script Combinado

Configuración y Verificación de Herramientas Previas

El script sigue verificando e instalando herramientas como Git, Node.js, MySQL, Apache, Zsh, y Oh My Zsh, tal como lo hacíamos en el primer script.

Instalación de XAMPP

  • Descarga e instala XAMPP desde el terminal.
  • Verifica si XAMPP se instala correctamente en /opt/lampp.
  • Inicia XAMPP y verifica que Apache y MySQL estén en funcionamiento.

Configuración para Iniciar XAMPP Automáticamente

  • Pregunta al usuario si desea habilitar XAMPP para que se inicie automáticamente al arrancar el sistema. Si la respuesta es afirmativa, se crea un servicio systemd para XAMPP.

Instrucciones Finales

  • Proporciona información detallada sobre cómo gestionar XAMPP desde la terminal (iniciar, detener, reiniciar y verificar el estado).

Cómo Ejecutar el Script

Crear el Archivo

Abre una terminal y crea el archivo de script:

nano instalar_entorno.sh

Pegar el Código

Copia y pega el código del script combinado en el archivo y guarda los cambios (Ctrl + O, luego Enter, y Ctrl + X para salir).

Dar Permisos de Ejecución

Asigna permisos de ejecución al script:

chmod +x instalar_entorno.sh

Ejecutar el Script

Ejecuta el script con:

sudo ./instalar_entorno.sh

Este script instalará todo lo necesario y te permitirá gestionar XAMPP completamente desde la terminal, con opciones para habilitar XAMPP al arranque y una interfaz fácil de usar desde la terminal para gestionar los servicios.

Git: @gmail.com

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment