~ubuntu-branches/ubuntu/wily/grub2/wily-proposed

« back to all changes in this revision

Viewing changes to .pc/insmod-xzio-and-lzopio-on-xen.patch/util/grub.d/10_linux.in

  • Committer: Package Import Robot
  • Author(s): Ian Campbell, Colin Watson, Ian Campbell
  • Date: 2014-11-30 17:15:21 UTC
  • Revision ID: package-import@ubuntu.com-20141130171521-jtqle9j0ckcww9wy
Tags: 2.02~beta2-17
[ Colin Watson ]
* Fix up some pointer-to-integer casts in linuxefi so that it can build on
  i386-efi.
* Backport from upstream:
  - Fix typo (gettext_print instead of gettext_printf) (LP: #1390766).

[ Ian Campbell ]
* Correct syntax error in grub-xen-host bootstrap configuration file.
* Log failure when grub-install fails in postinst, rather than failing the
  entire postinst. (Closes: #770412)
* Arrange to insmod xzio and lzopio when booting a kernel as a Xen guest.
  (Closes: #755256)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#! /bin/sh
 
2
set -e
 
3
 
 
4
# grub-mkconfig helper script.
 
5
# Copyright (C) 2006,2007,2008,2009,2010  Free Software Foundation, Inc.
 
6
#
 
7
# GRUB is free software: you can redistribute it and/or modify
 
8
# it under the terms of the GNU General Public License as published by
 
9
# the Free Software Foundation, either version 3 of the License, or
 
10
# (at your option) any later version.
 
11
#
 
12
# GRUB is distributed in the hope that it will be useful,
 
13
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
15
# GNU General Public License for more details.
 
16
#
 
17
# You should have received a copy of the GNU General Public License
 
18
# along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
 
19
 
 
20
prefix="@prefix@"
 
21
exec_prefix="@exec_prefix@"
 
22
datarootdir="@datarootdir@"
 
23
ubuntu_recovery="@UBUNTU_RECOVERY@"
 
24
quiet_boot="@QUIET_BOOT@"
 
25
quick_boot="@QUICK_BOOT@"
 
26
gfxpayload_dynamic="@GFXPAYLOAD_DYNAMIC@"
 
27
vt_handoff="@VT_HANDOFF@"
 
28
 
 
29
. "@datadir@/@PACKAGE@/grub-mkconfig_lib"
 
30
 
 
31
export TEXTDOMAIN=@PACKAGE@
 
32
export TEXTDOMAINDIR="@localedir@"
 
33
 
 
34
CLASS="--class gnu-linux --class gnu --class os"
 
35
 
 
36
if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
 
37
  OS=GNU/Linux
 
38
else
 
39
  case ${GRUB_DISTRIBUTOR} in
 
40
    Ubuntu|Kubuntu)
 
41
      OS="${GRUB_DISTRIBUTOR}"
 
42
      ;;
 
43
    *)
 
44
      OS="${GRUB_DISTRIBUTOR} GNU/Linux"
 
45
      ;;
 
46
  esac
 
47
  CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}"
 
48
fi
 
49
 
 
50
# loop-AES arranges things so that /dev/loop/X can be our root device, but
 
51
# the initrds that Linux uses don't like that.
 
52
case ${GRUB_DEVICE} in
 
53
  /dev/loop/*|/dev/loop[0-9])
 
54
    GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"`
 
55
    # We can't cope with devices loop-mounted from files here.
 
56
    case ${GRUB_DEVICE} in
 
57
      /dev/*) ;;
 
58
      *) exit 0 ;;
 
59
    esac
 
60
  ;;
 
61
esac
 
62
 
 
63
if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
 
64
    || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
 
65
    || uses_abstraction "${GRUB_DEVICE}" lvm; then
 
66
  LINUX_ROOT_DEVICE=${GRUB_DEVICE}
 
67
else
 
68
  LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
 
69
fi
 
70
 
 
71
case x"$GRUB_FS" in
 
72
    xbtrfs)
 
73
        rootsubvol="`make_system_path_relative_to_its_root /`"
 
74
        rootsubvol="${rootsubvol#/}"
 
75
        if [ "x${rootsubvol}" != x ]; then
 
76
            GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
 
77
        fi;;
 
78
    xzfs)
 
79
        rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
 
80
        bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`"
 
81
        LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs}"
 
82
        ;;
 
83
esac
 
84
 
 
85
title_correction_code=
 
86
 
 
87
if [ -x /lib/recovery-mode/recovery-menu ]; then
 
88
    GRUB_CMDLINE_LINUX_RECOVERY=recovery
 
89
else
 
90
    GRUB_CMDLINE_LINUX_RECOVERY=single
 
91
fi
 
92
if [ "$ubuntu_recovery" = 1 ]; then
 
93
    GRUB_CMDLINE_LINUX_RECOVERY="$GRUB_CMDLINE_LINUX_RECOVERY nomodeset"
 
94
fi
 
95
 
 
96
if [ "$vt_handoff" = 1 ]; then
 
97
  for word in $GRUB_CMDLINE_LINUX_DEFAULT; do
 
98
    if [ "$word" = splash ]; then
 
99
      GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT \$vt_handoff"
 
100
    fi
 
101
  done
 
102
fi
 
103
 
 
104
linux_entry ()
 
105
{
 
106
  os="$1"
 
107
  version="$2"
 
108
  type="$3"
 
109
  args="$4"
 
110
 
 
111
  if [ -z "$boot_device_id" ]; then
 
112
      boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
 
113
  fi
 
114
  if [ x$type != xsimple ] ; then
 
115
      case $type in
 
116
          recovery)
 
117
              title="$(gettext_printf "%s, with Linux %s (%s)" "${os}" "${version}" "$(gettext "${GRUB_RECOVERY_TITLE}")")" ;;
 
118
          *)
 
119
              title="$(gettext_printf "%s, with Linux %s" "${os}" "${version}")" ;;
 
120
      esac
 
121
      if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ] || [ x"Previous Linux versions>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then
 
122
          replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')"
 
123
          quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
 
124
          title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
 
125
          grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")"
 
126
      fi
 
127
      echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
 
128
  else
 
129
      echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
 
130
  fi      
 
131
  if [ "$quick_boot" = 1 ]; then
 
132
      echo "    recordfail" | sed "s/^/$submenu_indentation/"
 
133
  fi
 
134
  if [ x$type != xrecovery ] ; then
 
135
      save_default_entry | grub_add_tab
 
136
  fi
 
137
 
 
138
  # Use ELILO's generic "efifb" when it's known to be available.
 
139
  # FIXME: We need an interface to select vesafb in case efifb can't be used.
 
140
  if [ "x$GRUB_GFXPAYLOAD_LINUX" = x ]; then
 
141
      echo "    load_video" | sed "s/^/$submenu_indentation/"
 
142
  else
 
143
      if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then
 
144
          echo "        load_video" | sed "s/^/$submenu_indentation/"
 
145
      fi
 
146
  fi
 
147
  if ([ "$ubuntu_recovery" = 0 ] || [ x$type != xrecovery ]) && \
 
148
     ([ "x$GRUB_GFXPAYLOAD_LINUX" != x ] || [ "$gfxpayload_dynamic" = 1 ]); then
 
149
      echo "    gfxmode \$linux_gfx_mode" | sed "s/^/$submenu_indentation/"
 
150
  fi
 
151
 
 
152
  echo "        insmod gzio" | sed "s/^/$submenu_indentation/"
 
153
 
 
154
  if [ x$dirname = x/ ]; then
 
155
    if [ -z "${prepare_root_cache}" ]; then
 
156
      prepare_root_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE} | grub_add_tab)"
 
157
    fi
 
158
    printf '%s\n' "${prepare_root_cache}" | sed "s/^/$submenu_indentation/"
 
159
  else
 
160
    if [ -z "${prepare_boot_cache}" ]; then
 
161
      prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | grub_add_tab)"
 
162
    fi
 
163
    printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/"
 
164
  fi
 
165
  if [ x"$quiet_boot" = x0 ] || [ x"$type" != xsimple ]; then
 
166
    message="$(gettext_printf "Loading Linux %s ..." ${version})"
 
167
    sed "s/^/$submenu_indentation/" << EOF
 
168
        echo    '$(echo "$message" | grub_quote)'
 
169
EOF
 
170
  fi
 
171
  if test -d /sys/firmware/efi && test -e "${linux}.efi.signed"; then
 
172
    sed "s/^/$submenu_indentation/" << EOF
 
173
        linux   ${rel_dirname}/${basename}.efi.signed root=${linux_root_device_thisversion} ro ${args}
 
174
EOF
 
175
  else
 
176
    sed "s/^/$submenu_indentation/" << EOF
 
177
        linux   ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
 
178
EOF
 
179
  fi
 
180
  if test -n "${initrd}" ; then
 
181
    # TRANSLATORS: ramdisk isn't identifier. Should be translated.
 
182
    if [ x"$quiet_boot" = x0 ] || [ x"$type" != xsimple ]; then
 
183
      message="$(gettext_printf "Loading initial ramdisk ...")"
 
184
      sed "s/^/$submenu_indentation/" << EOF
 
185
        echo    '$(echo "$message" | grub_quote)'
 
186
EOF
 
187
    fi
 
188
    sed "s/^/$submenu_indentation/" << EOF
 
189
        initrd  ${rel_dirname}/${initrd}
 
190
EOF
 
191
  fi
 
192
  sed "s/^/$submenu_indentation/" << EOF
 
193
}
 
194
EOF
 
195
}
 
196
 
 
197
machine=`uname -m`
 
198
case "x$machine" in
 
199
    xi?86 | xx86_64)
 
200
        list=`for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do
 
201
                  if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
 
202
              done` ;;
 
203
    *) 
 
204
        list=`for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do
 
205
                  if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
 
206
             done` ;;
 
207
esac
 
208
 
 
209
case "$machine" in
 
210
    i?86) GENKERNEL_ARCH="x86" ;;
 
211
    mips|mips64) GENKERNEL_ARCH="mips" ;;
 
212
    mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;;
 
213
    arm*) GENKERNEL_ARCH="arm" ;;
 
214
    *) GENKERNEL_ARCH="$machine" ;;
 
215
esac
 
216
 
 
217
prepare_boot_cache=
 
218
prepare_root_cache=
 
219
boot_device_id=
 
220
title_correction_code=
 
221
 
 
222
cat << 'EOF'
 
223
function gfxmode {
 
224
        set gfxpayload="${1}"
 
225
EOF
 
226
if [ "$vt_handoff" = 1 ]; then
 
227
  cat << 'EOF'
 
228
        if [ "${1}" = "keep" ]; then
 
229
                set vt_handoff=vt.handoff=7
 
230
        else
 
231
                set vt_handoff=
 
232
        fi
 
233
EOF
 
234
fi
 
235
cat << EOF
 
236
}
 
237
EOF
 
238
 
 
239
# Use ELILO's generic "efifb" when it's known to be available.
 
240
# FIXME: We need an interface to select vesafb in case efifb can't be used.
 
241
if [ "x$GRUB_GFXPAYLOAD_LINUX" != x ] || [ "$gfxpayload_dynamic" = 0 ]; then
 
242
  echo "set linux_gfx_mode=$GRUB_GFXPAYLOAD_LINUX"
 
243
else
 
244
  cat << EOF
 
245
if [ "\${recordfail}" != 1 ]; then
 
246
  if [ -e \${prefix}/gfxblacklist.txt ]; then
 
247
    if hwmatch \${prefix}/gfxblacklist.txt 3; then
 
248
      if [ \${match} = 0 ]; then
 
249
        set linux_gfx_mode=keep
 
250
      else
 
251
        set linux_gfx_mode=text
 
252
      fi
 
253
    else
 
254
      set linux_gfx_mode=text
 
255
    fi
 
256
  else
 
257
    set linux_gfx_mode=keep
 
258
  fi
 
259
else
 
260
  set linux_gfx_mode=text
 
261
fi
 
262
EOF
 
263
fi
 
264
cat << EOF
 
265
export linux_gfx_mode
 
266
EOF
 
267
 
 
268
# Extra indentation to add to menu entries in a submenu. We're not in a submenu
 
269
# yet, so it's empty. In a submenu it will be equal to '\t' (one tab).
 
270
submenu_indentation=""
 
271
 
 
272
is_top_level=true
 
273
while [ "x$list" != "x" ] ; do
 
274
  linux=`version_find_latest $list`
 
275
  case $linux in
 
276
    *.efi.signed)
 
277
      # We handle these in linux_entry.
 
278
      list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
 
279
      continue
 
280
      ;;
 
281
  esac
 
282
  gettext_printf "Found linux image: %s\n" "$linux" >&2
 
283
  basename=`basename $linux`
 
284
  dirname=`dirname $linux`
 
285
  rel_dirname=`make_system_path_relative_to_its_root $dirname`
 
286
  version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
 
287
  alt_version=`echo $version | sed -e "s,\.old$,,g"`
 
288
  linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
 
289
 
 
290
  initrd=
 
291
  for i in "initrd.img-${version}" "initrd-${version}.img" "initrd-${version}.gz" \
 
292
           "initrd-${version}" "initramfs-${version}.img" \
 
293
           "initrd.img-${alt_version}" "initrd-${alt_version}.img" \
 
294
           "initrd-${alt_version}" "initramfs-${alt_version}.img" \
 
295
           "initramfs-genkernel-${version}" \
 
296
           "initramfs-genkernel-${alt_version}" \
 
297
           "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
 
298
           "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do
 
299
    if test -e "${dirname}/${i}" ; then
 
300
      initrd="$i"
 
301
      break
 
302
    fi
 
303
  done
 
304
 
 
305
  config=
 
306
  for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do
 
307
    if test -e "${i}" ; then
 
308
      config="${i}"
 
309
      break
 
310
    fi
 
311
  done
 
312
 
 
313
  initramfs=
 
314
  if test -n "${config}" ; then
 
315
      initramfs=`grep CONFIG_INITRAMFS_SOURCE= "${config}" | cut -f2 -d= | tr -d \"`
 
316
  fi
 
317
 
 
318
  if test -n "${initrd}" ; then
 
319
    gettext_printf "Found initrd image: %s\n" "${dirname}/${initrd}" >&2
 
320
  elif test -z "${initramfs}" ; then
 
321
    # "UUID=" and "ZFS=" magic is parsed by initrd or initramfs.  Since there's
 
322
    # no initrd or builtin initramfs, it can't work here.
 
323
    linux_root_device_thisversion=${GRUB_DEVICE}
 
324
  fi
 
325
 
 
326
  if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then
 
327
    linux_entry "${OS}" "${version}" simple \
 
328
    "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
 
329
 
 
330
    submenu_indentation="$grub_tab"
 
331
    
 
332
    if [ -z "$boot_device_id" ]; then
 
333
        boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
 
334
    fi
 
335
    # TRANSLATORS: %s is replaced with an OS name
 
336
    echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
 
337
    is_top_level=false
 
338
  fi
 
339
 
 
340
  linux_entry "${OS}" "${version}" advanced \
 
341
              "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
 
342
  if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
 
343
    linux_entry "${OS}" "${version}" recovery \
 
344
                "${GRUB_CMDLINE_LINUX_RECOVERY} ${GRUB_CMDLINE_LINUX}"
 
345
  fi
 
346
 
 
347
  list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '`
 
348
done
 
349
 
 
350
# If at least one kernel was found, then we need to
 
351
# add a closing '}' for the submenu command.
 
352
if [ x"$is_top_level" != xtrue ]; then
 
353
  echo '}'
 
354
fi
 
355
 
 
356
echo "$title_correction_code"