[arch-commits] Commit in grub/trunk (PKGBUILD install-grub)
Ronald van Haren
ronald at archlinux.org
Wed Aug 3 18:23:56 UTC 2011
Date: Wednesday, August 3, 2011 @ 14:23:55
Author: ronald
Revision: 134407
compile fixes; handle new naming scheme in install-grub script
Modified:
grub/trunk/PKGBUILD
grub/trunk/install-grub
--------------+
PKGBUILD | 62 +++++++-----
install-grub | 285 ++++++++++++++++++++++++++++++---------------------------
2 files changed, 189 insertions(+), 158 deletions(-)
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2011-08-03 16:57:15 UTC (rev 134406)
+++ PKGBUILD 2011-08-03 18:23:55 UTC (rev 134407)
@@ -3,7 +3,7 @@
pkgname=grub
pkgver=0.97
-pkgrel=17
+pkgrel=18
pkgdesc="A GNU multiboot boot loader"
arch=('i686' 'x86_64')
license=('GPL')
@@ -20,20 +20,22 @@
more-raid.patch
intelmac.patch
grub-inode-size.patch
- ext4.patch)
+ ext4.patch
+ grub-0.97-ldflags-objcopy-remove-build-id.patch)
backup=('boot/grub/menu.lst')
install=grub.install
-md5sums=('cd3f3eb54446be6003156158d51f4884'
- 'a2098dc41fc3cb13e53179de2979d088'
- '3182c4ae4963a16930bc772bba89dacf'
- 'eb9d69c46af3a0667c1f651817d7f075'
- 'ccd2d757e79e3a03dc19ede7391ed328'
- '826fdbf446067f9861baf9f6a69a4583'
- '49f6d4bcced0bc8bbcff273f3254bbfa'
- 'f41f702014a064918d7afc6fc23baa6e'
- '175dc6b9f4ab94e8056c3afb3e34460a'
- '69c648d2b8d0965df70a74014424f31c'
- '39e0f9a05b7e04aceb24fc7bc4893e3d')
+sha1sums=('2580626c4579bd99336d3af4482c346c95dac4fb'
+ '734fa37ebe1657bf1f8f74ee4866953ff96f2604'
+ '5479f098c71817ac86d0059cf1c77ca169a6fd93'
+ '157b81dbad3576536b08642242accfa1aeb093a9'
+ 'adbb4685c98797ffb4dc83561ec75698991dddbd'
+ 'f2e0dff29a7c8a45e90aa07298a1b2a9a9d29afc'
+ 'c5e2c94ed0e759590b9eb38c9d979f075d19d7c0'
+ '45fe668a3779664fb292591f426976b6c784d6c8'
+ '066d7ab1ae442f88e94c9e4f1867ac6682965d06'
+ '0436aa6fa0b6f768289172f983a3f4b69384629e'
+ 'a36f34e51efed540f1ddafd78e9c9f6d83e4c8d4'
+ '61c4b58d2eaa3c1561d8e9d8fc41341ce8882869')
build() {
cd $srcdir/$pkgname-$pkgver
@@ -43,26 +45,38 @@
DESTARCH="x86_64"
# optimizations break the build -- disable them
# adding special devices to grub, patches are from fedora
- patch -Np1 -i ../special-devices.patch || return 1
- patch -Np1 -i ../i2o.patch || return 1
- patch -Np1 -i ../more-raid.patch || return 1
- patch -Np1 -i ../intelmac.patch || return 1
+ patch -Np1 -i ../special-devices.patch
+ patch -Np1 -i ../i2o.patch
+ patch -Np1 -i ../more-raid.patch
+ patch -Np1 -i ../intelmac.patch
# Add support for bigger inode size to e2fs_stage1_5
- patch -Np1 -i ../grub-inode-size.patch || return 1
+ patch -Np1 -i ../grub-inode-size.patch
# Add ext4 support
# http://www.mail-archive.com/bug-grub@gnu.org/msg11458.html
- patch -Np1 -i ../ext4.patch || return 1
+ patch -Np1 -i ../ext4.patch
+ # binutils fix
+ patch -Np1 -i ../grub-0.97-ldflags-objcopy-remove-build-id.patch
+ sed -e'/^AC_PROG_CC/ a\AM_PROG_CC_C_O\ ' -i "${srcdir}/${pkgname}-${pkgver}/configure.ac"
+ sed -e'/^AC_PROG_CC/ a\AM_PROG_AS\ ' -i "${srcdir}/${pkgname}-${pkgver}/configure.ac"
+
+ ## recreate ./configure script with the required changes in LDFLAGS and objcopy
+ aclocal
+ autoconf
+ autoreconf
+ automake
+
#arch64 fixes for static build
- if [ "$CARCH" = "x86_64" ]; then
+ if [ "$CARCH" = "x86_64" ]; then ## correcting problems for new wersion of autotools
+
echo "this package has to be built on i686, won't compile on x86_64"
sleep 5
else
if [ "$DESTARCH" = "x86_64" ]; then
# patch from gentoo for fixing a segfault
- patch -Np1 -i ../040_all_grub-0.96-nxstack.patch || return 1
+ patch -Np1 -i ../040_all_grub-0.96-nxstack.patch
# patch from frugalware to make it boot when more than 2GB ram installed
- patch -Np1 -i ../05-grub-0.97-initrdaddr.diff || return 1
+ patch -Np1 -i ../05-grub-0.97-initrdaddr.diff
CFLAGS="-static" ./configure --prefix=/usr --bindir=/bin --sbindir=/sbin \
--mandir=/usr/share/man --infodir=/usr/share/info
else
@@ -71,8 +85,8 @@
fi
fi
- CFLAGS= make || return 1
- make DESTDIR=$pkgdir install || return 1
+ CFLAGS= make
+ make DESTDIR=$pkgdir install
install -D -m644 ../menu.lst $pkgdir/boot/grub/menu.lst
install -D -m755 ../install-grub $pkgdir/sbin/install-grub
Modified: install-grub
===================================================================
--- install-grub 2011-08-03 16:57:15 UTC (rev 134406)
+++ install-grub 2011-08-03 18:23:55 UTC (rev 134407)
@@ -12,8 +12,8 @@
#
# Then start up the 'grub' shell and run something like the following:
#
-# grub> root(hd0,0)
-# grub> setup(hd0)
+# grub> root (hd0,0)
+# grub> setup (hd0)
#
# The "root" line should point to the partition your kernel is located on,
# /boot if you have a separate boot partition, otherwise your root (/).
@@ -24,164 +24,181 @@
#
usage() {
- echo "usage: install-grub <install_device> [boot_device]"
- echo
- echo "where <install_device> is the device where Grub will be installed"
- echo "and [boot_device] is the partition that contains the /boot"
- echo "directory (auto-detected if omitted)"
- echo
- echo "examples: install-grub /dev/hda"
- echo " install-grub /dev/hda /dev/hda1"
- echo
- exit 0
+ echo "usage: install-grub <install_device> [boot_device]"
+ echo
+ echo "where <install_device> is the device where Grub will be installed"
+ echo "and [boot_device] is the partition that contains the /boot"
+ echo "directory (auto-detected if omitted)"
+ echo
+ echo "examples: install-grub /dev/hda"
+ echo " install-grub /dev/hda /dev/hda1"
+ echo
+ exit 0
}
## new install-grub, code was taken from setup script
-ROOTDEV=$1
-PART_ROOT=$2
-VMLINUZ=vmlinuz26
+ROOTDEV=${1}
+PART_ROOT=${2}
-if [ "$ROOTDEV" = "" ]; then
- usage
+if [ "${ROOTDEV}" = "" ]; then
+ usage
fi
-if [ "$PART_ROOT" = "" ]; then
- PART_ROOT=$(mount | grep "on /boot type" | cut -d' ' -f 1)
+if [ "${PART_ROOT}" = "" ]; then
+ PART_ROOT=$(mount | grep "on /boot type" | cut -d' ' -f 1)
fi
if [ "$PART_ROOT" = "" ]; then
- PART_ROOT=$(mount | grep "on / type" | cut -d' ' -f 1)
+ PART_ROOT=$(mount | grep "on / type" | cut -d' ' -f 1)
fi
-if [ "$PART_ROOT" = "" ]; then
- echo "error: could not determine BOOT_DEVICE, please specify manually" >&2
- exit 1
+if [ "${PART_ROOT}" = "" ]; then
+ echo "error: could not determine BOOT_DEVICE, please specify manually" >&2
+ exit 1
fi
get_grub_map() {
- [ -e /tmp/dev.map ] && rm /tmp/dev.map
- /sbin/grub --no-floppy --device-map /tmp/dev.map >/tmp/grub.log 2>&1 <<EOF
+ [ -e /tmp/dev.map ] && rm /tmp/dev.map
+ /sbin/grub --no-floppy --device-map /tmp/dev.map >/tmp/grub.log 2>&1 <<EOF
quit
EOF
}
mapdev() {
- partition_flag=0
- device_found=0
- devs=$(cat /tmp/dev.map | grep -v fd | sed 's/ *\t/ /' | sed ':a;$!N;$!ba;s/\n/ /g')
- linuxdevice=$(echo $1 | cut -b1-8)
- if [ "$(echo $1 | egrep '[0-9]$')" ]; then
- # /dev/hdXY
- pnum=$(echo $1 | cut -b9-)
- pnum=$(($pnum-1))
- partition_flag=1
- fi
- for dev in $devs
- do
- if [ "(" = $(echo $dev | cut -b1) ]; then
- grubdevice="$dev"
- else
- if [ "$dev" = "$linuxdevice" ]; then
- device_found=1
- break
- fi
- fi
- done
- if [ "$device_found" = "1" ]; then
- if [ "$partition_flag" = "0" ]; then
- echo "$grubdevice"
- else
- grubdevice_stringlen=${#grubdevice}
- let grubdevice_stringlen--
- grubdevice=$(echo $grubdevice | cut -b1-$grubdevice_stringlen)
- echo "$grubdevice,$pnum)"
- fi
- else
- echo " DEVICE NOT FOUND"
- fi
+ partition_flag=0
+ device_found=0
+ devs=$(cat /tmp/dev.map | grep -v fd | sed 's/ *\t/ /' | sed ':a;$!N;$!ba;s/\n/ /g')
+ linuxdevice=$(echo $1 | cut -b1-8)
+ if [ "$(echo ${1} | egrep '[0-9]$')" ]; then
+ # /dev/hdXY
+ pnum=$(echo ${1} | cut -b9-)
+ pnum=$((${pnum}-1))
+ partition_flag=1
+ fi
+ for dev in ${devs}; do
+ if [ "(" = $(echo ${dev} | cut -b1) ]; then
+ grubdevice="${dev}"
+ else
+ if [ "${dev}" = "${linuxdevice}" ]; then
+ device_found=1
+ break
+ fi
+ fi
+ done
+ if [ "${device_found}" = "1" ]; then
+ if [ "${partition_flag}" = "0" ]; then
+ echo "${grubdevice}"
+ else
+ grubdevice_stringlen=${#grubdevice}
+ let grubdevice_stringlen--
+ grubdevice=$(echo $grubdevice | cut -b1-$grubdevice_stringlen)
+ echo "${grubdevice},${pnum})"
+ fi
+ else
+ echo " DEVICE NOT FOUND"
+ fi
}
dogrub() {
- get_grub_map
- if [ ! -f /boot/grub/menu.lst ]; then
- echo "Error: Couldn't find /boot/grub/menu.lst. Is GRUB installed?"
- exit 1
+ get_grub_map
+ if [ ! -f /boot/grub/menu.lst ]; then
+ echo "Error: Couldn't find /boot/grub/menu.lst. Is GRUB installed?"
+ exit 1
+ fi
+ # try to auto-configure GRUB...
+ if [ "${PART_ROOT}" != "" -a "$S_GRUB" != "1" ]; then
+ grubdev=$(mapdev ${PART_ROOT})
+ # look for a separately-mounted /boot partition
+ bootdev=$(mount | grep /boot | cut -d' ' -f 1)
+ if [ "${grubdev}" != "" -o "${bootdev}" != "" ]; then
+ cp /boot/grub/menu.lst /tmp/.menu.lst
+ # remove the default entries by truncating the file at our little tag (#-*)
+ head -n $(cat /tmp/.menu.lst | grep -n '#-\*' | cut -d: -f 1) /tmp/.menu.lst >/boot/grub/menu.lst
+ rm -f /tmp/.menu.lst
+
+ for kernel in /boot/vmlinuz-linux* /boot/vmlinuz26*; do
+ if [ ${kernel} == "/boot/vmlinuz-linux*" ] || [ ${kernel} == "/boot/vmlinuz26*" ] ; then
+ echo > /dev/null
+ else
+ VMLINUZ=$( echo ${kernel} | cut -c 7- )
+
+ if [ "$( echo ${VMLINUZ} | cut -c -13 )" = vmlinuz-linux ]; then # new naming scheme for linux > 3.0
+ extension=$( echo ${VMLINUZ} | cut -c 14- )
+ INITRAMFS_BASENAME = initramfs-linux${extension}
+ else # old naming scheme for lts kernel
+ extension=$( echo ${VMLINUZ} | cut -c 10- )
+ INITRAMFS_BASENAME=kernel26${extension}
+ fi
+
+ echo "" >>/boot/grub/menu.lst
+ echo "# (0) Arch Linux" >>/boot/grub/menu.lst
+ echo "title Arch Linux" >>/boot/grub/menu.lst
+ subdir=
+ if [ "${bootdev}" != "" ]; then
+ grubdev=$(mapdev ${bootdev})
+ else
+ subdir="/boot"
+ fi
+ echo "root ${grubdev}" >>/boot/grub/menu.lst
+ echo "kernel ${subdir}/${VMLINUZ} root=${PART_ROOT} ro" >>/boot/grub/menu.lst
+ echo "initrd ${subdir}/${INITRAMFS_BASENAME}.img" >>/boot/grub/menu.lst
+ echo "" >>/boot/grub/menu.lst
+
+ # adding fallback/full image
+ echo "# (1) Arch Linux" >>/boot/grub/menu.lst
+ echo "title Arch Linux Fallback" >>/boot/grub/menu.lst
+ echo "root ${grubdev}" >>/boot/grub/menu.lst
+ echo "kernel ${subdir}/${VMLINUZ} root=${PART_ROOT} ro" >>/boot/grub/menu.lst
+ echo "initrd ${subdir}/${INITRAMFS_BASENAME}-fallback.img" >>/boot/grub/menu.lst
+ echo "" >>/boot/grub/menu.lst
fi
- # try to auto-configure GRUB...
- if [ "$PART_ROOT" != "" -a "$S_GRUB" != "1" ]; then
- grubdev=$(mapdev $PART_ROOT)
- # look for a separately-mounted /boot partition
- bootdev=$(mount | grep /boot | cut -d' ' -f 1)
- if [ "$grubdev" != "" -o "$bootdev" != "" ]; then
- cp /boot/grub/menu.lst /tmp/.menu.lst
- # remove the default entries by truncating the file at our little tag (#-*)
- head -n $(cat /tmp/.menu.lst | grep -n '#-\*' | cut -d: -f 1) /tmp/.menu.lst >/boot/grub/menu.lst
- rm -f /tmp/.menu.lst
- echo "" >>/boot/grub/menu.lst
- echo "# (0) Arch Linux" >>/boot/grub/menu.lst
- echo "title Arch Linux" >>/boot/grub/menu.lst
- subdir=
- if [ "$bootdev" != "" ]; then
- grubdev=$(mapdev $bootdev)
- else
- subdir="/boot"
- fi
- echo "root $grubdev" >>/boot/grub/menu.lst
- echo "kernel $subdir/$VMLINUZ root=$PART_ROOT ro" >>/boot/grub/menu.lst
- if [ "$VMLINUZ" = "vmlinuz26" ]; then
- echo "initrd $subdir/kernel26.img" >>/boot/grub/menu.lst
- fi
- echo "" >>/boot/grub/menu.lst
- # adding fallback/full image
- echo "# (1) Arch Linux" >>/boot/grub/menu.lst
- echo "title Arch Linux Fallback" >>/boot/grub/menu.lst
- echo "root $grubdev" >>/boot/grub/menu.lst
- echo "kernel $subdir/$VMLINUZ root=$PART_ROOT ro" >>/boot/grub/menu.lst
- if [ "$VMLINUZ" = "vmlinuz26" ]; then
- echo "initrd $subdir/kernel26-fallback.img" >>/boot/grub/menu.lst
- fi
- echo "" >>/boot/grub/menu.lst
- fi
- fi
+ done
+ fi
+ fi
- echo "Installing the GRUB bootloader..."
- cp -a /usr/lib/grub/i386-pc/* /boot/grub/
- sync
- # freeze xfs filesystems to enable grub installation on xfs filesystems
- if [ -x /usr/sbin/xfs_freeze ]; then
- /usr/sbin/xfs_freeze -f /boot > /dev/null 2>&1
- /usr/sbin/xfs_freeze -f / > /dev/null 2>&1
- fi
- # look for a separately-mounted /boot partition
- bootpart=$(mount | grep /boot | cut -d' ' -f 1)
- if [ "$bootpart" = "" ]; then
- bootpart=$PART_ROOT
- fi
- bootpart=$(mapdev $bootpart)
- bootdev=$(mapdev $ROOTDEV)
- if [ "$bootpart" = "" ]; then
- echo "Error: Missing/Invalid root device: $bootpart"
- exit 1
- fi
- /sbin/grub --no-floppy --batch >/tmp/grub.log 2>&1 <<EOF
-root $bootpart
-setup $bootdev
+ echo "Installing the GRUB bootloader..."
+ cp -a /usr/lib/grub/i386-pc/* /boot/grub/
+ sync
+
+ # freeze xfs filesystems to enable grub installation on xfs filesystems
+ if [ -x /usr/sbin/xfs_freeze ]; then
+ /usr/sbin/xfs_freeze -f /boot > /dev/null 2>&1
+ /usr/sbin/xfs_freeze -f / > /dev/null 2>&1
+ fi
+
+ # look for a separately-mounted /boot partition
+ bootpart=$(mount | grep /boot | cut -d' ' -f 1)
+ if [ "${bootpart}" = "" ]; then
+ bootpart=${PART_ROOT}
+ fi
+ bootpart=$(mapdev ${bootpart})
+ bootdev=$(mapdev ${ROOTDEV})
+ if [ "${bootpart}" = "" ]; then
+ echo "Error: Missing/Invalid root device: ${bootpart}"
+ exit 1
+ fi
+
+ echo ${bootpart}
+ echo ${bootdev}
+ /sbin/grub --no-floppy --batch >/tmp/grub.log 2>&1 <<EOF
+root ${bootpart}
+setup ${bootdev}
quit
EOF
-cat /tmp/grub.log
- # unfreeze xfs filesystems
- if [ -x /usr/sbin/xfs_freeze ]; then
- /usr/sbin/xfs_freeze -u /boot > /dev/null 2>&1
- /usr/sbin/xfs_freeze -u / > /dev/null 2>&1
- fi
+ cat /tmp/grub.log
- if grep "Error [0-9]*: " /tmp/grub.log >/dev/null; then
- echo "Error installing GRUB. (see /tmp/grub.log for output)"
- exit 1
- fi
- echo "GRUB was successfully installed."
+ # unfreeze xfs filesystems
+ if [ -x /usr/sbin/xfs_freeze ]; then
+ /usr/sbin/xfs_freeze -u /boot > /dev/null 2>&1
+ /usr/sbin/xfs_freeze -u / > /dev/null 2>&1
+ fi
+ if grep "Error [0-9]*: " /tmp/grub.log >/dev/null; then
+ echo "Error installing GRUB. (see /tmp/grub.log for output)"
+ exit 1
+ fi
+ echo "GRUB was successfully installed."
-rm -f /tmp/grub.log
+ rm -f /tmp/grub.log
-exit 0
+ exit 0
}
-dogrub
\ No newline at end of file
+dogrub
More information about the arch-commits
mailing list