# [portage] downgrade "cavalier" de 2.2 à 1.6

## xaviermiller

Hello,

Ce matin, voulant faire un "emerge -DuNav @world @system", je reçois un message d'injure comme quoi "@world" n'est par reconnu.

En effet, portage 2.2 a été masqué, et je suis donc retourné sur la version 2.1.6

Vu dans /usr/portage/profiles/package.mask

```
# Zac Medico <zmedico@gentoo.org> (24 Nov 2008)

# In order to ensure that portage-2.1.6 gets sufficient testing,

# portage-2.2 will be masked in package.mask until portage-2.1.6 has

# been marked stable. If you would like to continue using portage-2.2

# then you should unmask it (instead of downgrading to portage-2.1.6).

>=sys-apps/portage-2.2_pre

```

Et je ne me souviens pas d'avoir vu cette info sur le planet ou ailleurs.

Je trouve cette attitude de pousser tout le monde vers une version ancienne "juste pour faire tester plus de monde" pour le moins cavalière.

J'aime bien le "--keepgoing" et niveau développement, s'ils maintiennent 2 branches, c'est leur problème, pas celui des utilisateurs...

Ou alors je suis un vieux grincheux ?

----------

## xaviermiller

Réponse ici.

Leur argument "ouais, en fait la RC de la 2.2 est une 2.1 qui doit être masquée" ne tient pas la route à partir du moment où elle a déjà été démasquée pendant plusieurs semaines (mois ?) avec succès.

Je vais aller bouder dans mon coin. Ca tombe bien, je dois de toutes façons faire des courses...

----------

## guilc

Bah moi j'ai gardé la 2.2. Effectivement, j'ai un peu tiré la gueule quand j'ai vu ça en début de semaine alors que j'utilise la 2.2 depuis le 20 juin (emerge.log faisant foi)

En plus, si on utilise l'EAPI=2 (largement utilisé dans certains overlays) le downgrade, c'est même pas en rêve, a moins de vouloir tout péter.

Pareil, pour les sets, @preserved-rebuild (qui entre parenthèse a demandé de faire un emerge -e world pour être pleinement fonctionnel ! je le referai pas une deuxième fois !) entres autres.

Oui, sur ce coup la, ils ont été franchement maladroits, et le downgrade fait un sacré retour en arrière.

D'autant plus que la justification est une MAUVAISE raison : "bah en fait on downgrade pour que tout le monde teste en vue de la stabilisation, tant pis si on fait chier le monde". Si au moins c'était parceque la 2.2 avait des problèmes critiques à corriger, mais non, même pas !

----------

## ppg

Ah je viens de remarquer aussi, c'est chiant va falloir que j'abandonne les sets que je fais et tout…

Non mais pas en rêve, ça fait plusieurs mois que je l'utilise ce portage 2.2 et c'est très stable, pas de problèmes grave (même pas le e2fs qui faisait peur…).

En plus c'est hardmask, alors là c'est vraiment pas cool.

Je resterai sur la version 2.2 de portage…

----------

## netfab

 *guilc wrote:*   

> 
> 
> En plus, si on utilise l'EAPI=2 (largement utilisé dans certains overlays) le downgrade, c'est même pas en rêve, a moins de vouloir tout péter.
> 
> 

 

La 2.1.6 utilise l'EAPI 2 aussi :

 *Quote:*   

> 
> 
> $ grep EAPI /usr/lib/portage/pym/portage/const.py
> 
> EAPI = 2
> ...

 

Donc il ne doit pas y avoir tant de différence, preserved-libs et les sets comme indiqué dans le changelog.

Quelqu'un voit une autre différence ? aucune idée, pas testé la 2.2.

Edit : le --keep-going est présent aussi.

 *Quote:*   

> Pareil, pour les sets, @preserved-rebuild (qui entre parenthèse a demandé de faire un emerge -e world pour être pleinement fonctionnel ! je le referai pas une deuxième fois !) entres autres. 

 

Quel rapport entre un emerge -e world et cette feature ? (véritable question)

----------

## guilc

 *netfab wrote:*   

> 
> 
>  *Quote:*   Pareil, pour les sets, @preserved-rebuild (qui entre parenthèse a demandé de faire un emerge -e world pour être pleinement fonctionnel ! je le referai pas une deuxième fois !) entres autres.  
> 
> Quel rapport entre un emerge -e world et cette feature ? (véritable question)

 

Cette feature demande l'ajout d'infos dans /var/db/pkg pour fonctionner correctement (les fichiers "NEEDED" de mémoire qui contiennent en gros une arbre de dépendances binaires de chaque fichier du package).

La seule façon d'ajouter ces infos est de tout recompiler avec portage 2.2 (c'est d'ailleurs indiqué dans les notes d'upgrade 2.1 -> 2.2)

----------

## geekounet

 *guilc wrote:*   

>  *netfab wrote:*   
> 
>  *Quote:*   Pareil, pour les sets, @preserved-rebuild (qui entre parenthèse a demandé de faire un emerge -e world pour être pleinement fonctionnel ! je le referai pas une deuxième fois !) entres autres.  
> 
> Quel rapport entre un emerge -e world et cette feature ? (véritable question) 
> ...

 

Ces infos étaient déjà ajoutées depuis Portage 2.1.3, bien qu'elles ne sont utilisées que depuis Portage 2.2, il faut donc faire le emerge -e @system @world seulement si tu as eu une version de Portage inférieure à la 2.1.3 à un moment donné.  :Smile: 

cf. http://dev.gentoo.org/~genone/docs/portage-2.2-upgrade-doc

----------

## Link31

 *geekounet wrote:*   

> Ces infos étaient déjà ajoutées depuis Portage 2.1.3, bien qu'elles ne sont utilisées que depuis Portage 2.2, il faut donc faire le emerge -e @system @world seulement si tu as eu une version de Portage inférieure à la 2.1.3 à un moment donné. 
> 
> cf. http://dev.gentoo.org/~genone/docs/portage-2.2-upgrade-doc

 

J'ai utilisé une version 2.1.2.12 pendant à peu près deux semaines après mon installation de Gentoo. Pas mal de choses ont dû être recompilées depuis, mais peut-être pas tout. Pourtant j'ai des fichiers NEEDED dans /var/db/pkg pour tous les paquets, sauf ceux qui ne contiennent que des données, man-pages ou kdebase-data par exemple. Le emerge -e world reste-t-il vraiment nécessaire ou pas ? (évidemment je préférerais éviter  :Razz: ).

----------

## netfab

 *Quote:*   

> 
> 
> J'ai utilisé une version 2.1.2.12 pendant à peu près deux semaines après mon installation de Gentoo. Pas mal de choses ont dû être recompilées depuis, mais peut-être pas tout. Pourtant j'ai des fichiers NEEDED dans /var/db/pkg pour tous les paquets, sauf ceux qui ne contiennent que des données, man-pages ou kdebase-data par exemple. Le emerge -e world reste-t-il vraiment nécessaire ou pas ? (évidemment je préférerais éviter ).
> 
> 

 

A mon avis, çà ne vaut pas le coup.

J'ai parcouru un peu le code de portage, voici ce que j'ai trouvé :

```

def rebuild(self, exclude_pkgs=None, include_file=None):

      """

      Raises CommandNotFound if there are preserved libs

      and the scanelf binary is not available.

      """

      root = self._root

      root_len = len(root) - 1

        

        [...]

        # Cache NEEDED.* files avoid doing excessive IO for every rebuild.

      self._dbapi.flush_cache()

           # have to call scanelf for preserved libs here as they aren't     <--------------------------------

      # registered in NEEDED.ELF.2 files                                     <--------------------------------

           if self._dbapi.plib_registry and self._dbapi.plib_registry.getPreservedLibs():

         args = ["/usr/bin/scanelf", "-qF", "%a;%F;%S;%r;%n"]

         for items in self._dbapi.plib_registry.getPreservedLibs().values():

            args.extend(os.path.join(root, x.lstrip("." + os.sep)) \

               for x in items)

         try:

            proc = subprocess.Popen(args, stdout=subprocess.PIPE)

         except EnvironmentError, e:

            if e.errno != errno.ENOENT:

               raise

            raise CommandNotFound(args[0])

         else:

```

Donc à mon avis, même si ce fichier NEEDED.ELF.2 manque, portage va chercher les infos en direct.

Et de toute façon, même si ce n'est pas le cas, emerge ne va pas planter pour si peu, ou alors c'est un bug.

Dans le pire des cas, si un jour tu tombes sur un paquet qui est inutilisable avec la feature preserved-libs, tout ce qu'il peut arriver c'est que lorsque tu lances un programme tu obtiennes une erreur dans le genre :

 *Quote:*   

> 
> 
> foobar{.so}: cannot load shared object file: No such file or directory
> 
> 

 

C'est le comportement actuel, et dans ce cas, un bon vieux revdep-rebuild réglera le problème définitivement pour ce paquet.

----------

## Link31

 *netfab wrote:*   

> Et de toute façon, même si ce n'est pas le cas, emerge ne va pas planter pour si peu, ou alors c'est un bug.
> 
> Dans le pire des cas, si un jour tu tombes sur un paquet qui est inutilisable avec la feature preserved-libs, tout ce qu'il peut arriver c'est que lorsque tu lances un programme tu obtiennes une erreur dans le genre :
> 
>  *Quote:*   
> ...

 

Oui, bien sûr. Mais je préférerais être sûr d'avoir un portage qui fonctionne à 100%, et pas dont certaines fonctionnalités ne fonctionnent que pour certains paquets. Surtout que justement l'intérêt de cette fonctionnalité c'est d'éviter le revdep-rebuild et les cassages de biliothèques (j'ai un module pam qui a cassé temporairement hier à cause d'un depclean, ça stresse un peu de voir la commande su renvoyer un segfault parce que le module ne veut pas se charger  :Razz: ).

Enfin je vais tout laisser dans son état actuel, après tout ça marche plutôt bien et la fonctionnalité en question n'est pas vraiment vitale...

Mais ça m'étonne que portage re-scanne automatiquement les binaires, ce n'était pourtant pas indiqué dans le guide de mise à jour posté par geekounet.

----------

## netfab

 *Quote:*   

> 
> 
> Mais ça m'étonne que portage re-scanne automatiquement les binaires, ce n'était pourtant pas indiqué dans le guide de mise à jour posté par geekounet.
> 
> 

 

Oui, tu dois avoir raison, probablement que ce scanelf est utilisé lors de l'installation d'un paquet, ce qui parait plus logique.

D'ailleurs, voici ce qu'on peut lire dans l'ebuild de portage 2.2 :

```

   if [ $NEEDED_REBUILD_UPGRADE = 0 ] ; then

      einfo "rebuilding NEEDED.ELF.2 files"   <---------------------------------

      for cpv in "${ROOT}/var/db/pkg"/*/*; do

         if [ -f "${cpv}/NEEDED" ]; then

            rm -f "${cpv}/NEEDED.ELF.2"

            while read line; do

               filename=${line% *}

               needed=${line#* }

               needed=${needed//+/++}

               needed=${needed//#/##}

               needed=${needed//%/%%}

               newline=$(scanelf -BF "%a;%F;%S;%r;${needed}" $filename)

               newline=${newline//  -  }

               echo "${newline:3}" >> "${cpv}/NEEDED.ELF.2"

            done < "${cpv}/NEEDED"

         fi

      done

   fi

   elog

   elog "For help with using portage please consult the Gentoo Handbook"

   elog "at http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=3"

   elog

   if [ $MINOR_UPGRADE = 0 ] ; then

      elog "If you're upgrading from a pre-2.2 version of portage you might"

      elog "want to remerge world (emerge -e world) to take full advantage"

      elog "of some of the new features in 2.2."

      elog "This is not required however for portage to function properly."    <-----------------------------

      elog

   fi

```

Les fichiers NEEDED.ELF.2 sont générés à l'installation de portage 2.2.

Dans ce cas, je ne vois pas ce qui peut justifier la recompilation complète du système, il m'en faudra un peu plus pour le faire.

----------

