IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

Installation de paquets en masse dans un script


Sujet :

Administration système

  1. #1
    Rédacteur


    Homme Profil pro
    Instituteur retraité
    Inscrit en
    Novembre 2015
    Messages
    892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Instituteur retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 892
    Billets dans le blog
    1
    Par défaut Installation de paquets en masse dans un script
    Bonjour,

    pour réaliser un script de construction d'une distribution sur raspberry Pi (sur une Raspbian, donc Debian), je dois installer des paquets en masse.

    J'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    apt-get install -y paquet1 paquet2 paquet3...
    Or je constate que lorsqu'il y a des paquets manquants dans le dépôt, aucun paquet de la liste ne s'installe. Ça se comporte comme si j'avais fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    apt-get install -y paquet1 && paquet2 && paquet3...
    Comment faire en sorte que les paquets présents dans les dépôts s'installent même lorsque certains paquets sont absents ? Mes recherches sur le Net et dans les man pages ne m'ont pas permis de trouver de réponse.
    Plus on apprend, plus on découvre que ce que l'on sait est insignifiant face à tout ce que l'on ne sait pas.
    Retrouvez la liste de mes articles et tutoriels sur la sauvegarde-restauration, les distributions éducatives, le système Linux et le Raspberry pi en cliquant sur ce lien.

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    Bonjour,

    Dans le man apt-get :
    -m, --ignore-missing, --fix-missing
    Ignorer les paquets manquants ; si des paquets ne peuvent être récupérés, ou, après récupération, ne satisfont pas au contrôle d'intégrité,
    cette commande met ces paquets de côté et gère le résultat. Utiliser cette option conjointement avec -f peut produire une erreur dans
    certaines situations. Quand un paquet, sélectionné pour une installation (particulièrement si c'est mentionné en ligne de commande), ne peut
    être récupéré, il est mis silencieusement de côté. Élément de configuration : APT::Get::Fix-Missing.

  3. #3
    Rédacteur


    Homme Profil pro
    Instituteur retraité
    Inscrit en
    Novembre 2015
    Messages
    892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Instituteur retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 892
    Billets dans le blog
    1
    Par défaut
    Il va falloir que je réapprenne à lire, parce que je suis vraiment passé à côté de cette option alors que j'ai eu la page sous les yeux !

    Sais-tu si avec cette option ça renvoie une erreur lorsqu'un paquet est manquant ?
    Parce qu'il faudra tout de même pouvoir faire afficher, en fin de script, ce qui a posé problème.
    Plus on apprend, plus on découvre que ce que l'on sait est insignifiant face à tout ce que l'on ne sait pas.
    Retrouvez la liste de mes articles et tutoriels sur la sauvegarde-restauration, les distributions éducatives, le système Linux et le Raspberry pi en cliquant sur ce lien.

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    Bon en fait, c'est une fausse piste, l'option ne sert pas du tout à ça (soit dit en passant, le man français est encore pas terrible...)

    Le seul workaround existant semple être la boucle unitaire d'installation de chaque paquet...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in ${listpackage}
    do
      sudo apt-get install $i
    done
    ou plus subtil mais certainement plus long (quoique pas sur) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    listfinal=""
    for i in ${listpackage}
    do
      if sudo apt-get --print-uris install $i >/dev/null
      then
        listfinal="$listfinal $i"
      fi
    done
    echo "sudo apt-get install $listfinal"
    la sortie du 2ème script donnerait pour listpackage=toto ash tata tcsh:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    E: Impossible de trouver le paquet toto
    E: Impossible de trouver le paquet tata
    sudo apt-get install  tcsh ash
    Et bien sur ici, je fais un echo au lieu de lancer la commande...

  5. #5
    Rédacteur


    Homme Profil pro
    Instituteur retraité
    Inscrit en
    Novembre 2015
    Messages
    892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Instituteur retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 892
    Billets dans le blog
    1
    Par défaut
    Merci disedorgue,

    on n'échappe pas en fait à la nécessité de traiter un à un chaque paquet..
    Plus on apprend, plus on découvre que ce que l'on sait est insignifiant face à tout ce que l'on ne sait pas.
    Retrouvez la liste de mes articles et tutoriels sur la sauvegarde-restauration, les distributions éducatives, le système Linux et le Raspberry pi en cliquant sur ce lien.

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    Oui, ou alors peut-être tricher avec apt-cache afin d'avoir la liste de ceux qui existent en une seule fois, ce qui doit être plus rapide. Par contre, chez moi, je n'arrive pas à choper la sortie d'erreur: dés que je la détourne, je récupère rien...

    Donc ici, le but serait:
    1) On récupère la liste des package existant de la liste initiale.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listefinale=$(apt-cache -g show $listeinitiale | sed -n 's/^Package: *//p' | tr '\n' ' ')
    2) On affiche les packages non trouvés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ${listeinitiale} | sed "s/\(${listefinale// /\\|}\n\) *//g"
    3) On installe la liste valide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sudo apt-get install $listefinale

  7. #7
    Rédacteur


    Homme Profil pro
    Instituteur retraité
    Inscrit en
    Novembre 2015
    Messages
    892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Instituteur retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 892
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Par contre, chez moi, je n'arrive pas à choper la sortie d'erreur: dés que je la détourne, je récupère rien...
    Merci pour l'info, car je comptais utiliser une redirection d'erreurs pour afficher les paquets manquants. Je vais donc plutôt adopter la solution que tu proposes.
    Plus on apprend, plus on découvre que ce que l'on sait est insignifiant face à tout ce que l'on ne sait pas.
    Retrouvez la liste de mes articles et tutoriels sur la sauvegarde-restauration, les distributions éducatives, le système Linux et le Raspberry pi en cliquant sur ce lien.

  8. #8
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    Pour la redirection d'erreur, ça ne concerne que apt-cache, pour les autres commandes, je n'ai pas de souci.

  9. #9
    Rédacteur


    Homme Profil pro
    Instituteur retraité
    Inscrit en
    Novembre 2015
    Messages
    892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Instituteur retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 892
    Billets dans le blog
    1
    Par défaut
    OK, merci !
    Plus on apprend, plus on découvre que ce que l'on sait est insignifiant face à tout ce que l'on ne sait pas.
    Retrouvez la liste de mes articles et tutoriels sur la sauvegarde-restauration, les distributions éducatives, le système Linux et le Raspberry pi en cliquant sur ce lien.

  10. #10
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 308
    Par défaut
    Bonjour

    Oserais-je proposer de simplement regarder si les paquets dont on a demandé l'installation sont présents ?
    Et lister les absents.

    Ce n'est pas un message d'erreur, mais ça peut le devenir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dpkg -l | ./traitement.bash >&2

  11. #11
    Rédacteur


    Homme Profil pro
    Instituteur retraité
    Inscrit en
    Novembre 2015
    Messages
    892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Instituteur retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 892
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    Oserais-je proposer de simplement regarder si les paquets dont on a demandé l'installation sont présents ?
    Et lister les absents.
    Bonjour,
    Le problème n'est pas tant de récupérer la liste des paquets absents, car plusieurs solutions sont envisageables.
    Le problème est d'éviter que rien ne s'installe si on a un paquet absent.
    On peut faire la vérification en amont et n'installer que ce qui existe, ou traiter un à un les paquets, et afficher les erreurs. Disons que dans un premier temps, je voulais savoir si en traitant en masse avec apt-get install, on pouvait éviter l'arrêt de l'opération en cas d'erreur, ce qui ne semble pas être le cas.
    Plus on apprend, plus on découvre que ce que l'on sait est insignifiant face à tout ce que l'on ne sait pas.
    Retrouvez la liste de mes articles et tutoriels sur la sauvegarde-restauration, les distributions éducatives, le système Linux et le Raspberry pi en cliquant sur ce lien.

  12. #12
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 616
    Par défaut
    Il te faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    apt-get install paquet1
    apt-get install paquet2
    plutôt que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    apt-get install paquet1 paquet2
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  13. #13
    Rédacteur


    Homme Profil pro
    Instituteur retraité
    Inscrit en
    Novembre 2015
    Messages
    892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Instituteur retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 892
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Il te faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    apt-get install paquet1
    apt-get install paquet2
    D'où la solution proposée par disedorgue de le faire dans une boucle.

    Citation Envoyé par disedorgue Voir le message
    ou plus subtil mais certainement plus long (quoique pas sur) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    listfinal=""
    for i in ${listpackage}
    do
      if sudo apt-get --print-uris install $i >/dev/null
      then
        listfinal="$listfinal $i"
      fi
    done
    echo "sudo apt-get install $listfinal"
    Ne pourrait-on simplifier la procédure par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for i in ${listpackage}
    do
      if sudo apt-get --print-uris install $i >/dev/null
      then
        apt-get install $i
      fi
    done
    Plus on apprend, plus on découvre que ce que l'on sait est insignifiant face à tout ce que l'on ne sait pas.
    Retrouvez la liste de mes articles et tutoriels sur la sauvegarde-restauration, les distributions éducatives, le système Linux et le Raspberry pi en cliquant sur ce lien.

  14. #14
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    C'est possible, mais elle perd tout son intérêt et autant utiliser la toute première boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in ${listpackage}
    do
      sudo apt-get install $i
    done
    Après, pourquoi vaut-il mieux installer les paquets un par un au lieu de le faire en une seule fois ?

  15. #15
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    Ansible c'est bien pour ça. Un script d'installation c'est un peu réinventer la roue.
    Si le système estime qu'il n'y a pas les dépendances nécessaires à l'installation d'un ou plusieurs paquets, il ne le fera pas. Tu dois pouvoir déterminer quelle ressource manque pour qu'une machine ait accès à cette dépendance et pas une autre.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/03/2018, 15h55
  2. Obtenir l'utilisateur courant dans un script de postinstallation d'un paquet
    Par Philippe Dpt35 dans le forum Shell et commandes GNU
    Réponses: 33
    Dernier message: 07/11/2017, 11h52
  3. dezipper une archive dans un script d'installation
    Par killgones dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 07/07/2014, 14h18
  4. Réponses: 4
    Dernier message: 13/03/2014, 11h47
  5. Requête POST dans un script bash
    Par desperado dans le forum Linux
    Réponses: 4
    Dernier message: 11/12/2007, 22h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo