Header Ads

Back in Time

Hoy hemos querido aprovechar el lanzamiento de la familia Ubuntu 16.04 Xenial Xerus LTS, para dedicarle un especial al tedioso asunto de la instalación del Proxy Squid-Cache en este SO.
El que no conoce la historia está condenado a repetirla
Cuando liberaron Ubuntu 10.04 LTS Lucid Lynx, hace ya 6 años (ver calendario de lanzamientos Ubuntu), Squid-Cache andaba por la versión 2x (para no entrar en detalles). En ese entonces, se instalaba con un simple:
sudo apt-get install squid
Pero cuando llegó la segunda LTS 12.04.x Precise Pangolin (Current v12.04.5), y Squid liberó la v3.1.19, algunos "ilustres miembros" de esta organización, se les ocurrió la "maravillosa idea", de cambiarle el nombre a directorios, servicio, logs, etc (en un intento por emular la mala costumbre de Gnome Desktop, que cambia todo a su antojo de la noche a la mañana, sin medir consecuencias... Por eso fue que crearon Mate desktop... Definitivamente la ignorancia es contagiosa).
El resumen, el mundo que conocíamos, donde todo se llamaba squid, ahora pasaba a ser squid3, y obviamente, los que utilizamos este proxy, sin derecho a protestar (porque es software libre) tuvimos que mordernos la lengua y reconfigurar todo. Este comportamiento se mantuvo hasta la versión 3.3.8, soportada en la LTS 14.04.x Trusty Tahr (Current v14.04.3).
Abril de 2016. Se libera la nueva LTS Ubuntu 16.04 Xenial Xerus, y con ésta, la versión de Squid 3.5.12 y nuevamente a este "grupo super maravilloso e inteligente", tal vez en medio de una borrachera, acompañada de algo más "potente", dijeron: "Ja... squid3 ya no es cool; y esta de moda lo retro. Mejor lo dejamos como estaba antes"; e hicieron un "back in time", y ahora las carpetas, repositorios, logs, servicios, cambiaron nuevamente de squid3 a squid.
Así las cosas, y antes de que muchos empiecen a echar maldiciones y a hacer conjuros y hechizos vudú contra de estos personajes (para no llamarlos de otra manera), hemos preparado un pequeño script (también disponible en nuestro proyecto gateproxy), el cual, al menos, le servirá para las últimas LTS Ubuntu 14.04.x y 16.04x (aplicable a Debian y otras versiones de Ubuntu, con modificaciones).
Antes de...
Primero que todo, purgue su squid (o squid3) y elimine cualquier carpeta y archivos relacionados (/var/log/squid3, /var/spool/squid3, /usr/lib/squid3, /usr/share/squid3, etc). Y el archivo de configuración (squid.conf), guárdelo en la carpeta Home (home/tu_usuario/squid.conf).
Cree el siguiente log:
sudo touch /var/log/squidalert.log
Y también un script en la ruta /etc/init.d/squidreload.sh y agréguele solamente la siguiente información en la cabecera:
#!/bin/bash
### BEGIN INIT INFO
# Provides:          squidreload
# Required-Start:    $syslog
# Required-Stop:     $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start Squid daemon
# Description:       Enable service provided by daemon.
### END INIT INFO
Ahora, guarde el script  (squidinstall.sh) de instalación en Home (puede llamarlo como se le de la gana), dele permisos y ejecútelo:
sudo chmod +x squidinstall.sh && sudo ./squidinstall.sh
Contenido del script (squidinstall.sh) de instalación:
#!/bin/bash
# Script de instalacion de Squid-Cache
# Para Ubuntu 14.04 y 16.04 LTS
function is_squid(){
 is_trusty=`lsb_release -sc | grep trusty`
   if [ "$is_trusty" ]; then
   echo "Instalando y Configurando Squid..."
   apt -y install squid3 squidclient squid-cgi squid-langpack
   cp -f /etc/squid3/squid.conf{,.bak}
   cp -f squid.conf /etc/squid3
   service squid3 stop && sleep 2
   rm -rf /var/spool/squid3/* && sleep 2
   squid3 -z && sleep 2
   service squid3 start
   crontab -l | { cat; echo "@weekly squid3 -k rotate"; } | crontab -
   crontab -l | { cat; echo "*/10 * * * *  /etc/init.d/squidreload.sh"; } | crontab -
   echo '# Squid3 service
   date=`date +%d/%m/%Y" "%H:%M:%S`
   if [[ `ps -A | grep squid3` != "" ]];then
   echo -e "\nONLINE"
    else
   echo -e "\n"
   service squid3 start && sleep 3 && squid3 -k reconfigure
   echo "" >> /var/log/squidalert.log
   fi'>> /etc/init.d/squidreload.sh
 else
   echo "Instalando y Configurando Squid..."
   apt -y install squid squidclient squid-cgi squid-langpack
   cp -f /etc/squid/squid.conf{,.bak}
   find squid/squid.conf -type f -print0 | xargs -0 -I "{}" sed -i "s:squid3:squid:g"  "{}"
   cp -f squid/{squid,cachemgr}.conf /etc/squid
   service squid stop && sleep 2
   rm -rf /var/spool/squid/* && sleep 2
   squid -z && sleep 2
   service squid start
   crontab -l | { cat; echo "@weekly squid -k rotate"; } | crontab -
   crontab -l | { cat; echo "*/10 * * * *  /etc/init.d/squidreload.sh"; } | crontab -
   echo '# Squid service
   date=`date +%d/%m/%Y" "%H:%M:%S`
   if [[ `ps -A | grep squid` != "" ]];then
   echo -e "\nONLINE"
    else
   echo -e "\n"
   service squid start && sleep 3 && squid -k reconfigure
   echo "" >> /var/log/squidalert.log
   fi'>> /etc/init.d/squidreload.sh
   fi
}
is_squid
Qué hace el script?
Primero detecta la versión de Ubuntu; si es la 14.04.x, instala Squid3 y sus dependencias y si es 16.04 instala squid, no sin antes revisar su archivo de configuración (squid.conf) y cambiar todas las referencias de squid3 a squid. Luego detiene el servicio, elimina los directorios antiguos de la cache y la reconstruye, y finalmente inyecta al cron la rotación de logs semanal.
Como ñapa, adiciona al script squidreload.sh (que creamos anteriormente en /etc/init.d) la información de inicio de squid, el cual también corre en el cron cada 10 minutos (el tiempo se puede ajustar a las necesidades del usuario) y si detecta que squid se ha detenido, lo inicia nuevamente.
Nota: Si usa cachemgr.conf, debe agregar al script el archivo de configuración para que también lo copie. Tenga en cuenta que en squid3, este archivo se maneja en dos directorios.
Meteduras de pata:
Si su squid.conf no esta bien configurado y no incluye parámetros de cache_mem, cache_dir y demás relacionados, al correr el script le saldrá el siguiente error y se detendrá:
Y si no elimina todo (Antes de...) o trata de hacer un mix (squid y squid3), es posible que le salgan problemas como este:

Nota aclaratoria de la publicación: En este post nos hemos referido exclusivamente a versiones de Squid soportadas oficialmente por las LTS mencionadas, desde repositorios oficiales de Ubuntu y no a aquellas versiones que los usuarios instalan de otras fuentes.
Nota de actualización de versión: Si quiere trabajar con squid 3.5.12, actualice a Ubuntu 16.04 LTS Xenial Xerus con sudo do-release-upgrade -d
Con la tecnología de Blogger.