Debian – installer les pages man manquantes?

Je cours RaspBMC – une dissortingbution basée sur Raspbian , c'est un Debian minimal personnalisé pour le Raspberry Pi .

Si je me souviens bien, l'utilitaire man n'est PAS installé par défaut avec RaspBMC (bien que je puisse me tromper).

Le problème est que les packages installés avant l'installation de l'utilitaire man n'installent pas leurs pages man. Cela inclut les packages qui sont pré-installés avec le système.

Exemple: J'ai essayé avec udisks-colle (qui est pré-installé)

 $ man udisks-glue No manual entry for udisks-glue 

Après avoir réinstallé ce package, la page de manuel est là.

 $ apt-get remove udisks-glue $ apt-get install udisks-glue $ man udisks-glue [Man page gets displayed] 

La question est: est-ce que je peux installer d'une manière ou d'une autre toutes les pages manquantes d'un homme facilement?

D'après ce que je peux voir, l'installation des pages de manuel est une étape exécutée pour chaque command apt-get install :

 Unpacking udisks-glue (from .../udisks-glue_1.3.4-1_armhf.deb) ... Processing sortingggers for man-db ... [...] 

En utilisant split-et-conquérir, je suppose que cela pourrait être obtenu par:

  1. get une list de tous les packages installés ( dpkg -l | grep ??? | cut ??? | ??? )
  2. find un moyen de dire à apt-get de réinstaller un package sans gâcher la config (un remove + install kinda correspond à la facture, mais je ne pense pas qu'il joue bien avec les dependencies)
    EDIT: cela devrait le faire :
    sudo apt-get install --reinstall packagename
  3. exécuter 2. sur chaque élément dans 1.

Est-ce le moyen le plus simple d'y aller?

Mettre à jour

Je me suis souvenu que j'ai mis en place RaspBMC une fois la apt-get upgrade , donc je veux m'assurer que les packageages ne sont pas mis à niveau vers des versions plus récentes lors de la réinstallation (ce qui semble être le cas avec apt-get install --reinstall par défaut.

A partir de la réponse de @ derobert, j'ai travaillé pour get exactement la version actuelle de tous les packages à réinstaller.

Version courte:

 sudo dpkg -l | grep '^ii ' | sed 's/ */\t/g' |cut -f 2,3 | sed 's/\t/=/' | xargs apt-get install --reinstall -y --ignore-missing 

Expliqué:

La key spécifie en fait la version requirejse de chaque package.

La command générale est:

 apt-get install --reinstall <package>=<version> 

Décomposer la longue command line:

 $ dpkg -l Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/sortingg-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-===========================================================-==================================-============-======================================================================== ii adduser 3.113+nmu3 all add and remove users and groups ii apt 0.9.7.8+rpi1 armhf commandline package manager ii apt-utils 0.9.7.8+rpi1 armhf package managment related utility programs ii aptitude-common 0.6.8.2-1 all architecture indepedent files for the aptitude package manager ii atmel-firmware 1.3-4 all Firmware for Atmel at76c50x wireless networking chips. $ dpkg -l | grep '^ii ' 

… se débarrasse des lignes d'en-tête et de quelques packages avec le statut ' hold ' (marqué comme hi au lieu de ii )

 $ dpkg -l | grep '^ii ' | sed 's/ */\t/g' 

… convertit n'importe quel nombre d'espaces en un seul caractère TAB, préparant le terrain pour la cut .
(Btw: pourquoi, oh pourquoi, ne supporte pas le support x+ regex pour le "caractère x, une ou plusieurs fois"?) Il peut être émulé avec xx* – signifiant 'x' suivi de 'x' zéro ou plusieurs fois)

La sortie ressemble à ceci:

 ii adduser 3.113+nmu3 all add and remove users and groups ii apt 0.9.7.8+rpi1 armhf commandline package manager ii apt-utils 0.9.7.8+rpi1 armhf package managment related utility programs ii aptitude-common 0.6.8.2-1 all architecture indepedent files for the aptitude package manager ii atmel-firmware 1.3-4 all Firmware for Atmel at76c50x wireless networking chips. 

Prochain:

 $ dpkg -l | grep '^ii ' | sed 's/ */\t/g' | cut -f 2,3 | sed 's/\t/=/' 

… récupère le nom et la version de chaque package (les champs 2 et 3) et remplace l'onglet qui les sépare par un '='

 adduser=3.113+nmu3 apt=0.9.7.8+rpi1 apt-utils=0.9.7.8+rpi1 aptitude-common=0.6.8.2-1 atmel-firmware=1.3-4 

Enfin, canalisez chacun des éléments ci-dessus pour get une longue list d'arguments utilisant xargs .

Notez le paramètre --ignore-missing – cette command est exécutée comme 'best effort' – Je ne veux pas que la mise à jour s'arrête car certains packages ne sont pas disponibles pour réinstaller (ceux-ci restront non modifiés)

 $ dpkg -l | grep '^ii ' | sed 's/ */\t/g' |cut -f 2,3 | sed 's/\t/=/' | xargs apt-get install --reinstall --ignore-missing 

Pendant le test, j'ai également ajouté un argument --dry-run à apt-get.

Sonne comme un moyen raisonnablement simple d'aller. La command pour get la list des packages et leur statut est dpkg --get-selections , pour que vous puissiez faire quelque chose comme ceci:

 dpkg --get-selections | grep '\<install$' | cut -f1 | xargs apt-get install --reinstall