# [TIP] Script de keywordisation de dépendances...

## anigel

Bosozoku m'a fait me sentir coupable, alors je m'y suis collé...

Voici donc une petite astuce permettant de ~archer automatiquement toutes les dépendances d'un paquet masqué. Exemple pour gnome, puisque c'est pour lui précisémment que j'ai "programmé" ça...

Tout d'abord, le script : copiez-coller cet immonde code (oui, c'est sale, mais je m'en fous  :Laughing: ) dans un fichier x86deps.sh, par exemple, puis rendez-le exécutable (avec un chmod u+x x86deps.sh).

```
#!/bin/bash

#script de ~archage de dependances de paquets, par anigel (forum gentoo fr)

cp /etc/portage/package.keywords /etc/portage/package.keywords.backup

[ "$1" = "" ] && echo "syntaxe : x86deps.sh category/package" && exit 1

while [ $? != 0 ] ; do

   PKGNAME=`emerge $1 -pv | grep "masked by" | awk -F " " '{ print $2 }' | sed s/-[0-9].*//`

   echo "$PKGNAME ~x86"  | tee -a /etc/portage/package.keywords

   emerge $1 -pv &>/dev/null

done

emerge $1 -av
```

Ensuite, vous devez indiquer dans votre /etc/portage/package.keywords quel paquet vous souhaitez ~archer. Dans notre exemple, cela donne, pour gnome :

```
echo "gnome-base/gnome ~x86" >> /etc/portage/package.keywords
```

Ensuite, il suffit de lancer le script, qui s'occupe du reste. Ca peut être assez long, en fonction du nombre de paquets à démasquer. A la fin il vous propose de lancer la compilation. Prenez soin quand même de bien vérifier les flags de compilation   :Very Happy:  !

Comme d'hab : tous commentaires / ajouts / corrections bienvenues.

NB : Vous remarquerez que le script prend soin de faire un backup de votre fichier /etc/portage/package.keywords. Toutefois, attention : si vous lancez ce script plusieurs fois de suite, à chaque fois votre fichier est sauvegardé... par-dessus l'ancienne sauvegarde. Mais bon, en principe ça ne doit pas poser de problèmes : je ne fais qu'ajouter des données, jamais je n'en retire.

----------

## ghoti

A la fois simple et génial !  :Very Happy: 

----------

## kernelsensei

ca fait pas la meme chose ça : https://forums.gentoo.org/viewtopic-p-2396487.html#2396487 ?

----------

## anigel

On dirait, oui, je ne l'avais pas vu passer celui-là  :Smile:  !

----------

## shmal

J'ai une question toute bête mais...

comment on execute un script ?  :Embarassed: 

----------

## Enlight

 *shmal wrote:*   

> J'ai une question toute bête mais...
> 
> comment on execute un script ? 

 

```
# on présume que tu est dans le répertoire où se trouve le script

chmod 777 nom_du_script # à adapter si tu veux pas que tout le monde puisse lire écrire et executer

./nom_du_script
```

----------

## kopp

```
chmod +x nomduscript

./nomduscript
```

là en l'occurence il faudra que tu sois en root pour celui ci

le chmod le rend exécutable, et ensuite tu l'éxécute , et ./ spécifies que c'est pour le fichier qui se trouve dans le repertoire courrant, car si tu tapes juste le nom du scripte, il va chercher ce script dans les repertoires listé par la variable path, et si il ne s'y trouve pas (c'est souvent le cas), ben il te dira : command not found ou un truc du genre  :Smile: 

Sinon merci anigel, meme si c'était déjà fait, là ça le met dans un seul post  :Smile: 

edit : grilled....

----------

## shmal

Merci c'est ce que je pensais (tout de même...) mais :

```
localhost ~ # ls -l x86deps.sh

-rwxrwxrwx  1 root root 461 oct 12 21:42 x86deps.sh

localhost ~ # ./x86deps.sh

syntaxe : x86deps.sh category/package
```

Est-ce normal ?

----------

## anigel

C'est tout à fait normal : il faut que tu le lances avec en argument le nom du package "à la gentoo". exemple :

```
./x86deps.sh gnome-base/gnome
```

Et hop, ça marche  :Wink: 

----------

## shmal

ah ok ! c'etait écrit dans le script...   :Embarassed: 

maintenant :

```
localhost ~ # ./x86deps.sh gnome-base/gnome

 ~x86

--- Invalid atom in /etc/portage/package.keywords: ~x86

These are the packages that I would merge, in order:

Calculating dependencies ...done!

[ebuild   R   ] gnome-base/gnome-2.10.2  -accessibility -cdr -dvdr +hal 0 kB

Total size of downloads: 0 kB

Do you want me to merge these packages? [Yes/No] n

Quitting.

localhost ~ #
```

Le script m'ajoute un ~x86 tout seul dans le /etc/portage/package.keywords...

EDIT : il faut emerge sync avant...  :Rolling Eyes: 

MERCI !Last edited by shmal on Wed Oct 12, 2005 7:25 pm; edited 2 times in total

----------

## Enlight

 *anigel wrote:*   

> C'est tout à fait normal : il faut que tu le lances avec en argument le nom du package "à la gentoo". exemple :
> 
> ```
> ./x86deps.sh gnome-base/gnome
> ```
> ...

 

Question bête, mais pourquoi $? alors qu'aucune tache n'a été lancée en background?

----------

## Ey

 *Enlight wrote:*   

> Question bête, mais pourquoi $? alors qu'aucune tache n'a été lancée en background?

 

$? ça n'a rien à voir avec des apps en background, c'est le return de la dernière application (0 = ok, !=0 ça c'est mal passé)

Après c'est vrai que le premier test correspond au cp...

EDIT : en fait non il correspond au test d'au dessus... (qui est en fait un appel à bash...)

----------

## Enlight

 *Ey wrote:*   

>  *Enlight wrote:*   Question bête, mais pourquoi $? alors qu'aucune tache n'a été lancée en background? 
> 
> $? ça n'a rien à voir avec des apps en background, c'est le return de la dernière application (0 = ok, !=0 ça c'est mal passé)
> 
> Après c'est vrai que le premier test correspond au cp...
> ...

 

ouch! j'ai vraiment une mémoire défaillante j'ai fait un mix entre $? et $! qui donne le pid du dernier process qui a été lancé ou vient de se terminer en background   :Rolling Eyes: 

au fait Ey et anigel, y'a moyen d'avoir vos avis sur ça? https://forums.gentoo.org/viewtopic-t-383730-postdays-0-postorder-asc-start-25.html

----------

## spider312

 *Ey wrote:*   

> EDIT : en fait non il correspond au test d'au dessus... (qui est en fait un appel à bash...)

 Un apel à bash ??? moi pas comprendre

Le 1er test il sert à verifier que le 1er argument n'est pas nul pour afficher un message d'aide (d'ailleurs, je crois que $# retourne le nombre d'arguments, un peu plus propre je pense [ $# -eq 0 ]) puis on entre dans la boucle (puisqu'il n'y a pas eu d'erreurs) et ensuite chaque emerge défini si la boucle doit continuer ou pas (enfin à ce que j'ai compris)

----------

## Ey

 *spider312 wrote:*   

> Un apel à bash ??? moi pas comprendre

 

Bin en fait dans un script bash il y a pas mal de chose qui sont en fait traduite en pratique par un fork du bash... par contre là je me suis un peu trop précipité donc c'est pas le cas...

----------

## anigel

 *Enlight wrote:*   

> au fait Ey et anigel, y'a moyen d'avoir vos avis sur ça? https://forums.gentoo.org/viewtopic-t-383730-postdays-0-postorder-asc-start-25.html

 

J'ai suivi ce post avec attention, même si je n'y ai pas participé. Je me suis abstenu pour une raison simple : je ne connais vraiment "bien" que bash. Donc le conseiller, sur la seule base que c'est le seul que je maitrise à peu près, ça ne fait pas très sérieux. Disons simplement que ça convient à mes besoins. 

Mais à l'heure actuelle, je m'intéresse de près aux possibilités d'autres langages. En effet, j'ai eu une proposition de publication (dans un vrai journal papier) pour mon appli de gestion de parc centralisée, actuellement écrite en script bash + quelques progs en C. Mais pour cela, il faut que la doc soit de qualité, et donc le code, un peu plus propre qu'il n'est actuellement. Bref, pour le moment, c'est... python qui semble se profiler  :Wink:  ! Mais, encore une fois, ne sachant pas vraiment de quoi il retourne, mon avis ne vaut pas tripète !

----------

## ghoti

 *Ey wrote:*   

>  *spider312 wrote:*   Un apel à bash ??? moi pas comprendre 
> 
> Bin en fait dans un script bash il y a pas mal de chose qui sont en fait traduite en pratique par un fork du bash... par contre là je me suis un peu trop précipité donc c'est pas le cas...

 

On peut vérifier s'il y a fork ainsi que son niveau au moyen de la variable $SHLVL : voir ce post

----------

## anigel

 *Enlight wrote:*   

> Question bête, mais pourquoi $? alors qu'aucune tache n'a été lancée en background?

 

J'avais prévenu : c'est du code "spécial porc" !

```
[ "$1" = "" ] && echo "syntaxe : x86deps.sh category/package" && exit 1
```

Si le script a été lancé sans argument : alors le message s'affiche, et on sort du script. Si par contre la syntaxe est bonne, alors le test échoue ([ "$1" = "" ]), et dans ce cas, renvoie un code retour erroné (1). La condition && n'est pas remplie, on passe donc à la suite.

C'est ce même code "d'erreur" qui permet de rentrer dans la boucle while, dont on ne ressort que si toutes les dépendances ont été satisfaites.

En fait, je crois que je vais renommer mon post... [HOWTO] Ce qu'il ne faudrait jamais faire, en programmation  :Laughing:  !

----------

## ghoti

 *Enlight wrote:*   

>  *shmal wrote:*   J'ai une question toute bête mais...
> 
> comment on execute un script ?  
> 
> ```
> ...

 

Une autre méthode plus rapide est d'utiliser un "point" initial, puis un espace, puis le nom du script, comme ceci :

 *Quote:*   

> . chemin/nom_du_script

 

Cette méthode tente d'exécuter le contenu d'un fichier texte sans que celui-ci soit déclaré exécutable.

A propos, perso, je préfère utiliser chmod +x nom_du_script plutôt que la notation en octal : c'est plus intuitif mais , bon d'accord, c'est moins geek  :Wink: 

----------

## Enlight

 *ghoti wrote:*   

>  *Enlight wrote:*    *shmal wrote:*   J'ai une question toute bête mais...
> 
> comment on execute un script ?  
> 
> ```
> ...

 

Aaaah en le sourçant, bien vu! Sinon pour les droits y'a qu'en octal que j'arrive à retenir la syntaxe   :Embarassed: 

@ anigel, oki merci!

----------

## ghoti

 *Enlight wrote:*   

> Aaaah en le sourçant, bien vu! 

 

Le défaut, c'est que cela n'est valable que pour les scripts bash. Pour les autres langages (perl, python, ruby ...), il faut explicitement invoquer l'interpréteur ad-hoc.

 *Quote:*   

> Sinon pour les droits y'a qu'en octal que j'arrive à retenir la syntaxe   

 

C'est bien ce que je disais : t'es un vrai geek !  :Wink:   :Laughing: 

----------

## Enlight

 *ghoti wrote:*   

>  *Enlight wrote:*   Aaaah en le sourçant, bien vu!  
> 
> Le défaut, c'est que cela n'est valable que pour les scripts bash. Pour les autres langages (perl, python, ruby ...), il faut explicitement invoquer l'interpréteur ad-hoc.
> 
>  *Quote:*   Sinon pour les droits y'a qu'en octal que j'arrive à retenir la syntaxe    
> ...

 

Même pas vrai   :Confused:  , j'suis comptable et étudiant en droit!!!

----------

