Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[SCRIPT] Démasquer les paquets via emerge
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
bouleetbil
Guru
Guru


Joined: 06 Jul 2004
Posts: 456
Location: Montpellier

PostPosted: Sat Oct 14, 2006 7:56 pm    Post subject: [SCRIPT] Démasquer les paquets via emerge Reply with quote

Depuis quelques temps j'en avais marre de modifier mes fichiers package.keywords et package.unmask, j'ai donc modifier emerge pour qu'il modifie ces fichiers à ma place et qu'il démasque les ebuilds nécessaires lorsque je veux démasquer un paquet qui a beaucoup de dépendances ou lors des mises à jour. (Je suis en x86 avec des paquets ~x86 et à chaque fois je dois modifier ces fichiers)

Attention l'indentation est importante!!!
Faite une sauvegarde avant de ce fichier :lol:
Editer le fichier /usr/bin/emerge :
Le code d'origine
Code:

                     for p in alleb:
                        mreasons = portage.getmaskingstatus(p,
                           settings=pkgsettings, portdb=portdb)
                        print "- "+p+" (masked by: "+string.join(mreasons, ", ")+")"
                        comment = portage.getmaskingreason(p,
                           settings=pkgsettings, portdb=portdb)
                        if comment and comment != oldcomment:
                           print comment
                           oldcomment = comment
                     print
                     print "For more information, see MASKED PACKAGES section in the emerge man page or "
                     print "refer to the Gentoo Handbook."
                  else:
                     print "\n!!! "+red("There are no packages available to satisfy: ")+green(xinfo)
                     print "!!! Either add a suitable binary package or compile from an ebuild."
               else:

Mes modifications :
Code:

                     last_packet=""
                     for p in alleb:
                        mreasons = portage.getmaskingstatus(p,
                           settings=pkgsettings, portdb=portdb)
                        print "- "+p+" (masked by: "+string.join(mreasons, ", ")+")"
                        #hack
                        last_packet=p
                        comment = portage.getmaskingreason(p,
                           settings=pkgsettings, portdb=portdb)
                        if comment and comment != oldcomment:
                           print comment
                           oldcomment = comment
                     print
                     print "For more information, see MASKED PACKAGES section in the emerge man page or "
                     print "refer to the Gentoo Handbook."
                     print "Demasquer le paquet "+last_packet+" ? "
                     Reponse=raw_input('(Oui/Non)')
                     if string.upper(Reponse) == "OUI":
                        #modification package.keywords
                        print "Mise a jour package.keywords"
                        fichero = open("/etc/portage/package.keywords", 'a')
                        packet = "="+last_packet+" ~x86\n"
                        fichero.write("#Ajout par hack emerge\n")
                        fichero.write(packet)
                        fichero.flush()
                        fichero.close()
                        #Modification package.unmask
                        print "Mise a jour package.unmask"
                        fichero = open("/etc/portage/package.unmask", 'a')
                        packet = "="+last_packet+"\n"
                        fichero.write("#Ajout par hack emerge\n")
                        fichero.write(packet)
                        fichero.flush()
                        fichero.close()
                        emerge_main()
                        #relance emerge pour dépendance du fichier démasqué
                  else:
                     print "\n!!! "+red("There are no packages available to satisfy: ")+green(xinfo)
                     print "!!! Either add a suitable binary package or compile from an ebuild."
               else:

Il suffit de modifier "~x86" à la ligne
Code:
 packet = "="+last_packet+" ~x86\n"
par votre plateforme
_________________
L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php
Back to top
View user's profile Send private message
man in the hill
Veteran
Veteran


Joined: 15 Dec 2005
Posts: 1551
Location: Madinina

PostPosted: Sun Oct 15, 2006 6:12 pm    Post subject: Reply with quote

Salut,


Vraiment sympa ton hack :wink: mais est-ce que ce fichier n'est pas écraser à chaque emerge de portage ?

Pour une fois j'arrive à capter python :D , moi c'est clair que c'est la 2ème section (ajout ds unmask) qui m'intéresse en ~amd64 et il faudrait pour les amd64 une section pour le missing keyword ...


Sinon, super idée ! As-tu proposé aux dev ?


Merci,


@ +
_________________
Get Up and Go !
Back to top
View user's profile Send private message
bouleetbil
Guru
Guru


Joined: 06 Jul 2004
Posts: 456
Location: Montpellier

PostPosted: Sun Oct 15, 2006 8:08 pm    Post subject: Reply with quote

bonsoir,
si à chaque emerge de portage il faut refaire la modification. J'ai pas proposé aux dev car il faudrait un peu plus l'améliorer comme recupérer le ACCEPT_KEYWORDS au lieu de le renseigner dans le script. Je vais voire cela apres je leur posterais au pire je ferrais la modif a chaque mise à jour de portage :lol:
_________________
L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php
Back to top
View user's profile Send private message
bivittatus
l33t
l33t


Joined: 31 Jan 2006
Posts: 687
Location: Roissy-en-Brie (France)

PostPosted: Sat Nov 04, 2006 3:10 pm    Post subject: Reply with quote

Salut!

Avant de tester ce script (superbe!!!:lol:), j'aimerais un ou deux petits renseignements, sachant que la réponse doit se trouver dans ton code, mais je n'y connais pas grand chose!!! :oops:

- Si tu as plusieurs paquets à démasquer (par exemple pour une install de gnome en ~x86, tu dois avoir une vingtane de paquets à te taper!!! :? ), à partir du moment où tu lui réponds "oui", il les démasque tous?

- Est-ce que la ligne insérée dans le fichier cible est du type:
Code:
=nom_du_paquet-version ~x86"

ou bien:
Code:
nom_du_paquet ~x86

?

Merci :wink:
_________________
Linus TORVALDS: "Je ne suis pas là pour détruire Microsoft. Ce sera juste un effet secondaire tout à fait involontaire."
Back to top
View user's profile Send private message
bouleetbil
Guru
Guru


Joined: 06 Jul 2004
Posts: 456
Location: Montpellier

PostPosted: Sat Nov 04, 2006 11:08 pm    Post subject: Reply with quote

Bonjour,
Il faut répondre "oui" pour chaque paquet.
Et dans les fichiers cibles c'est inséré de la forme
Code:

=nom_du_paquet-version ~x86"

_________________
L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php
Back to top
View user's profile Send private message
bivittatus
l33t
l33t


Joined: 31 Jan 2006
Posts: 687
Location: Roissy-en-Brie (France)

PostPosted: Sat Nov 04, 2006 11:13 pm    Post subject: Reply with quote

Merci pour ta réponse rapide!!! :wink:

Ce n'est peut-être pas faisable, mais comme je n'y connais rien...:lol:

Il n'y a pas la possibilité d'écrire sous la forme:

Code:
nom_du_paquet ~x86
?

C'est une simple question de flemme de ma part...une fois que le nom du paquet est dans le package.keywords, il y est une bonne fois pour toutes!!! Mais...je suppose que l'extraction du nom seul est quelque chose de difficilement réalisable? :oops:

M'enfin, en tout cas, le principe est génial, et je pense que je vais l'adopter!!!:wink:
_________________
Linus TORVALDS: "Je ne suis pas là pour détruire Microsoft. Ce sera juste un effet secondaire tout à fait involontaire."
Back to top
View user's profile Send private message
titoucha
Advocate
Advocate


Joined: 21 Jul 2005
Posts: 2374
Location: Genève

PostPosted: Sun Nov 05, 2006 4:22 am    Post subject: Reply with quote

J'aurais une suggestion, se serait bien que ton script n'écrive pas obligatoirement dans le fichier unmask mais seulement quand il y en a besoin ou mieux sur demande explicite, car il va vite devenir très gros inutilement et en plus je trouve dangereux de démasqué automatiquement, passer en testing oui, mais démasqué non.
Back to top
View user's profile Send private message
bouleetbil
Guru
Guru


Joined: 06 Jul 2004
Posts: 456
Location: Montpellier

PostPosted: Sun Nov 05, 2006 10:45 am    Post subject: Reply with quote

@bivittatus : En faite si on ecrit
Code:
nom_du_paquet ~x86
on a vite fait de passer en full testing tant dit qu'indiquer la version permet de démasquer le strict minimum.
Et oui avec un booleen on pourrait garder en mémoire le fait que l'on a répondu "oui" mais on peux démasquer beaucoup de paquets. Mais c'est faisable je vais voir pour l'ajouter.

@titoucha pour le moment je sais pas si le paquet est hardmask donc c'est vrai que j'écris pour rien dans package.unmask je savais que j'aurrais la remarque :oops: (je vais voir si je peux savoir si le paquet est hardmak)
_________________
L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php
Back to top
View user's profile Send private message
bivittatus
l33t
l33t


Joined: 31 Jan 2006
Posts: 687
Location: Roissy-en-Brie (France)

PostPosted: Sun Nov 05, 2006 10:47 am    Post subject: Reply with quote

bouleetbil wrote:
@bivittatus : En faite si on ecrit
Code:
nom_du_paquet ~x86
on a vite fait de passer en full testing tant dit qu'indiquer la version permet de démasquer le strict minimum.
Et oui avec un booleen on pourrait garder en mémoire le fait que l'on a répondu "oui" mais on peux démasquer beaucoup de paquets. Mais c'est faisable je vais voir pour l'ajouter.

Je sais oui;..mais c'est la méthode que j'utilise... :oops:

En tout cas, c'est franchement super sympa de ta part...:wink:
_________________
Linus TORVALDS: "Je ne suis pas là pour détruire Microsoft. Ce sera juste un effet secondaire tout à fait involontaire."
Back to top
View user's profile Send private message
titoucha
Advocate
Advocate


Joined: 21 Jul 2005
Posts: 2374
Location: Genève

PostPosted: Sun Nov 05, 2006 10:53 am    Post subject: Reply with quote

Ce qui me dérange le plus avec l’hardmasked, c'est que ces derniers temps j'ai eu plusieurs paquets qui ont été downgradés, car la dernière version avait un bogue et les développeurs l'avaient masquée le temps de trouver celui-ci.

Avec ta méthode, vu que le paquet est aussi démasqué il n'aurait pas été mis à jour et le bogue serait resté.

Je pense que le fait de démasquer n'est pas une bonne idée et qu'il faudrait simplement écrire dans le fichier keyword.
Back to top
View user's profile Send private message
bouleetbil
Guru
Guru


Joined: 06 Jul 2004
Posts: 456
Location: Montpellier

PostPosted: Sun Nov 05, 2006 11:35 am    Post subject: Reply with quote

Cela n'aurrait rien changé à ton problème car en faite cela demasque les dépendances peux importe qu'elles soient testing ou hardmask mais si une version stable est disponible la version stable est prise en compte de plus la version est précisée, donc le downgrade fonctionne. Maintenant le problème est d'écrire dans portage.unmask alors que c'est pas utile.
_________________
L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php
Back to top
View user's profile Send private message
titoucha
Advocate
Advocate


Joined: 21 Jul 2005
Posts: 2374
Location: Genève

PostPosted: Sun Nov 05, 2006 11:54 am    Post subject: Reply with quote

Heu tu es sur, car si ton paquet est en testing non masqué et que toi tu écris dans keyword et unmask, quand le paquet vient en testing et masqué rien ne change pour emerge vu que tu la démasqué précédemment et donc emerge ne va rien faire.

Le fait de mettre la version ne change rien, vu que le paquet ne disparait pas de l'arbre, mais est seulement masqué.

Enfin bon c'est comme ça que je comprends la chose. :)
Back to top
View user's profile Send private message
bouleetbil
Guru
Guru


Joined: 06 Jul 2004
Posts: 456
Location: Montpellier

PostPosted: Sun Nov 05, 2006 12:02 pm    Post subject: Reply with quote

oui en effet dans ce cas y a un problème. J'avais pas compris.
_________________
L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php
Back to top
View user's profile Send private message
titoucha
Advocate
Advocate


