"Después del juego es antes del juego"
Sepp Herberger

miércoles, 5 de junio de 2019

Generación del musthave mínimo para pkgsync

Ya vimos en su día como configurar un musthave lo mas pequeño posible. Como ahora estoy configurando los portátiles y algunos equipos nuevos, si quiero dejarlos preparados para pkgsync en primer lugar tengo que generar un musthave a partir de los paquetes instalados y luego purgarlo de paquetes dependientes para quedarlo con el menor tamaño posible. Por ello he unificado ambos procesos en un único script:
# cat genera-musthave-minimo.sh
#!/bin/bash

FICHERO=$HOME/musthave.$HOSTNAME

echo "Generando lista de paquetes instalados en $FICHERO..."
aptitude show "?installed ?not(?priority(required)) ?not(?essential) ?not(?automatic)" | grep -e ^Package -e ^Paquete | cut -f 2 -d " " | sort > $FICHERO
echo "Obteniendo lista de paquetes multiarch..."
aptitude show "?installed ?multiarch(same)" | grep -e ^Package -e ^Paquete | cut -f 2 -d " " > /tmp/same
sort -u -o /tmp/same /tmp/same

echo "Procesando lista de paquetes multiarch..."
for paquete in `cat /tmp/same`
do
        sed -i 's|$paquete||' $FICHERO
        dpkg -l|grep "$paquete:i386" 1>/dev/null && echo "$paquete:i386" >> $FICHERO
        dpkg -l|grep "$paquete:amd64" 1>/dev/null && echo "$paquete:amd64" >> $FICHERO
done
sort -u -o $FICHERO $FICHERO 

#Ahora vamos a purgar los paquetes dependientes y dejar solo los paquetes "primigenios"
if [ ! -f /usr/bin/apt-rdepends ]
then
    echo "Instalando apt-rdepends"
    apt-get install apt-rdepends
fi

cp /dev/null /tmp/musthave.new
cp /dev/null /tmp/musthave.deps

paquetes_explicitos=$(aptitude search '~i !~M' -F '%p' --disable-columns | sort -u)
for i in $paquetes_explicitos
do
   echo -n "Paquete $i"
   if grep $i $FICHERO > /dev/null
   then
        echo " ->instalado por musthave"
        echo $i >> /tmp/musthave.new        
   else
      if grep $i /etc/pkgsync/mayhave > /dev/null
      then
          echo "  ->instalado por mayhave"
      else
          echo "  ->instalado por musthave.d"
      fi
   fi
done
sort -u -o /tmp/musthave.new /tmp/musthave.new

num=1
total=$(wc -l  /tmp/musthave.new)
for i in $(cat /tmp/musthave.new)
do
   echo "Dependencias de $i: $num/$total"
   ((num++))
   apt-rdepends $i |grep Depends: | awk ' { print $2 } ' | sed "/^${i}$/d" >> /tmp/musthave.deps 
done
sort -u -o /tmp/musthave.deps /tmp/musthave.deps
comm -23 /tmp/musthave.new  /tmp/musthave.deps  > $FICHERO.final

echo "Proceso concluido, musthave en $FICHERO.final"

exit 0
Lanzamos el script y tras un intenso proceso que debemos dejar acabar con paciencia, en el fichero "musthave.$HOSTNAME.final" nos quedan los paquetes básicos para que funcione el pkgsync, que suele quedar en un 15% del musthave que obtenemos con el script original. Una vez generado este musthave en un equipo de pruebas lo podemos copiar a mano o por puppet al resto de equipos similares en su ubicación definitiva dentro de /etc/pkgsync/musthave o /etc/pkgsync/musthave.d/*.


Pedazo artículo el de Daniel Marín sobre el Apolo X, ahora que estamos en el 50 aniversario. Seguro que nos tiene preparada una maravilla sobre el Apolo XI en unas semanas.


No hay comentarios:

Publicar un comentario