View previous topic :: View next topic |
Author |
Message |
yaubi Apprentice
Joined: 15 Jan 2003 Posts: 194 Location: Oxford, UK
|
Posted: Tue Mar 16, 2004 5:30 pm Post subject: [HowTo] Charger des modules différents selon le kernel |
|
|
Bonjour à tous,
La question de Gnafron (https://forums.gentoo.org/viewtopic.php?t=149726) m'a rappelé qu'il y a quelques mois je jonglais avec une bonne dixaine de noyaux, de différentes versions, différentes branches, différentes configurations. J'avais besoin de tester un module kernel en béta dans de multiples environnements.
Le problème qui frappe instantanément est celui du chargement des modules au démarrage. Certes, on peut les charger à la main, mais c'est fastidieux, et puis surtout il y a un service pour faire ça automatiquement, j'ai nommé : /etc/init.d/modules.
Pour ceux qui ne sont pas sûr de la manière dont il fonctionne, c'est très simple : il regarde quelle est la version du kernel en cours de fonctionnement et charge les modules indiqués dans le fichier /etc/modules.autoload.d/kernel-VERSION.
La limitation de ce script vient du fait qu'il ne fait pas une distinction très détaillée entre les noyaux : tout au plus, il va différencier un 2.4 d'un 2.6. Ca serait quand même bien pratique qu'il puisse faire la différence entre :
- un 2.4.22 et un 2.4.24
- un 2.4.22-gentoo et un 2.4.22-ck
- un 2.4.22-gentoo-r6 et un 2.4.22-gentoo-r7
- un 2.4.22-gentoo-r6 #1 et un 2.4.22-gentoo-r6 #3
Dans le dernier exemple, le premier noyau correspond à la première compilation (#1) tandis que le deuxième correspond à la troisième (#3). On peut connaître le numéro de compilation en faisant : uname -rv
J'ai donc modifié un peu le script /etc/init.d/modules pour qu'il prenne en compte ces différences, à chaque niveau. Voir le patch en fin de post.
Ainsi, le fichier /etc/modules.autoload.d/kernel-2.4.22-gentoo-r6#3 listera les modules à charger pour le noyau du même nom. Pour simplifier la tâche, j'ai prévu qu'on ne soit pas forcément obliger de nommer ce fichier de manière aussi précise. On peut se limiter à /etc/modules.autoload.d/kernel-2.4.22, auquel cas la liste des modules qu'il contient sera chargée pour tous les noyau 2.4.22 qui n'ont pas leur propre fichier. En fait, on peut choisir le niveau de détection : depuis 2.4 jusqu'à 2.4.22-gentoo-r7#1 (voir les exemples plus haut).
Voilà, c'était mon défi du jour
J'espère que ça servira à quelqu'un.
Sur ce, bonnes vacances ! (enfin pour moi, c'est les vacances, en France je ne sais pas)
Yoann
PJ: Voici mon patch :
Code: | --- ./modules 2004-03-16 16:31:54.000000000 +0000
+++ /etc/init.d/modules 2004-03-16 17:11:55.000000000 +0000
@@ -94,22 +94,35 @@
# Loop over every line in /etc/modules.autoload.
load_modules /etc/modules.autoload
else
- local KV="$(uname -r)"
- local KV_MAJOR="`KV_major "${KV}"`"
- local KV_MINOR="`KV_minor "${KV}"`"
-
+ local KV_build=$(uname -rv | cut -d' ' -f1,2 | sed 's/ //')
+ local KV_release=$(echo ${KV_build} | cut -d'#' -f1)
+ local KV_branch=$(echo ${KV_release} | cut -d'-' -f1,2)
+ local KV_micro=$(echo ${KV_branch} | cut -d'-' -f1)
+ local KV_minor=$(echo ${KV_micro} | cut -d'.' -f1,2)
+
# New support for /etc/modules.autoload/kernel-$KV
- if [ "$(get_KV)" -ge "$(KV_to_int '2.5.48')" ] && \
- [ -f /etc/modules.autoload.d/kernel-"${KV_MAJOR}.${KV_MINOR}" ]
+ if [ -e /etc/modules.autoload.d/kernel-${KV_build} ]
then
- load_modules /etc/modules.autoload.d/kernel-"${KV_MAJOR}.${KV_MINOR}"
-
- elif [ ! -f /etc/modules.autoload.d/kernel-"${KV_MAJOR}.${KV_MINOR}" ]
+ load_modules /etc/modules.autoload.d/kernel-${KV_build}
+
+ elif [ -e /etc/modules.autoload.d/kernel-${KV_release} ]
then
- ewarn "Missing /etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}"
- load_modules /etc/modules.autoload.d/kernel-2.4
- else
- load_modules /etc/modules.autoload.d/kernel-2.4
+ load_modules /etc/modules.autoload.d/kernel-${KV_release}
+
+ elif [ -e /etc/modules.autoload.d/kernel-${KV_branch} ]
+ then
+ load_modules /etc/modules.autoload.d/kernel-${KV_branch}
+
+ elif [ -e /etc/modules.autoload.d/kernel-${KV_micro} ]
+ then
+ load_modules /etc/modules.autoload.d/kernel-${KV_micro}
+
+ elif [ -e /etc/modules.autoload.d/kernel-${KV_minor} ]
+ then
+ load_modules /etc/modules.autoload.d/kernel-${KV_minor}
+
+ else
+ ewarn "Missing /etc/modules.autoload.d/kernel-${KV_build}"
fi
fi
|
|
|
Back to top |
|
|
anigel Bodhisattva
Joined: 14 Apr 2003 Posts: 1894 Location: Un petit bled pas loin de Limoges ;-)
|
Posted: Wed Mar 17, 2004 11:09 am Post subject: |
|
|
Excellente idée !
Tu as pensé à soumettre ton travail pour l'incorporer dans la distrib ? J'avais moi aussi bricolé un truc similaire il y a quelques mois, mais je n'avais jamais pensé à le diffuser.
M'est d'avis qu'on doit pas être juste 2 tordus à avoir l'usage d'un tel patch ? _________________ Il y a 10 sortes d'individus en ce bas-monde : ceux qui causent binaire, et les autres. |
|
Back to top |
|
|
Duncan117 n00b
Joined: 27 Feb 2004 Posts: 31
|
Posted: Wed Mar 17, 2004 12:17 pm Post subject: |
|
|
Merci beaucoup Yoann !
Effectivement anigel, vous ne devez pas être que 2 tordus à utiliser un tel patch. En fait, si je n'utilisais pas beaucoup ce mécanisme, c'est parce qu'il n'était pas aussi souple que vous venez de le rendre.
Merci encore. Trés pratique maintenant et je n'aurais aucune excuse de ne pas l'utiliser. |
|
Back to top |
|
|
DomiX Apprentice
Joined: 26 Oct 2003 Posts: 209 Location: Paris (FRANCE)
|
Posted: Wed Mar 17, 2004 3:22 pm Post subject: |
|
|
Bonjour
Ce patch m'intéresse mais comment l'appliquer ?
A+ _________________ "La connaissance technique ne suffit pas. On doit surpasser les techniques de sorte que l'art devienne un art sans artifice qui apparaît de l'inconscient."
- Daisetsu Suzuki (1870-1966) - |
|
Back to top |
|
|
yaubi Apprentice
Joined: 15 Jan 2003 Posts: 194 Location: Oxford, UK
|
Posted: Wed Mar 17, 2004 10:39 pm Post subject: |
|
|
anigel wrote: | Excellente idée ! |
Merci, merci, tu es trop bon ...
anigel wrote: | Tu as pensé à soumettre ton travail pour l'incorporer dans la distrib ? |
Non, je n'ai pas soumis mon travail pour l'incorporer dans la distrib'. Ca n'est pas encore suffisament testé pour en prétendre quelque chose, à mon avis. Et puis je ne pense pas que ce soit une solution robuste, c'est juste une bidouille faite à la va-vite. D'ailleurs, je viens de me rendre compte aujourd'hui que mon patch ne gère pas le cas des Release Candidate (par ex: 2.4.26-rc3-gentoo). Et comme j'ai la flemme de le modifier ...
Mais bon, rien n'empèche l'un de vous de le reprendre, éventuellement le modifier, et soumettre un rapport de bug à l'équipe de développement
Yoann |
|
Back to top |
|
|
yaubi Apprentice
Joined: 15 Jan 2003 Posts: 194 Location: Oxford, UK
|
Posted: Wed Mar 17, 2004 10:45 pm Post subject: |
|
|
DomiX wrote: | Bonjour
Ce patch m'intéresse mais comment l'appliquer ?
A+ |
Bonjour Domix.
Pour appliquer ce patch, rien de plus simple :
- copie/colle le patch dans un fichier qu'on appellera modules.patch, par exemple
- exécute la commande patch -p0 < modules.patch en tant que root
et voila !
Tu n'as plus qu'à créer, dans /etc/modules.autoload.d/, un fichier au nom de ton noyau (voir mon premier post), contenant les modules que tu veux charger au démarrage de ce noyau.
Have Fun !
Yoann |
|
Back to top |
|
|
TGL Bodhisattva
Joined: 02 Jun 2002 Posts: 1978 Location: Rennes, France
|
Posted: Thu Mar 18, 2004 9:47 am Post subject: |
|
|
Je trouve aussi l'idée excellente, merci yaubi. Je te conseille de bugziller la chose rapidement, même si tu ne la trouves pas parfaite, parceque de toute façon c'est le genre de truc qui prennent toujours du temps à être acceptés. Ça permettra aux devs de commencer à réfléchir sur le principe, c'est toujours ça de gagné, voir de corriger aux même les imperfections que tu auras listées. |
|
Back to top |
|
|
yaubi Apprentice
Joined: 15 Jan 2003 Posts: 194 Location: Oxford, UK
|
Posted: Fri Mar 19, 2004 12:11 am Post subject: |
|
|
TGL wrote: | Je te conseille de bugziller la chose rapidement |
Oui, Ôh grand modérateur, oui !
Bon, c'est chose faite. Et comme je suis un perfectioniste pointilleux (tout ça d'un seul coup), j'ai tout refait et de manière totalement différente. Du coup, maintenant, c'est du robuste et un plus c'est du joli
Pour les curieux : https://bugs.gentoo.org/show_bug.cgi?id=35872
Le code commenté :
Code: | # New support for /etc/modules.autoload/kernel-$KV
# The kernel version is stored in a question-mark field
# separator format, like "2?4?26?rc3?gentoo?r2?1", where the
# final 1 is the build number.
#
local KV=kernel-$(uname -rv | awk '{gsub("[.\\-#]","?"); print $1$2}')
# This weird format acts here as a wilcard pattern. The
# purpose is to find a file whose name is at least part of
# our kernel version.
#
while [ ! $(ls /etc/modules.autoload.d/${KV} 2>/dev/null) ]
do
# Let's drop the last field in the version number
# to check if the corresponding file exists
#
KV_reduced=$(echo ${KV} | awk '{sub("\\?[^\\?]*$",""); print}')
# If we tried all the possibilities unsucessfully,
# then fallback with the ligther name (hopefully the
# most general, like kernel-2.4) and print a warning.
#
if [ ${KV_reduced} == ${KV} ]
then
KV=$(ls -1 /etc/modules.autoload.d/ | awk '{if(!drop)print;drop++}')
ewarn "Missing /etc/modules.autoload.d/kernel-VERSION"
break
fi
KV=${KV_reduced}
done
# Now we have found the file with the closest name, we just
# need to load the modules it lists. Note that if
# /etc/modules.autoload.d/ is empty, KV is an empty string.
#
[ ${KV} ] && load_modules $(ls /etc/modules.autoload.d/${KV})
|
Le patch :
Code: | --- ./modules 2004-03-18 23:31:29.000000000 +0000
+++ /etc/init.d/modules 2004-03-18 23:48:50.000000000 +0000
@@ -92,25 +92,28 @@
if [ -f /etc/modules.autoload -a ! -L /etc/modules.autoload ]
then
# Loop over every line in /etc/modules.autoload.
+ #
load_modules /etc/modules.autoload
else
- local KV="$(uname -r)"
- local KV_MAJOR="`KV_major "${KV}"`"
- local KV_MINOR="`KV_minor "${KV}"`"
-
# New support for /etc/modules.autoload/kernel-$KV
- if [ "$(get_KV)" -ge "$(KV_to_int '2.5.48')" ] && \
- [ -f /etc/modules.autoload.d/kernel-"${KV_MAJOR}.${KV_MINOR}" ]
- then
- load_modules /etc/modules.autoload.d/kernel-"${KV_MAJOR}.${KV_MINOR}"
+
+ local KV=kernel-$(uname -rv | awk '{gsub("[.\\-#]","?"); print $1$2}')
+
+ while [ ! $(ls /etc/modules.autoload.d/${KV} 2>/dev/null) ]
+ do
+ KV_reduced=$(echo ${KV} | awk '{sub("\\?[^\\?]*$",""); print}')
+
+ if [ ${KV_reduced} == ${KV} ]
+ then
+ KV=$(ls -1 /etc/modules.autoload.d/ | awk '{if(!drop)print;drop++}')
+ ewarn "Missing /etc/modules.autoload.d/kernel-VERSION"
+ break
+ fi
- elif [ ! -f /etc/modules.autoload.d/kernel-"${KV_MAJOR}.${KV_MINOR}" ]
- then
- ewarn "Missing /etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}"
- load_modules /etc/modules.autoload.d/kernel-2.4
- else
- load_modules /etc/modules.autoload.d/kernel-2.4
- fi
+ KV=${KV_reduced}
+ done
+
+ [ ${KV} ] && load_modules $(ls /etc/modules.autoload.d/${KV})
fi
#
|
Pour ceux qui ont déja appliqué le premier patch, il faut le retirer avant d'appliquer celui-ci.
Il est maintenant temps pour moi d'aller me coucher, j'ai de la route à faire demain, je rentre en France. Vive les vacances !!
Yoann |
|
Back to top |
|
|
TGL Bodhisattva
Joined: 02 Jun 2002 Posts: 1978 Location: Rennes, France
|
Posted: Fri Mar 19, 2004 1:11 am Post subject: |
|
|
yaubi wrote: | Oui, Ôh grand modérateur, oui ! | Mais heu, j'peux plus rien dire sans qu'on me traite de modéro, c'est lourd...
Je testerai en détail ce WE avant d'agrémenter ton bug d'un "chez moi ça marche et c'est utile".
yaubi wrote: | Il est maintenant temps pour moi d'aller me coucher, j'ai de la route à faire demain, je rentre en France. Vive les vacances !! | Bon retour vers la vrai bouffe. |
|
Back to top |
|
|
yuk159 Veteran
Joined: 18 Apr 2003 Posts: 1802 Location: noumea ,nouvelle-caledonie
|
Posted: Fri Mar 19, 2004 1:30 am Post subject: |
|
|
TGL wrote: | yaubi wrote: | Oui, Ôh grand modérateur, oui ! | Mais heu, j'peux plus rien dire sans qu'on me traite de modéro, c'est lourd... |
C'est la rancon de la gloire ca
@Yaubi : je testerai aussi ton patch ce week-end, ca tombe bien parce qu'il faut que je teste les differents noyaux PPC, merci _________________ The box said: "Requires Windows 98/2000/XP/NT, or better."
So, I installed LINUX!
Instagram |
|
Back to top |
|
|
yuk159 Veteran
Joined: 18 Apr 2003 Posts: 1802 Location: noumea ,nouvelle-caledonie
|
Posted: Sun Mar 21, 2004 9:16 am Post subject: |
|
|
J'ai malheureusement eu un onduleur qui a crame sur un des petits serveurs dont je m'occupe , donc je remets mes projets perso au week-end prochain _________________ The box said: "Requires Windows 98/2000/XP/NT, or better."
So, I installed LINUX!
Instagram |
|
Back to top |
|
|
dioxmat Bodhisattva
Joined: 04 May 2002 Posts: 709 Location: /home/mat
|
Posted: Sun Mar 21, 2004 11:55 am Post subject: |
|
|
TGL wrote: | yaubi wrote: | Oui, Ôh grand modérateur, oui ! :) | Mais heu, j'peux plus rien dire sans qu'on me traite de modéro, c'est lourd... :D
|
Niark ya pas de raison pour que je sois le seul a subir ca :) _________________ mat |
|
Back to top |
|
|
TGL Bodhisattva
Joined: 02 Jun 2002 Posts: 1978 Location: Rennes, France
|
Posted: Sun Mar 21, 2004 12:02 pm Post subject: |
|
|
dioxmat wrote: | Niark ya pas de raison pour que je sois le seul a subir ca :) |
Alors là, un message aussi futile, je trouve ça vraiment déplacé de la part d'un modéro... :Þ |
|
Back to top |
|
|
dioxmat Bodhisattva
Joined: 04 May 2002 Posts: 709 Location: /home/mat
|
Posted: Sun Mar 21, 2004 12:15 pm Post subject: |
|
|
TGL wrote: | dioxmat wrote: | Niark ya pas de raison pour que je sois le seul a subir ca :) |
Alors là, un message aussi futile, je trouve ça vraiment déplacé de la part d'un modéro... :Þ |
Entierement d'accord :)
<inserez ici un message pour rester dans le sujet du thread> _________________ mat |
|
Back to top |
|
|
yuk159 Veteran
Joined: 18 Apr 2003 Posts: 1802 Location: noumea ,nouvelle-caledonie
|
Posted: Sun Mar 21, 2004 4:21 pm Post subject: |
|
|
Mort de rire les moderos qui troll entre eux maintenant _________________ The box said: "Requires Windows 98/2000/XP/NT, or better."
So, I installed LINUX!
Instagram |
|
Back to top |
|
|
**ironman** n00b
Joined: 15 Jul 2004 Posts: 63 Location: Paris, France
|
Posted: Tue Nov 01, 2005 1:53 pm Post subject: |
|
|
Bonjour,
J'aimerais me servir du patch de Yaubi, le problème est quand je l'exécute j'obtiens l'erreur suivante :
Code: | # patch -p0 < modules.patch
patching file /etc/init.d/modules
Hunk #1 FAILED at 92.
1 out of 1 hunk FAILED -- saving rejects to file /etc/init.d/modules.rej
|
Faut-il placer le patch dans un répertoire spécifique ?
Faut-il l'exécuter depuis un répertoire spécifique ?
Merci pour votre aide. _________________ ** IronMan ** |
|
Back to top |
|
|
billiob Guru
Joined: 30 Dec 2004 Posts: 425 Location: Paris, France
|
Posted: Tue Nov 01, 2005 3:43 pm Post subject: |
|
|
Ce patch n'est pas déja inclus dans portage ??
Ceci ressemble étrangement : (pris de /etc/init.d/modules)
Code: | for x in "${KV}" ${KV_MAJOR}.${KV_MINOR}.${KV_MICRO} ${KV_MAJOR}.${KV_MINOR} ; do
if [[ -f /etc/modules.autoload.d/kernel-"${x}" ]] ; then
autoload="/etc/modules.autoload.d/kernel-${x}"
break
fi
done
|
_________________ billiob |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|