# [SCRIPT] gentoocutleaves nettoyage de printemps

## Bapt

Voici un petit script (crade) pour obtenir les même fonctionnalité sous gentoo que "pkgcut_leaves -l" sous FreeBSD c'est à dire :

Lister les packages dont aucun autre ne dépend indépendemment de world, prennant en compte les world, et les packages "system".

L'intérêt : visualiser les paquets "finaux" donc ceux que l'on utilise et pouvoir supprimer ceux qui sont inutiles (lib dont plus personne ne dépend, etc.". Ca nécessite portage-utils.

Il n'est pas parfait, néanmoins il m'a permis pas mal de nettoyage :

```

#!/bin/sh

base="$(grep -v ^# /usr/portage/profiles/base/packages | grep -v ^$ | awk -F/ '{ print $2 }' | xargs echo)"

baselinux="$(grep -v ^# /etc/make.profile/../../packages | grep -v ^$ | awk -F/ '{ print $2 }' | xargs echo)"

basearch="$(grep -v ^# /etc/make.profile/../packages | grep -v ^$ | awk -F/ '{ print $2 }' | xargs echo)"

base="$base $baselinux $basearch"

for pkg in $(qlist -IC);do

  if [ $(qdepends -q -C -Q $pkg -a | grep -v DEPEND | wc -l) -eq 0 ];then

    pkg_name=$(echo $pkg | awk -F/ '{ print $2 }')

    virt=""

    virt=$(grep virtual /var/db/pkg/$pkg*/PROVIDE 2>/dev/null| awk -F/ '{ print $2 }')

    virtual_found=0

    if [ "$virt" != "" ];then

      if [ $(qdepends -q -C -Q virtual/$virt -a | grep -v DEPEND | wc -l) -gt 0 ];then

      #if [ $(equery -q depends $virt | wc -l) -gt 0 ];then

        virtual_found=1

      fi

      pkg_name=$virt

    fi

    if [ $virtual_found -ne 1 ];then

      found=0

      for base_pkg in $base;do

        if [ "$pkg_name" = "$base_pkg" ];then

          found=1

        fi

      done

      if [ $found -eq 0 ];then

        echo $pkg

      fi

    fi

  fi

done

```

Le code peut très largement être optimisé  :Smile: 

Pour l'utiliser : 

#./gentoocutleaves 

C'est tout

----------

## bouleetbil

Bonsoir,

Je viens d'essayer ton script il est sympa et très utile, mais il manque peut-être la version :

```

sys-kernel/suspend2-sources

sys-kernel/suspend2-sources

sys-kernel/suspend2-sources

sys-kernel/suspend2-sources

sys-kernel/suspend2-sources

sys-kernel/suspend2-sources

```

----------

## Bapt

C'est fait, en fait je ne fait pas apparaître la version , mais la version du slot quand le package peut avoir plusieurs slots :

```
#!/bin/sh

base="$(grep -v ^# /usr/portage/profiles/base/packages | grep -v ^$ | awk -F/ '{ print $2 }' | xargs echo)"

baselinux="$(grep -v ^# /etc/make.profile/../../packages | grep -v ^$ | awk -F/ '{ print $2 }' | xargs echo)"

basearch="$(grep -v ^# /etc/make.profile/../packages | grep -v ^$ | awk -F/ '{ print $2 }' | xargs echo)"

base="$base $baselinux $basearch"

qlist -ICS | while read pkgname pkgversion;do

  if [ $(qdepends -q -C -Q $pkgname -a | grep -v DEPEND | wc -l) -eq 0 ];then

    pkg_name=$(echo $pkgname | awk -F/ '{ print $2 }')

    virt=""

    virt=$(grep virtual /var/db/pkg/$pkgname*/PROVIDE 2>/dev/null| awk -F/ '{ print $2 }')

    virtual_found=0

    if [ "$virt" != "" ];then

      if [ $(qdepends -q -C -Q virtual/$virt -a | grep -v DEPEND | wc -l) -gt 0 ];then

      #if [ $(equery -q depends $virt | wc -l) -gt 0 ];then

        virtual_found=1

      fi

      pkg_name=$virt

    fi

    if [ $virtual_found -ne 1 ];then

      found=0

      for base_pkg in $base;do

        if [ "$pkg_name" = "$base_pkg" ];then

          found=1

        fi

      done

      if [ $found -eq 0 ];then

        if [ "$pkgversion" = "0" ];then

          echo $pkgname

        else

          echo $pkgname $pkgversion

        fi

      fi

    fi

  fi

done

```

----------

## bouleetbil

Salut,

Je viens d'essayer la dernière version, merci cela fonctionne bien et du coup j'ai supprimé des paquets obsolètes   :Laughing: 

----------

## truc

euh, quelqu'un peut m'expliquer ça /etc/make.profile/../../packages comprends pas, ça nous donne /packages :O pourtant y'en a pas de tel fichiers et ça marche :S moi pas comprendre !

----------

## Bapt

 *truc wrote:*   

> euh, quelqu'un peut m'expliquer ça /etc/make.profile/../../packages comprends pas, ça nous donne /packages :O pourtant y'en a pas de tel fichiers et ça marche :S moi pas comprendre !

 

Sauf que make.profile est un lien symbolique vers /usr/portage/profile/...../2006.0 par exemple.

J'utilise make.profile comme ça je suis sûr d'arriver à l'arbo profile même si l'utilisateur change l'emplacement pour portage dans un autre rep que /usr/portage.

----------

## truc

arf, ok merci, j'avais pas pensé à ça   :Rolling Eyes: 

----------

## PabOu

 *baptux wrote:*   

> Voici un petit script (crade) pour obtenir les même fonctionnalité sous gentoo que "pkgcut_leaves -l" sous FreeBSD c'est à dire :
> 
> Lister les packages dont aucun autre ne dépend indépendemment de world, prennant en compte les world, et les packages "system".
> 
> L'intérêt : visualiser les paquets "finaux" donc ceux que l'on utilise et pouvoir supprimer ceux qui sont inutiles (lib dont plus personne ne dépend, etc.".

 

Si j'ai bien compris, ca liste les ebuilds que tu as installé, et seulement ceux qui n'ont aucune dépendance inverse ?

----------

## Magic Banana

Il me semble au contraire que ce script liste les packages n'ayant pas de dépendance.

----------

## Bapt

 *Magic Banana wrote:*   

> Il me semble au contraire que ce script liste les packages n'ayant pas de dépendance.

 

Non c'est PabOu qui a raison ça liste les paquets dont aucun autre ne dépend, ainsi on ne doit voir dans la liste que les paquets dont on sait pourquoi ils sont installés, les autres peuvent être désinstallés (avec précaution tout de même).

----------

## novazur

Je ne voudrais pas dire une bêtise, mais théoriquement, sur un système des plus propres, ça devrait correspondre au fichier world non ?

----------

## BuBuaBu

 *novazur wrote:*   

> Je ne voudrais pas dire une bêtise, mais théoriquement, sur un système des plus propres, ça devrait correspondre au fichier world non ?

 

il peu arriver que l'on install un truc qui devient une dépendance lors d'un autre emerge.

----------

## novazur

 *BuBuaBu wrote:*   

>  *novazur wrote:*   Je ne voudrais pas dire une bêtise, mais théoriquement, sur un système des plus propres, ça devrait correspondre au fichier world non ? 
> 
> il peu arriver que l'on install un truc qui devient une dépendance lors d'un autre emerge.

 

C'est vrai, c'est pour ça que je parlais de système "propre".

----------

