Aucun APT ne recommande avec une marionnette

8

J'utilise des marionnettes pour gérer un tas de serveurs Debian au travail, en partie si cela inclut l'installation de paquets. Un package que j'installe sur plusieurs systèmes est nmap qui est utilisé pour vérifier que les règles de pare-feu sont correctement configurées. Sur Debian 7.0, si vous avez activé APT :: Install-Recommends, vous obtenez tout un tas de conneries avec nmap (voir ci-dessous).

Je ne veux pas que toutes les conneries qui installent nmap avec les recommandations activées soient incluses. Une solution serait de mettre à jour ma configuration apt avec APT::Install-Recommends "0";. Mais je ne veux pas que ce soit la valeur par défaut. La majorité du temps que je veux recommande inclus. Les packages recommandés sont généralement très bien, et je ne reçois pas des tonnes de choses dont je n'ai pas besoin. Mais il y a quelques paquets qui font penser que je ne veux pas / n'ai pas besoin.

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

Existe-t-il une méthode pour contrôler si les recommandations sont installées via une marionnette lors de l'utilisation du fournisseur de packages «apt»? Je ne veux pas jouer avec le fournisseur d'aptitude car apt et aptitude ne sont pas entièrement compatibles entre eux.

Avec recommande

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]? 

Sans recommande

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
la source
Il est temps de regarder cette aptclasse.
Michael Hampton
Bogue
Zoredache
@MichaelHampton, la classe apt justs s'assure que APT est configuré pour utiliser mes référentiels internes. Cela ne change rien en rapport avec les recommandations.
Zoredache
@Zoredache Voir aussi: serverfault.com/q/280405 et projects.puppetlabs.com/issues/4113
Shane Madden

Réponses:

10

Ceci est désormais possible via le paramètre "install_options" du type "package" Puppet: http://docs.puppetlabs.com/references/latest/type.html#package-attribute-install_options

Par exemple:

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

Ce qui précède garantit que l'option "--no-install-recommend" est transmise à apt-get, qui ignore les packages recommandés uniquement pour cette installation: http://manpages.ubuntu.com/manpages/precise/man8/apt-get .8.html

Tim Donohue
la source
3

J'ai trouvé les solutions suivantes jusqu'à présent, mais elles ne sont pas idéales.

Attendez qu'un correctif récemment ajouté en fasse la version publiée et la mise à niveau.

  • PRO: c'est la bonne façon
  • CON: Je dois attendre ou corriger localement ma configuration.

Utilisez simplement un exécutable pour installer au lieu du package, et utilisez un exécutable.

  • PRO: simple à faire si vous ne vous inquiétez pas de la vérification des erreurs.
  • CON: L'installation nécessite une ligne de commande assez complexe, pas une mise à niveau automatique et une gestion élégante des erreurs d'installation.

Mettre à jour globalement ma configuration apt, et passer le temps à trouver toutes les choses manquantes et ajuster mes manifestes pour également installer des packages que je voulais installer uniquement en étant recommandé.

  • PRO: mes manifestes sont plus spécifiques, et reflètent plus précisément l'état d'un système
  • CON: Fixer mes manifestes / configs pour refléter cette nouvelle réalité prendra un temps / effort non trivial.

Définissez la variable d'environnement APT_CONFIG avant d'exécuter la marionnette.

  • PRO: facile à régler, si vous utilisez une marionnette initiée par cron
  • PRO: ne change pas le comportement pour toute utilisation manuelle d'apt
  • CON: facile à oublier de le définir lors de l'exécution manuelle d'APT à des fins de test.
  • CON: vous devez corriger tous les manifestes, comme si vous mettiez à jour la configuration globale.
Zoredache
la source
2
Que diriez-vous d'écrire un fournisseur personnalisé en utilisant le fournisseur apt comme parent et d'y ajouter les indicateurs requis? Soit cela, soit rédigez un manifeste pour que le marionnettiste exécute la commande de patch, sauf s'il existe des preuves qu'il a déjà été appliqué.
Mike Renfro
@MikeRenfro ce n'est pas hors de question, mais je ne suis pas particulièrement familier avec le rubis.
Zoredache