Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/04/2020, à 10:41

DonutMan75

[RESOLU] Ajout d'un répertoire de man ?

Bonjour à tous,
voilà, j'ai installé un serveur apache en le compilant plutôt que de passer par apt.
Tout se passe bien et il est installé dans /usr/local/apache2

Le problème ? Je n'ai pas accès aux pages de manuel associées à /usr/local/apache2/bin.
Je sais que ces pages sont stockées dans /usr/local/apache2/man

Je peux me dépatouiller avec l'option -M de man

$ man httpd
Aucune entrée de manuel pour httpd
$ man -M /usr/local/apache2/man httpd
<fonctionne>

Je souhaiterais rendre cela pérenne.

En lisant la doc, je vois apparaître trois options possibles :

  1. la variable d'environnement MANPATH,

  2. l'appel à mandb pour mettre à jour la base de données liée aux pages de manuel,

  3. la modification de /etc/manpath.config et/ou de ~/.manpath

Je ne sais pas bien comment ces trois options s'articulent entre elles (notamment, quand est-ce que mandb est appelé ?)
La variable MANPATH n'existe pas chez moi

$ printenv | grep -i man
$ echo $MANPATH

La solution la plus simple et propre me paraît être la modification de ~/.manpath (je suis seul utilisateur).

Je n'ai trouvé de définition de ce fichier que à un seul endroit du man de man

man man a écrit :

   Options générales
       -C fichier, --config-file=fichier
              Utilise le fichier de configuration indiqué au lieu du fichier ~/.manpath par défaut.

Il n'existe pas par défaut et j'ai supposé qu'il devait avoir la même structure que /etc/manpath.config ??

Je l'ai donc créé de cette façon :

$ cat ~/.manpath 
MANPATH_MAP	/usr/local/apache2/bin		/usr/local/apache2/man

Or ça n'a semble-t-il aucun effet.

$ man httpd
Aucune entrée de manuel pour httpd

Pourtant avec l'option -d (debug), on voit qu'il lit et parse bien mon fichier de config. (mais je ne sais pas intérpréter le reste... il continue de chercher dans /usr/share/man/ ??)

$ man -d httpd
(...)
From the config file /home/donut/.manpath:

Path `/usr/local/apache2/bin' mapped to mandir `/usr/local/apache2/man'.
(...)
globbing pattern in /usr/share/man/fr/man1: httpd.1*
globbing pattern in /usr/share/man/man1: httpd.1*
globbing pattern in /usr/share/man/fr/man8: httpd.8*
globbing pattern in /usr/share/man/man8: httpd.8*
globbing pattern in /usr/share/man/man3: httpd.3*
globbing pattern in /usr/share/man/man2: httpd.2*
globbing pattern in /usr/share/man/man3: httpd.3posix*
globbing pattern in /usr/share/man/man3: httpd.3pm*
globbing pattern in /usr/share/man/man3: httpd.3perl*
globbing pattern in /usr/share/man/man3: httpd.3am*
globbing pattern in /usr/share/man/fr/man5: httpd.5*
globbing pattern in /usr/share/man/man5: httpd.5*
globbing pattern in /usr/share/man/man4: httpd.4*
globbing pattern in /usr/share/man/man6: httpd.6*
globbing pattern in /usr/share/man/fr/man7: httpd.7*
globbing pattern in /usr/share/man/man7: httpd.7*
(...)
Aucune entrée de manuel pour httpd

Bref, je suis un peu bloqué à ce niveau... Quelqu'un a-t-il une idée ?

Merci d'avance et bon dimance smile

Donut

Dernière modification par DonutMan75 (Le 12/04/2020, à 16:13)

Hors ligne

#2 Le 12/04/2020, à 10:54

DonutMan75

Re : [RESOLU] Ajout d'un répertoire de man ?

Bon, la situation se débloque un peu si je donne le chemin absolu de httpd (sans doute parce que /usr/local/apache2/bin ne fait pas partie de mon PATH).

Sauf que cette fois-ci, ça ne me sort QUE des caractères illisibles.... sad

$ man /usr/local/apache2/bin/httpd
^?ELF^B...........^C>......@q^C@9*@8@&%^F^D@@@h^Bh^B^H^C^D^B^B^B............^DXJ^CXJ^C.^EP^CP^CP^C^D^D...^D^G^G^G‘#^B‘#^B...^F
  d@^B^F@‐  @=  @=  p^Bp^B^H^D^D^B^B^BDD^DPtd^D##^DQtd^FRtd^D    
p$p$..../lib64/ld‐linux‐x86‐64.so.2^D....GNU^C^B^D^CGNUq㏉‐\[uFFFD]UG^E^He^B.....2^D@.....^GrE^B^L0^D^DP
Gge^DPP",^D^C     ^DE^B^B2       I(^B"^B$(^D@4^L^D^D^B^D^H^B^E$
^^F%B^D.......^CP          ......^F^DPJcpC          .....B^D^F^H
i#J^BXT5DP^D@^DH:I‘p......h@D.A^D@^B^D
(...)

Hors ligne

#3 Le 12/04/2020, à 11:19

kamaris

Re : [RESOLU] Ajout d'un répertoire de man ?

Oui, là il tente de lire le binaire je pense.
Tu as mis /usr/local/apache2/man comme MANDATORY_MANPATH dans ~/.manpath ?
Sinon, le plus simple est peut-être d'affecter MANPATH dans ~/.profile (ou dans ~/.bashrc, qui doit être lu dans tous les cas).

Rq : même si MANPATH est vide pour l'heure, mieux vaut faire un ajout qu'un écrasement :

MANPATH=${MANPATH:+$MANPATH:}/usr/local/apache2/man

En ligne

#4 Le 12/04/2020, à 12:59

DonutMan75

Re : [RESOLU] Ajout d'un répertoire de man ?

Hello kamaris,
merci pour ton retour smile

j'ai rajouté apache2 dans le path et ça a marché !

$ man httpd
Aucune entrée de manuel pour httpd
$ man /usr/local/apache2/bin/httpd
^?ELF^B.....

En revanche :

$ export PATH=$PATH:/usr/local/apache2/bin
$ man httpd
<fonctionne>

Ceci appelle quelques remarques :

1) Lien entre $MANPATH et manpath.config

man 5 manpath a écrit :

Si la variable d'environnement $MANPATH est définie, l'information contenue dans /etc/manpath.config ne la remplacera pas.

>> Ok, donc il y a préséance de $MANPATH sur /etc/manpath.config
Et comme tu le suggères, un export ${MANPATH:+$MANPATH:}/usr/local/apache2/man ferait très bien le job
(mais du coup, on perd le lien logique entre répertoires des binaires et répertoires des manuels de manpath.config, QUID si plusieurs versions d'apache2 sont installées ?)

2) Rôle de MANDATORY_PATH ?

man 5 manpath a écrit :

       MANDATORY_MANPATH structure_hiérarchique
              Les lignes de ce type précisent les structures hiérarchiques de pages de manuel que doivent contenir tous les $MANPATH produits automatiquement. En général, cela inclut /usr/man.

       MANPATH_MAP élément_de_chemin  structure_hiérarchique
              Les lignes de ce type établissent la correspondance entre un des éléments du chemin de recherche $PATH et la structure hiérarchique qui contient les pages de manuel correspondantes $MANPATH. Pour chaque élément_de_chemin trouvé dans le $PATH  de  l'utilisa‐
              teur, la structure_hiérarchique sera ajoutée au $MANPATH.

>> A ce niveau, je comprends pas bien à quoi sert le MANDATORY_MANPATH (que tu mentionnes par ailleurs dans ton message)
Je comprends que tous les logiciels installés *automatiquement* (au sens de apt-get ??) doivent stocker leur man dans l'un de ces répertoires ? (sinon cela génère une erreur ?)

