Skip to content

Instantly share code, notes, and snippets.

@Conkernel
Last active February 27, 2024 20:38
Show Gist options
  • Save Conkernel/8d954079443d35c35cb56b8ad5a1d858 to your computer and use it in GitHub Desktop.
Save Conkernel/8d954079443d35c35cb56b8ad5a1d858 to your computer and use it in GitHub Desktop.
Automatizar dotfiles (en construcción!!)
#!/bin/bash
#set -x
# Antes de nada revisamos si tenemos permisos de sudo:
if [[ $EUID -ne 0 ]]; then
echo "[-] Este script debe ejecutarse con permisos de root. Saliendo..."
exit 1
fi
##### @ Variables @ #####
# Necesitamos saber la home del usuario real
if [ -z "$SUDO_USER" ] || [ "$SUDO_USER" == "root" ]; then
RUSER=root
HOME=/root
else
RUSER=(`sudo -u $SUDO_USER whoami`)
HOME=/home/$RUSER
fi
DOTFILES_DIR="$HOME/.config/dotfiles"
SSH_DIR=$HOME/.ssh
ID_RSA=$SSH_DIR/id_rsa_dotfiles
#...
###############################################################################
# Pruebas temporales
echo "El home del usuario actual ($RUSER) es :$HOME"
echo '$EUID'=$EUID
echo '$SUDO_USER'=$SUDO_USER
#...
###############################################################################
# Arbol de directorios necesarios para ejecutar este script:
# Revisamos si el directorio $SSH_DIR ya había sido creado. Si no, lo creamos.
if ! [[ -d $SSH_DIR ]]; then
mkdir -p $SSH_DIR
if [[ $? -eq 0 ]]; then
echo "[+] Creado el directorio personal para claves ssh en $SSH_DIR"
else
echo "[-] Algo ha salido mal. Saliendo..."
exit 1
fi
else
echo "[+] El directorio $SSH_DIR ya estaba creado. Continuamos..."
fi
# Revisamos si el directorio $DOTFILES_DIR ya había sido creado. Si no, lo creamos.
if ! [[ -d $DOTFILES_DIR ]]; then
mkdir -p $DOTFILES_DIR
if [[ $? -eq 0 ]]; then
echo "[+] Creado el directorio $DOTFILES_DIR para guardar el material necesario del setup"
else
echo "[-] Algo ha salido mal. Saliendo..."
exit1
fi
else
echo "[+] El directorio $DOTFILES_DIR ya estaba creado. Continuamos..."
fi
#...
###############################################################################
# Revisamos si existe ansible, y si no, lo instalamos:
if ! [[ -x "$(command -v ansible)" ]];then
echo "[+] Ansible no encontrado. Lo instalamos..."
sudo pacman -S ansible --noconfirm
if [[ $? -ne 0 ]]; then
echo "[-] Algo ha salido mal instalando ansible. Salimos."
exit 1
else
echo "[+] Ansible ha sido instalado correctamente. Continuamos..."
fi
else
echo "[+] Ansible ya estaba instalado. Continuamos..."
fi
# Creamos las claves rsa para que use ansible
# ssh -i ~/.ssh/id_rsa_personal usuario@servidor_personal
if ! [[ -d SSH_DIR ]]; then
echo "[+] El fichero $SSH_DIR no existe. Lo creamos..."
mkdir -p $SSH_DIR
if [[ $? -ne 0 ]]; then
echo "[-] Algo ha ido mal creando el directorio $SSH_DIR. Saliendo."
exit 1
else
chmod 700 $SSH_DIR
echo "[+] Directorio $SSH_DIR creado. Continuamos..."
fi
if ! [[ -f $ID_RSA ]]; then
echo "[-] El fichero $ID_RSA no existe. Lo creamos..."
ssh-keygen -b 4096 -t rsa -f $ID_RSA -N "" -C "$USER@HOSTNAME_dotfiles"
if [[ $? -ne 0 ]]; then
echo "[-] Algo ha ido mal creando la llave rsa en $ID_RSA. Saliendo."
exit 1
else
echo "[+] Llave RSA creada en $ID_RSA. Ahora la añadimos a las authorized_keys para que ansible se pueda conectar sin problemas..."
fi
cat $ID_RSA.pub >> $SSH_DIR/authorized_keys
if [[ $? -ne 0 ]]; then
echo "[-] Algo ha salido mal añadiendo las claves RSA en $SSH_DIR/authorized_keys. Revisa permisos. Salimos."
else
echo "[+] La llave ha sido agregada correctamente. Continuamos dándole permisos 600 para mayor seguridad..."
fi
chmod 600 $SSH_DIR/authorized_keys
if [[ $? -ne 0 ]]; then
echo "[-] Algo ha salido mal dando permisos 600 a $SSH_DIR/authorized_keys. Revisa permisos. Salimos."
else
echo "[+] Asignados permisos 600 al fichero $SSH_DIR/authorized_keys. Continuamos..."
fi
else
grep "dotfiles" $ID_RSA
fi
else
...
fi
# Parte de Ansible. Todavía en bragas...
#Verificamos la existencia del requirements.yml
if [[ -f "$DOTFILES_DIR/requirements.yml" ]]; then
cd "$DOTFILES_DIR"
echo "Fichero "requirements.yml" encontrado. Ejecutando ansible-galaxy..."
ansible-galaxy install -r requirements.yml
else
echo "Fichero "$DOTFILES_DIR/requirements.yml" no encontrado. Saliendo..."
exit 1
fi
ansible-playbook --diff "$DOTFILES_DIR/main.yml"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment