Script Bash : automatiser le traçage des paquets installés

Bonjour,
je viens de faire un script dans un fichier /.scripts/apt-i.sh, que je mets volontier ici pour d’éventuelles corréctions et suggestions, et critiques …
Y sert à quoi ? tout est dans le titre …

Je ne l’ai testé que dans un cas pour l’instant, donc, inutile de vous dire que le lancer serait à vos risques et perils … (selon la phrase consacrée :wink: )

[code]#!/bin/bash

Initialise les variables ------------------------------------------------

date="date | tr " " "_"" # date, sans les espaces
apt="$HOME/Apt/" # nom du repertoire de trace
fic=$date"_" # nom du fichier de trace
ficerr="" # nom du fichier à écraser
com="" # la commande suivant root ou utilisateur
err=“paramètre manquant:le nom du paquet à installer doit être fourni…:vous pouvez spécifier une release”

test l’absence de params ----------------------------------------

if [ “$#” -eq 0 ]; then
echo $err | tr “:” “\n” # affiche le message d’erreur : absence de param
exit 0 # quitte le script
else
fic="$fic$1" # forme le nom du fichier, concatene fic et param

test si le repertoire Apt existe dans home de l’user -------------------

if [ ! -d “$apt” ]; then
echo “$apt n’existe pas. Ce repertoire va être créé"
mkdir $apt # création
echo ls -l $apt # affichage
fic=”$apt$fic" # forme le chemin absolu vers fic
else
fic="$apt$fic"
fi

--------------------------------------------------------------------------------

l’existence du fichier, trés improbable vu le nom de celui-ci

# if [ -e “$fic” ]; then # fichier déjà existant

# echo fichier existant, verifier … exit

# exit 0

# fi

-------------------------------------------------------------------------

#----- la commande apt-i proprement dite -----------

--------------------------------------------------------------------------

Execute une simulation de apt-get du pkg —

Redirige à la fois en console et dans le fichier $fic la sortie de la simulation

Supprime les fichiers temporaires

Ouvre fic pour aperçu ------

A la fermeture du fichier, invite à l’installation -------

Y procède ou non -----------

-------------------------------------------------------------------------

--------------------------------------------------------------------------

if [ “id -u” -eq 0 ]; then # si root
com=“apt-get -su install -t $2 $1” # affecte la commande à $com
else # si user simple
com=“sudo apt-get -su install -t $2 $1” # utilise sudo
fi

------------------------------ lance le shell en simulation -----------

echo “$com” > /tmp/-; cat < /tmp/-| tee /tmp/–; cat /tmp/- /tmp/-- > “$fic”
&& rm /tmp/-* && nano “$fic”

---- Demande confirmation pour installer -----------------------

echo voulez vous installer ce paquet (O/n) ?
read # attente de saisie
case “$REPLY” in # énumère les cas de réponse
Y | y | o | O ) # oui

enregistre une démarquation dans le fichier $fic entre simulation et installation

  echo "Installation demandée ######################" >> $fic
  echo "Installation demandée ####################"
  com=${com/"-su "/""}
  echo "$com" > /tmp/-; `cat < /tmp/-`| tee /tmp/--; \
    cat /tmp/- /tmp/-- >> "$fic" && rm /tmp/-* && nano "$fic";;
N | n ) echo non installation;;		# non
* ) echo pffffffff;;				# autres réponses --------

esac
fi
exit 0

-----------------------------------------------------------------------

------------------------------------------------------------------------------

[/code]

le but, c’est de lancer un alias d’apt get en simulant avant, du style de ce que je cherchais à faire dans mon post sur les tubes … ce qui ici pourrait me permettre de faire :
en root - apt-i pkg unstable pour simuler/installer/garder trace de : apt-get install -t unstable pkg. (ça j’ai testé, ça marche).
en user - ben exactement pareil, sudo est en dur dans le script … (pas encore testé).
les alias devraient pas être un souçis, c’est la syntaxe, les opérateurs de bash et tout ça, que je voudrai améliorer, et surement l’algo … aussi …
Merci de jeter un oeil …

Très bonne idée de script.
Je prefererai l’utilisation de la commande mktemp pour créer le fichier temporaire.
et
Est-ce qu’on garde un historique? Exemple je veux regarder ce que j’ai installé/répondu lors de ma mise à jour d’il y a 3j.

Il y a aussi /var/log/aptitude :wink:

C’est à dire que je n’utilise pas aptitude … je vais chercher du côté d’apt pour voir quelles genres de trace il garde de ses manips (ça m’étonnerait pas qu’il existe l’équivalent de /var/log/aptitude pour apt quelquepart)…

jcode@debian:~$ ls -l /var/log/aptitude -rw-r--r-- 1 root root 0 2006-06-08 06:26 /var/log/aptitude

[quote=“BorisTheButcher”]
Je prefererai l’utilisation de la commande mktemp pour créer le fichier temporaire.[/quote]je vais regarder avec mktemp que je connaissais pas, mais j’ai éviter le blem des fichiers temp en améliorant la commande :

