#1 Le 21/09/2009, à 16:03
- percherie
Besoin de conseils et d'aide pour mon premier script
Bonjour à tous,
Ce que je cherche à faire semble simple mais je ne connait pas très bien l'utilisation du shell en détail. Pour l'instant le script fonctionne en m'inspirant d'autre mais c'est très limite.
J'ai donc besoin de petit conseil sur certaines syntaxe ou amélioration sur ma méthode.
Sans rentrer dans les détails j'ai réussi à ajouter un dépot via le shell mais je n'arrive pas à vérifier si une ligne de dépot est déjà présente pour éviter de créer des doublons.
Voici la commande d'ajout et la tentative de vérification, problème l'ajout ce fait quoi qu'il arrive
# rajout de dépôts dans sources.list s'ils sont absents
if cat /etc/apt/sources.list | grep -v "http://scriptsbash.xdir.org/apt/" #test de l'absence
then
echo deb http://scriptsbash.xdir.org/apt/ jaunty universe \#Arte+7recorder | sudo tee -a /etc/apt/sources.list
fi
Ensuite en me documentant, j'ai trouver une suite de commande qui permet d'interroger un serveur de clé pour ensuite les ajouter dans apt-get (je n'ai pas trouver comment exporter ces clé en gpg). J'ai un fichier avec une longue suite de commande répétitive et je cherche à conserver que le clé pour faire tourner en boucle les commandes.
Voici la commande en question, l'idéal étant de conserver la liste des clés comme 0C5A2783 (pour médibuntu) dans un seul fichier ou même beaucoup mieux sous forme de fichier gpg supprimant le besoin d'un accès internet.
# Medibuntu
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-key 0C5A2783 && gpg -a --export 0C5A2783 | sudo apt-key add -
Ps : heu est ce qu'il est possible de vider tout un fichier texte avec la fonction grep ou tout autre fonction?
Nomade en camion utilisant Ubuntu. Si vous souhaitez suivre mes voyages : http://toutenkamion.net/
Hors ligne
#2 Le 21/09/2009, à 16:44
- nesthib
Re : Besoin de conseils et d'aide pour mon premier script
pour le test de l'existence dans ton fichier
if ! grep -q "ce_que_tu_cherches" /etc/apt/sources.list; then
echo 'ta ligne à ajouter' | sudo tee -a /etc/apt/sources.list
fi
avec grep -v tu trouves tout ce qui ne correspond pas à ton motif, donc tu trouves quelque chose et ton test marche à chaque fois
pour vider un fichier texte:
>fichier_texte
pour la clé gpg je n'ai pas compris exactement ce que tu voulais faire
Dernière modification par nesthib (Le 21/09/2009, à 16:52)
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#3 Le 21/09/2009, à 18:30
- percherie
Re : Besoin de conseils et d'aide pour mon premier script
Merci pour ton aide, ça m'a bien aidé.
Concernant les clés, je me suis préparer un fichier contenant les 8 derniers caractères de clés de dépôt que j'utilise, ceci pour chaque clé. Pour l'instant il est garni de commandes qui ce répète et je cherche à simplifier ça en faisant tourner la même commande traitant une à une les requètes.
Voici un bout du fichier
# Thèmes de bureau Bisigi
881574DE
# Amule
4B2C459E
# Chromium
4E5E17B5
# Medibuntu
0C5A2783
Et je compte utiliser la commande cité plus haut qui utilise chacune des fin de clé pour interroger un serveur de clé. Bon c'est un peut inutile sur le moment mais ça me permet de mieux apprendre avec des exemples simple.
Ps : la commande >fichier-texte en sudo ne fonctionne pas, j'ai essayer de placer sudo en divers endroit sans réel succés
Nomade en camion utilisant Ubuntu. Si vous souhaitez suivre mes voyages : http://toutenkamion.net/
Hors ligne
#4 Le 21/09/2009, à 18:55
- nesthib
Re : Besoin de conseils et d'aide pour mon premier script
pour effacer en root ton fichier
echo -n | sudo tee ton_fichier
il y a sûrement plus simple mais c'est ce qui me passe par la tête
sinon pour ton fichier avec les listes de clés voici ce que je ferais
for i in `grep '^[a-Z0-9]\{8\}$' le_fichier_avec_les_clés`
do
echo $i
done
le grep récupère les lignes ne comportant rien d'autre que 8 caractères alphanumériques (a-Z0-9) dans ton fichier et la boucle for lance la commande 'echo la_clé' pour chaque clé trouvée
edit: bien sûr tu adaptes la commande 'echo $i' à ce que tu veux faire, $i contient la valeur de ta clé
Dernière modification par nesthib (Le 21/09/2009, à 18:58)
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#5 Le 21/09/2009, à 19:47
- percherie
Re : Besoin de conseils et d'aide pour mon premier script
Grand merci pour ton aide, ça me donne déjà quelques bases complété avec la documentations disponible sur le net, je devrais bien m'en sortir
Merci encore.
Nomade en camion utilisant Ubuntu. Si vous souhaitez suivre mes voyages : http://toutenkamion.net/
Hors ligne
#6 Le 21/09/2009, à 20:14
- nesthib
Re : Besoin de conseils et d'aide pour mon premier script
Grand merci pour ton aide, ça me donne déjà quelques bases complété avec la documentations disponible sur le net, je devrais bien m'en sortir
Merci encore.
de rien!
tu peux éditer ton premier message et ajouter [résolu] dans le titre si tu veux
sinon, par curiosité, tu fais un script d'installation pour ubuntu? si tu veux tu peux regarder le mien et poster le tien si tu pense qu'il peut servir à quelqu'un
bonne soirée
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#7 Le 21/09/2009, à 21:54
- percherie
Re : Besoin de conseils et d'aide pour mon premier script
Je crois que pour le résolu j'ai encore besoin d'un peut d'aide de ta part, je reviens dessus en fin de sujet
Sinon justement c'est de ton script que je suis partit... depuis peut, je me retrouve régulièrement à installer ubuntu en dualboot et j'ai donc créer un dépot local.
L'idée est donc de vider le sources.list pour y placer mon dépot, d'installer automatiquement tout les codecs, utilitaire indispensable, les mises à jour pour supprimer ceux dont on ne veut plus ou pas. On évite donc l'étape téléchargement, c'est plus rapide surtout quand on dispose qu'une connection 3g ou un bas débit.
L'étape suivante consiste à restaurer le fichier sources.list préalablement sauvegarder et d'ajouter tous les dépôts complémentaire avec leurs clés pour le jour où la station sera connecté à internet.
D'autres opérations sont effectuées à part pour faire un téléchargement des mises à jour en ce basant sur un live-usb, les stocker dans le dépôts local et faire sa mise à jour. Je pensait faire de même pour les clés mais même à la mains j'ai trouver comment les réunir en un seul fichier .asc ou .gpg
Si tu le souhaite, récupère donc intégralement l'idée de mon script ou mon script, si il peut aider, j'aurai pas passer des heures que pour comme ça.
Donc je revient à ma question :
Comment avec 2 fichiers, vérifier que chaque ligne du fichier A existe ou pas dans le fichier B?
Je réalise ma faiblesse dans le domaine mais le raisonnement me semble simple. Je pensait utiliser une boucler qui extrait la ligne n°1 du ficher A pour comparer dans B grâce à la fonction grep. Si la ligne n'existe pas, je l'ajoute à B.
Concrètement c'est pour ajouter une liste de dépôts dans les sources.list sans créer de doublon
Nomade en camion utilisant Ubuntu. Si vous souhaitez suivre mes voyages : http://toutenkamion.net/
Hors ligne
#8 Le 22/09/2009, à 00:37
- nesthib
Re : Besoin de conseils et d'aide pour mon premier script
Je crois que pour le résolu j'ai encore besoin d'un peut d'aide de ta part, je reviens dessus en fin de sujet
Sinon justement c'est de ton script que je suis partit... depuis peut, je me retrouve régulièrement à installer ubuntu en dualboot et j'ai donc créer un dépot local.
L'idée est donc de vider le sources.list pour y placer mon dépot, d'installer automatiquement tout les codecs, utilitaire indispensable, les mises à jour pour supprimer ceux dont on ne veut plus ou pas. On évite donc l'étape téléchargement, c'est plus rapide surtout quand on dispose qu'une connection 3g ou un bas débit.L'étape suivante consiste à restaurer le fichier sources.list préalablement sauvegarder et d'ajouter tous les dépôts complémentaire avec leurs clés pour le jour où la station sera connecté à internet.
D'autres opérations sont effectuées à part pour faire un téléchargement des mises à jour en ce basant sur un live-usb, les stocker dans le dépôts local et faire sa mise à jour. Je pensait faire de même pour les clés mais même à la mains j'ai trouver comment les réunir en un seul fichier .asc ou .gpg
Si tu le souhaite, récupère donc intégralement l'idée de mon script ou mon script, si il peut aider, j'aurai pas passer des heures que pour comme ça.
Si j'ai bien compris tu vaux faire un dépô local pour installer plusieurs postes?
si tu as besoin d'installer vraiment beaucoup de postes il y a une astuce (pas forcément facile à mettre en place) qui est d'utiliser un serveur tiers sur lequel sont connectés les postes et qui redirige les demandes de connexion par un proxy (ainsi tu n'as pas à télécharger les paquets pour chaque machine), avec cette méthode pas besoin de toucher au sources.list des clients
je n'ai plus tout le protocole en tête mais je peux m'y replonger si ça t'intéresse.
sinon pour 2 ou 3 machines tu peux facilement installer des paquets à partir d'un CD sans toucher à la liste des dépôts.
"sudo aptitude download xxxxxx" pour télécharger ton paquet et aptoncd pour créer des cd/clés usb avec tes paquets
quoiqu'il en soit pour répondre à ta question :
Donc je revient à ma question :
Comment avec 2 fichiers, vérifier que chaque ligne du fichier A existe ou pas dans le fichier B?
Je réalise ma faiblesse dans le domaine mais le raisonnement me semble simple. Je pensait utiliser une boucler qui extrait la ligne n°1 du ficher A pour comparer dans B grâce à la fonction grep. Si la ligne n'existe pas, je l'ajoute à B.
Concrètement c'est pour ajouter une liste de dépôts dans les sources.list sans créer de doublon
c'est relativement simple :
for i in `cat fichier1` #on liste le fichier1 ligne à ligne dans la variable i
do
if ! grep -q $i fichier2; then #on teste si la ligne est absente du fichier2
echo $i est absent du fichier2
echo $i >>fichier2 #on ajoute la ligne à la fin (ou "echo $i | sudo tee -a fichier2" pour ajouter sur un fichier avec les droits root)
fi
done
sinon tu peux jeter un coup d'œil du côté des commandes diff (affiche les différences entre 2 fichiers), sort (trie un fichier par ordre alphabétique) + uniq (élimine les doublons consécutifs)
bon courage et tiens-moi au courant
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#9 Le 22/09/2009, à 12:57
- percherie
Re : Besoin de conseils et d'aide pour mon premier script
si tu as besoin d'installer vraiment beaucoup de postes il y a une astuce (pas forcément facile à mettre en place) qui est d'utiliser un serveur tiers sur lequel sont connectés les postes et qui redirige les demandes de connexion par un proxy (ainsi tu n'as pas à télécharger les paquets pour chaque machine), avec cette méthode pas besoin de toucher au sources.list des clients
je n'ai plus tout le protocole en tête mais je peux m'y replonger si ça t'intéresse.sinon pour 2 ou 3 machines tu peux facilement installer des paquets à partir d'un CD sans toucher à la liste des dépôts.
"sudo aptitude download xxxxxx" pour télécharger ton paquet et aptoncd pour créer des cd/clés usb avec tes paquets
Oui j'avais potassé la documentations du site où tout est expliqué en détail mais j'installe les poste à partir d'un cd ou usb sans aucun installation réseau, en mono-poste en somme.
Je vie en camion et souvent il m'arrive de faire ce genre d'installation en plein champs chez d'autres amis, il y a donc que mon disque dur externe qui peut être utilisé.
L'avantage c'est qu'en cas de grosse mise à jour chez une personne qui à le net, c'est souvent plus rapide de disposer de son dépôt local... par chez moi l'adsl à du mal à nous parvenir. Je prépare aussi tout ça pour mon voyage au Maroc cet hiver où pas mal de cyber café sont intéressé ou simplement curieux de voir ce que ça peut donner à la place de leur windows longhorn (un xp modifié et très bugué) utilisé un peut partout.
Merci pour l'indication des commandes utile, je vais les potasser pour essayer de recreer la même fonction que toi sous forme d'exercice mais la tienne me semble parfaitement au point.
Je pense finir dans la journée et poster le résulta sur ce sujet pour que toi et chacun d'entre nous puisse en profiter pour s'en inspirer. Je pensait même ajouter un mini script qui créerai automatiquement tous les fichiers que j'utilise... bon ma phrase n'est pas très clair mais ça me permettra de m'exercer.
A ce soir.
Nomade en camion utilisant Ubuntu. Si vous souhaitez suivre mes voyages : http://toutenkamion.net/
Hors ligne
#10 Le 22/09/2009, à 16:14
- percherie
Re : Besoin de conseils et d'aide pour mon premier script
Bon pas de bonne surprise ce soir, je me suis planté lamentablement et je tourne en rond. Concernant ta portion de script elle me coupe les lignes à cause des espaces et de la fonction "cat"
J'ai tenter d'autre chose qui semble fonctionner mais si on applique plusieurs fois le script on à droit à pas mal de doublon. J'ai opté pour la commande "diff -u". L'utilisation de patch peut être intéressant mais ça modifie un fichier pour qu'il ressemble à celui que je fourni.
Voici ma tentative lamentable, j'en suis pas vraiment fier mais je sèche de façon sévère.
#!/bin/bash
# recherche les dépôts à ajouter mais certains seront en double si ils ne sont pas pas dans le même ordre dans le fichier 2
# diff -u fichier2 fichier1 | grep ^+[^+] | cut -c2- >> temporaire
>temp
>sources_temp
diff -u sources depots | grep ^+[^+] | cut -c2- >> temp
#######################
# suppression des lignes en double sur le fichier2
# diff -u temporaire fichier2 | grep ^+[^+] | cut -c2- >> fichier2_propre
#
#TENTATIVE ECHOUÉ - RECHERCHER AUTRE CHOSE AVEC LE CODE CI DESSOUS
#diff -u temp sources | grep ^+[^+] | cut -c2- >> sources_temp
#######################
#Ajout des dépôts selectionner à la fin du fichier2_propre
#######################
#DESACTIVÉ EN FONCTION DE LA COMMANDE CI DESSUS
#cat temp >> sources_temp
#>sources
#cat sources_temp >> sources
#######################
cat temp >> sources
Je te cache pas qu'un peut de conseil m'aiderai bien.
Nomade en camion utilisant Ubuntu. Si vous souhaitez suivre mes voyages : http://toutenkamion.net/
Hors ligne
#11 Le 22/09/2009, à 19:38
- nesthib
Re : Besoin de conseils et d'aide pour mon premier script
je suis allé un peu vite pour la commande précédente, désolé
voici donc comment lire ligne à ligne avec la prise en compte des espaces :
while read line; do #on lit ligne à ligne sur l'entrée standard et on affecte la ligne à la variable "line"
if ! grep -q "$line" fichier2; then
echo $line est absent du fichier2
echo $line >>fichier2 # on ajoute la ligne à fichier2
fi
done <fichier1 #on injecte le fichier sur l'entrée standard de "while read..." (on pourrait le passer au début avec "cat fichier1 | while...."
je pense que ça reste le plus simple à mettre en œuvre
pour supprimer tes lignes en double 2 solutions :
- en triant
sort -u fichier
(option "-o fichier" à ajouter à la fin pour écrire le résultat dans "fichier")
-en gardant l'ordre des lignes :
awk '{if (x[$0] != "") next ; print $0 ; x[$0]=$0}' fichier
si tu as l'occasion de lire de la doc sur sed et awk, les commandes sont très puissantes
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne