# [Gentoo] Politicas de Actualización de Software (Abierto)

## JotaCE

Estimados :

Me gustaria pedirles de gran favor que me compartan que politicas ponen en practica para la actualización de sus equipos; ya sean estos de escritorio, portatiles o servidores.

Como es posible realizar una actualización segura sin riesgo de desastres.

Atento a sus comentarios.

----------

## lluisparcet

Yo tengo tres equipos, dos de escritorio y un portátil.

Todos en la rama estable salvo algún paquete, muy pocos, que me interesa tener mas actualizado. (Google Earth, nvidia-drivers, etc.). El portatil y uno de escritorio con Gnome y el otro de escritorio con Xfce.

Actualizo una vez por semana siguiendo este guión (Lo encontre en un post de este foro):

```
# Sincronizar portage emerge-sync o eix-sync

eix-sync

# Actualizar world, revisar USE Flags nuevas o que hayan cambiado.

# Eventualmente añadir --with-bdeps

emerge -uavDN world

# Revisar logs de la instalación y seguir las recomendaciones. **Importante**

elogv

# Actualizar variables de entorno y ficheros de configuración.

env-update && source /etc/profile && dispatch-conf

# Limpiar dependencias no usadas

emerge --depclean

# Corregir enlaces rotos a librerías, eventualmente con 'lafilefixer --justfixit'

revdep-rebuild

# Limpiar fuentes obsoletas en /usr/portage/distfiles

eclean-dist -d
```

y salvo algún problema muy esporádico de bloqueos en algún paquete o errores en su compilación (Que he solucionado sin mayores problemas) siempre me ha funcionado de manera satisfactoria y nunca he tenido que reinstalar ninguno de mis equipos.

Saludos cordiales.

----------

## pelelademadera

diariamente o cada 2 dias. salvo ecepcion.

nunca problemas, solo miro la lista xq udev glibc y demas trato de no actualizarlas demasiado ya que a veces me ha causado problemas, igual que xorg-server

----------

## Txema

Yo hice algunas modificaciones al script de actualización que usaba y ha quedado así:

```
#!/bin/bash

#layman -S

if [[ `cat /etc/eix-sync.conf` != "*" ]]

then

        echo "Archivo /etc/eix-sync.conf no encontrado, este archivo debe tener el siguiente contenido: *"

        echo ""

        echo "¿quiere crear este archivo ahora? [Y/n]"

        read LINK

        case "$LINK" in

        "" )

                echo "*" > /etc/eix-sync.conf

                echo ""

                echo "Archivo creado correctamente"

                echo ""

        ;;

        "*" )

                echo ""

                echo "No se ha creado el archivo, saliendo del programa"

                echo ""

        ;;

        esac

else

        eix-sync

        if [[ `eix -u --only-names gcc` != ""  ]]

        then

                echo "-----------------------------------------------------------------------"

                echo ""

                echo "Existe una versión nueva de gcc, se procede a su compilación"

                echo ""

                echo "-----------------------------------------------------------------------"

                emerge -a1u gcc

                echo "-----------------------------------------------------------------------"

                echo ""

                echo "Seleccione la nueva versión"

                echo ""

                gcc-config -l

                echo ""

                echo "-----------------------------------------------------------------------"

                read GCC

                gcc-config $GCC

                source /etc/profile

                emerge -1 libtool

        fi

        emerge -avuND --keep-going system

        env-update && source /etc/profile && cfg-update -u

        emerge -avuND --keep-going --with-bdeps=y  world

        elogv

        env-update && source /etc/profile && cfg-update -u

        emerge -a --depclean

        revdep-rebuild -p  # En caso de que cante paquetes a recompilar vuelvo a ejecutarlo sin la opción -p

        eclean-dist -d

fi
```

Y lo ejecuto al menos un par de veces al mes, es bueno hacerlo de forma regular para no encontrarte con muchos paquetes de golpe que pueden bloquearse mutuamente.

Por si a alguien le interesa dejo también el script que uso para la compilación del kernel:

```
#!/bin/bash

echo "Selecciona el kernel a compilar:"

echo "-------------------------------------"

echo "`eselect kernel list`"

echo "-------------------------------------"

echo "[Indique el número o presione enter para seleccionar el actual]"

echo ""

read LINK

case "$LINK" in

        "" )

                echo "Kernel ya seleccionado, se continúa el proceso"

                echo ""

        ;;

        * )

                echo "Nuevo kernel seleccionado, se continúa el proceso"

                echo ""

                eselect kernel set $LINK

        ;;

esac

cd /usr/src/linux/

echo " ------ Intentando copia de .config de kernel anterior ------ "

cp /usr/src/linux-`uname -r`/.config /usr/src/linux/

if [ -s .config ]

then

        echo "Encontrado archivo de configuración .config"

        echo ""

else

        echo "No hay archivo previo de configuración. Saliendo"

        echo ""

        exit

fi

echo " ------ Configurando Kernel... ------ "

echo ""

make oldconfig

make menuconfig

echo " ------ Compilando Kernel... ------ "

echo ""

make && make modules_install

KERNEL=`ls -l /usr/src/linux|sed 's/^.*linux-//'`

ACTUAL1=`grep -m 1 /kernel /boot/grub/grub.conf|sed 's/^.*\/boot\/kernel-//g'|sed 's/ root.*//g'`

ACTUAL2=`grep /kernel /boot/grub/grub.conf|sed 's/^.*\/boot\/kernel-//g'|sed 's/ root.*//g'|sed 's/ root.*//g'|sed -e '1d'`

echo " ------ Recompilando drivers ------ "

module-rebuild -X rebuild

echo " ------ Copiando nueva imagen a /boot ------ "

echo ""

cp /usr/src/linux/arch/x86/boot/bzImage /boot/kernel-${KERNEL}

echo " ------ Modificando grub ------ "

if [[ $KERNEL != $ACTUAL1 && $KERNEL != $ACTUAL2  ]]

then

        sed -i "s/${ACTUAL1}/borrado/" /boot/grub/grub.conf

        sed -i "s/${ACTUAL2}/${ACTUAL1}/" /boot/grub/grub.conf

        sed -i "s/borrado/${KERNEL}/" /boot/grub/grub.conf

        BORRAR=`ls /boot/kernel*|sed 's/  /\n/g'|sed 's/\/boot\/kernel-//g'`

        for i in $BORRAR

        do

                if [[ $i != $KERNEL && $i != $ACTUAL1 ]]

                then

                        rm /boot/kernel-$i

                fi

        done

elif [[ $KERNEL = $ACTUAL1 ]]

then

        # No se hace nada

        echo "Versión idéntica de kernel, grub.conf no modificado."

elif [[ $KERNEL = $ACTUAL2 ]]

then

        echo "Versión idéntica de kernel, Entrada antigua colocada en primer lugar"

        sed -i "s/${ACTUAL1}/borrado/" /boot/grub/grub.conf

        sed -i "s/${ACTUAL2}/${ACTUAL1}/" /boot/grub/grub.conf

        sed -i "s/borrado/${KERNEL}/" /boot/grub/grub.conf

fi
```

Un saludo  :Wink: 

----------

## JotaCE

Y ahora que pasaria en un servidor de produccion ? que politicas podria sugerirme a la hora de realizar actualizaciones en un sercidor web, de bases de datos, de correo, interpretes, compiladores. o es mejor no actualizar nunca nada ?

Digo esto por que con la poca experiencia que tengo en ambientes de produccion me doy cuenta que actualizar es peligroso y no actualizar tambien.

----------

## Txema

Yo lo que he puesto arriba lo hago igual tanto en mi propio pc como en el servidor, aunque no es un servidor de oficina, solo da servicio a cinco pc's domésticos, así que no sé qué impacto tendría en un servidor digamos "real", en micaso no tengo ningún problema ni por falta de recursos mientras compilo ni con las actualizaciones en si, el truco está siempre en el mismo sitio, usar la opción -a (--ask) para todo acompañada también de -v (--verbose) y así ves qué paquetes, versiones y USEs se van a modificar/actualizar y si no te interesa pues le dices No, modificas lo que sea y vuelves a intentarlo  :Wink: 

Un saludo.

----------

## Inodoro_Pereyra

La parte mas complicada de mantener un servidor en producción es leer, releer y volver a leer hasta entender toda la salida de portage luego de la compilación y seguir las instrucciones al pié de la letra.

¿El truco? Actualizar con mas frecuencia las estaciones de trabajo que el servidor... Si algo falla (que es casi nunca), ya sabrás a que atenerte a la hora de actualizar el servidor si es que esta actualización lo afecta.

Salud!

----------

## Txema

Ah, se me olvidaba, a raíz de lo que dice Inodoro_Pereyra, es fundamental tras cada emerge ejecutar elogv y mirar bien todos los paquetes que acabas de compilar por si alguno necesitara "pasos extra" tras su instalación/actualización  :Wink:  (suelen ser todos los que tienen el asterisco rosa o marrón, los verdes no dicen nada y los rojos es que falló la compilación  :Wink: )

----------

