12/5/15

Archupdate - Script para actualizar Arch linux y derivados.

He escrito un pequeño script para poder actualizar mi sistema cada vez que inicie el equipo. Es válido para Arch linux y todos los derivados del mismo, (yo uso Antergos, pero también funciona en Manjaro). Esta escrito en Bash y haciendo uso de los recursos de Zenity para darle una interfaz gŕafica sencilla y simple.



Copie y pegue el siguiente código en un fichero de texto y guárdelo con el nombre de archupdate (en minúsculas).
#!/bin/bash
USUARIO=`whoami`
dependencias=(xdotool zenity screenfetch)
for item in ${dependencias[*]}
do
    if ! (pacman -Q $item >/dev/null); then lista=$lista" "$item; fi
done
if [ -n "$lista" ]; then echo $USUARIO | sudo -S pacman -S $lista --noconfirm; fi

# Información del sistema
screenfetch
echo ""

# Comprobamos conexión cada 10 segundos.
x=0
until ping -c1 google.com &>/dev/null
do
  x=$(( $x + 1 ))
  if [ $x = 5 ]; then exit # Al 5º intento salimos
  else
    echo "No hay conexión. Reintentando..."
    sleep 5
  fi
done
# Corregimos el fallo de /var/lib/pacman/db.lck
if [ -f "/var/lib/pacman/db.lck" ]; then echo $USUARIO | sudo -S rm /var/lib/pacman/db.lck; fi
# Sincronizamos las bases de datos de los paquetes
echo $USUARIO | sudo -S pacman -Sy
# Si no hay actualizaciones...
NUMERO=$(pacman -Qqu | wc -l)
if [ $NUMERO = "0" ]; then
    #sudo pacman -Rs $(pacman -Qtdq) --noconfirm # Eliminar paquetes huerfanos
    RED="\033[0;31m"
    ENDCOLOR="\033[0m"
    echo -e $RED"Sistema actualizado."$ENDCOLOR
    sleep 5
    exit 0
else
    # Ocultar terminal
    xdotool windowunmap $(xdotool getactivewindow)
    clear
    # Mostramos las actualizaciones pendientes.
    UPDATELIST=`zenity --list --checklist \
      --height=280 \
      --width=300 \
      --title="Hay "$NUMERO" actualizaciones" \
      --column="Sel." \
      --column="Paquete" \
      --column="Version" \
    $(pacman -Qu | awk -F ' ' '{print  selected " "  $1 " " $2}' selected="TRUE")`;
    clear
    # Actualizamos los paquetes seleccionados
    if [ -n "$UPDATELIST" ]; then
 echo $USUARIO | sudo -S \
 (
 IFS="|"
 for word in $UPDATELIST; do
       echo "#Actualizando: $word" ;
   sudo pacman -S $word --noconfirm
   BARRA=$((BARRA+(100/NUMERO)))
   echo $BARRA ;
 done;
 ) | \
 zenity --progress \
   --width=400 \
   --height=80 \
   --no-cancel \
   --title="Instalando actualizaciones" \
   --percentage=0 \
   --auto-close
    fi
fi
Damos permisos de ejecución con:

chmod +x /ruta del archivo/archupdate

0 comentarios:

Publicar un comentario