2013-03-01 4 views
0

Je souhaite détecter si certaines bibliothèques sont installées sur l'ordinateur avant d'effectuer l'installation, mais je ne parviens pas à le faire fonctionner correctement.Résultat différent du script exécuté au démarrage

je le script shell suivant:

#!/bin/bash 

verify_distro(){ 
CHECK_IF_PACKAGE=`dpkg -s ia32-libs` 
result=`echo $?` 
echo ${result} 
if [ ${result} == 0 ]; then 
    echo "ia32-libs installed" 
    return 0 
else 
    echo "not installed" 
    return 1 
fi 
} 

verify_distro 

Si je ia32-libs installés et l'exécuter à la main dans la console, puis faire une echo $? pour voir la sortie que je reçois le code de sortie 0 comme tout est installé correctement.

J'ai ce script défini pour s'exécuter lors de la phase de démarrage de l'installation, juste après l'étape Demande de privilèges, et l'ai configuré pour attendre les flux de terminaison et de sortie. Afin que je puisse arrêter le programme d'installation, j'ai également défini la stratégie d'échec comme "En tant qu'utilisateur si réessayer ou arrêter en cas d'échec". Le problème est que, malgré l'installation du paquet, le script échoue toujours et le programme d'installation demande s'il faut continuer ou quitter.

Je ne sais pas comment résoudre ce problème afin de pouvoir arrêter le programme d'installation si certains pré-requis ne sont pas remplis. Ou y a-t-il un meilleur moyen d'y parvenir?

+0

Y a-t-il une différence entre la valeur de retour, que vous l'exécutiez manuellement ou celle de l'installateur? Avez-vous vérifié la valeur de retour enregistrée dans le fichier .install4/installation.log? En outre, vous pouvez rediriger la sortie de l'action "Exécuter l'exécutable" vers le fichier journal pour vérifier si le script est correctement exécuté. –

+0

@IngoKegel, le problème vient du fait que le script ne peut pas être exécuté dans la phase de démarrage, avant d'être copié dans le répertoire installé. Si j'exécute le script après la phase Enregistrer/Supprimer un élément par exemple (ou après la phase d'installation des fichiers), il s'exécute correctement. Y at-il un moyen d'exécuter un script ** avant ** les fichiers de disposition sont copiés? Je voudrais qu'il s'exécute comme une première étape lors du démarrage de l'installateur par exemple, afin que l'utilisateur soit averti des dépendances manquantes immédiatement, et non à la fin de l'installation. –

+0

OK, je l'ai eu, s'il vous plaît voir ma réponse –

Répondre

0

Ajoutez le fichier de script à Installer-> Personnaliser le & ressources, puis spécifiez

${installer:sys.resourceDir}/scriptName.sh 

pour la propriété "Executable" ou l'action "Exécuter fichier exécutable ou batch".

Cela fonctionnera également dans le noeud "Démarrage".

0

Essayez d'éliminer les lignes inutiles de code de vérification pour la sortie d'autres scripts:

#!/bin/bash 

verify_distro(){ 

    dpkg -s ia32-libs > /dev/null 

    if [ $? == 0 ]; then 
     echo "ia32-libs installed" 
     return 0 
    else 
     echo "not installed" 
     return 1 
    fi 

} 

verify_distro 
+0

Malheureusement, cela a le même problème; malgré le déclenchement des bibliothèques, j'obtiens toujours l'erreur. –

0

Vous ne dites pas exactement ce que l'erreur est lors de l'exécution de ce script au démarrage. Il se peut que le PATH de votre shell ne soit pas encore initialisé, auquel cas le script ne pourra pas trouver l'exécutable "dpkg". Si en fait c'est le problème, spécifier le chemin complet vers dpkg, par ex. "/ usr/bin/dpkg -s ia32-libs" réglerait le problème.

+0

Le problème était que le script n'était pas en cours d'exécution. Voir mon commentaire [ici] (http://stackoverflow.com/questions/15157506/different-result-from-script-ran-at-startup#comment21425234_15157506). –

Questions connexes