Au final, mon ~/.manpath devrait contenir ceci ??

$ cat ~/.manpath 
MANDATORY_MANPATH /usr/local/apache2/man
MANPATH_MAP	/usr/local/apache2/bin		/usr/local/apache2/man

3) Comportement de man lorsque l'argument contient le binaire AVEC le chemin

$ man /usr/bin/ls

fonctionne et affiche l'aide de ls alors que :

$ man /chemin/vers/mon/fichier

affiche le contenu du fichier

>> Je ne comprends pas ce comportement...

4) Rôle des bases de données d'indexation ?

Savez-vous à quoi servent ces bases de données ? Sont-elles mise-à-jour à chaque ajout/suppression de programme ? Régulièrement (genre toute les semaines) ?
Je crois deviner que l'intérêt de ces bases de données est d'éviter de parcourir N dossiers de manuels à chaque appel de man, non ?

Voici ce que contient mon /etc/manpath.config

MANDATORY_MANPATH			/usr/man
MANDATORY_MANPATH			/usr/share/man
MANDATORY_MANPATH			/usr/local/share/man

MANPATH_MAP	/bin			/usr/share/man
MANPATH_MAP	/usr/bin		/usr/share/man
MANPATH_MAP	/sbin			/usr/share/man
MANPATH_MAP	/usr/sbin		/usr/share/man
MANPATH_MAP	/usr/local/bin		/usr/local/man
MANPATH_MAP	/usr/local/bin		/usr/local/share/man
MANPATH_MAP	/usr/local/sbin		/usr/local/man
MANPATH_MAP	/usr/local/sbin		/usr/local/share/man
MANPATH_MAP	/usr/X11R6/bin		/usr/X11R6/man
MANPATH_MAP	/usr/bin/X11		/usr/X11R6/man
MANPATH_MAP	/usr/games		/usr/share/man
MANPATH_MAP	/opt/bin		/opt/man
MANPATH_MAP	/opt/sbin		/opt/man

MANDB_MAP	/usr/man		/var/cache/man/fsstnd
MANDB_MAP	/usr/share/man		/var/cache/man
MANDB_MAP	/usr/local/man		/var/cache/man/oldlocal
MANDB_MAP	/usr/local/share/man	/var/cache/man/local
MANDB_MAP	/usr/X11R6/man		/var/cache/man/X11R6
MANDB_MAP	/opt/man		/var/cache/man/opt

Un dernier point intéressant et que j'ai découvert par hasard est le suivant :
Quand on ajoute un répertoire au PATH (ici mon répertoire person ~/bin/) ALORS man va AUTOMATIQUEMENT regarder s'il n'existe pas un répertoire man dans le voisinage !!
Ca c'est assez cool en fait !

$ man -d ls
(...)
path directory /home/donut/bin is not in the config file
and doesn't have ../man, man, ../share/man, or share/man subdirectories
(...)

Merci pour vos retours et/ou commentaires smile

Donut

Hors ligne

#5 Le 12/04/2020, à 15:53

kamaris

Re : [RESOLU] Ajout d'un répertoire de man ?

DonutMan75 a écrit :

1) Lien entre $MANPATH et manpath.config(mais du coup, on perd le lien logique entre répertoires des binaires et répertoires des manuels de manpath.config, QUID si plusieurs versions d'apache2 sont installées ?)

Eh bien je suppose que si on n'indique pas à man une table de correspondances manuel <-> binaire, il ne peut pas le trouver tout seul effectivement.
Après, en pratique, si tu installes un programme dans /usr/local/bin, c'est pour qu'il ait la priorité sur d'éventuelles autres occurrences du même nom dans d'autres répertoires du PATH (normalement, /usr/local/bin est avant /usr/bin ou /bin dans le PATH), et comme $MANPATH a la priorité sur manpath.config, si tu fais man ton-programme, ça doit coller (l'exécutable prioritaire correspond à la page de manuel prioritaire).
(Encore faut-il que tu n'aies installé qu'une version personnalisée du programme en question, certes…)

DonutMan75 a écrit :

2) Rôle de MANDATORY_PATH ?
>> A ce niveau, je comprends pas bien à quoi sert le MANDATORY_MANPATH (que tu mentionnes par ailleurs dans ton message)
Je comprends que tous les logiciels installés *automatiquement* (au sens de apt-get ??) doivent stocker leur man dans l'un de ces répertoires ? (sinon cela génère une erreur ?)

Au final, mon ~/.manpath devrait contenir ceci ??

$ cat ~/.manpath 
MANDATORY_MANPATH /usr/local/apache2/man
MANPATH_MAP	/usr/local/apache2/bin		/usr/local/apache2/man

Je sais pas trop à vrai dire, j'ai juste regardé dans /etc/man_db.conf (sous arch, je n'ai pas de /etc/manpath.config), et j'ai vu qu'il y avait à chaque fois trois entrées : MANDATORY_MANPATH, MANPATH_MAP et MANDB_MAP, avec ce commentaire : « every automatically generated MANPATH includes these fields ».
Donc voilà, je suppose qu'il faut renseigner les trois en général, pour faire les choses proprement.

DonutMan75 a écrit :

3) Comportement de man lorsque l'argument contient le binaire AVEC le chemin

$ man /usr/bin/ls

fonctionne et affiche l'aide de ls alors que :

$ man /chemin/vers/mon/fichier

affiche le contenu du fichier

>> Je ne comprends pas ce comportement...

Ça fait ça même après l'export de MANPATH ?

DonutMan75 a écrit :

4) Rôle des bases de données d'indexation ?

Savez-vous à quoi servent ces bases de données ? Sont-elles mise-à-jour à chaque ajout/suppression de programme ? Régulièrement (genre toute les semaines) ?
Je crois deviner que l'intérêt de ces bases de données est d'éviter de parcourir N dossiers de manuels à chaque appel de man, non ?

Ces bases permettent notamment un accès rapide aux pages de manuel :

man mandb a écrit :

mandb is used to initialise or manually update index database caches. The caches contain information relevant to the current state of the manual page system and the information stored within them is used by the man-db utilities to enhance their speed and functionality.

Chez moi, elles sont mises à jour quotidiennement par un timer systemd :

$ systemctl cat man-db.timer
# /usr/lib/systemd/system/man-db.timer
[Unit]
Description=Daily man-db regeneration
Documentation=man:mandb(8)

[Timer]
OnCalendar=daily
AccuracySec=12h
Persistent=true

[Install]
WantedBy=timers.target
$ 
DonutMan75 a écrit :

Un dernier point intéressant et que j'ai découvert par hasard est le suivant :
Quand on ajoute un répertoire au PATH (ici mon répertoire person ~/bin/) ALORS man va AUTOMATIQUEMENT regarder s'il n'existe pas un répertoire man dans le voisinage !!
Ca c'est assez cool en fait !

$ man -d ls
(...)
path directory /home/donut/bin is not in the config file
and doesn't have ../man, man, ../share/man, or share/man subdirectories
(...)

Oui, effectivement, c'est pas mal smile

En ligne

#6 Le 12/04/2020, à 16:12

DonutMan75

Re : [RESOLU] Ajout d'un répertoire de man ?

Hello,
super, merci pour toutes ces précisions smile

kamaris a écrit :

Ça fait ça même après l'export de MANPATH ?

Non effectivement, si je mets à jour le MANPATH avant de lancer le man, alors ça m'affiche le manuel correctement.
Donc le comportement par défaut, si on n'a trouvé aucun manuel, serait d'afficher le fichier en question (même s'il s'agit d'un binaire).

kamaris a écrit :

Chez moi, elles sont mises à jour quotidiennement par un timer systemd

Ah tiens oui, chez moi aussi.

Je passe le fil à RESOLU du coup.

Bonne fin de journée à tous !

Hors ligne