Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/03/2011, à 18: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, à 14:23)

Hors ligne

#2 Le 19/03/2011, à 19: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, à 19: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, à 19: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, à 22: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.

fruit a écrit :

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, à 22:10)

Hors ligne

#6 Le 19/03/2011, à 22: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 20/03/2011, à 00: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 20/03/2011, à 00:10)

Hors ligne

#8 Le 20/03/2011, à 00: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, à 11: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, à 20: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, à 16: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, à 17: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, à 19: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, à 17: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, à 19:19

clovisbis

Re : Automatiser lancement d'un script apres l'install d'un noyau

up

Hors ligne