Compartir la gestión de paquetes mediante pkgsync - Electronik-Pro, Informatica, Noticas,Wordpress,Facebook,Hacking,Programas,Hosting,Dominios

Como ya hemos visto en el post anterior (http://enavas.blogspot.com.es/2013/12/gestion-de-paquetes-mediante-pkgsync.html), pkgsync es de lo más útil para mantener uniformidad en el software que tenemos instalado en nuestras máquinas, pero además, nos facilita la instalación de software de una manera muy sencilla si gestionamos el archivo /etc/pkgsync/musthave. ¿Por qué? Simplemente porque con poner el nombre de los paquetes que queramos instalar, pkgsync se va encargar de instalarlos él mismo.

El problema que tenemos en nuestro sistema es que el fichero /etc/pkgsync/musthave no lo gestionamos los administradores de los centros. ¿Y qué conlleva ésto? Bueno, pues básicamente dos cosas:

Primero: Que la instalación de software es un poco más incómoda para nosotros, porque tenemos que poner el nombre del paquete a instalar en el archivo /etc/pkgsync/mayhave de las máquinas, y luego, hacer una tarea puppet que lo instale.
Segundo: Que el proceso de instalación de software no sea todo lo eficiente que podría ser. ¿Y por qué? 
  • Porque puede coincidir que se estén instalando paquetes mediante pkgsync y al mismo tiempo se ejecuten tareas de puppet que instalan software. En cuyo caso, en ese momento, todas esas tareas fallarán porque el sistema de gestión de paquetes estará ocupado mediante pkgsync.
  • O puede que suceda justo lo contrario: Que se estén ejecutando tareas de puppet que instalan software mientras se lanza pkgsync, en cuyo caso, la instalación de software mediante pkgsync va a fallar porque porque el sistema de gestión de paquetes estará ocupado mediante las tareas puppet.

Para solucionar ambos problemas he modificado pkgsync de manera que se sigan gestionando los archivos musthave, mayhave y maynothave como hasta ahora, pero que yo pueda tener también mis propios ficheros musthave.ies, mayhave.ies y maynothave.ies, de tal manera que, cuando se ejecute pkgsync, se fusionen del siguiente modo:
  • musthave + musthave.ies > musthave.all 
  • mayhave + mayhave.ies > mayhave.all 
  • maynothave + maynothave.ies > maynothave.all 
Así, yo podré instalar fácilmente nuevos paquetes con tan sólo añadirlos al archivo musthave.ies y no tendré que hacer tareas de instalación de paquetes, con lo que evitaré el problema de eficiencia que comentaba.

#! /bin/bash
#
# pkgsync - Automated package synchronization tool
# 2004-2007 Steinar H. Gunderson <sgunderson bigfoot.com>.
# Modificado: 11/12/2013 Esteban M. Navas Martín <algodelinux gmail.com>
#
# Permite fusionar los archivos musthave, maynothave y mayhave gestionados
# por la sección de administración de sistemas con los archivos
# musthave.ies, maynothave.ies y mayhave.ies gestionados por el administrador
# informático del centro, fusionándolos en los siguientes archivos:
# musthave.all, maynothave.all y mayhave.all
# Con ésto facilitamos una gestión compartida
#
# Licensed under the GNU GPL version 2, as publicshed by the FSF;
# see /usr/share/common-licenses/GPL-2 on Debian systems or visit
# www.fsf.org.
#

set -e
set -o noglob
export DEBIAN_FRONTEND=noninteractive
export VERSION=1.21

if [ ! -r /etc/pkgsync/musthave -o \
! -r /etc/pkgsync/mayhave -o \
! -r /etc/pkgsync/maynothave ]; then
echo Error: Missing files in /etc/pkgsync. Aborting.
echo
echo Please see /usr/share/doc/pkgsync/README.Debian for information on
echo configuring pkgsync.

exit 1
fi

print_help () {
echo "pkgsync $VERSION"
echo "Automated package synchronization tool"
echo ""
echo "Usage: pkgsync [OPTIONS]"
echo "Recognized options:"
echo " -h, --help display this help and exit"
echo " -k, --keep-unused don't remove unused packages"
echo " -s, --simulate don't do anything, just print out what would have happened"
echo " -d, --dpkg-glob use dpkg's globbing (deprecated)"
echo " -a, --aptitude-glob use aptitude's globbing (default, recommended)"
echo ""
echo "Complete documentation can be found in /usr/share/doc/pkgsync/README.Debian."
}

# Largely adapted from /usr/lib/getopt/parse.bash
parse_options () {
TEMP=`getopt -o hksad --long help,keep-unused,simulate,dpkg-glob,aptitude-glob -n 'pkgsync' -- "$@"`
eval set -- "$TEMP"

APTITUDE_ARGS="-y -q -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold"
GLOB_STYLE="aptitude"

while :; do
case "$1" in
-s|--simulate)
APTITUDE_ARGS="$APTITUDE_ARGS -s"
shift
;;
-k|--keep-unused)
APTITUDE_ARGS="$APTITUDE_ARGS -o Aptitude::Delete-Unused=false"
shift
;;
-d|--dpkg-glob)
GLOB_STYLE="dpkg"
shift
;;
-a|--aptitude-glob)
GLOB_STYLE="aptitude"
shift
;;
-h|--help)
print_help
exit 0
;;
--)
shift
break
;;
*)
echo "Internal error: doesn't recognize argument '$1'"
exit 1
;;
esac
done
}
readpkgs () {
grep -vE '^#' "$1" | grep -vE '^\s*$' || true
}
getpkgs () {
IFS="
"
for pkg in $( readpkgs $1 ); do
# if the line starts with "debtags:", it's a debtags expression,
# so run it through debtags.
if echo "$pkg" | grep -Eq '^debtags:'; then
if ! [ "$USE_DEBTAGS" ]; then
echo Error: "debtags:" line encountered, but debtags is not installed. Stopping.
exit 1
fi
PATTERN=$( echo "$pkg" | cut -d: -f2- )
debtags grep "$PATTERN" | tagcoll copy | cut -d: -f1
else
# if the line is "meta:current-kernel", use the kernel package
# for the currently running kernel, if it exists
if [ "$pkg" = "meta:current-kernel" ]; then
KVERS=$( uname -r )
if [ "$GLOB_STYLE" = "dpkg" ]; then
dpkg-query --showformat '${Package}\n' -W "*-image-$KVERS" 2>/dev/null || true
else
aptitude -F '%p' search ".*-image-$KVERS" | sed "s/ \+$//" 2>/dev/null || true
fi
else
# if there's a wildcard in this, push it through dpkg/aptitude
# to glob. if not, just print it out.
if [ "$GLOB_STYLE" = "dpkg" ]; then
if echo "$pkg" | grep -Eq '[][*?]'; then
dpkg-query --showformat '${Package}\n' -W "$pkg" 2>/dev/null || true
else
echo "$pkg"
fi
else
if echo "$pkg" | grep -Eq '[][*?()|~]'; then
aptitude -F '%p' search "$pkg" | sed "s/ \+$//" 2>/dev/null || true
else
echo "$pkg"
fi
fi
fi
fi
done
}
run_aptitude () {
echo RUNNING: aptitude $APTITUDE_ARGS "$@"
aptitude $APTITUDE_ARGS "$@"
}
run_debtags () {
if [ "$USE_DEBTAGS" ]; then
echo RUNNING: debtags "$@"
debtags "$@"
fi
}

# The beautiful look of hacks in the morning...
filter () {
echo "$@" | tr " " "\n" | sort | uniq -c | grep " 2" | cut -c9-
}

parse_options "$@"

# Check if we've got debtags installed
[ -x /usr/bin/debtags ] && USE_DEBTAGS=yes

# Update the package lists
aptitude update
run_debtags update

# Create ies files if they don't exists
test -f /etc/pkgsync/musthave.ies || touch /etc/pkgsync/musthave.ies
test -f /etc/pkgsync/maynothave.ies || touch /etc/pkgsync/maynothave.ies
test -f /etc/pkgsync/mayhave.ies || touch /etc/pkgsync/mayhave.ies

# Merge files
sort -o /etc/pkgsync/musthave.all /etc/pkgsync/musthave /etc/pkgsync/musthave.ies
sort -o /etc/pkgsync/maynothave.all /etc/pkgsync/maynothave /etc/pkgsync/maynothave.ies
sort -o /etc/pkgsync/mayhave.all /etc/pkgsync/mayhave /etc/pkgsync/mayhave.ies

# Find out what parameters to give to aptitude.
installed=$( dpkg -l | grep '^ii' | cut -c5- | cut '-d ' -f1 )
musthave_install=$( getpkgs /etc/pkgsync/musthave.all | sort -u | sed "s/$/+/" )
maynothave_remove=$( getpkgs /etc/pkgsync/maynothave.all | sort -u | sed "s/$/-/" )
mayhave_marknonauto=$( getpkgs /etc/pkgsync/mayhave.all | sort -u | sed "s/$/\&m/" )
mustormayhave=$( ( getpkgs /etc/pkgsync/musthave.all ; getpkgs /etc/pkgsync/mayhave.all ) | sort -u )
rest_markauto=$( filter $installed $installed $mustormayhave | sed "s/$/\&M/" )

run_aptitude full-upgrade '?upgradable' $musthave_install $maynothave_remove $mayhave_marknonauto $rest_markauto
run_aptitude autoclean

Aquí tenéis el enlace al paquete, por si queréis probarlo: https://copy.com/uCvXJ6cAEXu9

Como siempre, recomiendo leerlo y entender lo que hace antes de aplicarlo.

Publicado por primera vez en http://enavas.blogspot.com.es

0 comentarios:

Publicar un comentario

 
Top