#1 Le 19/03/2011, à 17:41
- clovisbis
Automatiser lancement d'un script apres l'install d'un noyau
Bonjour à tous,
Je suis l'heureux possesseur d'une carte son qui n'est pas correctement prise en charge par alsa 1.0.21 (la version de lucid par defaut). Je suis donc obliger de compiler les derniers pilotes à chaque fois que je change de noyau. Pour me facilité la tache j'ai ecris un script basé, pour la compile d'alsa, sur cette page là : http://monespaceperso.org/blog/2010/05/ … ynx-10-04/
#!/bin/bash
tps_execution () {
RUNTIME=$(( $END - $START ))
#Si le temps est superieur a 60sec
if [ $RUNTIME -gt 59 ]; then TIME=`printf "%d min %d sec\n" $((RUNTIME/60%60)) $((RUNTIME%60))`
else
TIME=`printf "%d sec\n" $((RUNTIME))`
fi
echo "Alsa s'est installé en $TIME"
}
# téléchargement des fichiers
download () {
cd ~
rm -rf ~/alsa* ~/.pulse*
echo -n "Indiquer la version à télécharger : "
read ver
wget -nv ftp://ftp.alsa-project.org/pub/driver/alsa-driver-"$ver"*.tar.bz2
wget -nv ftp://ftp.alsa-project.org/pub/lib/alsa-lib-"$ver"*.tar.bz2
wget -nv ftp://ftp.alsa-project.org/pub/utils/alsa-utils-"$ver"*.tar.bz2
}
# copie des fichiers dans le dossier /usr/src/alsa
copie () {
sudo rm -rf /usr/src/alsa
sudo mkdir -p /usr/src/alsa
cd /usr/src/alsa
sudo cp ~/alsa* .
}
extraction () {
echo "Extraction"
for i in *.tar.bz2 ; do sudo tar xjf $i ; done
}
# quelques paquets à installer pour une compilation
preparation () {
sudo apt-get -y install build-essential ncurses-dev gettext xmlto libasound2-dev
sudo apt-get -y install linux-headers-`uname -r` libncursesw5-dev
}
#compilation des 3 programmes
compilation() {
cd alsa-driver*
sudo ./configure
sudo make
sudo make install
cd ../alsa-lib*
sudo ./configure
sudo make
sudo make install
cd ../alsa-utils*
sudo ./configure
sudo make
sudo make install
}
# début partie principale du script
clear
echo Ce script permet de mettre à jour les pilotes d\'alsa, les dossiers décompressés seront situés dans /usr/src/alsa/
echo
echo La version installée est la suivante :
echo
cat /proc/asound/version
echo
echo les dossiers présents dans /usr/src/alsa/ sont :
ls -F /usr/src/alsa/ | grep '/$'
echo
echo "Voulez vous télécharger une nouvelle version ? "
echo "Pour connaître la dernière version aller ici :"
echo
echo "http://www.alsa-project.org/main/index.php/Main_Page"
echo
echo "Déroulement :"
echo "1.Téléchargement dans /home des fichiers"
echo "2.Dossier /usr/src/alsa vidé"
echo "3.Fichiers téléchargés copiés dans /usr/src/alsa"
echo "4.Fichiers décompressés"
echo -n "Y/N :"
read ouinon
if [ "$ouinon" = "y" ] || [ "$ouinon" = "Y" ]; then
{
download
copie
extraction
echo
echo les dossiers présents dans /usr/src/alsa/ sont :
ls -F | grep '/$'
echo
echo Supprimez les dossiers éventuellement inutiles.
echo
}
fi
echo -n "Voulez-vous effectuer la compilation ? (Y/N) : "
read ouinon
if [ "$ouinon" = "y" ] || [ "$ouinon" = "Y" ]; then
{
echo Début de l\'installation d\'alsa
sudo /sbin/alsa-utils stop
preparation
cd /usr/src/alsa
echo
START=$(date +%s)
compilation
END=$(date +%s)
tps_execution
echo
echo -n "Voulez vous redemarrer Y/N : "
read ouinon
if [ "$ouinon" = "y" ] || [ "$ouinon" = "Y" ]; then
{
sudo reboot
}
elif [ "$ouinon" = "n" ] || [ "$ouinon" = "N" ]; then
{
echo
echo "Qu'il en soit ainsi, à pluche "
}
else
{
echo "Il faut taper Y ou N!! Pas $ouinon"
}
fi
}
elif [ "$ouinon" = "n" ] || [ "$ouinon" = "N" ]; then
{
echo
echo "Qu'il en soit ainsi, à pluche "
}
else
{
echo "Il faut taper Y ou N!! Pas $ouinon"
}
fi
exit 0
Mon script marche très bien dans une certaine mesure.
-J'aimerais qu'il me détecte automatiquement la dernière version d'alsa (et non pas l'indiquer moi même).
-J'aimerai que le téléchargement ne se base pas un nom générique du fichiers (avec des * pour la version) mais qu'il trouve vraiment le nom du fichiers de la dernière version.
-J'aimerai que la compilation soit lancer de manière automatique à chaque changement de noyau
Si vous savez comment faire tout ça, je suis preneur.
Dernière modification par clovisbis (Le 27/03/2011, à 13:23)
Hors ligne
#2 Le 19/03/2011, à 18:22
- wido
Re : Automatiser lancement d'un script apres l'install d'un noyau
Bonjour,
le truc que tu devrais faire, c'est d'analyser la page source de tes différents liens ftp, et de trouver la dernière version.
et/ou de faire une boucle d'essai (1.0.0, 1.0.1, 1.0.2, etc..) ou de classer les fichiers du ftp par leurs dates et d'extraire la version.
Hors ligne
#3 Le 19/03/2011, à 18:24
- FRUiT
Re : Automatiser lancement d'un script apres l'install d'un noyau
Pourquoi ne pas upgrader en maverick si c'est pas trop indiscret ? Tu aurais surement plus ce problème...
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
#4 Le 19/03/2011, à 18:53
- wido
Re : Automatiser lancement d'un script apres l'install d'un noyau
#!/bin/bash
lien="ftp://ftp.alsa-project.org/pub/lib/"
lien2="ftp://ftp.alsa-project.org/pub/driver/"
lien3="ftp://ftp.alsa-project.org/pub/utils/"
#Analyse des fichiers:
mkdir /tmp/alsaftp
cd /tmp/alsaftp
curl $lien > ./alsalien.txt
curl $lien2 > ./alsalien2.txt
curl $lien3 > ./alsalien3.txt
cat ./alsalien.txt | awk '{print $NF}'
c'est une ébauche, il reste à classer les versions mais le problème c'est que sort ne différencie pas les versions spéciales:
alsa-utils-1.0.1.tar.bz2
alsa-utils-1.0.20.tar.bz2
alsa-utils-1.0.21.tar.bz2
alsa-utils-1.0.22.tar.bz2
alsa-utils-1.0.23.tar.bz2
alsa-utils-1.0.24.2.tar.bz2
alsa-utils-1.0.2.tar.bz2
Hors ligne
#5 Le 19/03/2011, à 21:09
- clovisbis
Re : Automatiser lancement d'un script apres l'install d'un noyau
@wido : C'est une approche intéressante. Je ne comprends pas précisément comment fonctionne "awk '{print $NF}'"
On pourrait passer par les dates, la dernière version ne semble pas avoir d'année indiquée, mais une heure à la place, cela permet d'identifier la ligne tout de suite.
A la limite il n'y a même qu'a rechercher le caractère ":" et cela semble être la dernière version. mais je ne sais pas comment faire ça.
Pourquoi ne pas upgrader en maverick si c'est pas trop indiscret ? Tu aurais surement plus ce problème...
Je viens d'installer mes 3 PCs en lucid, ma ubuntu remix, donc je ne vais pas changer tout de suite. De plus je préfère rester en LTS.
Dernière modification par clovisbis (Le 19/03/2011, à 21:10)
Hors ligne
#6 Le 19/03/2011, à 21:14
- wido
Re : Automatiser lancement d'un script apres l'install d'un noyau
la fonction NF imprime le dernier champ.
Hors ligne
#7 Le 19/03/2011, à 23:03
- clovisbis
Re : Automatiser lancement d'un script apres l'install d'un noyau
Ok et awk sert à quoi ? dans l'histoire ?
Sinon le probleme est quasiment resolu, il suffit de remplacer la derniere ligne par :
cat ./alsalien.txt | grep : | awk '{print $NF}'
Comment je l'envoie dans une variable au lieu de la console ?
Dernière modification par clovisbis (Le 19/03/2011, à 23:10)
Hors ligne
#8 Le 19/03/2011, à 23:15
- wido
Re : Automatiser lancement d'un script apres l'install d'un noyau
tavariable=`cat ./alsalien.txt | grep : | awk '{print $NF}'`
Hors ligne
#9 Le 20/03/2011, à 10:44
- clovisbis
Re : Automatiser lancement d'un script apres l'install d'un noyau
Merci, alors en fait il y a quand même un problème. Cette méthode ne doit fonctionner correctement que si il n'y a eu qu'un seul fichier déposer sur le site dans l'année en cours.
Hors ligne
#10 Le 20/03/2011, à 19:56
- clovisbis
Re : Automatiser lancement d'un script apres l'install d'un noyau
Je propose une idée de ce que je peut faire, il faudrait me donner les commande possible...
recherche des fichiers déposés cette année
1- 1 seul fichier trouvé ->je récupéré le nom, c'est bon
2- plusieurs fichiers trouvés -> je tri en fonction du mois les résultats, je fais un grep sur chaque mois en partant du mois en cours et dés que le champs retourné n'est pas vide je récupère le nom du fichier.
3- aucun fichier trouver (champ vide) -> faire un grep sur l'année antérieur ->et faire la même chose que précédemment.
Si vous avez une meilleur idée...
Hors ligne
#11 Le 21/03/2011, à 15:26
- clovisbis
Re : Automatiser lancement d'un script apres l'install d'un noyau
Pour tester les differents mois, j'ai besoin d'une boucle sur les mois, qui doit s'arrêter dès qu'un mois est present dans une ligne.
je pensais faire un truc comme ça :
for test in janvier fevrier mars avril mai juin juillet Aout septembre octobre novembre Decembre
do
done
mais je ne sais pas comment arrêter la boucle. Une solution ?
Hors ligne
#12 Le 21/03/2011, à 16:22
- clovisbis
Re : Automatiser lancement d'un script apres l'install d'un noyau
J'ai trouver l'astuce suivante: je stocke le nom du mois dans une autres variable. La boucle continue pour tous les mois mais c'est pas trop grave.
#!/bin/bash
clear
an="2010"
mois=""
for test in Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
do
lien=`cat ./alsalien.txt | grep $an | grep $test | awk '{print $NF}'`
if [ "$lien" = "" ]
then
{
echo "Aucun fichier pour le mois de $test"
}
else
{
echo "Fichier trouvé pour $test"
if [ "$mois" = "" ]
then
{
mois=$test
}
fi
}
fi
done
echo "mois le plus récent : $mois"
echo "Version fichier trouvée : `cat ./alsalien.txt | grep $an | grep $mois | awk '{print $NF}'`"
exit 0
Hors ligne
#13 Le 21/03/2011, à 18:05
- clovisbis
Re : Automatiser lancement d'un script apres l'install d'un noyau
Bon bah finalement je me suis débrouiller en bidouillant.
Si il y a des meilleurs idée ?
#!/bin/bash
ani=""
anv=""
mois=""
jour=0
# Detection année
anact=$(date +%Y)
anant=$(( $anact - 1 ))
lien=`cat ./alsalien.txt | grep : | awk '{print $NF}'`
if [ "$lien" = "" ]
then
{
#echo "Aucun fichier pour l'année $anact"
#echo "Fichier utilisé pour $anant"
ani=$anant
anv=$anant
}
else
{
#echo "Fichier utilisé pour $anact"
ani=":"
anv=$anact
}
fi
# Detection mois
for test in Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
do
lien=`cat ./alsalien.txt | grep $ani | grep $test | awk '{print $NF}'`
if [ "$lien" = "" ]
then
{
echo -n #"Aucun fichier pour le mois de $test"
}
else
{
#echo "Fichier trouvé pour $test"
if [ "$mois" = "" ]
then
{
mois=$test
}
fi
}
fi
done
#Detection jour
for ((a=31; a>=1 ; a--))
do
lien=`cat ./alsalien.txt | grep $ani | grep $mois | colrm 1 47 | colrm 3 40 | grep -w $a `
if [ "$lien" = "" ]
then
{
echo -n #"Aucun fichier pour le $a du mois de $mois"
}
else
{
#echo "Fichier trouvé pour le $a du mois de $mois"
if [ $jour = 0 ]
then
{
jour=$a
}
fi
}
fi
done
echo "jour le plus récent : $jour $mois $anv"
echo "Version fichier trouvée : `cat ./alsalien.txt | grep $ani | grep $mois | grep -w $jour | awk '{print $NF}'`"
exit 0
Hors ligne
#14 Le 23/03/2011, à 16:37
- clovisbis
Re : Automatiser lancement d'un script apres l'install d'un noyau
J'ai finalement reussi à finir le script de tous mes désirs
Script màj Alsa
Pour pouvoir lancer le script il faut le rendre exécutable si ce n'est pas fait et le lancer en sudo
Il me reste un souci.
j'ai réaliser une version qui ne demande aucune intervention de la part de l'utilisateur et dont le but est d'être lancer automatique à l'installation d'un nouveau noyau.
pour faire ça, j'ai utiliser cette commande :
sudo install script /etc/kernel/postinst.d
technique adapté de cette page : auto install
Malheureusement cela ne marche pas.
il me faudrait de l'aide pour ça.
Hors ligne
#15 Le 05/04/2011, à 18:19
- clovisbis
Re : Automatiser lancement d'un script apres l'install d'un noyau
up
Hors ligne