#1 Le 12/06/2011, à 13:37
- Christophe C
Code d'erreur pour installation de dépôt dans un script
Bonjour,
Quand j'essaie d'installer un prog par un sudo apt-get install toto, il y a un code qui est renvoyé dans la variable d'environnement $?.
Si toto n'existe pas, par exemple, cela renvoie 100.
Pratique dans un script d'installation, pour connaitre les prog dont l'install a planté.
Par contre, quand j'install des PPA (genre sudo add-apt-repository ppa:toto), comment savoir si l'install a marché ou planté ? La variable $? renvoit 0 dans les 2 cas.
Cordialement.
BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».
Hors ligne
#2 Le 12/06/2011, à 14:07
- Levi59
Re : Code d'erreur pour installation de dépôt dans un script
je suis sous debian et je n'ai donc pas le "add-apt-repository" à ma disposition donc je ne connais pas bien le fonctionnement de la commande mais si tu mets un faux ppa, celui-ci est-il ajouté à sources.list ou bien as-tu un message d'erreur indiquant que le dépôt n'existe pas?
Si il est ajouté au "sources.list" alors sans message d'erreur une façon de savoir si l'ajout a fonctionné est de vérifier le contenu du fichier...
Hors ligne
#3 Le 12/06/2011, à 14:16
- bishop.sad.clown
Re : Code d'erreur pour installation de dépôt dans un script
Pt-être en clonant la sortie standard de la commande apt-get-repository dans un fichier temporaire et faire une recherche sur ce fichier... Exemple:
FICHIER_TMP="ce que tu veux"
add-apt-repository ppa:toto | tee $FICHIER_TMP # ou meme add-apt-repository ppa:toto > $FICHIER_TMP si tu ne veux pas la cloner mais la rediriger.
REZ=$(grep -ci error $FICHIER_TMP)
[ $REZ -eq 0 ] || exit 1
et la $? vari...
C'est une idée de methode... à corriger et adapter...
Dernière modification par bishop.sad.clown (Le 12/06/2011, à 18:09)
@++ , Rob'
→ Trusty x64
Je n'ai pas toujours les réponses mais je les cherche en même temps que vous... =· þ
Hors ligne
#4 Le 13/06/2011, à 07:53
- Christophe C
Re : Code d'erreur pour installation de dépôt dans un script
Voila ce que cela donne :
chris@chris-System-Product-Name:~$ sudo add-apt-repository ppa:toto
[sudo] password for chris:
Error reading https://launchpad.net/api/1.0/~toto/+archive/ppa: HTTP Error 404: Not Found
Donc je suppose que la méthode de bishop.sad.clown devrait marcher.
Par contre, bizarrement, il le met bien dans le source list :
deb http://ppa.launchpad.net/toto/ppa/ubuntu natty main
deb-src http://ppa.launchpad.net/toto/ppa/ubuntu natty main
BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».
Hors ligne
#5 Le 13/06/2011, à 11:04
- bishop.sad.clown
Re : Code d'erreur pour installation de dépôt dans un script
J'm'en suis appercu hier que la commande add-apt-repositoty ajoute la source tout de même... j'planche dessus ^_^
@++ , Rob'
→ Trusty x64
Je n'ai pas toujours les réponses mais je les cherche en même temps que vous... =· þ
Hors ligne
#6 Le 13/06/2011, à 11:55
- pode
Re : Code d'erreur pour installation de dépôt dans un script
En récupérant le code source de add-apt-repository :
$ dpkg -S add-apt-repository
python-software-properties: /usr/bin/add-apt-repository
python-software-properties: /usr/share/man/man1/add-apt-repository.1.gz
$ apt-get source python-software-properties
on voit que :
Fichier add-apt-repository
[...]
sp = SoftwareProperties()
line = args[0]
[...]
if not sp.add_source_from_line(line):
print _("Error: '%s' invalid" % line)
sys.exit(1)
sp.sourceslist.save()
i.e. la commande add-apt-repository va exécuter la méthode "add_source_from_line" de la classe SoftwareProperties avec en entrée, la ligne passée en paramètre.
Fichier softwareproperties/SoftwareProperties.py
def add_source_from_line(self, line):
[...]
self.check_and_add_key_for_whitelisted_channels(deb_line)
i.e. la méthode "add_source_from_line" va exécuter la méthode de vérification et ajout de la clé "check_and_add_key_for_whitelisted_channels".
Fichier softwareproperties/SoftwareProperties.py
def check_and_add_key_for_whitelisted_channels(self, srcline):
[...]
if parsed_uri.netloc == 'ppa.launchpad.net':
worker = AddPPASigningKeyThread(parsed_uri.path)
worker.start()
i.e. la méthode "check_and_add_key_for_whitelisted_channels" lance un thread. Le traitement de vérification et ajout de clé se fait donc en asynchrone.
Fichier softwareproperties/ppa.py
class AddPPASigningKeyThread(Thread):
" thread class for adding the signing key in the background "
[...]
def run(self):
self.add_ppa_signing_key(self.ppa_path)
def add_ppa_signing_key(self, ppa_path):
[...]
lp_url = ('https://launchpad.net/api/1.0/~%s/+archive/%s' % (
owner_name, ppa_name))
try:
[...]
except URLError, e:
print "Error reading %s: %s" % (lp_url, e)
return False
On retrouve bien l'erreur "Error reading" et l'URL https://launchpad.net/api/1.0/~..........
La méthode renvoie bien dans ce cas d'erreur un booléen False, mais la méthode a été lancée via un Thread et rien n'est prévu dans la méthode "check_and_add_key_for_whitelisted_channels" pour gérer les cas d'erreurs renvoyés par le thread.
Si on revient dans softwareproperties/SoftwareProperties.py, comme on a :
def add_source_from_line(self, line):
[...]
self.check_and_add_key_for_whitelisted_channels(deb_line)
self.sourceslist.list.append(new_deb_entry)
self.sourceslist.list.append(new_debsrc_entry)
cela signifie qu'on va exécuter, inconditionnellement, les méthodes "append" d'ajout de lignes dans le fichier source.list
Voilà la cause de l'ajout indu des lignes
deb http://ppa.launchpad.net/toto/ppa/ubuntu natty main
deb-src http://ppa.launchpad.net/toto/ppa/ubuntu natty main
Dernière modification par pode (Le 13/06/2011, à 11:56)
Hors ligne
#7 Le 13/06/2011, à 12:12
- bishop.sad.clown
Re : Code d'erreur pour installation de dépôt dans un script
Python j'y comprends rien... Par contre en attendant, j'ai pondu ça:
#! /bin/sh
### add-apt-repository control (aar_control.sh)
FICHIER_TMP="/tmp/aar_c.tmp"
PPA="$1"
PPA_NAME=`echo $PPA | cut -d : -f 2`
if [ $# != 1 ] ; then
echo "ERREUR de paramètre" ; exit 1
fi
add-apt-repository $PPA | tee $FICHIER_TMP # ou meme add-apt-repository ppa:toto > $FICHIER_TMP si tu ne veux pas la cloner mais la rediriger.
N_ERR=$(grep -ci "error" $FICHIER_TMP)
if [ $N_ERR -gt 0 ] ; then
find /etc/apt -type f -name "*$PPA_NAME*" -exec rm {} \;
fi
J'vais essayer de motiver pour assimiler comment fonctionne les scripts python ^_^
= þ
Dernière modification par bishop.sad.clown (Le 13/06/2011, à 12:26)
@++ , Rob'
→ Trusty x64
Je n'ai pas toujours les réponses mais je les cherche en même temps que vous... =· þ
Hors ligne
#8 Le 13/06/2011, à 15:23
- Levi59
Re : Code d'erreur pour installation de dépôt dans un script
Si il n'y a pas de rapport de bug à ce sujet sur launchpad, ce serait bien de l'ajouter afin que ces défauts soit corrigés :
- retour du code d'erreur
- ajout inconditionnel dans sources.list
Je n'ai personnellement pas de compte sur ce site mais si l'un de vous en a un, je l'invite à le faire...
Hors ligne
#9 Le 13/06/2011, à 15:30
- bishop.sad.clown
Re : Code d'erreur pour installation de dépôt dans un script
Pendant que j'y pense:
rm $FICHIER_TMP
à ajouter en fin de script histoire de laisser propre en quittant... = D
Dernière modification par bishop.sad.clown (Le 13/06/2011, à 15:30)
@++ , Rob'
→ Trusty x64
Je n'ai pas toujours les réponses mais je les cherche en même temps que vous... =· þ
Hors ligne
#10 Le 13/06/2011, à 17:19
- pode
Re : Code d'erreur pour installation de dépôt dans un script
Si il n'y a pas de rapport de bug à ce sujet sur launchpad, ce serait bien de l'ajouter afin que ces défauts soit corrigés :
- retour du code d'erreur
- ajout inconditionnel dans sources.listJe n'ai personnellement pas de compte sur ce site mais si l'un de vous en a un, je l'invite à le faire...
En fait, il existe déjà un bug sur launchpad qui date de 2009 :
add-apt-repository should return exit code and not adding wrong repositories
mais le bug n'explique pas l'origine du problème.
J'ai rajouté un commentaire. ..
Hors ligne
#11 Le 13/06/2011, à 18:13
- Levi59
Re : Code d'erreur pour installation de dépôt dans un script
Python j'y comprends rien... Par contre en attendant, j'ai pondu ça:
...
J'vais essayer de motiver pour assimiler comment fonctionne les scripts python ^_^
= þ
J'aurais plutôt fait comme ça : (la boucle for...done n'est probablement pas nécessaire)
Confere messages suivants
EDIT le find à la fin est je pense une mauvaise idée dans cette forme... si un petit malin appel son ppa "e" par exemple, il va y avoir pas mal de choses supprimée. Quel type de nom de fichier recherche-t-on (un exemple serait pas mal)?
Dernière modification par Levi59 (Le 14/06/2011, à 03:43)
Hors ligne
#12 Le 13/06/2011, à 18:41
- pode
Re : Code d'erreur pour installation de dépôt dans un script
Pour générer le nom du fichier
$ sudo add-apt-repository ppa:toto
Error reading https://launchpad.net/api/1.0/~toto/+archive/ppa: HTTP Error 404: Not Found
$ ls /etc/apt/sources.list.d/
[...]
toto-ppa-natty.list
à partir du paramètre passé en entrée de la commande add-apt-repository, il y a plus direct :
$ PPA=ppa:toto
$ echo ${PPA#ppa:}-ppa-$(lsb_release -cs).list
toto-ppa-natty.list
Hors ligne
#13 Le 13/06/2011, à 18:43
- Levi59
Re : Code d'erreur pour installation de dépôt dans un script
Qu'est ce que ça donne comme nom dans le cas de ppa de la forme "ppa:blabla/truc"?
En fonction du résultat, il faudra modifier la commande find et la remplacer par un simple rm (pas besoin de find si le nom de fichier est créé toujours de la même façon)
Dernière modification par Levi59 (Le 13/06/2011, à 18:44)
Hors ligne
#14 Le 13/06/2011, à 19:04
- pode
Re : Code d'erreur pour installation de dépôt dans un script
Qu'est ce que ça donne comme nom dans le cas de ppa de la forme "ppa:blabla/truc"?
ça donne /etc/apt/sources.list.d/toto-truc-natty.list
Mise à jour du script de génération du nom de fichier en fonction du PPA :
$ cat ppa.sh
#!/bin/bash
nomPPA() {
local PPA=$1
PPA=${PPA#ppa:}
local DIR=${PPA#*/}
if [[ "${PPA}" = "${DIR}" ]]; then
echo "Fichier : ${PPA}-ppa-$(lsb_release -cs).list"
else
echo "Fichier : ${PPA%/*}-${DIR}-$(lsb_release -cs).list"
fi
}
nomPPA ppa:toto
nomPPA ppa:toto/truc
qui donne :
$ ./ppa.sh
Fichier : toto-ppa-natty.list
Fichier : toto-truc-natty.list
Hors ligne
#15 Le 13/06/2011, à 19:30
- Levi59
Re : Code d'erreur pour installation de dépôt dans un script
ok merci! du coup on aurait :
Confere messages suivants
Dernière modification par Levi59 (Le 14/06/2011, à 03:42)
Hors ligne
#16 Le 13/06/2011, à 19:44
- pode
Re : Code d'erreur pour installation de dépôt dans un script
rm /etc/apt/sources.list.d/${PPA_NAME/\//-}.list
Plutôt :
rm /etc/apt/sources.list.d/${PPA_NAME/\//-}-${RELEASE}.list
rm /etc/apt/sources.list.d/${PPA_NAME}-${RELEASE}.list
Plutôt :
rm /etc/apt/sources.list.d/${PPA_NAME}-ppa-${RELEASE}.list
Hors ligne
#17 Le 13/06/2011, à 20:43
- bishop.sad.clown
Re : Code d'erreur pour installation de dépôt dans un script
Avec la dernière synthèse des idées faute par Lévi j'ai des erreurs de synthaxes ( ca encore c'pas trop grave ) mais par contre meme avec un ppa valide j'ai ce message;
Error: need a repository as argument
et si j'appelle le script sans argument il retourne rien...
Ma maman me disait souvent: " Le mieux est l'ennemi du bien." = D = þ
@++ , Rob'
→ Trusty x64
Je n'ai pas toujours les réponses mais je les cherche en même temps que vous... =· þ
Hors ligne
#18 Le 14/06/2011, à 03:42
- Levi59
Re : Code d'erreur pour installation de dépôt dans un script
Pour le test du script, je ne peux pas le faire puisque je n'ai pas "aar" sur debian (ou plutot il ne fonctionne pas, je viens de me rendre compte que la commande existe en unstable mais il y a une erreur losque je la lance) donc des corrections sont surement à faire. Et en effet pour la vérification du nom de fichier, je ne sais pas pourquoi j'ai fait une erreur aussi grossière...
Je viens de voir également que j'avais oublié de spécifier le ppa dans la définition de $ERREUR (C'est sûr que comme ça elle va rouler beaucoup moins bien! ^^). Bref j'ai corrigé et ceci devrait marcher.
donc on reprend :
#!/bin/bash
### add-apt-repository control (aar_control.sh)
RELEASE=$(lsb_release -cs)
for PPA in "${@}"
do
PPA_NAME=${PPA#*:}
if [ $# -lt 1 ] ; then
echo "ERREUR de paramètre" ; exit 1
fi
{
ERROR=$(add-apt-repository ${PPA} 2>&1 >&4 | tee >(grep "Error 404") >&4)
} 4>&1
echo $ERROR
[ -n "$ERROR" ] && {
[ -f "rm /etc/apt/sources.list.d/${PPA_NAME/\//-}-${RELEASE}.list" ] \
&& \
rm /etc/apt/sources.list.d/${PPA_NAME/\//-}-${RELEASE}.list \
|| \
rm /etc/apt/sources.list.d/${PPA_NAME}-ppa-${RELEASE}.list
}
done
Dernière modification par Levi59 (Le 14/06/2011, à 04:00)
Hors ligne
#19 Le 14/06/2011, à 12:28
- bishop.sad.clown
Re : Code d'erreur pour installation de dépôt dans un script
Yep ca roule !
juste une chose, il faut sortir
if [ $# -lt 1 ] ; then
echo "ERREUR de paramètre" ; exit 1
fi
... de la boucle for/done . sinon la condition ne s'applique pas... ^_^
Cette version du script = nickel chez moi = ) Missi M'ssieur = þ
#!/bin/bash
### add-apt-repository control (aar_control.sh)
RELEASE=$(lsb_release -cs)
if [ $# -lt 1 ] ; then
echo "ERREUR de paramètre" ; exit 1
fi
for PPA in "${@}"
do
PPA_NAME=${PPA#*:}
{
ERROR=$(add-apt-repository ${PPA} 2>&1 >&4 | tee >(grep "Error 404") >&4)
} 4>&1
echo $ERROR
[ -n "$ERROR" ] && {
[ -f "rm /etc/apt/sources.list.d/${PPA_NAME/\//-}-${RELEASE}.list" ] \
&& \
rm /etc/apt/sources.list.d/${PPA_NAME/\//-}-${RELEASE}.list \
|| \
rm /etc/apt/sources.list.d/${PPA_NAME}-ppa-${RELEASE}.list
}
done
Une petite chose encore... Peux-tu me traduire stp : PPA#*:
issue de
PPA_NAME=${PPA#*:}
= /
Dernière modification par bishop.sad.clown (Le 14/06/2011, à 13:29)
@++ , Rob'
→ Trusty x64
Je n'ai pas toujours les réponses mais je les cherche en même temps que vous... =· þ
Hors ligne
#20 Le 14/06/2011, à 13:12
- FRUiT
Re : Code d'erreur pour installation de dépôt dans un script
Man bash : chapitre parameter expansion.
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#21 Le 14/06/2011, à 13:27
- bishop.sad.clown
Re : Code d'erreur pour installation de dépôt dans un script
@FRUiT : Merki = ) j'y cours de ce pas !
@++ , Rob'
→ Trusty x64
Je n'ai pas toujours les réponses mais je les cherche en même temps que vous... =· þ
Hors ligne
#22 Le 14/06/2011, à 14:00
- FRUiT
Re : Code d'erreur pour installation de dépôt dans un script
D'ailleurs regarde aussi le man dash (même chapitre), car ses possibilités en développement de paramètres sont bien moindres.
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne