HOWTO Actualizar Gentoo 'en diferido'

De Gentoo Linux Wiki

Este articulo es parte de las series de HOWTO.
Kernel & Hardware Red y Servicios Portage Relacionado con el Sistema Servidor X Juegos Misceláneos

Guia para actualizar Gentoo 'en diferido' (o cómo no morirse de lentitud mientras tu chisme está compilando cosas)

Tabla de contenidos

[editar] Introducción

De vez en cuando nos toca actualizar nuestra Gentoo (cada cual escoge la frecuencia, yo lo suelo hacer a diario, porque dispongo de ancho de banda) Aqui propongo una forma de actualizar nuestros equipos, sin tener que andar compilando paquetes precisamente cuando nos sentamos ante nuestro equipo. Ya me fastidia llegar a casa y ponerme a compilar todo mientras estoy viendo una peli, revisando mi correo o cualquier otra tarea, mientras la CPU consume recursos a montones y hace rascar el disco duro. ¿Como es esto?... pues muy fácil. Alguno ha tenido la tentación (incluso alguno hasta lo hace) de realizar un emerge sync y un emerge -uD world de manera automática, mediante un evento en el cron, por ejemplo. El emerge sync... no hay problema, pero el compilar algo de manera desatendida es una práctica que conlleva muchos riesgos, dado que si hay algún problema de compilación, éste nos pasará inadvertido. Además, habrá ciertas configuraciones que necesitarán ser revisadas (mediante etc-update, dispatch-conf o como sea). En este post, propongo un script que llevo utilizando con éxito desde hace ya varios meses en todos los servidores Gentoo que me toca mantener.

[editar] El Script

La idea es la siguiente: Se trata de, mediante un evento cron, realizar un emerge sync, y luego, crear paquetes compilados pero SIN INSTALARLOS, de tal forma que, en cuanto tengamos un rato, podamos efectuar un

Código: Consola
emerge -uDk world

y realizar la actualización del sistema sin tener que compilar paquetes (dado que ya estarán compilados) y pudiendo observar el proceso, revisar configuraciones, etc.

Aqui está el script que lo hace posible:


Archivo: Script
#!/bin/sh
# ----------------------------------------------------------------------------
# pupdate
# Script para actualizar el portage mediante un evento desatendido
# Se trata de realizar el quivalente a:
#   emerge sync ; emerge -uDp world
# y tras esto, compilar las novedades pero SIN INSTALARLAS, es decir,
# se crean los paquetes compilados en $PKGDIR para tenerlos ahí
# ya compilados, y, a la hora de actualizar el sitema, poder hacerlo
# mediante un:
#   emerge -uDk world
# en un periodo breve de tiempo, mientras se supervisa la operacion,
# utilizando los paquetes binarios creados de antemano por el script.
#
#El script puede enviar por email un reporte con el resultado
#y tambien tiene en cuenta a los usuarios del MLDonkey
#frenando su consumo de ancho de banda mientras dure la actualizacion.
#
#               Por RadikalQ3 para todos los colegas de Gentoo
#
# Version 3.0      30/01/2005
# - Eliminado el '--newuse' incorporado en la version 2.0
# - Añadidos colores a la salida del programa
# - Añadida opcion para que no realice el emerge sync
# - Añadida opcion para ver los paquetes que faltan por compilar
# - Añadida opcion para ver los paquetes ya compilados listos para instalar
# - Añadida purga del directorio temporal de compilaciones del portage
# - Añadida opcion para que no realice la purga
# Version 3.0.r1    12/08/2005
# - Corregidos ciertos problemas con el texto y los metacaracteres con el parser BASH en la funcion muestra_ayuda
# ----------------------------------------------------------------------------


#**************************************************************
#      Configuración inicial:
#******************************

#Fichero temporal para crear el informe de la actualizacion (se borrará al terminar):
TMP_REPORT='/tmp/pupdate-report'

#Fichero temporal conteniendo la lista de los paquetes nuevos a actualizar:
TMP_NUEVOS_PAKETES='/tmp/pupdate-nuevos'

#Fichero temporal para albergar la lista de paquetes ya compilados
TMP_COMPILADOS='/tmp/pupdate-c'

#Fichero temporal para albergar la lista de paquetes sin compilar
TMP_NO_COMPILADOS='/tmp/pupdate-sc'

#Hacer emerge --sync y bajar fuentes de golpe al principio:
HACER_SYNC='si'

#Hacer purga final de temporales de compilacion:
HACER_PURGA='si'

#Si queremos frenar el MLDonkey antes de sincronizar el portage
#  Posibles valores: si ó no
MLDONKEY_SLOW='no'

#Si queremos que nos envie un email con un reporte de lo realizado
#  Posibles valores: si ó no
EMAIL_REPORT='si'
#Dirección de email a la que enviar el reporte
#NOTA: Debe funcionar el comando 'mail' en tu sistema (emerge mailx te ayudara)
EMAIL_DIR='master@linux.es'

#Hora límite para terminar la compilacion
#Despues de esta hora, el script deja de compilar hasta la próxima ejecución
#Usar formato de 24 horas, por ejemplo, 21:30 para las nueve y media de la noche
#Si no se quiere limite, poner 99:99
HORA_LIMITE='99:99'

#Una vez configurado el script, poner CONFIGURADO='si'
CONFIGURADO='no'
#**************<Fin de la configuracion inicial>******************



#Datos de esta versión del script
PROG="pupdate"
if [ $PROG != $0 ];then
   PROG=`basename $0`
fi
TAG="Compila, si, pero no me molestes..."
DESC="Portage Update. Para compilar Gentoo en diferido. - RadikalQ3 -"
VERSION="3.0.r2"

#Defición de colores
NO=$'\x1b[0;0m'
NE=$'\x1b[0;01m'
RO=$'\x1b[31;01m'
VE=$'\x1b[00;32m'
AZ=$'\x1b[34;01m'

#**************************************************************
#      Funciones del script:
#******************************

function colorea_ayuda {
#Colorea el texto de ayuda del script
   sed -r "
   s/^[^[:space:]].*:/$VE\\0$NO/
   s/[[:space:]]-[][[:alpha:]?-]+/${AZ}\\0${NO}/g
   s/\\(default\\)/${BR}\\0${NO}/
   "
}

function muestra_ayuda {
#Muestra la ayuda del script
   cat <<End-of-message | colorea_ayuda

${NE}${PROG} ${NO}v. ${RO}${VERSION} ${AZ}"${TAG}"
 ${RO}${DESC}
${NO}
Utilización: ${PROG} [OPCION]
  Actualiza el árbol de paquetes de Portage, creando paquetes compilados
de manera desatendida, que después podrán ser instalados mediante:
      ${AZ}portage -k${NO}
El script por defecto efectua todas las operaciones (si estan activadas
dentro de la configuracion del propio script), que son

- emerge --sync
- emerge -uDf world
- Compila todo creando paketes binarios pero sin instalarlos
- Crea un reporte y lo envia por email
- Purga los directorios temporales de compilacion de portage

a no ser que usemos algunas de las siguientes opciones:

Opciones disponibles:
 
  -h, --help             Muestra esta ayuda
  -s, --nosync           No hacer el emerge --sync
  -p, --nopurge          No hacer la purga final
  -c, --vercompilados    Ver los paquetes compilados listos para instalar
  -n, --vernocompilados  Ver los paquetes que faltan por compilar

Configuración:

El script ha de configurarse antes de ser utilizado, editando las variables situadas
en su interior.

Una vez configurado, debes poner CONFIGURADO='si' (dentro del script) para comenzar
a utilizarlo sin ver este texto de ayuda.

Ejemplos de uso:

- Saber lo que falta por compilar (sin hacer emerge --sync) > ${PROG} -sn
- Saber lo que ya está compilado  (sin hacer emerge --sync) > ${PROG} -sc
- Operación habitual completa                             > ${PROG}
 
End-of-message
}

function baja_todo {
#Frena el edonkey, hace emerge sync, baja los paquetes necesarios
#con emerge -uDf world y vuelve a acelerar el mldonkey

   #Si utilizamos MLDonkey, lo ponemos a 'Slow' para que no chupe todo el ancho de banda
   if [ ${MLDONKEY_SLOW} = 'si' ]
   then echo " ${VE}*${NO} Reduciendo el consumo de ancho de banda de MLDonkey"; /etc/init.d/mldonkey slow
   fi
   
   #Actualizamos arbol del portage:
   echo " ${VE}*${NO} Sinconizando portage (${AZ}emerge --sync${NO})"
   emerge --sync
   
   #Hacemos Download de los paquetes necesarios:
   echo " ${VE}*${NO} Descargando los paquetes necesarios (${AZ}emerge -uDf world${NO})"
   emerge -uDf world
   
   #Aceleramos el MLDonkey
   if [ ${MLDONKEY_SLOW} = 'si' ]
   then echo " ${VE}*${NO} Acelerando MLDonkey"; /etc/init.d/mldonkey fast
   fi
}

function compila_todo {
#Compila los paquetes que faltan por compilar.
#Deja de compilar si se llega a la hora límite (configurable)

   echo " ${VE}*${NO} Compilando los paquetes que falten por compilar:"
   #Compilamos los que no estén ya compilados:
   for i in ` cat ${TMP_NUEVOS_PAKETES} ` ;
   do
      if [ ! -f ${PKGDIR}/All/$i.tbz2 ]
      then
         if [ $(date +"%H:%M") \< $HORA_LIMITE ]
         then echo "   Compilando: $i";  /usr/bin/nice -n +19 /usr/bin/emerge -B =$i
         else echo "   NO Compilando, por Hora Límite: $i"
         fi
      fi
   done
}

function crea_reporte {
#Crea un reporte que muestra los paquetes compilados y no instalados
#y los paquetes no compilados
   echo " ${VE}*${NO} Creando reporte"
   rm -f ${TMP_COMPILADOS}
   #Creamos un reporte con lo realizado:
   echo " " > ${TMP_REPORT}
   echo "     _______________________________________________________" >> ${TMP_REPORT}
   echo "          Reporte de actualización del equipo: "$HOSTNAME >> ${TMP_REPORT}
   echo "     _______________________________________________________" >> ${TMP_REPORT}
   echo " " >> ${TMP_REPORT}
   echo " * Nuevos paquetes YA COMPILADOS y listos para instalar con emerge -uDk :" >> ${TMP_REPORT}
   echo " " >> ${TMP_REPORT}
   for i in ` cat ${TMP_NUEVOS_PAKETES} ` ;
   do
      if [ -f ${PKGDIR}/All/$i.tbz2 ]
         then echo "  - $i" >> ${TMP_COMPILADOS}
      fi
   done
   if [ -f ${TMP_COMPILADOS} ]
      then cat ${TMP_COMPILADOS} >> ${TMP_REPORT}
      else echo "    - No hay ningún paquete ya compilado pendiente de instalar" >> ${TMP_REPORT}
   fi
   rm -f ${TMP_COMPILADOS}
   echo " " >> ${TMP_REPORT}
   echo " " >> ${TMP_REPORT}
   echo " * Nuevos paquetes que NO HAN SIDO COMPILADOS. (Se recomienda compilación manual) :" >> ${TMP_REPORT}
   echo " " >> ${TMP_REPORT}
   for i in ` cat ${TMP_NUEVOS_PAKETES} ` ;
   do
      if [ ! -f ${PKGDIR}/All/$i.tbz2 ]
      then  echo "  - $i" >> ${TMP_NO_COMPILADOS}
      fi
   done
   if [ -f ${TMP_NO_COMPILADOS} ]
      then cat ${TMP_NO_COMPILADOS} >> ${TMP_REPORT}
      else echo "    - No hay ningún paquete nuevo sin compilar" >> ${TMP_REPORT}
   fi
   echo " " >> ${TMP_REPORT}
   cat ${TMP_REPORT}
}

function purga_compilaciones {
#Si el emerge no está siendo ejecutado, borra el directorio temporal
#de compilaciones usado por portage, definido en el fichero /etc/make.conf
#en la variable PORTAGE_TMPDIR   
   echo " ${VE}*${NO} Borrando directorio temporal compilación emerge si este no se esta ejecutando"
      
   ps -a | grep emerge > /dev/null
   if [ $? -eq 1 ]; then
   rm -rf ${PORTAGE_TMPDIR}/*
   fi
}


#**************************************************************
#      Entrada del script:
#******************************

#Hasta que sea configurado el script, mostramos la ayuda y salimos
#Asi, por lo menos te lees las opciones una vez...
if [ $CONFIGURADO != 'si' ]
then
   muestra_ayuda;
   echo "${RO}NOTA:${NO} Debes poner CONFIGURADO='si' en el script para que el script funcione...";
   exit 0
fi

#Actualizamos las variables de directorios del portage:
# En concreto, nos interesa PKGDIR y PORTAGE_TMPDIR
source /etc/make.conf

#Si no está definida la variable PKGDIR, no continuamos
if [ ${PKGDIR}NORL = 'NORL' ]
then
  echo "${RO}ERROR:${NO} Debes setear la variable PKGDIR en el fichero /etc/make.conf"
  echo "       Su valor por defecto es /usr/portage/packages"
  echo "       Es decir, añade en tu /etc/make.conf una linea con: PKGDIR=/usr/portage/packages"
  exit 1
fi

#Si no está definida la variable PORTAGE_TMPDIR, no continuamos
if [ ${PORTAGE_TMPDIR}NORL = 'NORL' ]
then
  echo "${RO}ERROR:${NO} Debes setear la variable PORTAGE_TMPDIR en el fichero /etc/make.conf"
  echo "       Su valor por defecto es /var/tmp/portage"
  echo "       Es decir, añade en tu /etc/make.conf una linea con: PORTAGE_TMPDIR=/var/tmp/portage"
  exit 1
fi


#Por defecto, no queremos ver las listas, queremos compilar...
VER_COMPILADOS="no"
VER_NO_COMPILADOS="no"

#Capturamos las opciones de linea de comandos:
while getopts ":hspcn-" OPT; do
   case $OPT in
      h ) muestra_ayuda; exit 0;;
      s ) HACER_SYNC='no';;
      p ) HACER_PURGA='no';;
      c ) VER_COMPILADOS='si';;
      n ) VER_NO_COMPILADOS='si';;
      - ) break;;
   esac
done

for ((i=$OPTIND; i<=$#; ++i)); do
   case ${!i} in
      --help )       muestra_ayuda; exit 0;;
      --nosync )       HACER_SYNC='no';;
      --nopurge )       HACER_PURGA='no';;
      --vercompilados )    VER_COMPILADOS='si';;
      --vernocompilados )    VER_NO_COMPILADOS='si';;
      * ) OPTIND=$i; break;;
   esac
done


echo "${NE}${PROG} ${NO}v. ${RO}${VERSION}${NO}"
echo "Actualización automática de paquetes del equipo ${NE}$HOSTNAME${NO}"
echo " "

#Emerge sync y bajar los fuentes (frenando el mldonkey)
if [ ${HACER_SYNC} = 'si' ]
then
  baja_todo
fi


#Creamos la lista de los nuevos paquetes a actualizar:
echo " ${VE}*${NO} Creando lista de paquetes a actualizar (${AZ}emerge -uDp world${NO})"
emerge -uDp world | grep ebuild | cut -f 2- -d "/" | cut -f 1 -d " " > ${TMP_NUEVOS_PAKETES}

#Si queremos ver la lista de programas compilados:
if [ ${VER_COMPILADOS} = 'si' ]; then
   rm -f ${TMP_COMPILADOS}
   
   for i in ` cat ${TMP_NUEVOS_PAKETES} ` ;
   do
      if [ -f ${PKGDIR}/All/$i.tbz2 ]
      then echo "   - $i" >> ${TMP_COMPILADOS}
      fi
   done
   
   echo " "
   echo "   ${AZ}Nuevos paquetes YA COMPILADOS y listos para instalar con ${VE}emerge -uDk ${NO}:"
   echo " "
   
   if [ -f ${TMP_COMPILADOS} ]
   then cat ${TMP_COMPILADOS}
   else echo "    - No hay ningún paquete ya compilado pendiente de instalar"
   fi
fi

#Si queremos ver la lista de programas NO compilados:
if [ ${VER_NO_COMPILADOS} = 'si' ]
then
   rm -f ${TMP_NO_COMPILADOS}
   
   for i in ` cat ${TMP_NUEVOS_PAKETES} ` ;
   do
      if [ ! -f ${PKGDIR}/All/$i.tbz2 ]
      then echo "   - $i" >> ${TMP_NO_COMPILADOS}
      fi
   done
   
   echo " "
   echo "   ${AZ}Nuevos paquetes NO COMPILADOS aún:${NO}"
   echo " "
   
   if [ -f ${TMP_NO_COMPILADOS} ]
   then cat ${TMP_NO_COMPILADOS}
   else echo "    - No hay ningún paquete nuevo sin compilar"
   fi
fi

#Compilamos los paquetes que faltan por compilar, sólo si
#no hemos pedido alguna de las listas de paquetes
if [ ! ${VER_COMPILADOS} = 'si' ] && [ ! ${VER_NO_COMPILADOS} = 'si' ]; then
   compila_todo
   crea_reporte
   
   #Enviamos el reporte por email   
   if [ ${EMAIL_REPORT} = 'si' ]; then
      echo " ${VE}*${NO} Enviando reporte por email a: ${EMAIL_DIR}";
      cat ${TMP_REPORT} | mail -s "Informe de Actualizacion de portage del equipo: ${HOSTNAME}" ${EMAIL_DIR}
   fi   
   
   #Purgamos temporales de compilacion del portage:
   if [ ${HACER_PURGA} = 'si' ]; then
      purga_compilaciones   
   fi
   
   echo " ${VE}*${NO} Actualizacion completada"
   echo " "
fi

#Borramos ficheros temporales:
rm -f ${TMP_REPORT}
rm -f ${TMP_NUEVOS_PAKETES}
rm -f ${TMP_COMPILADOS}
rm -f ${TMP_NO_COMPILADOS}

[editar] Funciones

El script, realiza las siguientes tareas, de forma desatendida:

  • Hace un emerge sync
  • Frena el MLDonkey (opcional, configurable)
  • Calcula la lista de los paquetes nuevos a actualizar mediante emerge -uDp world
  • Descarga los paquetes necesarios para realizar la actualizacion, mediante un emerge -uDf world
  • Acelera el MLDonkey (opcional, configurable)
  • Compila uno a uno los paquetes necesarios para la actualizacion, creando paquetes, pero no instalándolos, usando un proceso de baja prioridad para no molestar el funcionamiento del servidor, mediante emerge -B
  • Genera un reporte que muestra los paquetes nuevos creados y los paquetes que no han podido ser compilados (por algun fallo de compilación, por ejemplo).
  • El reporte es enviado por email (opcional, configurable)

[editar] Configuración

Para utilizarlo, simplemente modifica la definición de las variables del script, de tal forma que lo adecúes a tu sistema.
Las lineas de configuración son las siguientes:


Archivo: Script
 #**************************************************************
 #      Configuración inicial:
 #******************************
 
 #Fichero temporal para crear el informe de la actualizacion (se borrará al terminar):
 TMP_REPORT='/tmp/pupdate-report'
 
 #Fichero temporal conteniendo la lista de los paquetes nuevos a actualizar:
 TMP_NUEVOS_PAKETES='/tmp/pupdate-nuevos'
 
 #Fichero temporal para albergar la lista de paquetes ya compilados
 TMP_COMPILADOS='/tmp/pupdate-c'
 
 #Fichero temporal para albergar la lista de paquetes sin compilar
 TMP_NO_COMPILADOS='/tmp/pupdate-sc'
 
 #Hacer emerge sync y bajar fuentes de golpe al principio:
 HACER_SYNC='si'
 
 #Hacer purga final de temporales de compilacion:
 HACER_PURGA='si'
 
 #Si queremos frenar el MLDonkey antes de sincronizar el portage
 #  Posibles valores: si ó no
 MLDONKEY_SLOW='no'
 
 #Si queremos que nos envie un email con un reporte de lo realizado
 #  Posibles valores: si ó no
 EMAIL_REPORT='si'
 #Dirección de email a la que enviar el reporte
 #NOTA: Debe funcionar el comando 'mail' en tu sistema (emerge mailx te ayudara)
 EMAIL_DIR='root'
 
 #Hora límite para terminar la compilacion
 #Despues de esta hora, el script deja de compilar hasta la próxima ejecución
 #Usar formato de 24 horas, por ejemplo, 21:30 para las nueve y media de la noche
 #Si no se quiere limite, poner 99:99
 HORA_LIMITE='99:99'
 
 #Una vez configurado el script, poner CONFIGURADO='si'
 CONFIGURADO='si'
 #**************<Fin de la configuracion inicial>******************

Como ves, puedes configurar si quieres que se frene o no el MLDonkey antes de hacer el emerge sync y de bajar los paquetes y tambien si quieres que el script te envíe un email con el reporte generado en la operación de actualización, y claro, la dirección email a la que se enviará (por defecto, se enviará a root).

[editar] Variables de entorno del Portage

En el fichero /etc/make.conf se definen los directorios que usara el portage para su funcionamiento. Este script necesita saber dónde residen los paquetes binarios que cree el portage y dónde irán a parar los ficheros temporales que el portage crea cuando realiza compilaciones de paquetes. En concreto se tratan de las variables PKGDIR y PORTAGE_TMPDIR Si no las defines en ningún lugar, el portage usa los siguientes valores por defecto:


Explicación: Valores
 PKGDIR=/usr/portage/packages
 PORTAGE_TMPDIR=/var/tmp/portage

Yo por seguridad, prefiero no suponer nada, dado que una de las operaciones consiste en borrar todo lo que hay en uno de los directorios para realizar la purga, asi que, si no las tienes definidas en tu fichero /etc/make.conf tendrás que hacerlo para que éste script te funcione correctamente.

[editar] Saber que me falta por compilar

Ahora, podemos saber en cualquier momento qué paquetes tenemos ya compilados y listos para instalar y qué paquetes nos falta aún por compilar, mediante las opciones: pupdate --vercompilados ó pupdate --versincompilar aunque es más prćtico usar: pupdate -sc ú pupdate -sn para evitarnos hacer el emerge sync de nuevo.

[editar] Hora límite para realizar compilaciones:

Si por ejemplo, sólo disponemos de 1 hora libre en nuestro servidor para hacer compilaciones, ahora podemos definir una hora tras la cual, el script no empezara a compilar ningún paquete más, dejándolo para la siguiente vez que se ejecute el script.

[editar] Consideraciones para los usuarios de MLDonkey:

El cambio de velocidad (o 'frenado') del MLDonkey se realiza mediante su script de inicio:


/etc/init.d/mldonkey slow

Ésta es una característica que tiene el script de inicio del MLDonkey, siempre y cuando lo hayas instalado mediante el portage, es decir, si tienes un MLDonkey instalado 'a mano' a partir de las fuentes... igual no tendrás el mismo tipo de script de arranque. El ancho de banda que se colocará para 'slow' (lento) y 'fast' (rápido) deben definirse en el fichero: /etc/conf.d/mldonkey En concreto, en las lineas:


Archivo: /etc/conf.d/mldonkey
 # bandwidth control, values in kb/s
 LOW_DOWN="8"
 LOW_UP="2"
 HIGH_DOWN="0"
 HIGH_UP="25"

En este ejemplo, yo uso para Slow: 8KBytes de bajada o download, 2 de subida o upload y para Fast: sin limitación de bajada y 25 KBytes de subida o upload.


[editar] Consideraciones para el envio del reporte por email:

El script usa el comando mail (que yo tengo en /bin/mail) para enviar un email con el reporte de la actualización. Para que el comando mail funcione, tienes que tener tu equipo configurado de tal forma que sea capaz de enviar emails. Esto significa que, o bien tienes instalado y configurado un MTA (Mail Transport Agent) como puede ser qmail, postfix o sendmail, o bien, has instalado el paquete ssmtp que es un simple comando que permite enviar un email por smtp sin las complicaciones de tener que configurar monstruos como postfix y demás. Para hacerlo funcionar, simplemente emerge el paquete ssmtp y el mailx. Luego editas el fichero /etc/ssmtp/smtp.conf y añades la direccion del servidor de correo smtp que utices habitualmente y añades un alias para 'root' en el fichero /etc/ssmtp/revaliases Aqui tienes un ejemplo de mi fichero /etc/ssmtp/smtp.conf en el que mi servidor de correo smtp utilizado es 'q3.nu'


Archivo: /etc/ssmtp/smtp.conf
 #
 # /etc/ssmtp.conf -- a config file for sSMTP sendmail.
 #
 
 # The person who gets all mail for userids < 1000
 root=postmaster
 
 # The place where the mail goes. The actual machine name is required
 # no MX records are consulted. Commonly mailhosts are named mail.domain.com
 # The example will fit if you are in domain.com and your mailhub is so named.
 mailhub=q3.nu
 
 # Example for SMTP port number 2525
 # mailhub=mail.your.domain:2525
 # Example for SMTP port number 25 (Standard/RFC)
 mailhub=q3.nu       
 # Example for SSL encrypted connection
 # mailhub=mail.your.domain:465
 
 # Where will the mail seem to come from?
 rewriteDomain=
 
 # The full hostname
 hostname=q3.nu
 
 # Set this to never rewrite the "From:" line (unless not given) and to
 # use that address in the "from line" of the envelope.
 #FromLineOverride=YES
 
 # Use SSL/TLS to send secure messages to server.
 #UseTLS=YES
 
 # Use SSL/TLS certificate to authenticate against smtp host.
 #UseTLSCert=YES
 
 # Use this RSA certificate.
 #TLSCert=/etc/ssl/certs/ssmtp.pem

En este caso, no necesito autentificarme a la hora de enviar el email, si vosotros necesitaseis hacerlo... pues os toca pelearos con el man ssmtp y su configuración.

El script está pensado para ser llamado desde una tarea cron, (por eso genera un reporte y lo envia por email, aunque puede ser ejecutado a mano tranquilamente), asi que os toca añadir dicha tarea en el /etc/crontab Yo utilizo el vixie-cron, y la linea que define mi tarea del cron es la siguiente (todo mascadito os lo doy :) ):


Archivo: /etc/crontab
 # Actualizar Portage
 0 3 * * *   root   /usr/bin/pupdate 2>&1 > /dev/null

Es decir, salta todos los dias a las 3 de la mañana. El 2>&1 > /dev/null del final es para que el cron no nos envie un email con la salida del script, dado que el propio script genera un reporte más cómodo de ver por email. Los usuarios de Kde tambien pueden usar el KCron para definir esta tarea periódica.

[editar] Finalizando

Cada día, recibireis un email conteniendo un reporte con el resultado de la actualización. Este es un ejemplo de uno de estos informes:


Explicación: Ejemplo
     _______________________________________________________
          Reporte de actualización del equipo: gentil
     _______________________________________________________
 
 * Nuevos paquetes YA COMPILADOS y listos para instalar con emerge -uDk :
 
  - swig-1.3.21
  - lablgtk-1.2.7
  - readline-5.0-r1
  - a52dec-0.7.4-r2
  - giflib-4.1.3
  - libogg-1.1.2
  - libungif-4.1.3
  - libsdl-1.2.7-r3
  - gnu-gs-fonts-std-8.11
  - ghostscript-7.07.1-r6
  - dietlibc-0.27
  - flac-1.1.1
  - c-client-2004a
  - mozilla-launcher-1.21
  - sharutils-4.2.1-r10
  - xpdf-3.00-r2
  - netkit-telnetd-0.17-r4
  - unrar-3.4.3
  - Archive-Zip-1.12
  - MIME-tools-5.413
 
 * Nuevos paquetes que NO HAN SIDO COMPILADOS. (Se recomienda compilación manual) :
 
  - mldonkey-2.5.16-r8
  - xmltv-0.5.35

En este ejemplo, hay dos paquetes que no han podido ser compilados, y que me tocará tratar 'manualmente'. El resto de paquetes, con hacer un emerge -uDk world serán instalados en el sistema peeeero SIN TENER QUE ESPERAR A QUE COMPILEN, dado que ya han sido compilados.

Ah!, se me olvidaba... para los muy novatos, para hacer funcionar este script, no teneis mas que copiar el texto del script de este mensaje, grabarlo en un fichero, por ejemplo /usr/bin/pupdate y luego, hacerlo ejecutable, por ejemplo, con la orden:


Código: Console
chmod 700 /usr/bin/pupdate


Espero que lo disfruteis


Actualización del 30/01/2005 (Version 3.0)

  • Eliminado el uso de -newuse (mejor lo haces a mano...)
  • Añadido colorines a la salida del programa
  • Añadidas opciones para saber los programas compilados y sin compilar
  • Añadida opcion para que no realice el emerge sync
  • Añadida ayuda mediante la opcion -h
  • Añadida purga del directorio temporal de compilaciones del portage (sino se llena de ficheros gigas y gigas)

Actualización del 18/01/2005 (Version 2.0)

  • Añadido el flag -newuse para que se compilen los paquetes que hayan sido afectados por un cambio de tus variables USE
  • Añadido un nuevo parámetro de configuración: HORA_LIMITE para poder poner freno a las compilaciones en una hora determinada.
Herramientas personales