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 07/01/2010, 22:04] lucge |
— (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 upgrade-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> | ||