Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[SCRIPT] Contrôler ses ebuilds d'overlay
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
TGL
Bodhisattva
Bodhisattva


Joined: 02 Jun 2002
Posts: 1978
Location: Rennes, France

PostPosted: Tue Mar 21, 2006 3:32 pm    Post subject: [SCRIPT] Contrôler ses ebuilds d'overlay Reply with quote

Hmm... ouaif, il est pas très explicite mon titre... je m'explique...
J'utilise des paquets dans des overlays pour, grosso modo, deux usages :
1) corriger des problèmes avec les ebuilds officiels ; dans ce premier cas, une même version d'ebuild existe à la fois dans l'arbre Portage et dans un overlay, et c'est celle de l'overlay que je veux utiliser, et ça tombe bien puisque c'est comme ça que ça se passe naturellement.
2) ajouter de nouveau paquets ou de nouvelles versions de ceux existant : dans ce cas, l'ebuild n'existe, au début, que dans mon overlay, et c'est de là qu'il est installé. Mais par la suite, il peut arriver dans Portage... À ce moment là, celui de mon overlay est redondant, et souvent moins bon (genre c'est une version que j'ai proposé sur Bugzilla, et qui a été intégrée avec quelques améliorations/corrections dont je voudrais profiter, ou au moins tester). Mais évidemment, si je réinstalle le paquet, c'est toujours la version de l'overlay qui est utilisée, jusqu'à ce que je la supprime manuellement.

Pour me faciliter un peu la tâche de la détection du cas n°2, j'ai un petit script qui permet de lister les paquets installés dont l'ebuild existe à plusieurs endroits (plusieurs overlays, ou bien un overlay et l'arbre Portage). C'est pas grand chose, mais bon, je viens de le compléter/nettoyer un peu, et j'ai pensé que ça pouvais être utile à d'autres, donc le voilà :
find-duplicate-installed-ebuilds.sh:
#!/bin/bash
# Copyright 2006 Thomas de Grenier de Latour (TGL) <degrenier@easyconnect.fr>
# Distributed under the terms of the GNU General Public License v2

PROG_NAME=$(basename ${0})

show_help() {
   cat << EOF
Usage:
  ${PROG_NAME} [-e] [<category> ...]
  ${PROG_NAME} -h

Options:
  -e, --exact-version  Only show repositories with ebuilds in the exact
                       installed version. (Hide "[~]" results.)
  -h, --help           Show this help message.

This program checks your installed packages and reports about ebuilds which
exist in several locations (PORTDIR or overlays).  If no <category> parameter
is given, then all installed packages are checked, and otherwise, only the
ones of the specified categories are.

Output is as follows:
| category/package-X.Y:
|   [+] /location/of/an-overlay
|   [+] /location/of/another-overlay
|   [~] /usr/portage
It means that the package was installed from "an-overlay" (first listed), but
also exists in "another-overlay" in the exact same version ("[+]"), and in a
different version ("[~]") in the official Portage tree.  The repository from
where the ebuild has been installed ("an-overlay") could also have been marked
with a "[-]" if there was no more such package there, or "[!]" if it was not
existing at all anymore.
EOF
}

usage_error() {
   cat << EOF >&2
${1}: unknown option. Use --help for help.
EOF
}

while [[ $# -gt 0 ]] ; do
   case ${1} in
      -h|--help) show_help ; exit 0 ;;
      -e|--exact-version) EXACT_ONLY=yes ; shift ;;
      --) shift ; break ;;
      -*) usage_error "${1}" ; exit 2 ;;
      *) break ;;
   esac
done

REPOSITORIES="$(portageq portdir) $(portageq portdir_overlay)"
cd "$(portageq vdb_path)"

unset INSTALLED_PKGS
[[ $# -le 0 ]] && INSTALLED_PKGS=$(ls -d *-*/*-*)
while [[ $# -gt 0 ]] ; do
   INSTALLED_PKGS="${INSTALLED_PKGS} $(ls -d ${1}/*-* 2>/dev/null)"
   shift
done

for pkg in $INSTALLED_PKGS ; do
   envbz="${pkg}/environment.bz2"
   [[ ! -f ${envbz} ]] \
      && echo "${pkg}: can't find 'environment.bz2'. Skipping." >&2 \
      && continue

   ebuild_abspath=$(bzgrep -m1 '^EBUILD=' ${envbz})
   ebuild_abspath="${ebuild_abspath##EBUILD=}"
   [[ -z ${ebuild_abspath} ]] \
      && echo "${pkg}: can't read ebuild path. Skipping." >&2 \
      && continue

   catpkg="${pkg%-[0-9]*}"
   ebuild_relpath="${catpkg}/${ebuild_abspath##*/}"
   install_repo="${ebuild_abspath%%/${catpkg}/*}"

   unset other_output
   for repo in ${REPOSITORIES} ; do
      [[ "${repo}" == "${install_repo}" ]] && continue
      [[ -f "${repo}/${ebuild_relpath}" ]] \
         && other_output="${other_output}\n  [+] ${repo}" \
         && continue
      [[ -z "${EXACT_ONLY}" ]] && [[ -d "${repo}/${catpkg}" ]] \
         && other_output="${other_output}\n  [~] ${repo}"
   done
   [[ -z "${other_output}" ]] && continue

   if [[ -f "${install_repo}/${ebuild_relpath}" ]]; then
      echo -ne "${pkg}:\n  [+] ${install_repo}"
   elif [[ -d "${install_repo}/${catpkg}" ]]; then
      echo -ne "${pkg}:\n  [~] ${install_repo}"
   elif [[ -d "${install_repo}" ]] ; then
      echo -ne "${pkg}:\n  [-] ${install_repo}"
   else
      echo -ne "${pkg}:\n  [!] ${install_repo}"
   fi
   echo -e "${other_output}"
done
Je vous laisse lire le message d'aide au début du script pour les détails, je pense pas qu'il y ait grand chose de subtil à expliquer là dedans.

Après, à l'usage, bah il s'agit juste de regarder la sortie en essayant de se souvenir de pourquoi on a le paquet dans son overlay.
Par exemple...:
% find-duplicate-installed-ebuilds.sh -e
...
app-editors/gvim-6.4:
  [+] /var/portage/overlays/tgl
  [+] /var/portage/tree
...
app-vim/cream-0.34:
  [+] /var/portage/overlays/tgl
  [+] /var/portage/tree
Pour GVim, je sais que c'est en overlay parceque j'applique quelques patchs persos, donc rien à signaler. Par contre, Cream c'était un bump d'ebuild de mon cru, et maintenant qu'il est dans Portage (ouais, c'est /var/portage/tree chez moi au lieu de l'habituel /usr/portage), je pourrais aussi bien le virer de là (ce que je vais faire tout de suite d'ailleurs).

Et puis voilà, c'est tout pour aujourd'hui. Mais j'ai quelques autres oneliners crados qui trainent et qui servent eux aussi à des tâches proches (genre détecter les paquets d'overlay non installés, etc.), donc je collerai ça ici aussi quand j'aurai trouvé le courage d'en faire des scripts ~présentables.
Et si vous avez vous aussi des scripts ou astuces à ce sujet, et bah n'hésitez pas, enfin moi en tout cas ça m'intéresse...

EDIT : s/skip/shift/, merci aux betatesteurs vigilants.


Last edited by TGL on Fri Apr 28, 2006 6:11 pm; edited 1 time in total
Back to top
View user's profile Send private message
truc
Advocate
Advocate


Joined: 25 Jul 2005
Posts: 3199

PostPosted: Sat Apr 22, 2006 8:04 am    Post subject: Reply with quote

Merci beaucoup, ça faisait un moement que je voulais l'essayé.. et finalement c'est fait :) Alors, ça m'a permis de faire le ménage un peu, d'enlever notament des paquets installés par l'overlay de xgl-coffee, et qui était slottés, donc même après avoir viré l'overlay, il restait quelques résidus..

Merci, bon boulot:) j'aurai aimé avoir un commentaire constructif à faire mais j'vois pas..

Ah si, je demande l'authorisation de lui éborgner légèrement son nom, car il commence par find.. ça m'embète un peu.. Na!


EDIT:Juste un question rapide quand même:

Code:
    --) skip ; break ;;
ce skip c'est quoi normalement car, j'ai consciemment essayé du coup et...

Code:
$ find-duplicate-installed-ebuilds --
/home/scripts/find-duplicate-installed-ebuilds: line 47: skip: command not found


:?:
Back to top
View user's profile Send private message
Ey
l33t
l33t


Joined: 07 Apr 2005
Posts: 863
Location: Paris

PostPosted: Sat Apr 22, 2006 12:38 pm    Post subject: Reply with quote

truc wrote:
EDIT:Juste un question rapide quand même:

Code:
    --) skip ; break ;;
ce skip c'est quoi normalement car, j'ai consciemment essayé du coup et...

Code:
$ find-duplicate-installed-ebuilds --
/home/scripts/find-duplicate-installed-ebuilds: line 47: skip: command not found


:?:


Faut le remplacer par un shift sauf erreur de ma part...
le -- c'est pour lui dire que ce qui suit est forcément plus une option, donc tu shift le -- pour passer à l'arg suivant puis le break pour terminer la lecture des options
Back to top
View user's profile Send private message
truc
Advocate
Advocate


Joined: 25 Jul 2005
Posts: 3199

PostPosted: Sat Apr 22, 2006 1:27 pm    Post subject: Reply with quote

ça me semble logique.. merci:) j'n'y avais pas pensé..
Back to top
View user's profile Send private message
PabOu
Veteran
Veteran


Joined: 11 Feb 2004
Posts: 1073
Location: Hélécine - Belgium

PostPosted: Sat Apr 22, 2006 3:24 pm    Post subject: Reply with quote

yop ;)

Chouette script sauf qu'il ne fonctionne pas comme voulu chez moi...

Je lance le script sans lui ajouter de paramètres et voici ce qu'il me sort :
le script de TGL wrote:
root@framboise ~ # ./find-duplicates-installed-ebuilds.sh
app-arch/cpio-2.6-r5:
[+] /usr/portage
[+] /mnt/hdc1/portage
app-arch/gzip-1.3.5-r8:
[+] /usr/portage
[+] /mnt/hdc1/portage
app-crypt/hashalot-0.3-r1:
[~] /usr/portage
[~] /mnt/hdc1/portage
dev-libs/popt-1.7-r1:
[+] /usr/portage
[+] /mnt/hdc1/portage
dev-python/pycrypto-2.0.1-r4:
[+] /usr/portage
[+] /mnt/hdc1/portage
dev-python/python-fchksum-1.7.1:
[+] /usr/portage
[+] /mnt/hdc1/portage
sys-apps/diffutils-2.8.7-r1:
[+] /usr/portage
[+] /mnt/hdc1/portage
sys-apps/hotplug-base-20040401:
[+] /usr/portage
[+] /mnt/hdc1/portage
sys-apps/man-pages-2.17:
[~] /usr/portage
[~] /mnt/hdc1/portage
sys-apps/texinfo-4.8-r3:
[+] /usr/portage
[+] /mnt/hdc1/portage
sys-apps/which-2.16:
[+] /usr/portage
[+] /mnt/hdc1/portage
sys-devel/autoconf-2.13:
[+] /usr/portage
[+] /mnt/hdc1/portage
sys-devel/automake-1.4_p6:
[+] /usr/portage
[+] /mnt/hdc1/portage
sys-devel/automake-1.5:
[+] /usr/portage
[+] /mnt/hdc1/portage
sys-devel/automake-1.6.3:
[+] /usr/portage
[+] /mnt/hdc1/portage
sys-devel/automake-1.7.9-r1:
[+] /usr/portage
[+] /mnt/hdc1/portage
sys-devel/automake-1.8.5-r3:
[+] /usr/portage
[+] /mnt/hdc1/portage
sys-devel/automake-wrapper-1-r1:
[+] /usr/portage
[+] /mnt/hdc1/portage
sys-devel/bc-1.06-r6:
[+] /usr/portage
[+] /mnt/hdc1/portage
sys-devel/bin86-0.16.17:
[+] /usr/portage
[+] /mnt/hdc1/portage
sys-libs/com_err-1.38:
[+] /usr/portage
[+] /mnt/hdc1/portage
sys-libs/pwdb-0.62:
[+] /usr/portage
[+] /mnt/hdc1/portage
sys-libs/ss-1.38:
[+] /usr/portage
[+] /mnt/hdc1/portage
sys-libs/zlib-1.2.3:
[+] /usr/portage
[+] /mnt/hdc1/portage
sys-process/cronbase-0.3.2:
[+] /usr/portage
[+] /mnt/hdc1/portage


Aucun des paquets cités ne se trouve dans mon world.
J'ai beaucoup plus de paquets que ca d'installés ;)
mon /usr/portage est un lien vers /mnt/hdc1/portage
mon make.conf contient ces lignes :
Code:
PORTDIR="/mnt/hdc1/portage"
DISTDIR="/mnt/hdc1/portage-distfiles"
PORTDIR_OVERLAY="/usr/local/portage/overlays/PabOu"


Je n'ai rencontré aucun problème avec emerge et cette configuration

C'est de ma faute ou il n'est pas gentil avec moi le script ? :(
_________________
Mangez du poulet !
Back to top
View user's profile Send private message
truc
Advocate
Advocate


Joined: 25 Jul 2005
Posts: 3199

PostPosted: Sat Apr 22, 2006 9:23 pm    Post subject: Reply with quote

Je ne suis sans doute pas à même de t'aider mais par curiosité, que te renvoient ces commandes:
Code:
portageq portdir
portageq portdir_overlay
portageq vdb_path


Et en fait je me demande, ce /mnt/hdc1/portage, c'est un truc que tu as fais par la suite n'est ce pas? (ça n'a pas toujours été comme ça?) depuis que tu l'as fais je suppose que tu n'as jamais fais de emerge --emptytree ? Je pense que dans ton "vdb_path (souvent /var/db/pkg) tu dois avoir la trace de packets qui ont été installés alors que tu avais encore ton arbre dans /usr/portage.

Relance le script, en ayant supprimer ton lien /usr/portage et dis nous ce que ça te donne.
Back to top
View user's profile Send private message
PabOu
Veteran
Veteran


Joined: 11 Feb 2004
Posts: 1073
Location: Hélécine - Belgium

PostPosted: Mon Apr 24, 2006 8:22 am    Post subject: Reply with quote

truc wrote:
Je ne suis sans doute pas à même de t'aider mais par curiosité, que te renvoient ces commandes:
Code:
portageq portdir
portageq portdir_overlay
portageq vdb_path

Rien d'anormal...
Code:
root@framboise ~ # portageq portdir
/mnt/hdc1/portage
root@framboise ~ # portageq portdir_overlay
/usr/local/portage/overlays/PabOu
root@framboise ~ # portageq vdb_path
/var/db/pkg


truc wrote:
Et en fait je me demande, ce /mnt/hdc1/portage, c'est un truc que tu as fais par la suite n'est ce pas? (ça n'a pas toujours été comme ça?) depuis que tu l'as fais je suppose que tu n'as jamais fais de emerge --emptytree ? Je pense que dans ton "vdb_path (souvent /var/db/pkg) tu dois avoir la trace de packets qui ont été installés alors que tu avais encore ton arbre dans /usr/portage.

Relance le script, en ayant supprimer ton lien /usr/portage et dis nous ce que ça te donne.

Euh, si, ca à toujours été comme ca, depuis l'install. Je n'ai rien emergé avant de déplacer mon PORTDIR. Mais il est vrai que je n'ai jamais fait de emerge -e ... et peut-être que certains paquets qui viennent du stage (stage 3 suivi d'un bootstrap.sh) ont été compilés avec un PORTDIR original (/usr/portage).
Quoiqu'il en soit, j'ai essayé de retirer le lien /usr/portage, et le résultat est presque le même. Ce sont les mêmes paquets mais avec un output différent :
Code:
app-arch/cpio-2.6-r5:
  [!] /usr/portage
  [+] /mnt/hdc1/portage
Et pour deux d'entre eux, c'est encore différent :
Code:
app-crypt/hashalot-0.3-r1:
  [!] /usr/portage
  [~] /mnt/hdc1/portage

J'ai été voir par curiosité dans /var/db/pkg/app-arch/cpio-2.6-r5 et aucun fichier ne contient de référence au PORTDIR (original ou le mien). Cela doit donc venir d'ailleurs.

J'ai une autre question : il est normal d'avoir autant de versions de sys-devl/automake ?
Code:
1.8.5-r3 1.9.6-r2 1.6.3 1.7.9-r1 1.4_p6 1.5

_________________
Mangez du poulet !
Back to top
View user's profile Send private message
truc
Advocate
Advocate


Joined: 25 Jul 2005
Posts: 3199

PostPosted: Fri Apr 28, 2006 9:20 am    Post subject: Reply with quote

PabOu wrote:
J'ai une autre question : il est normal d'avoir autant de versions de sys-devl/automake ?
Code:
1.8.5-r3 1.9.6-r2 1.6.3 1.7.9-r1 1.4_p6 1.5


En attendant que TGL nous vienne en aide.. je peux quand même essayer de répondre à ça.. --> Oui c'est normal, car les differents paquets automake ne sont pas toujours compatible entre eux, et un paquet(un autre) peut demander une version particulière de automake pour pouvoire (être) compile(r).
Back to top
View user's profile Send private message
TGL
Bodhisattva
Bodhisattva


Joined: 02 Jun 2002
Posts: 1978
Location: Rennes, France

PostPosted: Fri Apr 28, 2006 6:10 pm    Post subject: Reply with quote

truc wrote:
En attendant que TGL nous vienne en aide..

Oups, déso pour le silence, je ne découvre qu'aujourd'hui qu'il y a eu des réponses à ce thread. J'ai probablement zappé le mail de notification...

Bref, donc, bon, déjà, merci truc et ey pour le coup du "skip". C'est bien "shift" qu'il faut lire, je vais corriger de ce pas (et me flageller un peu pour avoir zappé les tests unitaires sur le parsing des options... non mais franchement, la qualité logicielle c'est plus ce que c'était...)

@PabOu : je pense effectivement que les /usr/portage viennent de paquets du stage3, qui n'ont jamais été écrasés par des versions installées depuis ton /mnt/hdc1/portage. Enfin je peux me gourrer, mais si tu n'as pas trouvé de référence à /usr/portage dans la VDB, c'est à mon avis simplement parcequ'elles sont cachées dans les fichiers "environment.bz2" des paquets, donc hors de portée d'un simple grep. Essaye plutôt voir ça :
Code:
% bzgrep "^PORTDIR" /var/db/pkg/app-arch/cpio-2.6-r5/environment.bz2
Si c'est bien le cas, alors les deux sorties que tu obtiens sont normales, quoi que effectivement pas très utiles... :
- avec le symlink, on a 2 fois des "[+]", parcequ'on trouve 2 ebuilds, via des chemins différents. Bon, ok, dans ce cas précis on pourrait envisager un truc avec realpath pour détecter que c'est en fait un seul et même fichier, mais la flemme...
- sans le symlink, on détecte que le paquet a été installé depuis un repository qui n'existe plus, d'où le "[!]". Là encore, dans ton cas c'est pas terrible... Perso j'envisageais plus cette indication pour repérer des paquets qui ont été installés, par exemple, depuis un overlay qu'on a ensuite décidé de virer (et que donc on peut avoir envie de réinstaller depuis l'arbre officiel, histoire de revenir à un truc propre). Mais je vois pas comment éviter du coup que ça fasse des fausses alertes dans ton cas... Si vraiment ça te dérange, tu es bon pour réinstaller les qlqs paquets concernés, comme ça il n'y aura plus aucun /usr/portage dans ta VDB :)

truc wrote:
Oui c'est normal, car les differents paquets automake ne sont pas toujours compatible entre eux, et un paquet(un autre) peut demander une version particulière de automake pour pouvoire (être) compile(r).

Et bah voilà, pas mieux, tout est dit. ;)
Back to top
View user's profile Send private message
PabOu
Veteran
Veteran


Joined: 11 Feb 2004
Posts: 1073
Location: Hélécine - Belgium

PostPosted: Fri Apr 28, 2006 6:29 pm    Post subject: Reply with quote

Effectivement, c'est caché dans le fichier .bz2

Ca ne me dérange pas que ce soit installé à partir de /usr/portage, par contre, ca me dérange que ca n'ait pas été recompilé avec MES options. je vais donc me faire un emerge world -e ..


edit: truc, oui, je comprends mieux, j'avais juste zappé le fait que c'était slotté (je sais pas pourquoi, avec le emerge -Cpv j'ai du penser que ca affichait les slots si c'était avec des ebuilds slottés.. mais en fait non).

Merci à vous pour les réponses, et encore bravo pour le script.
_________________
Mangez du poulet !
Back to top
View user's profile Send private message
TGL
Bodhisattva
Bodhisattva


Joined: 02 Jun 2002
Posts: 1978
Location: Rennes, France

PostPosted: Fri Apr 28, 2006 6:49 pm    Post subject: Reply with quote

PabOu wrote:
ca me dérange que ca n'ait pas été recompilé avec MES options. je vais donc me faire un emerge world -e ..

Bof, un "-e world" juste pour ça, faut avoir du temps CPU à perdre à mon avis :
- pour les trucs compilés avec les mauvais USE flags, "emerge -N" fait déjà des merveilles.
- pour les trucs compilés avec les mauvais {C,CXX,LD}FLAGS, il est assez possible de les repérer dans cette VDB dont tu viens de découvrir les secrets, et donc de ne recompiler que ceux là. Je pense qu'il y a déjà des scripts tout prêts pour ça qui trainent, ou sinon au pire ça n'est vraiment pas bien dur à faire (hésite pas à ouvrir un topic sur le sujet si tu ne t'en tires pas tout seul).
Back to top
View user's profile Send private message
PabOu
Veteran
Veteran


Joined: 11 Feb 2004
Posts: 1073
Location: Hélécine - Belgium

PostPosted: Fri Apr 28, 2006 7:18 pm    Post subject: Reply with quote

Je préfère un -e world, pour être sur que les applications qui les ont en dépendance vont en profiter. Et puis ce n'est pas sur ma station de travail, donc si ca utilise du CPU (avec un nice à 15), je ne le remarquerai pas.
Pour les useflags, j'utilise toujours le -N (et le -D) à chaque mise à jour, donc j'ai tout bon de ce coté.

Pour les autres (les flags), je n'ai vraiment rien emergé avant de déplacer mon /usr/portage et de modifier mon make.conf. Il me suffit donc de regarder la liste donnée par ton script, et de faire un emerge -1. Non ? De toute façon, mon emerge -e world est déjà lancé.
_________________
Mangez du poulet !
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum