diff options
Diffstat (limited to 'abs/core-testing/grub')
-rw-r--r-- | abs/core-testing/grub/040_all_grub-0.96-nxstack.patch | 623 | ||||
-rw-r--r-- | abs/core-testing/grub/05-grub-0.97-initrdaddr.diff | 16 | ||||
-rw-r--r-- | abs/core-testing/grub/PKGBUILD | 75 | ||||
-rw-r--r-- | abs/core-testing/grub/ext4.patch | 263 | ||||
-rw-r--r-- | abs/core-testing/grub/grub-0.97-gpt.patch | 315 | ||||
-rw-r--r-- | abs/core-testing/grub/grub-inode-size.patch | 94 | ||||
-rw-r--r-- | abs/core-testing/grub/grub.install | 22 | ||||
-rw-r--r-- | abs/core-testing/grub/i2o.patch | 45 | ||||
-rw-r--r-- | abs/core-testing/grub/install-grub | 543 | ||||
-rwxr-xr-x | abs/core-testing/grub/install-grub.orig | 187 | ||||
-rw-r--r-- | abs/core-testing/grub/intelmac.patch | 67 | ||||
-rw-r--r-- | abs/core-testing/grub/menu.lst | 48 | ||||
-rw-r--r-- | abs/core-testing/grub/more-raid.patch | 100 | ||||
-rw-r--r-- | abs/core-testing/grub/special-devices.patch | 18 |
14 files changed, 0 insertions, 2416 deletions
diff --git a/abs/core-testing/grub/040_all_grub-0.96-nxstack.patch b/abs/core-testing/grub/040_all_grub-0.96-nxstack.patch deleted file mode 100644 index 121941c..0000000 --- a/abs/core-testing/grub/040_all_grub-0.96-nxstack.patch +++ /dev/null @@ -1,623 +0,0 @@ -Fix NX segfaulting on amd64. - -Patch by Peter Jones. - -http://lists.gnu.org/archive/html/bug-grub/2005-03/msg00011.html - ---- grub-0.97/grub/asmstub.c -+++ grub-0.97/grub/asmstub.c -@@ -42,6 +42,7 @@ - #include <sys/time.h> - #include <termios.h> - #include <signal.h> -+#include <sys/mman.h> - - #ifdef __linux__ - # include <sys/ioctl.h> /* ioctl */ -@@ -79,7 +80,7 @@ - struct apm_info apm_bios_info; - - /* Emulation requirements. */ --char *grub_scratch_mem = 0; -+void *grub_scratch_mem = 0; - - struct geometry *disks = 0; - -@@ -103,14 +104,62 @@ - static unsigned int serial_speed; - #endif /* SIMULATE_SLOWNESS_OF_SERIAL */ - -+/* This allocates page-aligned storage of the specified size, which must be -+ * a multiple of the page size as determined by calling sysconf(_SC_PAGESIZE) -+ */ -+#ifdef __linux__ -+static void * -+grub_mmap_alloc(size_t len) -+{ -+ int mmap_flags = MAP_ANONYMOUS|MAP_PRIVATE|MAP_EXECUTABLE; -+ -+#ifdef MAP_32BIT -+ mmap_flags |= MAP_32BIT; -+#endif -+ /* Mark the simulated stack executable, as GCC uses stack trampolines -+ * to implement nested functions. */ -+ return mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC, mmap_flags, -1, 0); -+} -+#else /* !defined(__linux__) */ -+static void * -+grub_mmap_alloc(size_t len) -+{ -+ int fd = 0, offset = 0, ret = 0; -+ void *pa = MAP_FAILED; -+ char template[] = "/tmp/grub_mmap_alloc_XXXXXX"; -+ errno_t e; -+ -+ fd = mkstemp(template); -+ if (fd < 0) -+ return pa; -+ -+ unlink(template); -+ -+ ret = ftruncate(fd, len); -+ if (ret < 0) -+ return pa; -+ -+ /* Mark the simulated stack executable, as GCC uses stack trampolines -+ * to implement nested functions. */ -+ pa = mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC, -+ MAP_PRIVATE|MAP_EXECUTABLE, fd, offset); -+ -+ e = errno; -+ close(fd); -+ errno = e; -+ return pa; -+} -+#endif /* defined(__linux__) */ -+ - /* The main entry point into this mess. */ - int - grub_stage2 (void) - { - /* These need to be static, because they survive our stack transitions. */ - static int status = 0; -- static char *realstack; -- char *scratch, *simstack; -+ static void *realstack; -+ void *simstack_alloc_base, *simstack; -+ size_t simstack_size, page_size; - int i; - - /* We need a nested function so that we get a clean stack frame, -@@ -140,9 +189,35 @@ - } - - assert (grub_scratch_mem == 0); -- scratch = malloc (0x100000 + EXTENDED_MEMSIZE + 15); -- assert (scratch); -- grub_scratch_mem = (char *) ((((int) scratch) >> 4) << 4); -+ -+ /* Allocate enough pages for 0x100000 + EXTENDED_SIZE + 15, and -+ * make sure the memory is aligned to a multiple of the system's -+ * page size */ -+ page_size = sysconf (_SC_PAGESIZE); -+ simstack_size = ( 0x100000 + EXTENDED_MEMSIZE + 15); -+ if (simstack_size % page_size) -+ { -+ /* If we're not on a page_size boundary, round up to the next one */ -+ simstack_size &= ~(page_size-1); -+ simstack_size += page_size; -+ } -+ -+ /* Add one for a PROT_NONE boundary page at each end. */ -+ simstack_size += 2 * page_size; -+ -+ simstack_alloc_base = grub_mmap_alloc(simstack_size); -+ assert (simstack_alloc_base != MAP_FAILED); -+ -+ /* mark pages above and below our simstack area as innaccessable. -+ * If the implementation we're using doesn't support that, then the -+ * new protection modes are undefined. It's safe to just ignore -+ * them, though. It'd be nice if we knew that we'd get a SEGV for -+ * touching the area, but that's all. it'd be nice to have. */ -+ mprotect (simstack_alloc_base, page_size, PROT_NONE); -+ mprotect ((void *)((unsigned long)simstack_alloc_base + -+ simstack_size - page_size), page_size, PROT_NONE); -+ -+ grub_scratch_mem = (void *)((unsigned long)simstack_alloc_base + page_size); - - /* FIXME: simulate the memory holes using mprot, if available. */ - -@@ -215,7 +290,7 @@ - device_map = 0; - free (disks); - disks = 0; -- free (scratch); -+ munmap(simstack_alloc_base, simstack_size); - grub_scratch_mem = 0; - - if (serial_device) ---- grub-0.97/stage2/builtins.c -+++ grub-0.97/stage2/builtins.c -@@ -131,63 +131,98 @@ - } - - -+/* blocklist_read_helper nee disk_read_blocklist_func was a nested -+ * function, to which pointers were taken and exposed globally. Even -+ * in the GNU-C nested functions extension, they have local linkage, -+ * and aren't guaranteed to be accessable *at all* outside of their -+ * containing scope. -+ * -+ * Above and beyond all of that, the variables within blocklist_func_context -+ * are originally local variables, with local (not even static) linkage, -+ * from within blocklist_func. These were each referenced by -+ * disk_read_blocklist_func, which is only called from other functions -+ * through a globally scoped pointer. -+ * -+ * The documentation in GCC actually uses the words "all hell will break -+ * loose" to describe this scenario. -+ * -+ * Also, "start_sector" was also used uninitialized, but gcc doesn't warn -+ * about it (possibly because of the scoping madness?) -+ */ -+ -+static struct { -+ int start_sector; -+ int num_sectors; -+ int num_entries; -+ int last_length; -+} blocklist_func_context = { -+ .start_sector = 0, -+ .num_sectors = 0, -+ .num_entries = 0, -+ .last_length = 0 -+}; -+ -+/* Collect contiguous blocks into one entry as many as possible, -+ and print the blocklist notation on the screen. */ -+static void -+blocklist_read_helper (int sector, int offset, int length) -+{ -+ int *start_sector = &blocklist_func_context.start_sector; -+ int *num_sectors = &blocklist_func_context.num_sectors; -+ int *num_entries = &blocklist_func_context.num_entries; -+ int *last_length = &blocklist_func_context.last_length; -+ -+ if (*num_sectors > 0) -+ { -+ if (*start_sector + *num_sectors == sector -+ && offset == 0 && *last_length == SECTOR_SIZE) -+ { -+ *num_sectors++; -+ *last_length = length; -+ return; -+ } -+ else -+ { -+ if (*last_length == SECTOR_SIZE) -+ grub_printf ("%s%d+%d", *num_entries ? "," : "", -+ *start_sector - part_start, *num_sectors); -+ else if (*num_sectors > 1) -+ grub_printf ("%s%d+%d,%d[0-%d]", *num_entries ? "," : "", -+ *start_sector - part_start, *num_sectors-1, -+ *start_sector + *num_sectors-1 - part_start, -+ *last_length); -+ else -+ grub_printf ("%s%d[0-%d]", *num_entries ? "," : "", -+ *start_sector - part_start, *last_length); -+ *num_entries++; -+ *num_sectors = 0; -+ } -+ } -+ -+ if (offset > 0) -+ { -+ grub_printf("%s%d[%d-%d]", *num_entries ? "," : "", -+ sector-part_start, offset, offset+length); -+ *num_entries++; -+ } -+ else -+ { -+ *start_sector = sector; -+ *num_sectors = 1; -+ *last_length = length; -+ } -+} -+ - /* blocklist */ - static int - blocklist_func (char *arg, int flags) - { - char *dummy = (char *) RAW_ADDR (0x100000); -- int start_sector; -- int num_sectors = 0; -- int num_entries = 0; -- int last_length = 0; -- -- auto void disk_read_blocklist_func (int sector, int offset, int length); -- -- /* Collect contiguous blocks into one entry as many as possible, -- and print the blocklist notation on the screen. */ -- auto void disk_read_blocklist_func (int sector, int offset, int length) -- { -- if (num_sectors > 0) -- { -- if (start_sector + num_sectors == sector -- && offset == 0 && last_length == SECTOR_SIZE) -- { -- num_sectors++; -- last_length = length; -- return; -- } -- else -- { -- if (last_length == SECTOR_SIZE) -- grub_printf ("%s%d+%d", num_entries ? "," : "", -- start_sector - part_start, num_sectors); -- else if (num_sectors > 1) -- grub_printf ("%s%d+%d,%d[0-%d]", num_entries ? "," : "", -- start_sector - part_start, num_sectors-1, -- start_sector + num_sectors-1 - part_start, -- last_length); -- else -- grub_printf ("%s%d[0-%d]", num_entries ? "," : "", -- start_sector - part_start, last_length); -- num_entries++; -- num_sectors = 0; -- } -- } -- -- if (offset > 0) -- { -- grub_printf("%s%d[%d-%d]", num_entries ? "," : "", -- sector-part_start, offset, offset+length); -- num_entries++; -- } -- else -- { -- start_sector = sector; -- num_sectors = 1; -- last_length = length; -- } -- } - -+ int *start_sector = &blocklist_func_context.start_sector; -+ int *num_sectors = &blocklist_func_context.num_sectors; -+ int *num_entries = &blocklist_func_context.num_entries; -+ - /* Open the file. */ - if (! grub_open (arg)) - return 1; -@@ -204,15 +241,15 @@ - grub_printf (")"); - - /* Read in the whole file to DUMMY. */ -- disk_read_hook = disk_read_blocklist_func; -+ disk_read_hook = blocklist_read_helper; - if (! grub_read (dummy, -1)) - goto fail; - - /* The last entry may not be printed yet. Don't check if it is a - * full sector, since it doesn't matter if we read too much. */ -- if (num_sectors > 0) -- grub_printf ("%s%d+%d", num_entries ? "," : "", -- start_sector - part_start, num_sectors); -+ if (*num_sectors > 0) -+ grub_printf ("%s%d+%d", *num_entries ? "," : "", -+ *start_sector - part_start, *num_sectors); - - grub_printf ("\n"); - -@@ -1868,6 +1905,77 @@ - - - /* install */ -+static struct { -+ int saved_sector; -+ int installaddr; -+ int installlist; -+ char *stage2_first_buffer; -+} install_func_context = { -+ .saved_sector = 0, -+ .installaddr = 0, -+ .installlist = 0, -+ .stage2_first_buffer = NULL, -+}; -+ -+/* Save the first sector of Stage2 in STAGE2_SECT. */ -+/* Formerly disk_read_savesect_func with local scope inside install_func */ -+static void -+install_savesect_helper(int sector, int offset, int length) -+{ -+ if (debug) -+ printf ("[%d]", sector); -+ -+ /* ReiserFS has files which sometimes contain data not aligned -+ on sector boundaries. Returning an error is better than -+ silently failing. */ -+ if (offset != 0 || length != SECTOR_SIZE) -+ errnum = ERR_UNALIGNED; -+ -+ install_func_context.saved_sector = sector; -+} -+ -+/* Write SECTOR to INSTALLLIST, and update INSTALLADDR and INSTALLSECT. */ -+/* Formerly disk_read_blocklist_func with local scope inside install_func */ -+static void -+install_blocklist_helper (int sector, int offset, int length) -+{ -+ int *installaddr = &install_func_context.installaddr; -+ int *installlist = &install_func_context.installlist; -+ char **stage2_first_buffer = &install_func_context.stage2_first_buffer; -+ /* Was the last sector full? */ -+ static int last_length = SECTOR_SIZE; -+ -+ if (debug) -+ printf("[%d]", sector); -+ -+ if (offset != 0 || last_length != SECTOR_SIZE) -+ { -+ /* We found a non-sector-aligned data block. */ -+ errnum = ERR_UNALIGNED; -+ return; -+ } -+ -+ last_length = length; -+ -+ if (*((unsigned long *) (*installlist - 4)) -+ + *((unsigned short *) *installlist) != sector -+ || *installlist == (int) *stage2_first_buffer + SECTOR_SIZE + 4) -+ { -+ *installlist -= 8; -+ -+ if (*((unsigned long *) (*installlist - 8))) -+ errnum = ERR_WONT_FIT; -+ else -+ { -+ *((unsigned short *) (*installlist + 2)) = (*installaddr >> 4); -+ *((unsigned long *) (*installlist - 4)) = sector; -+ } -+ } -+ -+ *((unsigned short *) *installlist) += 1; -+ *installaddr += 512; -+} -+ - static int - install_func (char *arg, int flags) - { -@@ -1875,8 +1983,12 @@ - char *stage1_buffer = (char *) RAW_ADDR (0x100000); - char *stage2_buffer = stage1_buffer + SECTOR_SIZE; - char *old_sect = stage2_buffer + SECTOR_SIZE; -- char *stage2_first_buffer = old_sect + SECTOR_SIZE; -- char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE; -+ /* stage2_first_buffer used to be defined as: -+ * char *stage2_first_buffer = old_sect + SECTOR_SIZE; */ -+ char **stage2_first_buffer = &install_func_context.stage2_first_buffer; -+ /* and stage2_second_buffer was: -+ * char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE; */ -+ char *stage2_second_buffer = old_sect + SECTOR_SIZE + SECTOR_SIZE; - /* XXX: Probably SECTOR_SIZE is reasonable. */ - char *config_filename = stage2_second_buffer + SECTOR_SIZE; - char *dummy = config_filename + SECTOR_SIZE; -@@ -1885,10 +1997,11 @@ - int src_drive, src_partition, src_part_start; - int i; - struct geometry dest_geom, src_geom; -- int saved_sector; -+ int *saved_sector = &install_func_context.saved_sector; - int stage2_first_sector, stage2_second_sector; - char *ptr; -- int installaddr, installlist; -+ int *installaddr = &install_func_context.installaddr; -+ int *installlist = &install_func_context.installlist; - /* Point to the location of the name of a configuration file in Stage 2. */ - char *config_file_location; - /* If FILE is a Stage 1.5? */ -@@ -1897,67 +2010,13 @@ - int is_open = 0; - /* If LBA is forced? */ - int is_force_lba = 0; -- /* Was the last sector full? */ -- int last_length = SECTOR_SIZE; -- -+ -+ *stage2_first_buffer = old_sect + SECTOR_SIZE; - #ifdef GRUB_UTIL - /* If the Stage 2 is in a partition mounted by an OS, this will store - the filename under the OS. */ - char *stage2_os_file = 0; - #endif /* GRUB_UTIL */ -- -- auto void disk_read_savesect_func (int sector, int offset, int length); -- auto void disk_read_blocklist_func (int sector, int offset, int length); -- -- /* Save the first sector of Stage2 in STAGE2_SECT. */ -- auto void disk_read_savesect_func (int sector, int offset, int length) -- { -- if (debug) -- printf ("[%d]", sector); -- -- /* ReiserFS has files which sometimes contain data not aligned -- on sector boundaries. Returning an error is better than -- silently failing. */ -- if (offset != 0 || length != SECTOR_SIZE) -- errnum = ERR_UNALIGNED; -- -- saved_sector = sector; -- } -- -- /* Write SECTOR to INSTALLLIST, and update INSTALLADDR and -- INSTALLSECT. */ -- auto void disk_read_blocklist_func (int sector, int offset, int length) -- { -- if (debug) -- printf("[%d]", sector); -- -- if (offset != 0 || last_length != SECTOR_SIZE) -- { -- /* We found a non-sector-aligned data block. */ -- errnum = ERR_UNALIGNED; -- return; -- } -- -- last_length = length; -- -- if (*((unsigned long *) (installlist - 4)) -- + *((unsigned short *) installlist) != sector -- || installlist == (int) stage2_first_buffer + SECTOR_SIZE + 4) -- { -- installlist -= 8; -- -- if (*((unsigned long *) (installlist - 8))) -- errnum = ERR_WONT_FIT; -- else -- { -- *((unsigned short *) (installlist + 2)) = (installaddr >> 4); -- *((unsigned long *) (installlist - 4)) = sector; -- } -- } -- -- *((unsigned short *) installlist) += 1; -- installaddr += 512; -- } - - /* First, check the GNU-style long option. */ - while (1) -@@ -1987,10 +2049,10 @@ - addr = skip_to (0, file); - - /* Get the installation address. */ -- if (! safe_parse_maxint (&addr, &installaddr)) -+ if (! safe_parse_maxint (&addr, installaddr)) - { - /* ADDR is not specified. */ -- installaddr = 0; -+ *installaddr = 0; - ptr = addr; - errnum = 0; - } -@@ -2084,17 +2146,17 @@ - = (dest_drive & BIOS_FLAG_FIXED_DISK); - - /* Read the first sector of Stage 2. */ -- disk_read_hook = disk_read_savesect_func; -- if (grub_read (stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE) -+ disk_read_hook = install_savesect_helper; -+ if (grub_read (*stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE) - goto fail; - -- stage2_first_sector = saved_sector; -+ stage2_first_sector = *saved_sector; - - /* Read the second sector of Stage 2. */ - if (grub_read (stage2_second_buffer, SECTOR_SIZE) != SECTOR_SIZE) - goto fail; - -- stage2_second_sector = saved_sector; -+ stage2_second_sector = *saved_sector; - - /* Check for the version of Stage 2. */ - if (*((short *) (stage2_second_buffer + STAGE2_VER_MAJ_OFFS)) -@@ -2110,27 +2172,27 @@ - - /* If INSTALLADDR is not specified explicitly in the command-line, - determine it by the Stage 2 id. */ -- if (! installaddr) -+ if (! *installaddr) - { - if (! is_stage1_5) - /* Stage 2. */ -- installaddr = 0x8000; -+ *installaddr = 0x8000; - else - /* Stage 1.5. */ -- installaddr = 0x2000; -+ *installaddr = 0x2000; - } - - *((unsigned long *) (stage1_buffer + STAGE1_STAGE2_SECTOR)) - = stage2_first_sector; - *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_ADDRESS)) -- = installaddr; -+ = *installaddr; - *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_SEGMENT)) -- = installaddr >> 4; -+ = *installaddr >> 4; - -- i = (int) stage2_first_buffer + SECTOR_SIZE - 4; -+ i = (int) *stage2_first_buffer + SECTOR_SIZE - 4; - while (*((unsigned long *) i)) - { -- if (i < (int) stage2_first_buffer -+ if (i < (int) *stage2_first_buffer - || (*((int *) (i - 4)) & 0x80000000) - || *((unsigned short *) i) >= 0xA00 - || *((short *) (i + 2)) == 0) -@@ -2144,13 +2206,13 @@ - i -= 8; - } - -- installlist = (int) stage2_first_buffer + SECTOR_SIZE + 4; -- installaddr += SECTOR_SIZE; -+ *installlist = (int) *stage2_first_buffer + SECTOR_SIZE + 4; -+ *installaddr += SECTOR_SIZE; - - /* Read the whole of Stage2 except for the first sector. */ - grub_seek (SECTOR_SIZE); - -- disk_read_hook = disk_read_blocklist_func; -+ disk_read_hook = install_blocklist_helper; - if (! grub_read (dummy, -1)) - goto fail; - -@@ -2233,7 +2295,7 @@ - /* Skip the first sector. */ - grub_seek (SECTOR_SIZE); - -- disk_read_hook = disk_read_savesect_func; -+ disk_read_hook = install_savesect_helper; - if (grub_read (stage2_buffer, SECTOR_SIZE) != SECTOR_SIZE) - goto fail; - -@@ -2303,7 +2365,7 @@ - else - #endif /* GRUB_UTIL */ - { -- if (! devwrite (saved_sector - part_start, 1, stage2_buffer)) -+ if (! devwrite (*saved_sector - part_start, 1, stage2_buffer)) - goto fail; - } - } -@@ -2325,7 +2387,7 @@ - goto fail; - } - -- if (fwrite (stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) -+ if (fwrite (*stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) - { - fclose (fp); - errnum = ERR_WRITE; -@@ -2352,7 +2414,7 @@ - goto fail; - - if (! devwrite (stage2_first_sector - src_part_start, 1, -- stage2_first_buffer)) -+ *stage2_first_buffer)) - goto fail; - - if (! devwrite (stage2_second_sector - src_part_start, 1, ---- grub-0.97/stage2/shared.h -+++ grub-0.97/stage2/shared.h -@@ -36,8 +36,8 @@ - - /* Maybe redirect memory requests through grub_scratch_mem. */ - #ifdef GRUB_UTIL --extern char *grub_scratch_mem; --# define RAW_ADDR(x) ((x) + (int) grub_scratch_mem) -+extern void *grub_scratch_mem; -+# define RAW_ADDR(x) ((x) + (unsigned long) grub_scratch_mem) - # define RAW_SEG(x) (RAW_ADDR ((x) << 4) >> 4) - #else - # define RAW_ADDR(x) (x) diff --git a/abs/core-testing/grub/05-grub-0.97-initrdaddr.diff b/abs/core-testing/grub/05-grub-0.97-initrdaddr.diff deleted file mode 100644 index ccf5f3e..0000000 --- a/abs/core-testing/grub/05-grub-0.97-initrdaddr.diff +++ /dev/null @@ -1,16 +0,0 @@ ---- grub-0.96/stage2/boot.c -+++ grub-0.96/stage2/boot.c -@@ -824,8 +824,11 @@ - moveto = (mbi.mem_upper + 0x400) << 10; - - moveto = (moveto - len) & 0xfffff000; -- max_addr = (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0203 -- ? lh->initrd_addr_max : LINUX_INITRD_MAX_ADDRESS); -+ max_addr = LINUX_INITRD_MAX_ADDRESS; -+ if (lh->header == LINUX_MAGIC_SIGNATURE && -+ lh->version >= 0x0203 && -+ lh->initrd_addr_max < max_addr) -+ max_addr = lh->initrd_addr_max; - if (moveto + len >= max_addr) - moveto = (max_addr - len) & 0xfffff000; - diff --git a/abs/core-testing/grub/PKGBUILD b/abs/core-testing/grub/PKGBUILD deleted file mode 100644 index 38c6a28..0000000 --- a/abs/core-testing/grub/PKGBUILD +++ /dev/null @@ -1,75 +0,0 @@ -# $Id: PKGBUILD 22874 2008-12-29 18:25:08Z tpowa $ -# Maintainer: Ronald van Haren <ronald.archlinux.org> - -pkgname=grub -pkgver=0.97 -pkgrel=31 -pkgdesc="A GNU multiboot boot loader" -arch=('i686' 'x86_64') -license=('GPL') -url="http://www.gnu.org/software/grub/" -groups=('base') -depends=('ncurses' 'diffutils' 'sed') -source=(ftp://alpha.gnu.org/gnu/grub/grub-$pkgver.tar.gz - menu.lst - install-grub - 040_all_grub-0.96-nxstack.patch - 05-grub-0.97-initrdaddr.diff - i2o.patch - special-devices.patch - more-raid.patch - intelmac.patch - grub-inode-size.patch - ext4.patch) -backup=('boot/grub/menu.lst') -install=grub.install - -build() { - cd $srcdir/$pkgname-$pkgver - - #set destination architecture here - DESTARCH="i686" - #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 - # Add support for bigger inode size to e2fs_stage1_5 - patch -Np1 -i ../grub-inode-size.patch || return 1 - # Add ext4 support - # http://www.mail-archive.com/bug-grub@gnu.org/msg11458.html - patch -Np1 -i ../ext4.patch || return 1 - - #arch64 fixes for static build - if [ "$CARCH" = "x86_64" ]; then - 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 from frugalware to make it boot when more than 2GB ram installed - patch -Np1 -i ../05-grub-0.97-initrdaddr.diff || return 1 - CFLAGS="-static" ./configure --prefix=/usr --bindir=/bin --sbindir=/sbin \ - --mandir=/usr/share/man --infodir=/usr/share/info - else - CFLAGS= ./configure --prefix=/usr --bindir=/bin --sbindir=/sbin \ - --mandir=/usr/share/man --infodir=/usr/share/info - fi - fi - - CFLAGS= make || return 1 - make DESTDIR=$pkgdir install || return 1 - install -D -m644 ../menu.lst $startdir/pkg/boot/grub/menu.lst - install -D -m755 ../install-grub $startdir/pkg/sbin/install-grub - - rm -f $pkgdir/usr/share/info/dir || return 1 - gzip /$pkgdir/usr/share/info/* - - if [ "$DESTARCH" = "x86_64" ]; then - # fool makepkg into building a x86_64 package - export CARCH="x86_64" - fi -} diff --git a/abs/core-testing/grub/ext4.patch b/abs/core-testing/grub/ext4.patch deleted file mode 100644 index 8a2f9bd..0000000 --- a/abs/core-testing/grub/ext4.patch +++ /dev/null @@ -1,263 +0,0 @@ -diff -ruNp grub-0.97/stage2/fsys_ext2fs.c grub-0.97-patch/stage2/fsys_ext2fs.c ---- grub-0.97/stage2/fsys_ext2fs.c 2004-08-08 20:19:18.000000000 +0200 -+++ grub-0.97-patch/stage2/fsys_ext2fs.c 2007-12-29 16:25:19.000000000 -+0100 -@@ -51,6 +51,9 @@ typedef unsigned int __u32; - #define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1) - #define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1) - -+/* Inode flags */ -+#define EXT4_EXTENTS_FL 0x00080000 /* Inode uses extents */ -+ - /* include/linux/ext2_fs.h */ - struct ext2_super_block - { -@@ -191,6 +194,42 @@ struct ext2_dir_entry - #define EXT2_DIR_REC_LEN(name_len) (((name_len) + 8 + EXT2_DIR_ROUND) & \ - ~EXT2_DIR_ROUND) - -+/* linux/ext4_fs_extents.h */ -+/* -+ * This is the extent on-disk structure. -+ * It's used at the bottom of the tree. -+ */ -+struct ext4_extent { -+ __u32 ee_block; /* first logical block extent covers */ -+ __u16 ee_len; /* number of blocks covered by extent */ -+ __u16 ee_start_hi; /* high 16 bits of physical block */ -+ __u32 ee_start; /* low 32 bits of physical block */ -+}; -+ -+/* -+ * This is index on-disk structure. -+ * It's used at all the levels except the bottom. -+ */ -+struct ext4_extent_idx { -+ __u32 ei_block; /* index covers logical blocks from 'block' */ -+ __u32 ei_leaf; /* pointer to the physical block of the next * -+ * level. leaf or next index could be there */ -+ __u16 ei_leaf_hi; /* high 16 bits of physical block */ -+ __u16 ei_unused; -+}; -+ -+/* -+ * Each block (leaves and indexes), even inode-stored has header. -+ */ -+struct ext4_extent_header { -+ __u16 eh_magic; /* probably will support different formats */ -+ __u16 eh_entries; /* number of valid entries */ -+ __u16 eh_max; /* capacity of store in entries */ -+ __u16 eh_depth; /* has tree real underlying blocks? */ -+ __u32 eh_generation; /* generation of the tree */ -+}; -+ -+#define EXT4_EXT_MAGIC 0xf30a - - /* ext2/super.c */ - #define log2(n) ffz(~(n)) -@@ -279,6 +318,26 @@ ext2_rdfsb (int fsblock, int buffer) - EXT2_BLOCK_SIZE (SUPERBLOCK), (char *) buffer); - } - -+/* Walk through extents index tree to find the good leaf */ -+static struct ext4_extent_header * -+ext4_recurse_extent_index(struct ext4_extent_header *extent_block, int logical_block) -+{ -+ int i; -+ struct ext4_extent_idx *index = (struct ext4_extent_idx *) (extent_block + 1); -+ if (extent_block->eh_magic != EXT4_EXT_MAGIC) -+ return NULL; -+ if (extent_block->eh_depth == 0) -+ return extent_block; -+ for (i = 0; i < extent_block->eh_entries; i++) -+ { -+ if (logical_block < index[i].ei_block) -+ break; -+ } -+ if (i == 0 || !ext2_rdfsb(index[i-1].ei_leaf, DATABLOCK1)) -+ return NULL; -+ return (ext4_recurse_extent_index((struct ext4_extent_header *) DATABLOCK1, logical_block)); -+} -+ - /* from - ext2/inode.c:ext2_bmap() - */ ---- grub-0.97/stage2/fsys_ext2fs.c~ 2008-12-28 20:19:00.000000000 +0100 -+++ grub-0.97/stage2/fsys_ext2fs.c 2008-12-28 20:19:00.000000000 +0100 -@@ -366,83 +366,106 @@ - } - printf ("logical block %d\n", logical_block); - #endif /* E2DEBUG */ -- -- /* if it is directly pointed to by the inode, return that physical addr */ -- if (logical_block < EXT2_NDIR_BLOCKS) -- { --#ifdef E2DEBUG -- printf ("returning %d\n", (unsigned char *) (INODE->i_block[logical_block])); -- printf ("returning %d\n", INODE->i_block[logical_block]); --#endif /* E2DEBUG */ -- return INODE->i_block[logical_block]; -- } -- /* else */ -- logical_block -= EXT2_NDIR_BLOCKS; -- /* try the indirect block */ -- if (logical_block < EXT2_ADDR_PER_BLOCK (SUPERBLOCK)) -+ /* standard ext2 inode */ -+ if (!(INODE->i_flags & EXT4_EXTENTS_FL)) - { -- if (mapblock1 != 1 -- && !ext2_rdfsb (INODE->i_block[EXT2_IND_BLOCK], DATABLOCK1)) -- { -- errnum = ERR_FSYS_CORRUPT; -- return -1; -- } -- mapblock1 = 1; -- return ((__u32 *) DATABLOCK1)[logical_block]; -- } -- /* else */ -- logical_block -= EXT2_ADDR_PER_BLOCK (SUPERBLOCK); -- /* now try the double indirect block */ -- if (logical_block < (1 << (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK) * 2))) -- { -- int bnum; -- if (mapblock1 != 2 -- && !ext2_rdfsb (INODE->i_block[EXT2_DIND_BLOCK], DATABLOCK1)) -- { -- errnum = ERR_FSYS_CORRUPT; -- return -1; -- } -- mapblock1 = 2; -- if ((bnum = (((__u32 *) DATABLOCK1) -- [logical_block >> EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK)])) -- != mapblock2 -- && !ext2_rdfsb (bnum, DATABLOCK2)) -- { -- errnum = ERR_FSYS_CORRUPT; -- return -1; -- } -- mapblock2 = bnum; -+ /* if it is directly pointed to by the inode, return that physical addr */ -+ if (logical_block < EXT2_NDIR_BLOCKS) -+ { -+#ifdef E2DEBUG -+ printf ("returning %d\n", (unsigned char *) (INODE->i_block[logical_block])); -+ printf ("returning %d\n", INODE->i_block[logical_block]); -+#endif /* E2DEBUG */ -+ return INODE->i_block[logical_block]; -+ } -+ /* else */ -+ logical_block -= EXT2_NDIR_BLOCKS; -+ /* try the indirect block */ -+ if (logical_block < EXT2_ADDR_PER_BLOCK (SUPERBLOCK)) -+ { -+ if (mapblock1 != 1 -+ && !ext2_rdfsb (INODE->i_block[EXT2_IND_BLOCK], DATABLOCK1)) -+ { -+ errnum = ERR_FSYS_CORRUPT; -+ return -1; -+ } -+ mapblock1 = 1; -+ return ((__u32 *) DATABLOCK1)[logical_block]; -+ } -+ /* else */ -+ logical_block -= EXT2_ADDR_PER_BLOCK (SUPERBLOCK); -+ /* now try the double indirect block */ -+ if (logical_block < (1 << (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK) * 2))) -+ { -+ int bnum; -+ if (mapblock1 != 2 -+ && !ext2_rdfsb (INODE->i_block[EXT2_DIND_BLOCK], DATABLOCK1)) -+ { -+ errnum = ERR_FSYS_CORRUPT; -+ return -1; -+ } -+ mapblock1 = 2; -+ if ((bnum = (((__u32 *) DATABLOCK1) -+ [logical_block >> EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK)])) -+ != mapblock2 -+ && !ext2_rdfsb (bnum, DATABLOCK2)) -+ { -+ errnum = ERR_FSYS_CORRUPT; -+ return -1; -+ } -+ mapblock2 = bnum; -+ return ((__u32 *) DATABLOCK2) -+ [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)]; -+ } -+ /* else */ -+ mapblock2 = -1; -+ logical_block -= (1 << (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK) * 2)); -+ if (mapblock1 != 3 -+ && !ext2_rdfsb (INODE->i_block[EXT2_TIND_BLOCK], DATABLOCK1)) -+ { -+ errnum = ERR_FSYS_CORRUPT; -+ return -1; -+ } -+ mapblock1 = 3; -+ if (!ext2_rdfsb (((__u32 *) DATABLOCK1) -+ [logical_block >> (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK) -+ * 2)], -+ DATABLOCK2)) -+ { -+ errnum = ERR_FSYS_CORRUPT; -+ return -1; -+ } -+ if (!ext2_rdfsb (((__u32 *) DATABLOCK2) -+ [(logical_block >> EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK)) -+ & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)], -+ DATABLOCK2)) -+ { -+ errnum = ERR_FSYS_CORRUPT; -+ return -1; -+ } - return ((__u32 *) DATABLOCK2) -- [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)]; -- } -- /* else */ -- mapblock2 = -1; -- logical_block -= (1 << (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK) * 2)); -- if (mapblock1 != 3 -- && !ext2_rdfsb (INODE->i_block[EXT2_TIND_BLOCK], DATABLOCK1)) -- { -- errnum = ERR_FSYS_CORRUPT; -- return -1; -+ [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)]; - } -- mapblock1 = 3; -- if (!ext2_rdfsb (((__u32 *) DATABLOCK1) -- [logical_block >> (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK) -- * 2)], -- DATABLOCK2)) -- { -- errnum = ERR_FSYS_CORRUPT; -- return -1; -- } -- if (!ext2_rdfsb (((__u32 *) DATABLOCK2) -- [(logical_block >> EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK)) -- & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)], -- DATABLOCK2)) -+ /* inode is in extents format */ -+ else - { -+ int i; -+ struct ext4_extent_header *extent_hdr = ext4_recurse_extent_index((struct ext4_extent_header *) INODE->i_block, logical_block); -+ struct ext4_extent *extent = (struct ext4_extent *) (extent_hdr + 1); -+ if ( extent_hdr == NULL || extent_hdr->eh_magic != EXT4_EXT_MAGIC) -+ { -+ errnum = ERR_FSYS_CORRUPT; -+ return -1; -+ } -+ for (i = 0; i<extent_hdr->eh_entries; i++) -+ { -+ if (extent[i].ee_block <= logical_block && logical_block < extent[i].ee_block + extent[i].ee_len && !(extent[i].ee_len>>15)) -+ return (logical_block - extent[i].ee_block + extent[i].ee_start); -+ } -+ /* We should not arrive here */ - errnum = ERR_FSYS_CORRUPT; - return -1; - } -- return ((__u32 *) DATABLOCK2) -- [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)]; - } - - /* preconditions: all preconds of ext2fs_block_map */ diff --git a/abs/core-testing/grub/grub-0.97-gpt.patch b/abs/core-testing/grub/grub-0.97-gpt.patch deleted file mode 100644 index 7b1a55c..0000000 --- a/abs/core-testing/grub/grub-0.97-gpt.patch +++ /dev/null @@ -1,315 +0,0 @@ -diff -ruBbd --unidirectional-new-file grub-0.96/stage2/builtins.c grub-0.96-patched/stage2/builtins.c ---- grub-0.96/stage2/builtins.c 2004-06-20 09:33:04.000000000 -0400 -+++ grub-0.96-patched/stage2/builtins.c 2007-01-04 13:56:06.000000000 -0500 -@@ -1229,14 +1229,15 @@ - for (drive = 0x80; drive < 0x88; drive++) - { - unsigned long part = 0xFFFFFF; -- unsigned long start, len, offset, ext_offset; -- int type, entry; -+ unsigned long start, len, offset, ext_offset, gpt_offset; -+ int type, entry, gpt_count, gpt_size; - char buf[SECTOR_SIZE]; - - current_drive = drive; - while (next_partition (drive, 0xFFFFFF, &part, &type, - &start, &len, &offset, &entry, -- &ext_offset, buf)) -+ &ext_offset, &gpt_offset, -+ &gpt_count, &gpt_size, buf)) - { - if (type != PC_SLICE_TYPE_NONE - && ! IS_PC_SLICE_TYPE_BSD (type) -@@ -2806,8 +2807,8 @@ - { - int new_type; - unsigned long part = 0xFFFFFF; -- unsigned long start, len, offset, ext_offset; -- int entry, type; -+ unsigned long start, len, offset, ext_offset, gpt_offset; -+ int entry, type, gpt_count, gpt_size; - char mbr[512]; - - /* Get the drive and the partition. */ -@@ -2844,7 +2845,14 @@ - /* Look for the partition. */ - while (next_partition (current_drive, 0xFFFFFF, &part, &type, - &start, &len, &offset, &entry, -- &ext_offset, mbr)) -+ &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr)) -+ /* The partition may not be a GPT partition. */ -+ if (gpt_offset != 0) -+ { -+ errnum = ERR_BAD_ARGUMENT; -+ return 1; -+ } -+ - { - if (part == current_partition) - { -diff -ruBbd --unidirectional-new-file grub-0.96/stage2/disk_io.c grub-0.96-patched/stage2/disk_io.c ---- grub-0.96/stage2/disk_io.c 2004-05-23 12:35:24.000000000 -0400 -+++ grub-0.96-patched/stage2/disk_io.c 2007-01-04 14:01:08.000000000 -0500 -@@ -21,6 +21,7 @@ - - #include <shared.h> - #include <filesys.h> -+#include <gpt.h> - - #ifdef SUPPORT_NETBOOT - # define GRUB 1 -@@ -502,8 +503,8 @@ - set_partition_hidden_flag (int hidden) - { - unsigned long part = 0xFFFFFF; -- unsigned long start, len, offset, ext_offset; -- int entry, type; -+ unsigned long start, len, offset, ext_offset, gpt_offset; -+ int entry, type, gpt_count, gpt_size; - char mbr[512]; - - /* The drive must be a hard disk. */ -@@ -524,7 +525,14 @@ - /* Look for the partition. */ - while (next_partition (current_drive, 0xFFFFFF, &part, &type, - &start, &len, &offset, &entry, -- &ext_offset, mbr)) -+ &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr)) -+ /* The partition may not be a GPT partition. */ -+ if (gpt_offset != 0) -+ { -+ errnum = ERR_BAD_ARGUMENT; -+ return 1; -+ } -+ - { - if (part == current_partition) - { -@@ -577,11 +585,14 @@ - unsigned long *partition, int *type, - unsigned long *start, unsigned long *len, - unsigned long *offset, int *entry, -- unsigned long *ext_offset, char *buf) -+ unsigned long *ext_offset, -+ unsigned long *gpt_offset, int *gpt_count, -+ int *gpt_size, char *buf) - { - /* Forward declarations. */ - auto int next_bsd_partition (void); - auto int next_pc_slice (void); -+ auto int next_gpt_slice(void); - - /* Get next BSD partition in current PC slice. */ - int next_bsd_partition (void) -@@ -666,6 +677,40 @@ - return 0; - } - -+ /* If this is a GPT partition table, read it as such. */ -+ if (*entry == -1 && *offset == 0 && PC_SLICE_TYPE (buf, 0) == PC_SLICE_TYPE_GPT) -+ { -+ struct grub_gpt_header *hdr = (struct grub_gpt_header *) buf; -+ -+ /* Read in the GPT Partition table header. */ -+ if (! rawread (drive, 1, 0, SECTOR_SIZE, buf)) -+ return 0; -+ -+ if (hdr->magic == GPT_HEADER_MAGIC && hdr->version == 0x10000) -+ { -+ /* Let gpt_offset point to the first entry in the GPT -+ partition table. This can also be used by callers of -+ next_partition to determine if a entry comes from a -+ GPT partition table or not. */ -+ *gpt_offset = hdr->partitions; -+ *gpt_count = hdr->maxpart; -+ *gpt_size = hdr->partentry_size; -+ -+ return next_gpt_slice(); -+ } -+ else -+ { -+ /* This is not a valid header for a GPT partition table. -+ Re-read the MBR or the boot sector of the extended -+ partition. */ -+ if (! rawread (drive, *offset, 0, SECTOR_SIZE, buf)) -+ return 0; -+ } -+ } -+ -+ /* Not a GPT partition. */ -+ *gpt_offset = 0; -+ - /* Increase the entry number. */ - (*entry)++; - -@@ -710,6 +755,43 @@ - return 1; - } - -+ /* Get the next GPT slice. */ -+ int next_gpt_slice (void) -+ { -+ struct grub_gpt_partentry *gptentry = (struct grub_gpt_partentry *) buf; -+ /* Make GPT partitions show up as PC slices. */ -+ int pc_slice_no = (*partition & 0xFF0000) >> 16; -+ -+ /* If this is the first time... */ -+ if (pc_slice_no == 0xFF) -+ { -+ pc_slice_no = -1; -+ *entry = -1; -+ } -+ -+ do { -+ (*entry)++; -+ -+ if (*entry >= *gpt_count) -+ { -+ errnum = ERR_NO_PART; -+ return 0; -+ } -+ /* Read in the GPT Partition table entry. */ -+ if (! rawread (drive, (*gpt_offset) + GPT_ENTRY_SECTOR (*gpt_size, *entry), GPT_ENTRY_INDEX (*gpt_size, *entry), *gpt_size, buf)) -+ return 0; -+ } while (! (gptentry->type1 && gptentry->type2)); -+ -+ pc_slice_no++; -+ *start = gptentry->start; -+ *len = gptentry->end - gptentry->start + 1; -+ *type = PC_SLICE_TYPE_EXT2FS; -+ *entry = pc_slice_no; -+ *partition = (*entry << 16) | 0xFFFF; -+ -+ return 1; -+ } -+ - /* Start the body of this function. */ - - #ifndef STAGE1_5 -@@ -717,6 +799,9 @@ - return 0; - #endif - -+ if (*partition != 0xFFFFFF && *gpt_offset != 0) -+ return next_gpt_slice (); -+ - /* If previous partition is a BSD partition or a PC slice which - contains BSD partitions... */ - if ((*partition != 0xFFFFFF && IS_PC_SLICE_TYPE_BSD (*type & 0xff)) -@@ -755,6 +840,9 @@ - unsigned long dest_partition = current_partition; - unsigned long part_offset; - unsigned long ext_offset; -+ unsigned long gpt_offset; -+ int gpt_count; -+ int gpt_size; - int entry; - char buf[SECTOR_SIZE]; - int bsd_part, pc_slice; -@@ -766,7 +854,8 @@ - int ret = next_partition (current_drive, dest_partition, - ¤t_partition, ¤t_slice, - &part_start, &part_length, -- &part_offset, &entry, &ext_offset, buf); -+ &part_offset, &entry, &ext_offset, -+ &gpt_offset, &gpt_count, &gpt_size, buf); - bsd_part = (current_partition >> 8) & 0xFF; - pc_slice = current_partition >> 16; - return ret; -diff -ruBbd --unidirectional-new-file grub-0.96/stage2/gpt.h grub-0.96-patched/stage2/gpt.h ---- grub-0.96/stage2/gpt.h 1969-12-31 19:00:00.000000000 -0500 -+++ grub-0.96-patched/stage2/gpt.h 2007-01-04 13:52:14.000000000 -0500 -@@ -0,0 +1,68 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2002,2005,2006 Free Software Foundation, Inc. -+ * -+ * This program 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., 675 Mass Ave, Cambridge, MA 02139, USA. -+ */ -+ -+#ifndef _GPT_H -+#define _GPT_H -+ -+typedef signed char grub_int8_t; -+typedef signed short grub_int16_t; -+typedef signed int grub_int32_t; -+typedef signed long long int grub_int64_t; -+typedef unsigned char grub_uint8_t; -+typedef unsigned short grub_uint16_t; -+typedef unsigned int grub_uint32_t; -+typedef unsigned long long int grub_uint64_t; -+ -+struct grub_gpt_header -+{ -+ grub_uint64_t magic; -+ grub_uint32_t version; -+ grub_uint32_t headersize; -+ grub_uint32_t crc32; -+ grub_uint32_t unused1; -+ grub_uint64_t primary; -+ grub_uint64_t backup; -+ grub_uint64_t start; -+ grub_uint64_t end; -+ grub_uint8_t guid[16]; -+ grub_uint64_t partitions; -+ grub_uint32_t maxpart; -+ grub_uint32_t partentry_size; -+ grub_uint32_t partentry_crc32; -+} __attribute__ ((packed)); -+ -+struct grub_gpt_partentry -+{ -+ grub_uint64_t type1; -+ grub_uint64_t type2; -+ grub_uint8_t guid[16]; -+ grub_uint64_t start; -+ grub_uint64_t end; -+ grub_uint8_t attrib; -+ char name[72]; -+} __attribute__ ((packed)); -+ -+#define GPT_HEADER_MAGIC 0x5452415020494645UL -+ -+#define GPT_ENTRY_SECTOR(size,entry) \ -+ ((((entry) * (size) + 1) & ~(SECTOR_SIZE - 1)) >> SECTOR_BITS) -+#define GPT_ENTRY_INDEX(size,entry) \ -+ ((((entry) * (size) + 1) & (SECTOR_SIZE - 1)) - 1) -+ -+#endif /* _GPT_H */ -diff -ruBbd --unidirectional-new-file grub-0.96/stage2/pc_slice.h grub-0.96-patched/stage2/pc_slice.h ---- grub-0.96/stage2/pc_slice.h 2003-07-09 07:45:53.000000000 -0400 -+++ grub-0.96-patched/stage2/pc_slice.h 2007-01-04 13:52:14.000000000 -0500 -@@ -115,6 +115,7 @@ - #define PC_SLICE_TYPE_LINUX_EXTENDED 0x85 - #define PC_SLICE_TYPE_VSTAFS 0x9e - #define PC_SLICE_TYPE_DELL_UTIL 0xde -+#define PC_SLICE_TYPE_GPT 0xee - #define PC_SLICE_TYPE_LINUX_RAID 0xfd - - -diff -ruBbd --unidirectional-new-file grub-0.96/stage2/shared.h grub-0.96-patched/stage2/shared.h ---- grub-0.96/stage2/shared.h 2004-06-19 12:40:09.000000000 -0400 -+++ grub-0.96-patched/stage2/shared.h 2007-01-04 13:52:15.000000000 -0500 -@@ -934,7 +934,9 @@ - unsigned long *partition, int *type, - unsigned long *start, unsigned long *len, - unsigned long *offset, int *entry, -- unsigned long *ext_offset, char *buf); -+ unsigned long *ext_offset, -+ unsigned long *gpt_offset, int *gpt_count, -+ int *gpt_size, char *buf); - - /* Sets device to the one represented by the SAVED_* parameters. */ - int make_saved_active (void); diff --git a/abs/core-testing/grub/grub-inode-size.patch b/abs/core-testing/grub/grub-inode-size.patch deleted file mode 100644 index bef3bc1..0000000 --- a/abs/core-testing/grub/grub-inode-size.patch +++ /dev/null @@ -1,94 +0,0 @@ -diff -Nrup a/stage2/fsys_ext2fs.c b/stage2/fsys_ext2fs.c ---- a/stage2/fsys_ext2fs.c 2004-08-08 20:19:18.000000000 +0200 -+++ b/stage2/fsys_ext2fs.c 2008-01-30 14:27:20.000000000 +0100 -@@ -79,7 +79,52 @@ struct ext2_super_block - __u32 s_rev_level; /* Revision level */ - __u16 s_def_resuid; /* Default uid for reserved blocks */ - __u16 s_def_resgid; /* Default gid for reserved blocks */ -- __u32 s_reserved[235]; /* Padding to the end of the block */ -+ /* -+ * These fields are for EXT2_DYNAMIC_REV superblocks only. -+ * -+ * Note: the difference between the compatible feature set and -+ * the incompatible feature set is that if there is a bit set -+ * in the incompatible feature set that the kernel doesn't -+ * know about, it should refuse to mount the filesystem. -+ * -+ * e2fsck's requirements are more strict; if it doesn't know -+ * about a feature in either the compatible or incompatible -+ * feature set, it must abort and not try to meddle with -+ * things it doesn't understand... -+ */ -+ __u32 s_first_ino; /* First non-reserved inode */ -+ __u16 s_inode_size; /* size of inode structure */ -+ __u16 s_block_group_nr; /* block group # of this superblock */ -+ __u32 s_feature_compat; /* compatible feature set */ -+ __u32 s_feature_incompat; /* incompatible feature set */ -+ __u32 s_feature_ro_compat; /* readonly-compatible feature set */ -+ __u8 s_uuid[16]; /* 128-bit uuid for volume */ -+ char s_volume_name[16]; /* volume name */ -+ char s_last_mounted[64]; /* directory where last mounted */ -+ __u32 s_algorithm_usage_bitmap; /* For compression */ -+ /* -+ * Performance hints. Directory preallocation should only -+ * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on. -+ */ -+ __u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/ -+ __u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */ -+ __u16 s_reserved_gdt_blocks;/* Per group table for online growth */ -+ /* -+ * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set. -+ */ -+ __u8 s_journal_uuid[16]; /* uuid of journal superblock */ -+ __u32 s_journal_inum; /* inode number of journal file */ -+ __u32 s_journal_dev; /* device number of journal file */ -+ __u32 s_last_orphan; /* start of list of inodes to delete */ -+ __u32 s_hash_seed[4]; /* HTREE hash seed */ -+ __u8 s_def_hash_version; /* Default hash version to use */ -+ __u8 s_jnl_backup_type; /* Default type of journal backup */ -+ __u16 s_reserved_word_pad; -+ __u32 s_default_mount_opts; -+ __u32 s_first_meta_bg; /* First metablock group */ -+ __u32 s_mkfs_time; /* When the filesystem was created */ -+ __u32 s_jnl_blocks[17]; /* Backup of the journal inode */ -+ __u32 s_reserved[172]; /* Padding to the end of the block */ - }; - - struct ext2_group_desc -@@ -218,6 +263,9 @@ struct ext2_dir_entry - #define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (__u32)) - #define EXT2_ADDR_PER_BLOCK_BITS(s) (log2(EXT2_ADDR_PER_BLOCK(s))) - -+#define EXT2_INODE_SIZE(s) (SUPERBLOCK->s_inode_size) -+#define EXT2_INODES_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s)) -+ - /* linux/ext2_fs.h */ - #define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10) - /* kind of from ext2/super.c */ -@@ -553,7 +601,7 @@ ext2fs_dir (char *dirname) - gdp = GROUP_DESC; - ino_blk = gdp[desc].bg_inode_table + - (((current_ino - 1) % (SUPERBLOCK->s_inodes_per_group)) -- >> log2 (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode))); -+ >> log2 (EXT2_INODES_PER_BLOCK (SUPERBLOCK))); - #ifdef E2DEBUG - printf ("inode table fsblock=%d\n", ino_blk); - #endif /* E2DEBUG */ -@@ -565,13 +613,12 @@ ext2fs_dir (char *dirname) - /* reset indirect blocks! */ - mapblock2 = mapblock1 = -1; - -- raw_inode = INODE + -- ((current_ino - 1) -- & (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode) - 1)); -+ raw_inode = (struct ext2_inode *)((char *)INODE + -+ ((current_ino - 1) & (EXT2_INODES_PER_BLOCK (SUPERBLOCK) - 1)) * -+ EXT2_INODE_SIZE (SUPERBLOCK)); - #ifdef E2DEBUG - printf ("ipb=%d, sizeof(inode)=%d\n", -- (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)), -- sizeof (struct ext2_inode)); -+ EXT2_INODES_PER_BLOCK (SUPERBLOCK), EXT2_INODE_SIZE (SUPERBLOCK)); - printf ("inode=%x, raw_inode=%x\n", INODE, raw_inode); - printf ("offset into inode table block=%d\n", (int) raw_inode - (int) INODE); - for (i = (unsigned char *) INODE; i <= (unsigned char *) raw_inode; diff --git a/abs/core-testing/grub/grub.install b/abs/core-testing/grub/grub.install deleted file mode 100644 index bf52382..0000000 --- a/abs/core-testing/grub/grub.install +++ /dev/null @@ -1,22 +0,0 @@ -info_dir=/usr/share/info -info_files=(grub.info multiboot.info) - -post_install() { - for f in ${info_files[@]}; do - install-info ${info_dir}/$f.gz ${info_dir}/dir 2> /dev/null - done -} - -post_upgrade() { - post_install -} - -pre_remove() { - for f in ${info_files[@]}; do - install-info --delete ${info_dir}/$f.gz ${info_dir}/dir 2> /dev/null - done -} - - - - diff --git a/abs/core-testing/grub/i2o.patch b/abs/core-testing/grub/i2o.patch deleted file mode 100644 index 2af846c..0000000 --- a/abs/core-testing/grub/i2o.patch +++ /dev/null @@ -1,45 +0,0 @@ -Only in grub-0.94/docs: grub.info -Only in grub-0.94/docs: multiboot.info -diff -ur grub-0.94/lib/device.c grub-0.94.new/lib/device.c ---- grub-0.94/lib/device.c 2004-05-07 04:50:36.375238696 +0200 -+++ grub-0.94.new/lib/device.c 2004-05-07 04:48:57.611253104 +0200 -@@ -419,6 +419,12 @@ - { - sprintf (name, "/dev/rd/c%dd%d", controller, drive); - } -+ -+static void -+get_i2o_disk_name (char *name, int unit) -+{ -+ sprintf (name, "/dev/i2o/hd%c", unit + 'a'); -+} - #endif - - /* Check if DEVICE can be read. If an error occurs, return zero, -@@ -789,6 +795,26 @@ - } - } - } -+ -+ /* I2O disks. */ -+ for (i = 0; i < 8; i++) -+ { -+ char name[16]; -+ -+ get_i2o_disk_name (name, i); -+ if (check_device (name)) -+ { -+ (*map)[num_hd + 0x80] = strdup (name); -+ assert ((*map)[num_hd + 0x80]); -+ -+ /* If the device map file is opened, write the map. */ -+ if (fp) -+ fprintf (fp, "(hd%d)\t%s\n", num_hd, name); -+ -+ num_hd++; -+ } -+ } -+ - #endif /* __linux__ */ - - /* OK, close the device map file if opened. */ diff --git a/abs/core-testing/grub/install-grub b/abs/core-testing/grub/install-grub deleted file mode 100644 index 0015a31..0000000 --- a/abs/core-testing/grub/install-grub +++ /dev/null @@ -1,543 +0,0 @@ -#! /bin/sh - -# Install GRUB on your drive. -# Copyright (C) 1999,2000,2001,2002,2003,2004 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. - -# Initialize some variables. -prefix=/ -exec_prefix=${prefix} -sbindir=${exec_prefix}/sbin -libdir=${exec_prefix}/lib -PACKAGE=grub -VERSION=0.95 -host_cpu=i386 -host_os=linux-gnu -host_vendor=pc -pkglibdir=${libdir}/${PACKAGE}/${host_cpu}-${host_vendor} - -grub_shell=${sbindir}/grub -log_file=/tmp/grub-install.log.$$ -img_file=/tmp/grub-install.img.$$ -rootdir= -grub_prefix=/boot/grub - -install_device= -no_floppy= -force_lba= -recheck=no -sync_sleep=20 -debug=no - -# look for secure tempfile creation wrappers on this platform -if test -x /bin/tempfile; then - mklog="/bin/tempfile --prefix=grub" - mkimg="/bin/tempfile --prefix=grub" -elif test -x /bin/mktemp; then - mklog="/bin/mktemp /tmp/grub-install.log.XXXXXX" - mkimg="/bin/mktemp /tmp/grub-install.img.XXXXXX" -else - mklog="" - mkimg="" -fi - -# Usage: usage -# Print the usage. -usage () { - cat <<EOF -Usage: grub-install [OPTION] install_device -Install GRUB on your drive. - - -h, --help print this message and exit - -v, --version print the version information and exit - --root-directory=DIR install GRUB images under the directory DIR - instead of the root directory - --grub-shell=FILE use FILE as the grub shell - --no-floppy do not probe any floppy drive - --force-lba force GRUB to use LBA mode even for a buggy - BIOS - --recheck probe a device map even if it already exists - --sync-sleep number of seconds to sleep while trying to - sync XFS - -INSTALL_DEVICE can be a GRUB device name or a system device filename. - -grub-install copies GRUB images into the DIR/boot directory specfied by ---root-directory, and uses the grub shell to install grub into the boot -sector. - -Report bugs to <bug-grub@gnu.org>. -EOF -} - -# Usage: getraid_mdadm mddevice -# Routine to find a physical device from an md device -# If found, the first grub BIOS device (from device.map) is returned -# If no BIOS drives match the RAID devices, the first device returned -# from mdadm -D is returned -getraid_mdadm() { - device=$1 - mdadm=$(mdadm -D "$device") || { - echo "$PROG: mdadm -D $device failed" >&2 - exit 1 - } - eval "$( - echo "$mdadm" | awk ' - $1 == "Number" && $2 == "Major" { start = 1; next } - $1 == "UUID" { print "uuid=" $3; start = 0; next } - !start { next } - $2 == 0 && $3 == 0 { next } - { devices = devices "\n" $NF } - END { print "devices='\''" devices "'\''" } - ' - )" - - # Convert RAID devices list into a list of disks - tmp_disks=`echo "$devices" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \ - -e 's%\(d[0-9]*\)p[0-9]*$%\1%' \ - -e 's%\(fd[0-9]*\)$%\1%' \ - -e 's%/part[0-9]*$%/disc%' \ - -e 's%\(c[0-7]d[0-9]*\).*$%\1%' \ - -e '/^$/d' | - sed -n '1h;2,$H;${g;s/\n/|/g;p}'` - - # Find first BIOS disk that's a member of the RAID array - # Default to first RAID member if no tmp_disks are BIOS devices - set -- `egrep $tmp_disks $device_map | \ - sort | \ - sed -n 1p ` - device=${2:-${tmp_disks%%|*}} - - # Return first partition on BIOS disk that's part of the RAID - echo "$devices" | \ - sed -n "\:${device}:p" | \ - sed -n 1p -} - -# Usage: xfs_hack -# Routine to flush xfs filesystem log (sync doesn't do this) -# sleep is needed to give time for the log to be flushed -xfs_hack () { - sync - if which xfs_freeze >/dev/null ; then - echo "Trying to sync filesystem, do not interrupt until complete." - xfs_freeze -f ${grubdir} 2>/dev/null - sleep $sync_sleep - xfs_freeze -u ${grubdir} 2>/dev/null - echo "Trying to sync filesystem is complete." - fi -} - -# Usage: convert os_device -# Convert an OS device to the corresponding GRUB drive. -# This part is OS-specific. -convert () { - # First, check if the device file exists. - if test -e "$1"; then - : - else - echo "$1: Not found or not a block device." 1>&2 - exit 1 - fi - - # Break the device name into the disk part and the partition part. - case "$host_os" in - linux*) - # Find an actual physical device if we're passed a RAID device - case $1 in - /dev/md*) set -- `getraid_mdadm $1` - esac - tmp_disk=`echo "$1" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \ - -e 's%\(d[0-9]*\)p[0-9]*$%\1%' \ - -e 's%\(fd[0-9]*\)$%\1%' \ - -e 's%/part[0-9]*$%/disc%' \ - -e 's%\(c[0-7]d[0-9]*\).*$%\1%'` - tmp_part=`echo "$1" | sed -e 's%.*/[sh]d[a-z]\([0-9]*\)$%\1%' \ - -e 's%.*d[0-9]*p*%%' \ - -e 's%.*/fd[0-9]*$%%' \ - -e 's%.*/floppy/[0-9]*$%%' \ - -e 's%.*/\(disc\|part\([0-9]*\)\)$%\2%' \ - -e 's%.*c[0-7]d[0-9]*p*%%'` - ;; - gnu*) - tmp_disk=`echo "$1" | sed 's%\([sh]d[0-9]*\).*%\1%'` - tmp_part=`echo "$1" | sed "s%$tmp_disk%%"` ;; - freebsd*) - tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([saw]d[0-9]*\).*$%r\1%' \ - | sed 's%r\{0,1\}\(da[0-9]*\).*$%r\1%'` - tmp_part=`echo "$1" \ - | sed "s%.*/r\{0,1\}[saw]d[0-9]\(s[0-9]*[a-h]\)%\1%" \ - | sed "s%.*/r\{0,1\}da[0-9]\(s[0-9]*[a-h]\)%\1%"` - ;; - netbsd*) - tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([sw]d[0-9]*\).*$%r\1d%' \ - | sed 's%r\{0,1\}\(fd[0-9]*\).*$%r\1a%'` - tmp_part=`echo "$1" \ - | sed "s%.*/r\{0,1\}[sw]d[0-9]\([abe-p]\)%\1%"` - ;; - *) - echo "grub-install does not support your OS yet." 1>&2 - exit 1 ;; - esac - - # Get the drive name. - tmp_drive=`grep -v '^#' $device_map | grep "$tmp_disk *$" \ - | sed 's%.*\(([hf]d[0-9][a-g0-9,]*)\).*%\1%'` - - # If not found, print an error message and exit. - if test "x$tmp_drive" = x; then - echo "$1 does not have any corresponding BIOS drive." 1>&2 - exit 1 - fi - - if test "x$tmp_part" != x; then - # If a partition is specified, we need to translate it into the - # GRUB's syntax. - case "$host_os" in - linux*) - echo "$tmp_drive" | sed "s%)$%,`expr $tmp_part - 1`)%" ;; - gnu*) - if echo $tmp_part | grep "^s" >/dev/null; then - tmp_pc_slice=`echo $tmp_part \ - | sed "s%s\([0-9]*\)[a-g]*$%\1%"` - tmp_drive=`echo "$tmp_drive" \ - | sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"` - fi - if echo $tmp_part | grep "[a-g]$" >/dev/null; then - tmp_bsd_partition=`echo "$tmp_part" \ - | sed "s%[^a-g]*\([a-g]\)$%\1%"` - tmp_drive=`echo "$tmp_drive" \ - | sed "s%)%,$tmp_bsd_partition)%"` - fi - echo "$tmp_drive" ;; - freebsd*) - if echo $tmp_part | grep "^s" >/dev/null; then - tmp_pc_slice=`echo $tmp_part \ - | sed "s%s\([0-9]*\)[a-h]*$%\1%"` - tmp_drive=`echo "$tmp_drive" \ - | sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"` - fi - if echo $tmp_part | grep "[a-h]$" >/dev/null; then - tmp_bsd_partition=`echo "$tmp_part" \ - | sed "s%s\{0,1\}[0-9]*\([a-h]\)$%\1%"` - tmp_drive=`echo "$tmp_drive" \ - | sed "s%)%,$tmp_bsd_partition)%"` - fi - echo "$tmp_drive" ;; - netbsd*) - if echo $tmp_part | grep "^[abe-p]$" >/dev/null; then - tmp_bsd_partition=`echo "$tmp_part" \ - | sed "s%\([a-p]\)$%\1%"` - tmp_drive=`echo "$tmp_drive" \ - | sed "s%)%,$tmp_bsd_partition)%"` - fi - echo "$tmp_drive" ;; - esac - else - # If no partition is specified, just print the drive name. - echo "$tmp_drive" - fi -} - -# Usage: resolve_symlink file -# Find the real file/device that file points at -resolve_symlink () { - tmp_fname=$1 - # Resolve symlinks - while test -L $tmp_fname; do - tmp_new_fname=`ls -al $tmp_fname | sed -n 's%.*-> \(.*\)%\1%p'` - if test -z "$tmp_new_fname"; then - echo "Unrecognized ls output" 2>&1 - exit 1 - fi - - # Convert relative symlinks - case $tmp_new_fname in - /*) tmp_fname="$tmp_new_fname" - ;; - *) tmp_fname="`echo $tmp_fname | sed 's%/[^/]*$%%'`/$tmp_new_fname" - ;; - esac - done - echo "$tmp_fname" -} - -# Usage: find_device file -# Find block device on which the file resides. -find_device () { - # For now, this uses the program `df' to get the device name, but is - # this really portable? - tmp_fname=`df $1/ | sed -n 's%.*\(/dev/[^ ]*\).*%\1%p'` - - if test -z "$tmp_fname"; then - echo "Could not find device for $1" 2>&1 - exit 1 - fi - - tmp_fname=`resolve_symlink $tmp_fname` - - echo "$tmp_fname" -} - -# Check the arguments. -for option in "$@"; do - case "$option" in - -h | --help) - usage - exit 0 ;; - -v | --version) - echo "grub-install (GNU GRUB ${VERSION})" - exit 0 ;; - --root-directory=*) - rootdir=`echo "$option" | sed 's/--root-directory=//'` ;; - --grub-shell=*) - grub_shell=`echo "$option" | sed 's/--grub-shell=//'` ;; - --no-floppy) - no_floppy="--no-floppy" ;; - --force-lba) - force_lba="--force-lba" ;; - --recheck) - recheck=yes ;; - --sync-sleep=*) - sync_sleep=`echo "$option" | sed 's/--sync-sleep=//'` ;; - # This is an undocumented feature... - --debug) - debug=yes ;; - -*) - echo "Unrecognized option \`$option'" 1>&2 - usage - exit 1 - ;; - *) - if test "x$install_device" != x; then - echo "More than one install_devices?" 1>&2 - usage - exit 1 - fi - install_device="${option}" ;; - esac -done - -if test "x$install_device" = x; then - echo "install_device not specified." 1>&2 - usage - exit 1 -fi - -# If the debugging feature is enabled, print commands. -if test $debug = yes; then - set -x -fi - -# Initialize these directories here, since ROOTDIR was initialized. -case "$host_os" in -netbsd*) - # Because /boot is used for the boot block in NetBSD, use /grub - # instead of /boot/grub. - grub_prefix=/grub - bootdir=${rootdir} - ;; -*) - # Use /boot/grub by default. - bootdir=${rootdir}/boot - ;; -esac - -grubdir=${bootdir}/grub -device_map=${grubdir}/device.map - -# Check if GRUB is installed. -# This is necessary, because the user can specify "grub --read-only". -set $grub_shell dummy -if test -f "$1"; then - : -else - echo "$1: Not found." 1>&2 - exit 1 -fi - -if test -f "$pkglibdir/stage1"; then - : -else - echo "${pkglibdir}/stage1: Not found." 1>&2 - exit 1 -fi - -if test -f "$pkglibdir/stage2"; then - : -else - echo "${pkglibdir}/stage2: Not found." 1>&2 - exit 1 -fi - -# Don't check for *stage1_5, because it is not fatal even if any -# Stage 1.5 does not exist. - -# Create the GRUB directory if it is not present. -test -d "$bootdir" || mkdir "$bootdir" || exit 1 -test -d "$grubdir" || mkdir "$grubdir" || exit 1 - -# If --recheck is specified, remove the device map, if present. -if test $recheck = yes; then - rm -f $device_map -fi - -# Create the device map file if it is not present. -if test -f "$device_map"; then - : -else - # Create a safe temporary file. - test -n "$mklog" && log_file=`$mklog` - - xfs_hack - $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file -quit -EOF - if grep "Error [0-9]*: " $log_file >/dev/null; then - cat $log_file 1>&2 - exit 1 - fi - - rm -f $log_file -fi - -# Make sure that there is no duplicated entry. -tmp=`sed -n '/^([fh]d[0-9]*)/s/\(^(.*)\).*/\1/p' $device_map \ - | sort | uniq -d | sed -n 1p` -if test -n "$tmp"; then - echo "The drive $tmp is defined multiple times in the device map $device_map" 1>&2 - exit 1 -fi - -# Check for INSTALL_DEVICE. -case "$install_device" in -/dev/*) - install_device=`resolve_symlink "$install_device"` - install_drive=`convert "$install_device"` - # I don't know why, but some shells wouldn't die if exit is - # called in a function. - if test "x$install_drive" = x; then - exit 1 - fi ;; -\([hf]d[0-9]*\)) - install_drive="$install_device" ;; -[hf]d[0-9]*) - # The GRUB format with no parenthesis. - install_drive="($install_device)" ;; -*) - echo "Format of install_device not recognized." 1>&2 - usage - exit 1 ;; -esac - -# Get the root drive. -root_device=`find_device ${rootdir}` -bootdir_device=`find_device ${bootdir}` - -# Check if the boot directory is in the same device as the root directory. -if test "x$root_device" != "x$bootdir_device"; then - # Perhaps the user has a separate boot partition. - root_device=$bootdir_device - grub_prefix="/grub" -fi - -# Convert the root device to a GRUB drive. -root_drive=`convert "$root_device"` -if test "x$root_drive" = x; then - exit 1 -fi - -# Check if the root directory exists in the same device as the grub -# directory. -grubdir_device=`find_device ${grubdir}` - -if test "x$grubdir_device" != "x$root_device"; then - # For now, cannot deal with this situation. - cat <<EOF 1>&2 -You must set the root directory by the option --root-directory, because -$grubdir does not exist in the root device $root_device. -EOF - exit 1 -fi - -# Copy the GRUB images to the GRUB directory. -for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do - rm -f $file || exit 1 -done -for file in \ - ${pkglibdir}/stage1 ${pkglibdir}/stage2 ${pkglibdir}/*stage1_5; do - cp -f $file ${grubdir} || exit 1 -done -xfs_hack - -# Make sure that GRUB reads the same images as the host OS. -test -n "$mkimg" && img_file=`$mkimg` -test -n "$mklog" && log_file=`$mklog` - -for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do - count=5 - tmp=`echo $file | sed "s|^${grubdir}|${grub_prefix}|"` - while test $count -gt 0; do - $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file -dump ${root_drive}${tmp} ${img_file} -quit -EOF - if grep "Error [0-9]*: " $log_file >/dev/null; then - : - elif cmp $file $img_file >/dev/null; then - break - fi - sleep 1 - count=`expr $count - 1` - done - if test $count -eq 0; then - echo "The file $file not read correctly." 1>&2 - exit 1 - fi -done - -rm -f $img_file -rm -f $log_file - -# Create a safe temporary file. -test -n "$mklog" && log_file=`$mklog` - -# Now perform the installation. -xfs_hack -$grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file -root $root_drive -setup $force_lba --stage2=$grubdir/stage2 --prefix=$grub_prefix $install_drive -quit -EOF - -if grep "Error [0-9]*: " $log_file >/dev/null || test $debug = yes; then - cat $log_file 1>&2 - exit 1 -fi - -rm -f $log_file - -# Prompt the user to check if the device map is correct. -echo "Installation finished. No error reported." -echo "This is the contents of the device map $device_map." -echo "Check if this is correct or not. If any of the lines is incorrect," -echo "fix it and re-run the script \`grub-install'." -echo - -cat $device_map - -# Bye. -exit 0 diff --git a/abs/core-testing/grub/install-grub.orig b/abs/core-testing/grub/install-grub.orig deleted file mode 100755 index 3eb7ce5..0000000 --- a/abs/core-testing/grub/install-grub.orig +++ /dev/null @@ -1,187 +0,0 @@ -#!/bin/bash - -# -# This is a little helper script that tries to convert linux-style device -# names to grub-style. It's not very smart, so it -# probably won't work for more complicated setups. -# -# If it doesn't work for you, try installing grub manually: -# -# # mkdir -p /boot/grub -# # cp /usr/lib/grub/i386-pc/* /boot/grub/ -# -# Then start up the 'grub' shell and run something like the following: -# -# 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 (/). -# -# The "setup" line tells grub which disc/partition to install the -# bootloader to. In the example above, it will install to the MBR of the -# primary master hard drive. -# - -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 -} - -## new install-grub, code was taken from setup script -ROOTDEV=$1 -PART_ROOT=$2 -VMLINUZ=vmlinuz26 - -if [ "$ROOTDEV" = "" ]; then - usage -fi -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) -fi -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 -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 -} - -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 - 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 - - 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 -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 - - 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 - -exit 0 -} - -dogrub
\ No newline at end of file diff --git a/abs/core-testing/grub/intelmac.patch b/abs/core-testing/grub/intelmac.patch deleted file mode 100644 index a3fabc7..0000000 --- a/abs/core-testing/grub/intelmac.patch +++ /dev/null @@ -1,67 +0,0 @@ ---- grub-0.97.orig/stage2/asm.S 2004-06-19 18:55:22.000000000 +0200 -+++ grub-0.97/stage2/asm.S 2006-04-21 11:10:52.000000000 +0200 -@@ -1651,7 +1651,29 @@ - jnz 3f - ret - --3: /* use keyboard controller */ -+3: /* -+ * try to switch gateA20 using PORT92, the "Fast A20 and Init" -+ * register -+ */ -+ mov $0x92, %dx -+ inb %dx, %al -+ /* skip the port92 code if it's unimplemented (read returns 0xff) */ -+ cmpb $0xff, %al -+ jz 6f -+ -+ /* set or clear bit1, the ALT_A20_GATE bit */ -+ movb 4(%esp), %ah -+ testb %ah, %ah -+ jz 4f -+ orb $2, %al -+ jmp 5f -+4: and $0xfd, %al -+ -+ /* clear the INIT_NOW bit don't accidently reset the machine */ -+5: and $0xfe, %al -+ outb %al, %dx -+ -+6: /* use keyboard controller */ - pushl %eax - - call gloop1 -@@ -1661,9 +1683,12 @@ - - gloopint1: - inb $K_STATUS -+ cmpb $0xff, %al -+ jz gloopint1_done - andb $K_IBUF_FUL, %al - jnz gloopint1 - -+gloopint1_done: - movb $KB_OUTPUT_MASK, %al - cmpb $0, 0x8(%esp) - jz gdoit -@@ -1684,6 +1709,8 @@ - - gloop1: - inb $K_STATUS -+ cmpb $0xff, %al -+ jz gloop2ret - andb $K_IBUF_FUL, %al - jnz gloop1 - -@@ -1991,6 +2018,11 @@ - ENTRY(console_getkey) - push %ebp - -+wait_for_key: -+ call EXT_C(console_checkkey) -+ incl %eax -+ jz wait_for_key -+ - call EXT_C(prot_to_real) - .code16 - diff --git a/abs/core-testing/grub/menu.lst b/abs/core-testing/grub/menu.lst deleted file mode 100644 index 1c19f8a..0000000 --- a/abs/core-testing/grub/menu.lst +++ /dev/null @@ -1,48 +0,0 @@ -# Config file for GRUB - The GNU GRand Unified Bootloader -# /boot/grub/menu.lst - -# DEVICE NAME CONVERSIONS -# -# Linux Grub -# ------------------------- -# /dev/fd0 (fd0) -# /dev/sda (hd0) -# /dev/sdb2 (hd1,1) -# /dev/sda3 (hd0,2) -# - -# FRAMEBUFFER RESOLUTION SETTINGS -# +-------------------------------------------------+ -# | 640x480 800x600 1024x768 1280x1024 -# ----+-------------------------------------------- -# 256 | 0x301=769 0x303=771 0x305=773 0x307=775 -# 32K | 0x310=784 0x313=787 0x316=790 0x319=793 -# 64K | 0x311=785 0x314=788 0x317=791 0x31A=794 -# 16M | 0x312=786 0x315=789 0x318=792 0x31B=795 -# +-------------------------------------------------+ -# for more details and different resolutions see -# http://wiki.archlinux.org/index.php/GRUB#Framebuffer_Resolution - -# general configuration: -timeout 5 -default 0 -color light-blue/black light-cyan/blue - -# boot sections follow -# each is implicitly numbered from 0 in the order of appearance below -# -# TIP: If you want a 1024x768 framebuffer, add "vga=773" to your kernel line. -# -#-* - -# (0) Arch Linux -title Arch Linux [/boot/vmlinuz26] -root (hd0,0) -kernel /vmlinuz26 root=/dev/sda3 ro -initrd /kernel26.img - -# (1) Windows -#title Windows -#rootnoverify (hd0,0) -#makeactive -#chainloader +1 diff --git a/abs/core-testing/grub/more-raid.patch b/abs/core-testing/grub/more-raid.patch deleted file mode 100644 index 39db234..0000000 --- a/abs/core-testing/grub/more-raid.patch +++ /dev/null @@ -1,100 +0,0 @@ ---- grub-0.95/lib/device.c.moreraid 2004-11-30 17:09:36.736099360 -0500 -+++ grub-0.95/lib/device.c 2004-11-30 17:12:17.319686944 -0500 -@@ -544,6 +544,17 @@ - } - - static void -+get_cciss_disk_name (char * name, int controller, int drive) -+{ -+ sprintf (name, "/dev/cciss/c%dd%d", controller, drive); -+} -+ -+static void -+get_cpqarray_disk_name (char * name, int controller, int drive) -+{ -+ sprintf (name, "/dev/ida/c%dd%d", controller, drive); -+} -+static void - get_ataraid_disk_name (char *name, int unit) - { - sprintf (name, "/dev/ataraid/d%c", unit + '0'); -@@ -920,7 +931,7 @@ - - for (controller = 0; controller < 8; controller++) - { -- for (drive = 0; drive < 15; drive++) -+ for (drive = 0; drive < 32; drive++) - { - char name[24]; - -@@ -940,6 +951,70 @@ - } - } - #endif /* __linux__ */ -+ -+#ifdef __linux__ -+ /* This is for cciss - we have -+ /dev/cciss/c<controller>d<logical drive>p<partition>. -+ -+ cciss driver currently supports up to 8 controllers, 16 logical -+ drives, and 7 partitions. */ -+ { -+ int controller, drive; -+ -+ for (controller = 0; controller < 8; controller++) -+ { -+ for (drive = 0; drive < 16; drive++) -+ { -+ char name[24]; -+ -+ get_cciss_disk_name (name, controller, drive); -+ if (check_device (name)) -+ { -+ (*map)[num_hd + 0x80] = strdup (name); -+ assert ((*map)[num_hd + 0x80]); -+ -+ /* If the device map file is opened, write the map. */ -+ if (fp) -+ fprintf (fp, "(hd%d)\t%s\n", num_hd, name); -+ -+ num_hd++; -+ } -+ } -+ } -+ } -+#endif /* __linux__ */ -+ -+#ifdef __linux__ -+ /* This is for cpqarray - we have -+ /dev/ida/c<controller>d<logical drive>p<partition>. -+ -+ cpqarray driver currently supports up to 8 controllers, 16 logical -+ drives, and 15 partitions. */ -+ { -+ int controller, drive; -+ -+ for (controller = 0; controller < 8; controller++) -+ { -+ for (drive = 0; drive < 15; drive++) -+ { -+ char name[24]; -+ -+ get_cpqarray_disk_name (name, controller, drive); -+ if (check_device (name)) -+ { -+ (*map)[num_hd + 0x80] = strdup (name); -+ assert ((*map)[num_hd + 0x80]); -+ -+ /* If the device map file is opened, write the map. */ -+ if (fp) -+ fprintf (fp, "(hd%d)\t%s\n", num_hd, name); -+ -+ num_hd++; -+ } -+ } -+ } -+ } -+#endif /* __linux__ */ - - /* OK, close the device map file if opened. */ - if (fp) diff --git a/abs/core-testing/grub/special-devices.patch b/abs/core-testing/grub/special-devices.patch deleted file mode 100644 index 894f3e8..0000000 --- a/abs/core-testing/grub/special-devices.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- grub-0.93/lib/device.c.raid 2002-05-20 05:53:46.000000000 -0400 -+++ grub-0.93/lib/device.c 2002-12-28 23:24:10.000000000 -0500 -@@ -689,7 +689,14 @@ - if (strcmp (dev + strlen(dev) - 5, "/disc") == 0) - strcpy (dev + strlen(dev) - 5, "/part"); - } -- sprintf (dev + strlen(dev), "%d", ((partition >> 16) & 0xFF) + 1); -+ -+ sprintf (dev + strlen(dev), "%s%d", -+ /* Compaq smart and others */ -+ (strncmp(dev, "/dev/ida/", 9) == 0 || -+ strncmp(dev, "/dev/ataraid/", 13) == 0 || -+ strncmp(dev, "/dev/cciss/", 11) == 0 || -+ strncmp(dev, "/dev/rd/", 8) == 0) ? "p" : "", -+ ((partition >> 16) & 0xFF) + 1); - - /* Open the partition. */ - fd = open (dev, O_RDWR); |