View previous topic :: View next topic |
Author |
Message |
RadikalQ3 Apprentice
Joined: 26 Oct 2003 Posts: 172 Location: Planeta Tierra
|
Posted: Sat Oct 02, 2004 1:45 pm Post subject: [Guia] Actualizar gentoo 'en diferido' |
|
|
Guia para actualizar Gentoo 'en diferido' (o cómo no morirse de lentitud mientras tu chisme está compilando cosas)
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.
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.
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
y realizar la actualización del sistema sin tener que compilar paquetes (dado que ya estarán instalados) y pudiendo observar el proceso, revisar configuraciones, etc.
Aqui está el script que lo hace posible:
Code: |
#! /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
# ----------------------------------------------------------------------------
#**************************************************************
# 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='no'
#**************<Fin de la configuracion inicial>******************
#Datos de esta versión del script
PROG="pupdate"
TAG="Compila, si, pero no me molestes..."
DESC="Portage Update. Para compilar Gentoo en diferido. - RadikalQ3 - "
VERSION="3.0"
#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 | 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) > pupdate -sn
- Saber lo que ya está compilado (sin hacer emerge sync) > pupdate -sc
- Operación habitual completa > pupdate
END
}
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 PKDGIR 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: PKDGIR=/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}
|
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
- Downloadea 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)
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: Code: |
#**************************************************************
# 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).
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 PKDGIR y PORTAGE_TMPDIR
Si no las defines en ningún lugar, el portage usa los siguientes valores por defecto:
Code: | PKDGIR=/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.
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.
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.
Consideraciones para los usuarios de MLDonkey:
El cambio de velocidad (o 'frenado') del MLDonkey se realiza mediante su script de inicio:
Code: | /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:
Code: | # 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.
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'
Code: | #
# /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 ):
Code: | # Actualizar Portage
0 3 * * * root /usr/todo/bin/portageupdate 2>&1 > /dev/null
|
Es decir, salta todos los dias a las 3 de la mañana.
El 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.
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:
Code: | _______________________________________________________
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 /bin/pupdate y luego, hacerlo ejecutable, por ejemplo, con la orden:
Code: | chmod 700 /bin/pupdate |
Espero que lo disfruteis _________________ Radikal Trucomania
Last edited by RadikalQ3 on Mon Feb 07, 2005 7:30 am; edited 4 times in total |
|
Back to top |
|
|
focahclero Guru
Joined: 02 Jan 2004 Posts: 554
|
Posted: Sat Oct 02, 2004 2:18 pm Post subject: |
|
|
Muy interesante, gracias _________________ focahclero
Registered Linux User #352648. Get Counted! http://counter.li.org
[TEMA] Descripción problema (estado) |
|
Back to top |
|
|
RadikalQ3 Apprentice
Joined: 26 Oct 2003 Posts: 172 Location: Planeta Tierra
|
Posted: Sat Oct 02, 2004 5:36 pm Post subject: |
|
|
De nada _________________ Radikal Trucomania |
|
Back to top |
|
|
lunatc Guru
Joined: 18 Apr 2002 Posts: 409 Location: Canary Islands. Spain
|
Posted: Sat Oct 02, 2004 6:35 pm Post subject: |
|
|
Hablando en plata: cojonudo!! |
|
Back to top |
|
|
MaROtO Tux's lil' helper
Joined: 12 May 2004 Posts: 135 Location: /dev/Bilbao
|
Posted: Mon Oct 04, 2004 2:53 pm Post subject: |
|
|
Muy interesante!
Ademas de servirme para conocer cut (ni idea de que existiese ), y de conocer algo mas del portage-emerge: hora ya se como usar los paquetes precompilados! _________________ http://counter.li.org/cgi-bin/certificate.cgi/278383
2.6.9-gentoo-r4 :: xfree-4.3.0-r5 :: fluxbox-0.9.8-r1 |
|
Back to top |
|
|
alexlm78 Veteran
Joined: 08 Dec 2003 Posts: 1265 Location: Guatemala,Guatemala
|
Posted: Tue Oct 05, 2004 11:15 pm Post subject: |
|
|
Por demas interesante, lo pondremos en practica.
gracias por el dato. _________________ "This is a different kind of world, you need a different kind of software"
Linux User# 315201
100% Chapin hecho en Guatemala |
|
Back to top |
|
|
N0V4K Tux's lil' helper
Joined: 23 Jul 2004 Posts: 86 Location: .es
|
Posted: Wed Oct 06, 2004 11:39 am Post subject: |
|
|
RadikalQ3 muy muy bueno me a gusto bastante _________________ _______________oOo-(0-0)-oOo___________________
AMD Athlon XP 1800+@1533Mhz|512 Mb DDR|
SB Audigy 2 | Nvidia Geforce4 MX 420 |
Kernel 2.6.8.1-nitro6
_______________OoO-(o-0)-OoO__________________ |
|
Back to top |
|
|
RadikalQ3 Apprentice
Joined: 26 Oct 2003 Posts: 172 Location: Planeta Tierra
|
Posted: Wed Oct 06, 2004 12:12 pm Post subject: |
|
|
Que lo disfruteis!
Estoy con la nueva versión... no me gusta que cuando no haya paquetes salga en el reporte el encabezado.
Y a ver si le pongo colorines, como el emerge
Por cierto... con una versión adaptada de este script se puede hacer cómodamente un emerge -ek world ... _________________ Radikal Trucomania |
|
Back to top |
|
|
djemili n00b
Joined: 15 Jan 2005 Posts: 3
|
Posted: Sat Jan 15, 2005 9:32 pm Post subject: |
|
|
Hola
he tenido la suerte de encontrar este post ya que era un script asi justo lo que estaba buscando. Aunque me gustaria hacer algun cambio y no se del todo como hacerlo ya que los scripts en sh no se me dan muy bien.
El caso es que tengo un servidor web y se trata de un ordenador algo viejo (un pentium 1) y al tener bastantes visitas se me satura tanto la conexion como el servidor en el momento que quiero hacer un emerge. Se agrava el caso al haber estado fuera un buen tiempo. Al volver, me di cuenta que hacer una actualizacion significaba tener el servidor saturado durante, posiblemente, algunos dias y se me han ido acumulando las actualizaciones de mala manera.
Por todo eso, me gustaria modificar el script de manera que solo se bajara o compilara actualizaciones entre las 2 am y las 9 am que son las horas en que la web tiene menos visitas. Que el cron active el script a las 2 no creo que me suponga muchos dolores de cabeza pero no se como hacer que el script pare a las 9.
He pensado en cambiar el bucle for en el que se compilan los paquetes
Code: | for i in ` cat $TMP_NUEVOS_PAKETES ` ;
|
por un while que se pare si se cumple alguna de las 2 condiciones, es decir, si la variable i alcanza el num de paquetes o si son mas de las 9am. Como podria hacer ese while?? _________________ Todo Moviles: mandar sms gratis por Internet y liberar moviles por IMEI. djemili |
|
Back to top |
|
|
ackward Apprentice
Joined: 06 Sep 2002 Posts: 192
|
Posted: Sun Jan 16, 2005 12:12 am Post subject: |
|
|
Como mejora para que fuera la caña, que compilase los paquetes en otras arquitecturas.
Por ejemplo, tengo un amd64 que se ventila las compilaciones de ebuilds mas rapido que lo que tarda en bajarse un paquete y al lado tengo un athlon a 700 Mhz que cada vez que le tocaba compilar las X tardaba 4h y el record lo tiene con OO que se tiro 18. Lo ideal seria compilar los paquetes en el equipo rapido e instalarlos en el lento. (De hecho esta con debian porque no aguanto no poder actualizarlo diariamente) |
|
Back to top |
|
|
Büldden Tux's lil' helper
Joined: 13 Jan 2005 Posts: 97 Location: #gentoo-es
|
Posted: Sun Jan 16, 2005 11:33 am Post subject: |
|
|
Hola, gracias por el script
La verdad es que estoy muy muy interesado en usar este script, pero tengo una serie de dudas/problemillas, los planteo:
1- Dices que esta hecho para ejecutarse con cron, en mi caso esto no mi interesa, pq me gustaria ejecutarlo manualmente cuando a mi me interese, por lo que supongo q tambien se prodra ejecutar manualmente, si no es asi, avisad.
2- Ya que no consigo informacion sobre como usar SMTP con autentificacion y SSL, pues me gustaria si alguien sabe me lo dijese, en este caso seria para usar el smtp de gmail, o en su defecto algun smtp "publico" q no necesite autentificacion y que los mails lleguen, claro.
3- Lo ultimo seria, si hecho a andar el script y por cualquier motivo tengo que pararlo a medio de la compilacion, por ejemplo, tiene q compilar 15 paquetes, y cuando va por el 10 tengo q pararlo forzozamente, ¿que debo hacer?, ¿en que estado quedaria?, ¿que tendria que hacer luego? y por ultimo, ¿igualmente tendria el informe?
Estas son mis dudas, espero que me puedan ayudar, gracias. |
|
Back to top |
|
|
RadikalQ3 Apprentice
Joined: 26 Oct 2003 Posts: 172 Location: Planeta Tierra
|
Posted: Sun Jan 16, 2005 3:12 pm Post subject: |
|
|
Büldden wrote: |
1- me gustaria ejecutarlo manualmente cuando a mi me interese, por lo que supongo q tambien se prodra ejecutar manualmente, si no es asi, avisad.
|
Si, sin problemas.
Yo lo uso con cron porque lo ejecuto en servidores, cuando tienen poca carga.
La ventaja es que cuando quiero actualizarlos, los paquetes (la gran mayoria) ya están compilados, y así no resulta una operación tan tediosa.
Büldden wrote: |
3- Lo ultimo seria, si hecho a andar el script y por cualquier motivo tengo que pararlo a medio de la compilacion, por ejemplo, tiene q compilar 15 paquetes, y cuando va por el 10 tengo q pararlo forzozamente, ¿que debo hacer?
|
No hay ningun problema en parar el script y luego retomarlo.
Bueno, solo hay un problema, y es el siguiente: si el script intenta compilar un paquete, y éste falla en su compilacion por cualquier causa, al parar el script y volverlo a ejecutar, volvera a intentar compilar el paquete de nuevo, es decir, hara dos veces el mismo trabajo.
Quitando este comportamiento molesto, el script lo puedes ejecutar cuantas veces quieras, y el informe final será fiel... es decir, te mostrara tanto los paquetes que se han compilado correctamente como los que no, dando igual si lo has parado o no. _________________ Radikal Trucomania |
|
Back to top |
|
|
Büldden Tux's lil' helper
Joined: 13 Jan 2005 Posts: 97 Location: #gentoo-es
|
Posted: Mon Jan 17, 2005 1:10 am Post subject: |
|
|
he probado el script, habiendo modificado unas cosas en el, las cosas q modifique fueron las siguientes:
- Desactive la opcion sobre el mldonkey, lo demas de la configuracion lo deje tal cual.
- cambié, cuando descarga los paquetes, quedando el comando asi:
Code: | #Hacemos Download de los paquetes necesarios:
echo " * Descargando los paquetes necesarios ( emerge -uDf world)"
emerge -uDf --newuse world |
- Luego tambien cambio esto: añadiendo tb el --newuse
Code: | #Creamos la lista de los nuevos paquetes a actualizar:
echo " * Creando lista de paquetes a actualizar (emerge -uDp world)"
emerge -uDp --newuse world | grep ebuild | cut -f 2- -d "/" | cut -f 1 -d " " > $TMP_NUEVOS_PAKETES |
- Tambien quitando la opcion para q compile "en segundo plano" quedaria asi:
Code: | then echo " Compilando: $i"; /usr/bin/emerge -B =$i |
- Y por ultimo, cambiando las opciones del mail, ya que uso gmail como smtp y necesita SSL y autentificacion:
Code: | then echo " * Enviando reporte por email a: $EMAIL_DIR"; cat $TMP_REPORT | ssmtp -auUSUARIO@gmail.com -apPASSWD DESTINO@gmail.com |
en este caso, el usuario y el destino no son los mismo, (esto debiera de funcionar, lo probe a usar por linea de comando y si no mandaba sino un echo "algo" me enviaba el mail vacio, pero si lo hacia con cat (un archivo) lo enviaba bien, bueno lo probe con el archivo de este script y me lo envio bien.
Ahora, los problemas q tengo tras esjetucar el script (como root) son,
1- Compila todo lo que puede, en este caso de cuarenta y pico paquetes creo q no compilo sino dos, pero en el informe final, salen todos como no compilados.
2- El informe final se me envia vacio a la cuenta de mail.
Creo q no me da mas problemas, aun asi, informare si veo algo mas.
Espero q me puedan ayudar, pq realmente esto me quita la preocupacion de estar pendiente a las compilaciones y demas.
Gracias |
|
Back to top |
|
|
Ark del KAOS Guru
Joined: 13 Jan 2005 Posts: 333 Location: Madrid, Spain
|
Posted: Tue Jan 18, 2005 12:26 am Post subject: |
|
|
Bueno...este script me encanta. Gracias!!!
Pero estoy peleado con el ssmtp.
A ver...me gustaria que me enviase un mail a mi cuenta ark@ellkaos.net...y que utilizase el smtp de ya.com para los dominios, smtp.domadsl.ya.com
¿Que deberia hacer?
Realmente no se por donde pillarlo...ultimamente no doy pie con bola.
Pongo mi configuracion del smtp:
#
# /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.
# Example for SMTP port number 2525
# mailhub=mail.your.domain:2525
# Example for SMTP port number 25 (Standard/RFC)
mailhub=smtp.domadsl.ya.com
# Example for SSL encrypted connection
# mailhub=mail.your.domain:465
# Where will the mail seem to come from?
rewriteDomain=shin.elkaos.net
# The full hostname
# Gentoo bug #47562
# Commenting the following line will force ssmtp to figure
# out the hostname itself.
# hostname= _HOSTNAME_
# 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
Como veis he cambiado poco, ya que en realidad no sabia lo que estaba haciendo... |
|
Back to top |
|
|
djemili n00b
Joined: 15 Jan 2005 Posts: 3
|
Posted: Tue Jan 18, 2005 11:59 am Post subject: |
|
|
nadie sabe decirme lo del while hora < 9am ??
quiza se puede hacer mas facil con un IF dentro del bucle que salga del bucle si ya es mas tarde de las 9am.
Si alguien sabe hacer esto en codigo sh me haria un favor:
Si hora_actual > 9:00 entonces Salir del bucle for
saludos!! _________________ Todo Moviles: mandar sms gratis por Internet y liberar moviles por IMEI. djemili |
|
Back to top |
|
|
Debcore n00b
Joined: 20 Dec 2004 Posts: 8
|
Posted: Tue Jan 18, 2005 12:40 pm Post subject: |
|
|
Quote: | Si alguien sabe hacer esto en codigo sh me haria un favor:
Si hora_actual > 9:00 entonces Salir del bucle for |
Te refieres a algo asi?
Code: | if [ $(date +"%H") -ge 9 ]
then
break
fi |
_________________ |
|
Back to top |
|
|
RadikalQ3 Apprentice
Joined: 26 Oct 2003 Posts: 172 Location: Planeta Tierra
|
Posted: Tue Jan 18, 2005 2:04 pm Post subject: Nueva Version (2.0) |
|
|
Acabo de editar el post inicial.
He incorporado el limite horario y lo del -newuse al script. _________________ Radikal Trucomania |
|
Back to top |
|
|
Büldden Tux's lil' helper
Joined: 13 Jan 2005 Posts: 97 Location: #gentoo-es
|
Posted: Thu Jan 20, 2005 9:57 am Post subject: |
|
|
Nose si habeis entendido cual es mi principal problema (tampoco es muy muy importante) pero le quita utilidad al script, aqui os dejo el reporte que muestra en consola despues de una actualizacion:
Code: | * Creando reporte
------------------------------------------------------------
Reporte de actualización del equipo: gentoo
------------------------------------------------------------
* Nuevos paquetes YA COMPILADOS y listos para instalar con emerge -uDk :
* Nuevos paqutes que NO HAN SIDO COMPILADOS. (Se recomienda compilación manual) :
- gentoo-dev-sources-2.6.10-r6
- cups-1.1.23-r1
- nvidia-kernel-1.0.6629-r1
- nvidia-glx-1.0.6629-r1
- imagemagick-6.1.8.8
- koffice-1.3.5-r2
- openmotif-2.1.30-r6
- xpdf-3.00-r8
- kdegraphics-3.3.2-r2
* Enviando reporte por mail a: root
* Actualizacion completada |
Ese es el resulatado de mi ultima actualizacion, aun cuando realmente los ha compilado todos exitosamente, y no hablemos del mail, porque ese lo envia completamente vacio.
Pues me gustaria que alguien me hechase una mano, pq yo no entiendo mucho de scripts |
|
Back to top |
|
|
RadikalQ3 Apprentice
Joined: 26 Oct 2003 Posts: 172 Location: Planeta Tierra
|
Posted: Thu Jan 20, 2005 11:00 am Post subject: |
|
|
El problema de que no envie el email, es producido porque estas usando equivocadamente el ssmtp.
El ssmtp, si lo quieres usar desde una linea de script, has de enviarle todas las cabeceras de un email bien conformadas, es decir, casi que has de reproducir el diálogo que hay que hacer cuando uno habla con un servidor smtp.
Para evitar esto, se usa el programilla mail.
El problema es que al parecer, si necesitas autentificarte en el servidor smtp que utilices, el ssmtp no admite pasarle un login y una password de usuario desde su fichero de configuracion, parece que solo lo admite como parámetros desde la linea de comandos.
Para enviar un email a traves de un server smtp con autentificacion, hay otros métodos, por ejemplo, instalarte el mailwrap, que te permite configurar el comando para enviar el email, y ahí mismo, en su fichero de configuración, poner como comando de envio el ssmtp con sus parámetros para que envie el login y el password.
La pega de este metodo es que tu clave quedaria ahí, visible, sin encriptar...
Tienes una explicación de este método en este mensaje
Respecto a lo que de que te informe mal de los paquetes compilados o no... solo te recomiendo que revises tu make.conf, a ver donde defines que tienen que ir los paquetes compilados y, que uses el codigo del script sin modificar... o bien cojas la copia original y cambies solo lo del envio del email, por si hubieras cambiado algo que no tocaba...
El script sabe si el paquete ha sido o no compilado porque busca el paquete en el directorio de paquetes del portage, que es definido en el make.conf con la variable PKGDIR.
Y por ultimo... la cosa esta de incluir el --newuse al final no tiene mucha utilidad en el script, ya que... imaginate que tienes ya creado un paquete del programa, cambias los uses, el script detecta que hay que compilarlo (porque le hemos dicho --newuse) pero a la hora de ver si esta o no ya creado ese paquete, al estarlo previamente no lo compilara de nuevo.
Es decir, el rollo del --newuse sirve si vacias el directorio de paquetes de tu portage, sino no sirve de nada, y a mi no me gusta borrar el directorio de paquetes, ya que uno de mis servers puede completar una compilacion con muchos cambios en varias ejecuciones del script... o bien puedo pararlo si me molesta y continuar en otro momento o... y si borro esos paquetes, me tocara compilar todo de nuevo. _________________ Radikal Trucomania |
|
Back to top |
|
|
RadikalQ3 Apprentice
Joined: 26 Oct 2003 Posts: 172 Location: Planeta Tierra
|
Posted: Thu Jan 20, 2005 11:05 am Post subject: |
|
|
Acabo de encontrar otra solución para el temilla, que es renombrar el ssmtp, y substituirlo por un script en el que llames al ssmtp renombrado y ahí mismo le pases los parámetros de login y clave.
Lo tienes en este otro mensaje:
ssmtp: login to send mail _________________ Radikal Trucomania |
|
Back to top |
|
|
chencho n00b
Joined: 20 Nov 2004 Posts: 24
|
Posted: Thu Jan 20, 2005 12:21 pm Post subject: |
|
|
mano de santo el mailwrap, gracias |
|
Back to top |
|
|
Büldden Tux's lil' helper
Joined: 13 Jan 2005 Posts: 97 Location: #gentoo-es
|
Posted: Fri Jan 21, 2005 5:23 pm Post subject: |
|
|
Pues lo de que el reporte saliera mal, era solo poner en el make.conf el PKGDIR, gracias.
Pero aun usando el mailwrao no consigo q lo envie por mail como es debido, checho si es posible me gustaria q postearas todos los pasos que seguistes, pq yo segui lo que habia en ingles y nada de nada.
gracias |
|
Back to top |
|
|
chencho n00b
Joined: 20 Nov 2004 Posts: 24
|
Posted: Fri Jan 21, 2005 7:40 pm Post subject: |
|
|
pues creo que lo que hice fue emerger mailx ssmtp y mailwrap
/etc/ssmtp/ssmtp.conf:
root=postmaster
mailhub=smtp.gmail.com:465
hostname=el_nombre_asignado_a_tu_ip(vease p.ej no-ip.com)
UseTLS=YES
/etc/mail/mailer.conf:
sendmail /usr/sbin/ssmtp -au login -ap pass
send-mail /usr/sbin/ssmtp -au login -ap pass
mailq /usr/sbin/ssmtp -au login -ap pass
newaliases /usr/sbin/ssmtp -au login -ap pass
no se si se me olvida algo, prueba cuando termines:$ mail direccion@recibir.mail
PD:man mail |
|
Back to top |
|
|
Büldden Tux's lil' helper
Joined: 13 Jan 2005 Posts: 97 Location: #gentoo-es
|
Posted: Fri Jan 21, 2005 9:02 pm Post subject: |
|
|
Gracias, ya me funciona. |
|
Back to top |
|
|
RadikalQ3 Apprentice
Joined: 26 Oct 2003 Posts: 172 Location: Planeta Tierra
|
Posted: Sun Jan 30, 2005 4:38 pm Post subject: |
|
|
He editado el post inicial, para colocar una nueva versión.
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)
En definitiva: cambios estéticos y unas cuantas nuevas opciones para saber en cualquier momento que paquetes están compilados ya y listos para instalar y que paquetes aún no han sido compilados y convertidos en binarios.
Ah, y tambien he eliminado el uso del flag --newuse para que compile los paquetes afectados por un cambio en los flags USE
El asunto es que si un paquete ya fué creado con este script, por mucho que usemos el --newuse el script pensará que ya lo ha compilado (dado que el paquete está en el fichero de paquetes compilados del portage), así que no tenia mucho sentido usar dicho flag en este script, a no ser que borres el directorio de paquetes para que los re-compile de nuevo. _________________ Radikal Trucomania |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|