Joined: 21 Jul 2005
Posts: 2374
Location: Genève

PostPosted: Sun Nov 05, 2006 5:29 pm    Post subject: Reply with quote

Je suis rassuré, j'ai quand même compris un petit peu emerge :lol:
Back to top
View user's profile Send private message
bouleetbil
Guru
Guru


Joined: 06 Jul 2004
Posts: 456
Location: Montpellier

PostPosted: Mon Nov 06, 2006 9:24 pm    Post subject: Reply with quote

Voici la derniere version qui ne demasque que les versions testing :
Code:

if "--usepkgonly" not in self.myopts:
                     print "\n!!! "+red("All ebuilds that could satisfy ")+green(xinfo)+red(" have been masked.")
                     print "!!! One of the following masked packages is required to complete your request:"
                     oldcomment = ""
                     #hack
                     last_packet=""
                     for p in alleb:
                        mreasons = portage.getmaskingstatus(p,
                           settings=pkgsettings, portdb=portdb)
                        print "- "+p+" (masked by: "+string.join(mreasons, ", ")+")"
                        #hack
                        result=str(mreasons)
                        if result.find("~")!= -1:
                           last_packet=p
                        comment = portage.getmaskingreason(p,
                           settings=pkgsettings, portdb=portdb)
                        if comment and comment != oldcomment:
                           print comment
                           oldcomment = comment
                     print
                     print "For more information, see MASKED PACKAGES section in the emerge man page or "
                     print "refer to the Gentoo Handbook."
                     #hack
                     if last_packet !="":
                        #on peux demasquer un packet
                        bo_demasque="0"
                        print "Demasquer le paquet "+last_packet+" ? "
                        Reponse=raw_input('(Oui/Non)')
                        if string.upper(Reponse) == "OUI":
                           bo_demasque="1"
                        if bo_demasque=="1":                        
                           print "Mise a jour package.keywords"
                           fichero = open("/etc/portage/package.keywords", 'a')
                           packet = "="+last_packet+" ~x86\n"
                           fichero.write("#Ajout par hack emerge\n")
                           fichero.write(packet)
                           fichero.flush()
                           fichero.close()
                           emerge_main()
                     else:
                        print "Un packet hardmask n'est pas demasque automatiquement"


@ bivittatus: J'ai pas ajouté le démasquage auto car en fait je trouve que c'est bien de savoir ce qui est démasqué. De plus c'est pas forcément lié au paquet qui vient d'etre demasqué.
Si vous voyez des modifs à faire ou des erreurs je suis preneur
_________________
L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php
Back to top
View user's profile Send private message
titoucha
Advocate
Advocate


Joined: 21 Jul 2005
Posts: 2374
Location: Genève

PostPosted: Tue Nov 07, 2006 4:12 am    Post subject: Reply with quote

J'ai modifié une petite partie du programme parce que je suis une grosse flemme, j'aime pas taper oui en entier :D

Ancien code
Code:
if string.upper(Reponse) == "OUI":
      bo_demasque="1"

Nouveau code
Code:
Reponse=string.upper(Reponse)
if (Reponse == "OUI") or (Reponse == "O"):
     bo_demasque="1"
Back to top
View user's profile Send private message
bivittatus
l33t
l33t


Joined: 31 Jan 2006
Posts: 687
Location: Roissy-en-Brie (France)

PostPosted: Wed Nov 08, 2006 5:00 pm    Post subject: Reply with quote

bouleetbil wrote:

@ bivittatus: J'ai pas ajouté le démasquage auto car en fait je trouve que c'est bien de savoir ce qui est démasqué. De plus c'est pas forcément lié au paquet qui vient d'etre demasqué.
Si vous voyez des modifs à faire ou des erreurs je suis preneur

Pas de problème...c'est déjà super...merci!!! :wink:
_________________
Linus TORVALDS: "Je ne suis pas là pour détruire Microsoft. Ce sera juste un effet secondaire tout à fait involontaire."
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