jcode@debian:~$ var="sudo apt-get -su install postfix"; echo $var > /tmp/-; $var | tee -a /tmp/- ici simplifié, pour montrer que je n’utilise plus qu’un seul fichier, le définitif.
C’est un truc comme ça que je vais mettre dans le script sans doute, /tmp sera le repertoire Apt de l’user, (/tmp)/- le nom du fichier tel que généré.

Le souci que j’ai eu, c’est que ma commande tout en apportant le résultat voulu(tout noter dans un fichier et afficher simultanément à l’écran) va fait peur lorsque je l’ai exécuté en vrai ( sans simuler) :
La question voulez-vous (y/n) ne m’est pas apparu à l’écran, j’ai fait “entrer” à l’aveuglette quoi. Il faut que je travaille sur les pipes, et est ce que c’est question est dans 1& (stdout) ou dans 2& (stdin). Faut que je reteste avec une install de paquet problematique pour régler ça … mais pour le moment je lis la doc sur bash …
Normalement, la réponse (étant stdout) doit apparaitre dans le fichier oui.
Le probleme, c’est plus la question (je ne l’ai pas vu s’afficher, gênant).
J’essaie de préparer un exemple de fichier ce soir .

Ca garde aussi les choix de l’utilisateur? Chez moi il est vide ce fichier. En meme temps je melange apt-get et aptitude…

J’ai un script qui liste les anciens paquets installé:
./script
ou
./script 100 liste les 100 derniers paquets installés

#!/bin/sh echo -e "\nLast $1 installed packages:\n" match=${2:-xxxxxxxx} cat /var/log/dpkg.log | grep \ installed\ | awk '{print $5}' | grep -v "$match" | tail -$1

Mais moi ce que je veux c’est les questions reponses posées par apt-get.
Comme expliqué dans la doc debian, avec screen on s’en sort; mais je l’ai jamais mis en place.

Le coup du mktemp c’est surtout pour eviter un truc comme ca:

ln -s /etc/password /tmp/- #./apt-i.sh

bonsoir,
je ne comprend pas bien ton dernier exemple à propos de mktemps … :blush:
J’ai trouvé un truc pas mal du tout, c’est la commande script -a -c [file]
Je suis dessus, ça rend bien …
Par contre, je vois que tu donne exemple de #!/bin/sh, est ce trés différent de bash,
car j’ai des soucis pour manipuler les chaines de caractères (et dans toutes la doc que j’ai trouvé aujourd’hui,ya pas la moitié des exemples que je parviens à appliquer - souvent des erreurs de guillemets ou autres- dans les bout de code donnés).
Par exemple, en bash, je n’arrive pas à utiliser :

  • le caractère \n
  • l’extraction de chaine (parvenu, mais quel galère)
  • calcul arythmétique

Je suis un peu paumé du fait que les variables ne sont pas typées je pense, je cherche à faire des fonctions qui renvoie autres chose qu’une valeur numérique…
Je crois que je vais persevérer en bash, mais je voudrais appelé des bibliothéques et fonctions java, la poo, c’est vachement plus commode je trouve …
Je peux avoir quelques tuyaux sur l’appel de commande java au sein d’un scripts bash ? (j’ai un probleme de path sans doute et de syntaxe).
concretement, mettons que j’ai une classe manipchaine et son fichier .java, dans le script, comment je l’appelle ?
Où doit se trouver les .java et .class pour que bash (c’est pas le cas) si retrouve ?

Hello,

Pas mieux que la bible du scripting, abs.traduc.org/abs-3.4-fr/ dedans tu as tout, les calculs arythmétiques, les formats d’affichage, les expressions reguliere, les itterations, les conditions, etc…

bonjour,
cii stonfi, je vais me coller sur celui-là alors, plus mieux en effet …
Des idées pour exécuter des commandes java dans un script ? (syntaxe, paramètrage, path, Exemples, etc …).

Edit : il existe une version 3.9 du document : http://abs.traduc.org/abs-3.9-fr/index.html

Bon ben ça avance pas mal, j’ai un peu dérivé :stuck_out_tongue: , me penchant en particulier sur l’upgrade (qui pose des fois problème).
ça m’a pris du temps d’implementer des “tas” de fonctions qui vont me faciliter la tâche par la suite, mais j’ai presque fini, et tout sera bien consigné dans un fichier, avec les réponses …
Bon ça fait surtout usage de apt, donc pas pour tout le monde …
Des que j’ai mis au propre, je le … ben le hic, c’est qu’il y a plus de 1000 lignes, je me vois mal le poser ici, et comme j’ai mis de côté la securité, le ftp, apache (tous est fermé), où est-ce que je le met ce scripts et les fonctions qui vont avec ? Pour ceux que ça interesse bien sur …
ps: j’en ai encore pour deux trois jours à mon avis … Autant dire que ça n’a plus rien à voir avec ce dit plus haut …

Version 4.0 disponible … les liens précédents ne sont plus valides.