File: grub-image.in

package info (click to toggle)
grub 0.97-72
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 7,044 kB
  • ctags: 12,571
  • sloc: ansic: 39,970; sh: 5,391; asm: 2,227; makefile: 504; perl: 340
file content (138 lines) | stat: -rw-r--r-- 3,837 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#! /bin/sh
# grub-image - Create a GRUB boot filesystem image and tarball
# Gordon Matzigkeit <gord@fig.org>, 2000-07-25
#
#   Copyright (C) 2000, 2002 Free Software Foundation, Inc.
#
# This file 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 2 of the License, or
# (at your option) any later version.
#
# This program 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 this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

prefix=@prefix@
exec_prefix=@exec_prefix@
sbindir=@sbindir@
libdir=@libdir@
PACKAGE=@PACKAGE@
host_cpu=@host_cpu@
host_os=@host_os@
host_vendor=@host_vendor@
context=${host_cpu}-${host_vendor}
pkglibdir=${libdir}/${PACKAGE}/${context}

mke2fs=`which mke2fs`

progname=`echo "$0" | sed 's%^.*/%%'`
thisdir=`echo "$0" | sed 's%/[^/]*$%%'`
test "X$thisdir" = "X$0" && thisdir=.

# See if we were invoked from within the build directory, and if so,
# use the built files rather than the installed ones.
if test -f $thisdir/../stage2/stage2; then
  grub_shell="$thisdir/../grub/grub"
  stage1dir="$thisdir/../stage1"
  stage2dir="$thisdir/../stage2"
else
  grub_shell=${sbindir}/grub
  stage1dir="$pkglibdir"
  stage2dir="$pkglibdir"
fi

# Exit on any error.
set -e

# Get GRUB's version from the Grub shell, since we use the
# installed files.
VERSION=`$grub_shell --version | sed -e 's/^.* \([0-9.]*\).*$/\1/'`
test "X$VERSION" != X

bootdir=${PACKAGE}-${VERSION}-${context}
image=$bootdir.ext2fs

# Create the tarball.
if test ! -f $bootdir.tar.gz; then
  echo "# Creating \`$bootdir.tar.gz'"
  mkdir -p $bootdir/boot/grub
  cp -p $stage1dir/stage1 $stage2dir/*_stage1_5 $stage2dir/stage2 \
    $bootdir/boot/grub
  test ! -f menu.lst || cp -p menu.lst $bootdir/boot/grub
  trap "rm -f $bootdir.tar.gz" 0
  GZIP=-9 tar -zcf $bootdir.tar.gz $bootdir
  trap '' 0
  rm -rf $bootdir
fi

# Create a new filesystem image of the specified size.
if test ! -f $image; then
  tarsize=`zcat $bootdir.tar.gz | wc -c`

  # Add about 30% (20% overhead plus 10% breathing room), and convert
  # to kilobytes.  This factor was determined empirically.
  SIZE=`expr $tarsize \* 130 / 100 / 1024`k
  echo "# Creating $SIZE disk image \`$image'"
  trap "rm -f $image" 0
  dd if=/dev/zero of=$image bs=$SIZE count=1 >/dev/null
  $mke2fs -F $image
  trap '' 0
fi


# Attempt to mount the image.
echo "# Mounting \`$image'"
test -d $bootdir || mkdir $bootdir
case "$host_os" in
gnu*)
  settrans -a $bootdir /hurd/ext2fs $image
  umount="settrans -a $bootdir"
  ;;

linux*)
  # This requires running as root, and using the loop device.
  i=0
  while test -e /dev/loop$i; do
    if /sbin/losetup /dev/loop$i $image; then
      break
    fi
    i=`expr $i + 1`
  done

  # Silly losetup doesn't report an error!
  mount /dev/loop$i $bootdir
  umount="umount $bootdir && /sbin/losetup -d /dev/loop$i && trap '' 0"
  ;;

*)
  echo "$progname: Mounting \`$image' under \`$host_os' is not supported" 1>&2
  exit 1
  ;;
esac
trap "$umount" 0

# Extract our tarball into the image, then unmount it.
echo "# Copying files into \`$image':"
tar -zxvf $bootdir.tar.gz

echo "# \`$image' usage:"
df $bootdir
eval $umount
rmdir $bootdir || :

# Use the GRUB shell to properly set up GRUB on the image.
echo "# Installing GRUB in \`$image'"
cat <<EOF | $grub_shell --batch --device-map=/dev/null
device (fd0) $image
root (fd0)
install /boot/grub/stage1 (fd0) /boot/grub/stage2
quit
EOF

exit 0