Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
grub-pc-annexe [Le 08/01/2010, 12:52] 213.95.41.13 |
— (Version actuelle) | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Annexe à grub-pc : exemples de scripts d'autoconfiguration ====== | ||
- | {{tag>grub boot karmic}} | ||
- | Compléments à la documentation [[grub-pc]]. | ||
- | |||
- | Cette annexe donne des exemples de fichiers de génération du menu de boot. | ||
- | Ces scripts sont placés dans le répertoire /etc/bootd et doivent être validés en exécution. | ||
- | La génération du fichier /boot/grub/grub.cfg se fait par la commande: | ||
- | |||
- | <code> | ||
- | sudo update-grub | ||
- | </code> | ||
- | |||
- | La sortie de la commande permet de contrôler les éléments qui seront placés dans le menu. | ||
- | |||
- | |||
- | ===== Faire apparaître un nombre fixe de noyaux du système en cours ===== | ||
- | |||
- | On modifie ici le scripts /etc/boot.d/10_linux livré avec ubuntu 9.10 de façon à n'afficher que les NBLISTMAX derniers noyaux du système ubuntu en cours. | ||
- | |||
- | ==== Nouveaux paramètres introduits dans le script ==== | ||
- | 1) NBLISTMAX: | ||
- | |||
- | Nombre de noyaux à afficher dans le menu. | ||
- | |||
- | 2) PREFILTER et POSTFILTER: | ||
- | |||
- | Filtre sur le nom du noyau permettant de sélectionner les noyaux du système sur lequel on est, dans le cas ou la partition /boot est commune à plusieurs systèmes distincts. | ||
- | |||
- | Dans le cas de ubuntu Karmic, on a: PREFILTER="-2.6.31-" et POSTFILTER="-generic" | ||
- | |||
- | //Nota: ces paramètres peuvent être mis à "" si /boot ne contient que les noyaux d'un unique système.// | ||
- | |||
- | ==== code du script /etc/grub.d/10_linux modifié ==== | ||
- | |||
- | |||
- | <code> | ||
- | #! /bin/sh -e | ||
- | |||
- | # grub-mkconfig helper script. | ||
- | # Copyright (C) 2006,2007,2008,2009 Free Software Foundation, Inc. | ||
- | # | ||
- | # GRUB is free software: you can redistribute it and/or modify | ||
- | # it under the terms of the GNU General Public License as published by | ||
- | # the Free Software Foundation, either version 3 of the License, or | ||
- | # (at your option) any later version. | ||
- | # | ||
- | # GRUB is distributed in the hope that it will be useful, | ||
- | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
- | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
- | # GNU General Public License for more details. | ||
- | # | ||
- | # You should have received a copy of the GNU General Public License | ||
- | # along with GRUB. If not, see <http://www.gnu.org/licenses/>. | ||
- | #Modification-start | ||
- | # Number of version to display - can be changed to desired value | ||
- | NBLISTMAX=$((2)) | ||
- | # pre-filtering for kernel to use - can be changed to desired value | ||
- | PREFILTER="-2.6.31-" | ||
- | # post-filtering for kernel to use - can be changed to desired value | ||
- | POSTFILTER="-generic" | ||
- | # Intermediate variable - do not change | ||
- | NBLIST=$((0)) | ||
- | #Modification-end | ||
- | |||
- | |||
- | prefix=/usr | ||
- | exec_prefix=${prefix} | ||
- | libdir=${exec_prefix}/lib | ||
- | . ${libdir}/grub/grub-mkconfig_lib | ||
- | |||
- | |||
- | |||
- | if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then | ||
- | OS=GNU/Linux | ||
- | else | ||
- | OS="${GRUB_DISTRIBUTOR}" | ||
- | fi | ||
- | |||
- | # loop-AES arranges things so that /dev/loop/X can be our root device, but | ||
- | # the initrds that Linux uses don't like that. | ||
- | case ${GRUB_DEVICE} in | ||
- | /dev/loop/*|/dev/loop[0-9]) | ||
- | GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"` | ||
- | # We can't cope with devices loop-mounted from files here. | ||
- | case ${GRUB_DEVICE} in | ||
- | /dev/*) ;; | ||
- | *) exit 0 ;; | ||
- | esac | ||
- | ;; | ||
- | esac | ||
- | |||
- | if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \ | ||
- | || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \ | ||
- | || [ "`grub-probe -t abstraction --device ${GRUB_DEVICE} | sed -e 's,.*\(lvm\).*,\1,'`" = "lvm" ] ; then | ||
- | LINUX_ROOT_DEVICE=${GRUB_DEVICE} | ||
- | else | ||
- | LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID} | ||
- | fi | ||
- | |||
- | # add crashkernel option if we have the required tools | ||
- | if [ -x "/usr/bin/makedumpfile" ] && [ -x "/sbin/kexec" ]; then | ||
- | GRUB_CMDLINE_EXTRA="$GRUB_CMDLINE_EXTRA crashkernel=384M-2G:64M,2G-:128M" | ||
- | fi | ||
- | |||
- | linux_entry () | ||
- | { | ||
- | cat << EOF | ||
- | menuentry "$1" { | ||
- | recordfail=1 | ||
- | if [ -n \${have_grubenv} ]; then save_env recordfail; fi | ||
- | EOF | ||
- | if [ "x$3" = "xquiet" ]; then | ||
- | cat << EOF | ||
- | set quiet=1 | ||
- | EOF | ||
- | fi | ||
- | save_default_entry | sed -e "s/^/\t/" | ||
- | prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e "s/^/\t/" | ||
- | cat << EOF | ||
- | linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro $2 | ||
- | EOF | ||
- | if test -n "${initrd}" ; then | ||
- | cat << EOF | ||
- | initrd ${rel_dirname}/${initrd} | ||
- | EOF | ||
- | fi | ||
- | cat << EOF | ||
- | } | ||
- | EOF | ||
- | } | ||
- | |||
- | list=`for i in /boot/vmlinu[xz]${PREFILTER}*${POSTFILTER} /vmlinu[xz]${PREFILTER}*${POSTFILTER} ; do | ||
- | if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi | ||
- | done` | ||
- | |||
- | while [ "x$list" != "x" ] ; do | ||
- | #LL-start | ||
- | NBLIST=$((NBLIST+1)) | ||
- | # echo "NBLIST = $NBLIST" >&2 | ||
- | linux=`version_find_latest $list` | ||
- | if [ "$NBLIST" -le "$NBLISTMAX" ] ; then | ||
- | echo "Found linux image: $linux" >&2 | ||
- | #LL-end | ||
- | basename=`basename $linux` | ||
- | dirname=`dirname $linux` | ||
- | rel_dirname=`make_system_path_relative_to_its_root $dirname` | ||
- | version=`echo $basename | sed -e "s,^[^0-9]*-,,g"` | ||
- | alt_version=`echo $version | sed -e "s,\.old$,,g"` | ||
- | linux_root_device_thisversion="${LINUX_ROOT_DEVICE}" | ||
- | |||
- | initrd= | ||
- | for i in "initrd.img-${version}" "initrd-${version}.img" \ | ||
- | "initrd-${version}" "initrd.img-${alt_version}" \ | ||
- | "initrd-${alt_version}.img" "initrd-${alt_version}"; do | ||
- | if test -e "${dirname}/${i}" ; then | ||
- | initrd="$i" | ||
- | break | ||
- | fi | ||
- | done | ||
- | if test -n "${initrd}" ; then | ||
- | echo "Found initrd image: ${dirname}/${initrd}" >&2 | ||
- | else | ||
- | # "UUID=" magic is parsed by initrds. Since there's no initrd, it can't work here. | ||
- | linux_root_device_thisversion=${GRUB_DEVICE} | ||
- | fi | ||
- | |||
- | linux_entry "${OS}, Linux ${version}" \ | ||
- | "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_EXTRA} ${GRUB_CMDLINE_LINUX_DEFAULT}" \ | ||
- | quiet | ||
- | if [ "x${GRUB_DISABLE_LINUX_RECOVERY}" != "xtrue" ]; then | ||
- | linux_entry "${OS}, Linux ${version} (recovery mode)" \ | ||
- | "single ${GRUB_CMDLINE_LINUX}" | ||
- | fi | ||
- | #LL-start | ||
- | fi | ||
- | #LL-end | ||
- | list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '` | ||
- | # echo "liste: $list" >&2 | ||
- | |||
- | done | ||
- | </code> |