No APT recomienda con títeres

8

Utilizo Puppet para administrar un montón de servidores Debian en el trabajo, en parte si eso incluye la instalación de paquetes. Un paquete que instalo en varios sistemas es nmap, que se utiliza para verificar que las reglas del firewall estén configuradas correctamente. En Debian 7.0, si tiene APT :: Install-Recommends habilitado, obtendrá un montón de basura junto con nmap (ver más abajo).

No quiero toda la basura que instala nmap con las recomendaciones habilitadas incluidas. Una solución sería actualizar mi configuración de apt con APT::Install-Recommends "0";. Pero no quiero que esto sea el predeterminado. La mayoría de las veces que quiero recomienda incluido. Los paquetes recomendados están en su mayoría bien, y no recibo toneladas de cosas que no necesito. Pero hay algunos paquetes que traen piensa que no quiero / necesito.

  package { 'nmap':
    ensure => installed,
    require => Class['apt'],
  }

¿Hay algún método para controlar si las recomendaciones se instalan a través de una marioneta cuando se utiliza el proveedor de paquetes 'apt'? No quiero perder el tiempo con el proveedor de aptitude ya que apt y aptitude no son totalmente compatibles entre sí.

Con recomienda

root@fw-01:~# apt-get install nmap
Reading package lists... Done
Building dependency tree       
Reading state information... Done
... 
The following NEW packages will be installed:
  fonts-droid fonts-liberation ghostscript gnuplot gnuplot-nox groff gsfonts
  imagemagick imagemagick-common libblas3 libblas3gf libcroco3 libcupsimage2
  libdjvulibre-text libdjvulibre21 libexiv2-12 libgfortran3 libgs9
  libgs9-common libijs-0.35 libilmbase6 libjbig2dec0 liblcms1 liblcms2-2
  liblensfun-data litesting firewall blensfun0 liblinear-tools liblinear1 liblqr-1-0
  libmagickcore5 libmagickcore5-extra libmagickwand5 libnetpbm10 libopenexr6
  libpaper-utils libpaper1 librsvg2-2 librsvg2-common libsvm-tools libwmf0.2-7
  netpbm nmap poppler-data psutils ufraw-batch
0 upgraded, 45 newly installed, 0 to remove and 0 not upgraded.
Need to get 32.0 MB of archives.
After this operation, 93.8 MB of additional disk space will be used.
Do you want to continue [Y/n]? 

Sin recomienda

root@fw-01:~# apt-get --no-install-recommends install nmap
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libblas3 libblas3gf libgfortran3 liblinear1
Suggested packages:
  liblinear-dev
Recommended packages:
  liblinear-tools
The following NEW packages will be installed:
  libblas3 libblas3gf libgfortran3 liblinear1 nmap
0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
Need to get 4,405 kB of archives.
After this operation, 17.4 MB of additional disk space will be used.
Do you want to continue [Y/n]?
Zoredache
fuente
Es hora de mirar esa aptclase.
Michael Hampton
Error
Zoredache
@MichaelHampton, la clase apt se asegura de que APT esté configurado para usar mis repositorios internos. No está cambiando nada relacionado con los Recommends.
Zoredache
@Zoredache Consulte también: serverfault.com/q/280405 y projects.puppetlabs.com/issues/4113
Shane Madden

Respuestas:

10

Esto ahora es posible a través de la configuración "install_options" en el tipo de "paquete" de Puppet: http://docs.puppetlabs.com/references/latest/type.html#package-attribute-install_options

Por ejemplo:

package { 'nmap':
  ensure          => installed,
  install_options => ['--no-install-recommends'],
}

Lo anterior asegura que la opción "--no-install-recomendamos" se pasa a apt-get, que omite los paquetes recomendados solo para esta instalación: http://manpages.ubuntu.com/manpages/precise/man8/apt-get .8.html

Tim Donohue
fuente
3

He encontrado las siguientes soluciones hasta ahora, pero no son ideales.

Espere hasta que un parche agregado recientemente llegue a la versión lanzada y actualice.

  • PRO: esta es la forma correcta
  • CON: Tengo que esperar o parchear localmente mi configuración.

Simplemente use un ejecutivo para instalar en lugar del paquete, y use un ejecutivo.

  • PRO: fácil de hacer si no te preocupa la comprobación de errores.
  • CON: Se necesita una línea de comandos bastante compleja para instalar, no actualizar automáticamente, y manejar con gracia los errores de instalación.

Actualice globalmente mi configuración de apt y pase el tiempo para encontrar todas las cosas que faltan y ajustar mis manifiestos para también instalar paquetes que quería que solo se instalen al ser recomendado.

  • PRO: mis manifiestos son más específicos y reflejan con mayor precisión el estado de un sistema
  • CON: arreglar mis manifiestos / configuraciones para reflejar esta nueva realidad tomará una cantidad no trivial de tiempo / esfuerzo.

Establezca la variable de entorno APT_CONFIG antes de ejecutar puppet.

  • PRO: fácil de configurar, si está utilizando una marioneta iniciada por cron
  • PRO: no cambia el comportamiento para el uso manual de apt
  • CON: fácil de olvidar configurarlo cuando se ejecuta manualmente APT para fines de prueba.
  • CON: tienes que arreglar todos los manifiestos, al igual que si actualizas la configuración global.
Zoredache
fuente
2
¿Qué tal escribir un proveedor personalizado usando el proveedor apt como padre y agregar las marcas requeridas allí? O eso, o escriba un manifiesto para que el titiritero ejecute el comando parche a menos que haya evidencia de que ya se ha aplicado.
Mike Renfro
@MikeRenfro que no está fuera de discusión, pero no estoy particularmente familiarizado con Ruby.
Zoredache