Forum Programmation.shell Comment faire ???

Posté par  .
Étiquettes : aucune
0
4
fév.
2005

Bonjour,

J'ai écrit un petit script qui permet de mettre a jour mes machines.

infos : /home est monté en NFS, donc le fchier liste_rpm_src est le même pour toutes les machines.

Seulement voila, comme la liste des paquets de la machine n'est pas mise a jour après chaque installation d'un paquet (boucle for), il essai d'installer des paquets déja installer car les dépendances ont fait leur travail….

Exemple : j'install mplayer et je met a jour liste_rpm_src. La machine qui va ce mettre a jour va voir qu'il ya a 4 paquets a mettre à jour (mplayer, libgui, etc…). Un fois installe mplayer il n'a pas besoin d'installer les autres car ils ont été installé "grace/a cause" des dépendances…

Merci d'avance.

#!/bin/bash  

SOURCE=/home/liste_rpm_src  
INSTALLED=/etc/scripts_add/liste_rpm_inst  

#MAJ des sources  
urpmi.update -qa  

if [ ! -f $INSTALLED ];  
then  
£spaces£  £/spaces£rpm -qa > $INSTALLED  
fi  

if [ -f $SOURCE ];  
then  
£spaces£  £/spaces£#Liste paquets a ajouter  
£spaces£  £/spaces£NEW=$(diff $SOURCE $INSTALLED | grep "<" | sed "s/< \(.*\)/\1/g")  
£spaces£  £/spaces£#Liste paquets a enlever   
£spaces£  £/spaces£REMOVE=$(diff $SOURCE $INSTALLED | grep ">" | sed "s/> \(.*\)/\1/g")  

£spaces£  £/spaces£for NEW_PKG in $NEW;  
£spaces£  £/spaces£do  
£spaces£      £/spaces£if urpmi -q --force $NEW_PKG;  
£spaces£      £/spaces£then  
£spaces£          £/spaces£logger -t autoinstall "Successfully installed $NEW_PKG"  
£spaces£      £/spaces£else  
£spaces£          £/spaces£logger -t autoinstall "Failed to install $NEW_PKG"  
£spaces£      £/spaces£fi  
£spaces£  £/spaces£done  

£spaces£  £/spaces£rpm -qa > $INSTALLED  
else  
£spaces£  £/spaces£logger -t autoinstall "File source don't exist !"  
fi  
  • # installe tout d'un coup

    Posté par  . Évalué à 2.

    Pourquoi veux tu installer les paquets un par un ?
    Tu peux supprimer la boucle for et tout installer à la fois

    urpmi -q $NEWS

    Ou alors il te faut regénérer la liste à chaque passage dans la boucle.
    • [^] # Re: installe tout d'un coup

      Posté par  . Évalué à 0.

      Pourquoi veux tu installer les paquets un par un ?
      Tu peux supprimer la boucle for et tout installer à la fois


      C vrai j'y pensais aussi...

      Ou alors il te faut regénérer la liste à chaque passage dans la boucle.


      C ca que j'arrive pas à faire car dans la boucle for il en a vraiment rien a faire que je modifie $NEW... Alors je me demandais comment faire... c surtout de la curiosité. Je pensais utiliser une boucle while...

      En tout vas merci déjà pour ces réponses.
      • [^] # Re: installe tout d'un coup

        Posté par  . Évalué à 3.

        Tu peux aussi tester pour chaque paquet qu'il n'est pas déjà installé. Exemple:
        for NEW_PKG in $NEW;
        do
        	rpm -q $NEW_PKG
        	if [ $? != 0 ]
        	then
        		if urpmi -q --force $NEW_PKG;
          		then
        			logger -t autoinstall "Successfully installed $NEW_PKG"
        		else
        			logger -t autoinstall "Failed to install $NEW_PKG"
          		fi
        	fi
        done
        
  • # Titre non pertinent détecté

    Posté par  . Évalué à 2.

    J'ajouterai que « comment faire ? » n'est pas un titre recevable pour une entrée de forum ! :-)

    Une bonne manière de faire serait de résumer clairement ton problème en une ligne. Le fait de te livrer à cet exercice te forcera déjà à avoir une vue globale de ton problème, ce qui te conduira dans une bonne partie des cas à trouver la solution avant même de commencer à rédiger le corps de ton message !

    Bonne chance.
    • [^] # Re: Titre non pertinent détecté

      Posté par  . Évalué à 1.

      Mea culpa !

      Je recommencerais plus c promis... g pas vraiment de bonnes excuses (fin de semaine, fatigué, etc), mais j'étais pas bien inspiré...

      Sorry ;)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.