📄 grub-image.in
字号:
#! /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@datadir=@datadir@PACKAGE=@PACKAGE@host_cpu=@host_cpu@host_os=@host_os@host_vendor=@host_vendor@context=${host_cpu}-${host_vendor}pkgdatadir=${datadir}/${PACKAGE}/${context}mke2fs=/sbin/mke2fsprogname=`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="$pkgdatadir" stage2dir="$pkgdatadir"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" != Xbootdir=${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 $bootdirfi# 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 '' 0fi# Attempt to mount the image.echo "# Mounting \`$image'"test -d $bootdir || mkdir $bootdircase "$host_os" ingnu*) 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 ;;esactrap "$umount" 0# Extract our tarball into the image, then unmount it.echo "# Copying files into \`$image':"tar -zxvf $bootdir.tar.gzecho "# \`$image' usage:"df $bootdireval $umountrmdir $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/nulldevice (fd0) $imageroot (fd0)install /boot/grub/stage1 (fd0) /boot/grub/stage2quitEOFexit 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -