diff options
author | Tony Vroon <chainsaw@gentoo.org> | 2004-06-09 16:40:40 +0000 |
---|---|---|
committer | Tony Vroon <chainsaw@gentoo.org> | 2004-06-09 16:40:40 +0000 |
commit | 2d99a6213cab10dcba559d675a6b6e25a70ceb50 (patch) | |
tree | 04857c173b92d959791c17db950bdefaea46846f /sys-boot/lilo | |
parent | i do not have the time to maintain this anymore (diff) | |
download | gentoo-2-2d99a6213cab10dcba559d675a6b6e25a70ceb50.tar.gz gentoo-2-2d99a6213cab10dcba559d675a6b6e25a70ceb50.tar.bz2 gentoo-2-2d99a6213cab10dcba559d675a6b6e25a70ceb50.zip |
Version bump, added 'static' IUSE, closes bugs #40562, #43554, #53173 and #53413.
Diffstat (limited to 'sys-boot/lilo')
-rw-r--r-- | sys-boot/lilo/ChangeLog | 13 | ||||
-rw-r--r-- | sys-boot/lilo/Manifest | 29 | ||||
-rw-r--r-- | sys-boot/lilo/files/digest-lilo-22.5.9 | 2 | ||||
-rw-r--r-- | sys-boot/lilo/files/lilo-22.5.9-correct-usage-info.patch | 13 | ||||
-rw-r--r-- | sys-boot/lilo/files/lilo-22.5.9-create-install-dirs.patch | 21 | ||||
-rw-r--r-- | sys-boot/lilo/files/lilo-22.5.9-devmapper_gentoo.patch | 406 | ||||
-rw-r--r-- | sys-boot/lilo/files/lilo-22.5.9-glibc233.patch | 24 | ||||
-rw-r--r-- | sys-boot/lilo/files/lilo-22.5.9-lvm.2-6headers.patch | 16 | ||||
-rw-r--r-- | sys-boot/lilo/lilo-22.5.9.ebuild | 200 | ||||
-rw-r--r-- | sys-boot/lilo/metadata.xml | 4 |
10 files changed, 716 insertions, 12 deletions
diff --git a/sys-boot/lilo/ChangeLog b/sys-boot/lilo/ChangeLog index 6e74d04d0e21..2f603387a371 100644 --- a/sys-boot/lilo/ChangeLog +++ b/sys-boot/lilo/ChangeLog @@ -1,6 +1,17 @@ # ChangeLog for sys-boot/lilo # Copyright 2002-2004 Gentoo Technologies, Inc.; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/sys-boot/lilo/ChangeLog,v 1.11 2004/05/12 12:23:34 pappy Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-boot/lilo/ChangeLog,v 1.12 2004/06/09 16:40:40 chainsaw Exp $ + +*lilo-22.5.9 (09 Jun 2004) + + 09 Jun 2004; Tony Vroon <chainsaw@gentoo.org> metadata.xml, + +files/lilo-22.5.9-correct-usage-info.patch, + +files/lilo-22.5.9-create-install-dirs.patch, + +files/lilo-22.5.9-devmapper_gentoo.patch, + +files/lilo-22.5.9-glibc233.patch, +files/lilo-22.5.9-lvm.2-6headers.patch, + +lilo-22.5.9.ebuild: + New revision, adds 'static' USE-flag. + Fixes bugs #40562, #43554, #53173 and #53413. 12 May 2004; Alexander Gabert <pappy@gentoo.org> lilo-22.5.8.ebuild: added flag-o-matic eclass diff --git a/sys-boot/lilo/Manifest b/sys-boot/lilo/Manifest index fb58a9cffe37..4561e455d97b 100644 --- a/sys-boot/lilo/Manifest +++ b/sys-boot/lilo/Manifest @@ -1,21 +1,28 @@ -MD5 59efc815026d5be9cd5e7029d792c2d2 ChangeLog 8205 -MD5 b62ac7c19b9163b3b4fb17d9da33a3f3 lilo-22.5.1.ebuild 4395 -MD5 00a0ca339c35dfa56cdbc374a8adedb1 lilo-22.5.6-r2.ebuild 3190 +MD5 47742f30310fffc18379ae060aac8a8f lilo-22.5.8-r2.ebuild 4457 MD5 b52018ecad7a5624be44a3141e3daff5 lilo-22.5.7.2.ebuild 3983 +MD5 50a6da12563d74dc7a95a2c6fa75e315 lilo-22.5.9.ebuild 5163 MD5 0638e8e1176ae4c22ada6cbb9d8c2683 lilo-22.5.8-r1.ebuild 4341 -MD5 47742f30310fffc18379ae060aac8a8f lilo-22.5.8-r2.ebuild 4457 -MD5 d504f429b27f9ba59a96fff3b81e1293 lilo-22.5.8.ebuild 4050 -MD5 9a09f8d531c582e78977dbfd96edc1f2 metadata.xml 164 +MD5 b62ac7c19b9163b3b4fb17d9da33a3f3 lilo-22.5.1.ebuild 4395 +MD5 00a0ca339c35dfa56cdbc374a8adedb1 lilo-22.5.6-r2.ebuild 3190 MD5 b0ecf6d774e388fb6f13c869c9915270 lilo-22.5.8-r3.ebuild 4639 +MD5 d504f429b27f9ba59a96fff3b81e1293 lilo-22.5.8.ebuild 4050 +MD5 6fcaed6405a0cb70cd9c099ac83f06a0 ChangeLog 8625 +MD5 eeee4743c4e463eeed3a7a4c15380e0d metadata.xml 254 +MD5 45847050f78ebbd2b2d89c03f6a08fb4 files/lilo-22.5.8-devmapper_gentoo.patch 11889 +MD5 ab2657bc635313522eb791e30b1166ef files/lilo-22.5.9-correct-usage-info.patch 683 MD5 8e75fea24b47485fd4185b9962745117 files/digest-lilo-22.5.1 63 -MD5 23a4be524696dfdaefa80c1bdac39fc7 files/digest-lilo-22.5.6-r2 63 -MD5 89d3f49772308bc3fb195f51c9ff1035 files/digest-lilo-22.5.7.2 65 MD5 15b1ea46b95a7517e5207c63b2252fe6 files/digest-lilo-22.5.8 63 +MD5 40f4a24227338f8fae1e5996bae46576 files/digest-lilo-22.5.9 124 +MD5 23a4be524696dfdaefa80c1bdac39fc7 files/digest-lilo-22.5.6-r2 63 MD5 15b1ea46b95a7517e5207c63b2252fe6 files/digest-lilo-22.5.8-r1 63 MD5 15b1ea46b95a7517e5207c63b2252fe6 files/digest-lilo-22.5.8-r2 63 +MD5 15b1ea46b95a7517e5207c63b2252fe6 files/digest-lilo-22.5.8-r3 63 +MD5 77acd52c9bdf0a660026777a3419ccb3 files/lilo-22.5.9-glibc233.patch 584 +MD5 2419c22323e1cfdbbc1ca149cb05e74d files/lilo-22.5.9-create-install-dirs.patch 970 +MD5 89d3f49772308bc3fb195f51c9ff1035 files/digest-lilo-22.5.7.2 65 MD5 2419c22323e1cfdbbc1ca149cb05e74d files/lilo-22.5.8-create-install-dirs.patch 970 -MD5 45847050f78ebbd2b2d89c03f6a08fb4 files/lilo-22.5.8-devmapper_gentoo.patch 11889 +MD5 90ff63638cb8b46b9e6f3c5231bd464e files/lilo.conf 1719 +MD5 348f7a96783361cf8f0a0703bfeaa03a files/lilo-22.5.9-lvm.2-6headers.patch 470 +MD5 45847050f78ebbd2b2d89c03f6a08fb4 files/lilo-22.5.9-devmapper_gentoo.patch 11889 MD5 348f7a96783361cf8f0a0703bfeaa03a files/lilo-22.5.8.lvm.2-6headers.patch 470 MD5 ca44cc6ec0aecfe30c49c455f74aacec files/lilo-glibc233.patch 640 -MD5 90ff63638cb8b46b9e6f3c5231bd464e files/lilo.conf 1719 -MD5 15b1ea46b95a7517e5207c63b2252fe6 files/digest-lilo-22.5.8-r3 63 diff --git a/sys-boot/lilo/files/digest-lilo-22.5.9 b/sys-boot/lilo/files/digest-lilo-22.5.9 new file mode 100644 index 000000000000..f9cdd0591159 --- /dev/null +++ b/sys-boot/lilo/files/digest-lilo-22.5.9 @@ -0,0 +1,2 @@ +MD5 d5b561190cbe0968d50e09e0031edb79 lilo-22.5.9.tar.gz 415378 +MD5 fc344efe42e541a11a0972fa418780ce dolilo-0.1.tar.bz2 3930 diff --git a/sys-boot/lilo/files/lilo-22.5.9-correct-usage-info.patch b/sys-boot/lilo/files/lilo-22.5.9-correct-usage-info.patch new file mode 100644 index 000000000000..3812115fe41d --- /dev/null +++ b/sys-boot/lilo/files/lilo-22.5.9-correct-usage-info.patch @@ -0,0 +1,13 @@ +diff -uNr lilo-22.5.8-ORIG/lilo.c lilo-22.5.8/lilo.c +--- lilo-22.5.8-ORIG/lilo.c 2004-06-07 19:47:58.028442608 +0100 ++++ lilo-22.5.8/lilo.c 2004-06-07 19:50:17.837188448 +0100 +@@ -336,7 +336,8 @@ + fprintf(errstd,"%7s%s -M /dev/XXX [ mbr | ext ]\tinstall master boot record\n","",name); + fprintf(errstd,"%7s%s -T help \t\t\tlist additional options\n", "", name); + fprintf(errstd,"%7s%s -X\t\t\t\tinternal compile-time options\n", "", name); +- fprintf(errstd,"%7s%s -V [ -v ]\t\t\tversion information\n\n","",name); ++ fprintf(errstd,"%7s%s -V\t\t\t\tversion information\n","",name); ++ fprintf(errstd,"%7s%s -v\t\t\t\tverbose mode\n\n","",name); + exit(1); + } + diff --git a/sys-boot/lilo/files/lilo-22.5.9-create-install-dirs.patch b/sys-boot/lilo/files/lilo-22.5.9-create-install-dirs.patch new file mode 100644 index 000000000000..c9e58a2312a5 --- /dev/null +++ b/sys-boot/lilo/files/lilo-22.5.9-create-install-dirs.patch @@ -0,0 +1,21 @@ +--- lilo-22.5.8/Makefile.bak 2004-02-06 01:41:06.000000000 +0000 ++++ lilo-22.5.8/Makefile 2004-02-06 02:02:57.000000000 +0000 +@@ -302,16 +302,8 @@ + # normal install, but doesn't make the diagnostic binaries + # + install: all +- if [ ! -d $$ROOT$(SBIN_DIR) ]; then mkdir $$ROOT$(SBIN_DIR); fi +- if [ ! -d $$ROOT$(CFG_DIR) ]; then mkdir $$ROOT$(CFG_DIR); fi +- if [ ! -d $$ROOT$(BOOT_DIR) ]; then mkdir $$ROOT$(BOOT_DIR); fi +- if [ ! -d $$ROOT$(USRSBIN_DIR) ]; then \ +- mkdir -p $$ROOT$(USRSBIN_DIR); fi +- if [ ! -d $$ROOT$(MAN_DIR) ]; then mkdir $$ROOT$(MAN_DIR); fi +- if [ ! -d $$ROOT$(MAN_DIR)/man5 ]; then \ +- mkdir $$ROOT$(MAN_DIR)/man5; fi +- if [ ! -d $$ROOT$(MAN_DIR)/man8 ]; then \ +- mkdir $$ROOT$(MAN_DIR)/man8; fi ++ mkdir -p $$ROOT$(SBIN_DIR) $$ROOT$(CFG_DIR) $$ROOT$(BOOT_DIR) \ ++ $$ROOT$(USRSBIN_DIR) $$ROOT$(MAN_DIR)/man5 $$ROOT$(MAN_DIR)/man8 + if [ -f diag1.img ]; then \ + cp -f diag1.img $$ROOT$(BOOT_DIR); fi + if [ -f diag2.img ]; then \ diff --git a/sys-boot/lilo/files/lilo-22.5.9-devmapper_gentoo.patch b/sys-boot/lilo/files/lilo-22.5.9-devmapper_gentoo.patch new file mode 100644 index 000000000000..b72e3a1ff6b8 --- /dev/null +++ b/sys-boot/lilo/files/lilo-22.5.9-devmapper_gentoo.patch @@ -0,0 +1,406 @@ +<diff -Naur lilo-22.5.8/Makefile lilo-22.5.8-devmapper/Makefile +--- lilo-22.5.8/Makefile 2003-10-10 18:58:35.000000000 +0200 ++++ lilo-22.5.8-devmapper/Makefile 2004-04-13 10:48:31.000000000 +0200 +@@ -53,7 +53,7 @@ + # XL_SECS=n Support for extra large (non-standard) floppies. + + CONFIG=-DBDATA -DDSECS=3 -DEVMS -DIGNORECASE -DLVM -DONE_SHOT -DPASS160 \ +- -DREISERFS -DREWRITE_TABLE -DSOLO_CHAIN -DVERSION -DVIRTUAL ++ -DREISERFS -DREWRITE_TABLE -DSOLO_CHAIN -DVERSION -DVIRTUAL -DDEVMAPPER + + # set the compiler optimization level + +@@ -88,6 +88,8 @@ + LDFLAGS=#-Xlinker -qmagic + LIBS= + ++DEVMAPPER=-ldevmapper ++ + OBJS=lilo.o raid.o map.o geometry.o boot.o device.o common.o bsect.o cfg.o \ + temp.o partition.o identify.o probe.o shs2.o loader.o edit.o + +@@ -241,7 +243,11 @@ + cp -p dparam.S dparam.s + + lilo: $(OBJS) ++ifneq (,$(findstring DEVMAPPER,$(CONFIG))) ++ $(CC) -o lilo -L/lib $(LDFLAGS) $(DEVMAPPER) $(OBJS) $(LIBS) ++else + $(CC) -o lilo $(LDFLAGS) $(OBJS) $(LIBS) ++endif + + boot-text.b: first.b second.b + (dd if=first.b bs=512 conv=sync; dd if=second.b) >boot-text.b +diff -Naur lilo-22.5.8/geometry.c lilo-22.5.8-devmapper/geometry.c +--- lilo-22.5.8/geometry.c 2003-10-10 01:59:07.000000000 +0200 ++++ lilo-22.5.8-devmapper/geometry.c 2004-04-13 10:47:35.000000000 +0200 +@@ -14,6 +14,9 @@ + #include <stdio.h> + #include <fcntl.h> + #include <errno.h> ++#include <stdlib.h> ++#include <limits.h> ++#include <ctype.h> + #include <sys/types.h> + + #ifdef LCF_REISERFS +@@ -26,6 +29,10 @@ + + #include <string.h> + ++#ifdef LCF_DEVMAPPER ++#include <libdevmapper.h> ++#endif ++ + #include "config.h" + #include "lilo.h" + #include "common.h" +@@ -60,6 +67,25 @@ + #endif + #endif + ++#ifdef LCF_DEVMAPPER ++typedef struct _dm_target { ++ struct _dm_target *next; ++ uint64_t start,length,offset; ++ int device; ++} DM_TARGET; ++ ++typedef struct _dm_table { ++ struct _dm_table *next; ++ int device; ++ struct _dm_target *target; ++} DM_TABLE; ++ ++int dm_version_nr = 0; ++int dm_major_list[16]; ++int dm_major_nr = 0; ++DM_TABLE *dmtab = NULL; ++#endif ++ + #ifdef LCF_LVM + struct lv_bmap { + __u32 lv_block; +@@ -114,6 +140,12 @@ + { + FILE *file; + char line[MAX_LINE+1]; ++#ifdef LCF_DEVMAPPER ++ struct dm_task *dmt; ++ char major_name[32]; ++ char dm_version[32]; ++ int major; ++#endif + char *here; + DT_ENTRY *entry; + int disk_section,items; +@@ -122,29 +154,69 @@ + if ((file = fopen(name,"r")) == NULL) + die("open %s: %s",name,strerror(errno)); + } +- else if ((file = fopen(DFL_DISKTAB,"r")) == NULL) return; +- disk_section = !!disktab; +- while (fgets(line,MAX_LINE,file)) { +- here = strchr(line,'\n'); +- if (here) *here = 0; +- here = strchr(line,'#'); +- if (here) *here = 0; +- if (strspn(line," \t") != strlen(line)) { +- entry = alloc_t(DT_ENTRY); +- items = sscanf(line,"0x%x 0x%x %d %d %d %d",&entry->device, +- &entry->bios,&entry->sectors,&entry->heads,&entry->cylinders, +- &entry->start); +- if (items == 5) entry->start = -1; +- if (items < 5) +- die("Invalid line in %s:\n\"%s\"",name ? name : DFL_DISKTAB, +- line); +- entry->next = disktab; +- disktab = entry; +- if (disk_section) die("DISKTAB and DISK are mutually exclusive"); +- old_disktab = 1; ++ if (name || (file = fopen(DFL_DISKTAB,"r")) != NULL) { ++ disk_section = !!disktab; ++ while (fgets(line,MAX_LINE,file)) { ++ here = strchr(line,'\n'); ++ if (here) *here = 0; ++ here = strchr(line,'#'); ++ if (here) *here = 0; ++ if (strspn(line," \t") != strlen(line)) { ++ entry = alloc_t(DT_ENTRY); ++ items = sscanf(line,"0x%x 0x%x %d %d %d %d",&entry->device, ++ &entry->bios,&entry->sectors,&entry->heads,&entry->cylinders, ++ &entry->start); ++ if (items == 5) entry->start = -1; ++ if (items < 5) ++ die("Invalid line in %s:\n\"%s\"",name ? name : DFL_DISKTAB, ++ line); ++ entry->next = disktab; ++ disktab = entry; ++ if (disk_section) die("DISKTAB and DISK are mutually exclusive"); ++ old_disktab = 1; ++ } + } ++ (void) fclose(file); + } ++ ++#ifdef LCF_DEVMAPPER ++ if (!(dmt = dm_task_create(DM_DEVICE_VERSION))) ++ return; ++ if (!dm_task_run(dmt)) ++ return; ++ if (!dm_task_get_driver_version(dmt, dm_version, sizeof dm_version)) ++ return; ++ ++ /* ++ * to not confuse returned device number formats %02x:%02x and %d:%d ++ * we assume here that the %02x:%02x format is only found in the ioctl ++ * interface version < 4 (this is really getting ugly...) ++ */ ++ dm_version_nr = atoi(dm_version); ++ ++ dm_task_destroy(dmt); ++ ++ dm_major_nr = 0; ++ file = fopen("/proc/devices", "r"); ++ if (!file) return; ++ ++ do { ++ if (!fgets(line, (sizeof line)-1, file)) { ++ (void) fclose(file); ++ return; ++ } ++ line[(sizeof line)-1] = 0; ++ } while(strncmp(line, "Block", 5) != 0); ++ ++ while(fgets(line, (sizeof line)-1, file)) { ++ if (sscanf(line, "%d %31s\n", &major, major_name) != 2) continue; ++ if (strcmp(major_name, "device-mapper") != 0) continue; ++ dm_major_list[dm_major_nr] = major; ++ if (++dm_major_nr > (sizeof dm_major_list)/(sizeof dm_major_list[0])) break; ++ } ++ + (void) fclose(file); ++#endif + } + + +@@ -768,6 +840,161 @@ + { + DT_ENTRY *walk; + int inherited,keep_cyls,is_raid=0; ++#ifdef LCF_DEVMAPPER ++ int i; ++ ++ for(i = 0; i < dm_major_nr; i++) ++ if (MAJOR(device) == dm_major_list[i]) ++ break; ++ while (i < dm_major_nr) { ++ DM_TABLE *dm_table; ++ ++ for(dm_table = dmtab; dm_table; dm_table = dm_table->next) ++ if (dm_table->device == device) ++ break; ++ ++ if (dm_table) { ++ DM_TARGET *target; ++ ++ device = 0; ++ for(target = dm_table->target; target; target = target->next) ++ device = target->device; ++ } else { ++ DEVICE dev; ++ struct dm_task *dmt; ++ void *next = NULL; ++ char dmdev[PATH_MAX+1]; ++ char buf[PATH_MAX+1]; ++ char *slash; ++ int result; ++ ++ dev_open(&dev, device, -1); ++ strncpy(dmdev, dev.name, PATH_MAX); ++ dmdev[PATH_MAX] = 0; ++ do { ++ if ((result = readlink(dmdev, buf, PATH_MAX)) < 0 && errno != EINVAL) ++ die("device-mapper: readlink(\"%s\") failed with: %s",buf, ++ strerror(errno)); ++ if (result >= 0) { ++ buf[PATH_MAX] = 0; ++ if (buf[0] != '/' && (slash = strrchr(dmdev, '/')) != NULL) ++ slash++; ++ else ++ slash = dmdev; ++ strncpy(slash, buf, PATH_MAX - (slash-dmdev)); ++ } ++ if (realpath(dmdev, buf) == NULL) ++ die("device-mapper: realpath(\"%s\") failed with: %s",dmdev, ++ strerror(errno)); ++ strncpy(dmdev, buf, PATH_MAX); ++ } while (result >= 0); ++ dmdev[PATH_MAX] = 0; ++ ++ if (!(dmt = dm_task_create(DM_DEVICE_TABLE))) ++ die("device-mapper: dm_task_create(DM_DEVICE_TABLE) failed"); ++ slash = strrchr(dmdev, '/'); ++ if (slash) ++ slash++; ++ else ++ slash = dmdev; ++ if (!dm_task_set_name(dmt, slash)) ++ die("device-mapper: dm_task_set_name(\"%s\") failed",dmdev); ++ if (!dm_task_run(dmt)) ++ die("device-mapper: dm_task_run(DM_DEVICE_TABLE) failed"); ++ ++ dm_table = alloc_t(DM_TABLE); ++ dm_table->device = device; ++ dm_table->target = NULL; ++ dm_table->next = dmtab; ++ dmtab = dm_table; ++ ++ device = 0; ++ ++ do { ++ DM_TARGET *target; ++ uint64_t start,length; ++ int major,minor; ++ char *target_type,*params; ++ char *p; ++ ++ next = dm_get_next_target(dmt, next, &start, &length, ++ &target_type, ¶ms); ++ ++ if (!target_type) continue; ++ ++ if (strcmp(target_type, "linear") != 0) ++ die("device-mapper: only linear boot device supported"); ++ ++ target = alloc_t(DM_TARGET); ++ target->start = start; ++ target->length = length; ++ if (dm_version_nr < 4 && ++ isxdigit(params[0]) && ++ isxdigit(params[1]) && ++ params[2] == ':' && ++ isxdigit(params[3]) && ++ isxdigit(params[4])) { /* old 2.4 format */ ++ if (sscanf(params, "%02x:%02x %"PRIu64, &major, &minor, &target->offset) != 3) ++ die("device-mapper: parse error in linear params (\"%s\")", params); ++ } else if (isdigit(params[0]) && ++ strchr(params, ':')) { /* dm_bdevname/format_dev_t (>= 2.6.0-test4?) format */ ++ if (sscanf(params, "%u:%u %"PRIu64, &major, &minor, &target->offset) != 3) ++ die("device-mapper: parse error in linear params (\"%s\")", params); ++ } else { /* >= 2.5.69 format, this should go away soon */ ++ struct stat st; ++ FILE *file; ++ ++ p = strrchr(params, ' '); ++ if (p == NULL) ++ die("device-mapper: parse error in linear params (\"%s\")", params); ++ *p = 0; ++ sprintf(buf, "/dev/%s", params); /* let's hope it's there */ ++ if (stat(buf, &st) == 0) { ++ if (!S_ISBLK(st.st_mode)) ++ die("device-mapper: %s is not a valid block device", buf); ++ major = MAJOR(st.st_rdev); ++ minor = MINOR(st.st_rdev); ++ } else { /* let's try sysfs */ ++ int dev; ++ sprintf(buf, "/sys/block/%s/dev", params); ++ file = fopen(buf, "r"); ++ if (!file) ++ die("device-mapper: \"%s\" could not be opened. /sys mounted?", buf); ++ if (!fgets(buf, PATH_MAX, file)) ++ die("device-mapper: read error from \"/sys/block/%s/dev\"", params); ++ if (sscanf(buf, "%u:%u", &major, &minor) != 2) { ++ if (sscanf(buf, "%x", &dev) != 1) ++ die("device-mapper: error getting device from \"%s\"", buf); ++ major = MAJOR(dev); ++ minor = MINOR(dev); ++ } ++ (void) fclose(file); ++ } ++ *p = ' '; ++ if (sscanf(p+1, "%"PRIu64, &target->offset) != 1) ++ die("device-mapper: parse error in linear params (\"%s\")", params); ++ } ++ target->device = (major << 8) | minor; ++ if (!device) ++ device = target->device; ++ target->next = dm_table->target; ++ dm_table->target = target; ++ } while(next); ++ ++ dm_task_destroy(dmt); ++ ++ dev_close(&dev); ++ } ++ ++ if (!device) ++ die("device-mapper: Error finding real device"); ++ geo->base_dev = device; ++ ++ for(i = 0; i < dm_major_nr; i++) ++ if (MAJOR(device) == dm_major_list[i]) ++ break; ++ } ++#endif + + if (verbose>=5) printf("geo_get: device %04X, all=%d\n", device, all); + #ifdef LCF_LVM +@@ -1130,14 +1357,50 @@ + die("EVMS boot volume cannot be on multiple disks.\n"); + sector = ebm.rsector + ((offset/SECTOR_SIZE) % geo->spb) + geo->start; + } +- else { +- sector = block*geo->spb+((offset/SECTOR_SIZE) % geo->spb); +- sector += geo->start; +- } +-#else +- sector = block*geo->spb+((offset/SECTOR_SIZE) % geo->spb); +- sector += geo->start; ++ else ++#endif ++ { ++#ifdef LCF_DEVMAPPER ++ int dev = geo->dev; ++ int i; ++#endif ++ sector = block*geo->spb+((offset/SECTOR_SIZE) % geo->spb); ++#ifdef LCF_DEVMAPPER ++ for(i = 0; i < dm_major_nr; i++) ++ if (MAJOR(dev) == dm_major_list[i]) ++ break; ++ while (i < dm_major_nr) { ++ DM_TABLE *dm_table; ++ DM_TARGET *dm_target; ++ ++ for(dm_table = dmtab; dm_table; dm_table = dm_table->next) ++ if (dm_table->device == dev) ++ break; ++ if (!dm_table) ++ die("device-mapper: Mapped device suddenly lost? (%d)", dev); ++ ++ for(dm_target = dm_table->target; dm_target; dm_target = dm_target->next) ++ if (dm_target->start <= sector && sector < (dm_target->start+dm_target->length)) ++ break; ++ if (!dm_target) ++ die("device-mapper: Sector outside mapped device? (%d: %u/%"PRIu64")", ++ geo->base_dev, sector, (uint64_t)(dm_table->target ? ++ (dm_table->target->start+dm_table->target->length) : 0)); ++ ++ dev = dm_target->device; ++ sector = dm_target->offset+(sector-dm_target->start); ++ ++ for(i = 0; i < dm_major_nr; i++) ++ if (MAJOR(dev) == dm_major_list[i]) ++ break; ++ } ++ ++ if (dev != geo->dev && dev != geo->base_dev) ++ die("device-mapper: mapped boot device cannot be on multiple real devices\n"); + #endif ++ sector += geo->start; ++ } ++ + /* DON'T always use CHS addressing on floppies: JRC */ + /* if ((geo->device & 0x80) && (linear || lba32)) { */ + if ((linear || lba32)) { diff --git a/sys-boot/lilo/files/lilo-22.5.9-glibc233.patch b/sys-boot/lilo/files/lilo-22.5.9-glibc233.patch new file mode 100644 index 000000000000..61cb30dc963c --- /dev/null +++ b/sys-boot/lilo/files/lilo-22.5.9-glibc233.patch @@ -0,0 +1,24 @@ +--- boot.c.orig 2003-11-25 05:31:24.000000000 +0000 ++++ boot.c 2004-06-09 16:35:49.092481712 +0100 +@@ -17,6 +17,9 @@ + #include <ctype.h> + #include <fcntl.h> + #include <errno.h> ++#ifndef PAGE_SIZE ++# include <asm/page.h> ++#endif + #include <sys/stat.h> + + #include "config.h" +--- partition.c.orig 2003-11-25 06:00:02.000000000 +0000 ++++ partition.c 2004-06-09 16:36:51.579982168 +0100 +@@ -17,6 +17,9 @@ + #include <ctype.h> + #include <fcntl.h> + #include <errno.h> ++#ifndef PAGE_SIZE ++# include <asm/page.h> ++#endif + #include <sys/stat.h> + #include <sys/types.h> + #include <asm/unistd.h> diff --git a/sys-boot/lilo/files/lilo-22.5.9-lvm.2-6headers.patch b/sys-boot/lilo/files/lilo-22.5.9-lvm.2-6headers.patch new file mode 100644 index 000000000000..7c93db0ae03c --- /dev/null +++ b/sys-boot/lilo/files/lilo-22.5.9-lvm.2-6headers.patch @@ -0,0 +1,16 @@ +--- lilo-22.5.8/geometry.c 2003-10-10 00:59:07.000000000 +0100 ++++ lilo-22.5.8/geometry.c 2004-01-28 19:28:17.000000000 +0000 +@@ -99,6 +99,13 @@ + #define HDIO_GETGEO HDIO_REQ + #endif + ++/* plasmaroo@gentoo.org :: 2.6 Compatibility */ ++ ++#undef _IOR ++#undef _IOWR ++ ++#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size)) ++#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size)) + + typedef struct _st_buf { + struct _st_buf *next; diff --git a/sys-boot/lilo/lilo-22.5.9.ebuild b/sys-boot/lilo/lilo-22.5.9.ebuild new file mode 100644 index 000000000000..5ce80f71c839 --- /dev/null +++ b/sys-boot/lilo/lilo-22.5.9.ebuild @@ -0,0 +1,200 @@ +# Copyright 1999-2004 Gentoo Technologies, Inc. +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-boot/lilo/lilo-22.5.9.ebuild,v 1.1 2004/06/09 16:40:40 chainsaw Exp $ + +inherit eutils flag-o-matic + +DOLILO_V="0.1" +IUSE="devmap static" + +DESCRIPTION="Standard Linux boot loader" +HOMEPAGE="http://lilo.go.dyndns.org/pub/linux/lilo/" +DOLILO_TAR="dolilo-${DOLILO_V}.tar.bz2" +SRC_URI="http://home.san.rr.com/johninsd/pub/linux/lilo/${P}.tar.gz + ftp://metalab.unc.edu/pub/Linux/system/boot/lilo/${P}.tar.gz + ftp://metalab.unc.edu/pub/Linux/system/boot/lilo/obsolete/${P}.tar.gz + mirror://gentoo/${DOLILO_TAR}" + +SLOT="0" +LICENSE="BSD GPL-2" +KEYWORDS="-* ~x86" + +RDEPEND=">=sys-apps/sed-4 + devmap? ( >=sys-libs/device-mapper-1.00.08 )" +DEPEND="${RDEPEND} + dev-lang/nasm + >=sys-devel/bin86-0.15.5" + +PROVIDE="virtual/bootloader" + +src_unpack() { + einfo + einfo "If you want to use lilo with device mapper, please enable the" + einfo "\"devmap\" USE flag." + einfo + + unpack ${P}.tar.gz + + # Do not try and build the dos crap. + sed -i -e 's|^all:.*$|all: lilo|' ${S}/Makefile + + # The bootlogo patch from SuSE linux, which was originally in + # here, has been dropped because it's no longer compatible + # with lilo since the 22.5.x series. + # Quequero has done a good attempt to port the patch in bug + # #19397, but unfortunately that breaks the timeout at boot. + # If you can overcome these problems, a patch is very welcome. + + if [ `use devmap` ]; then + # devmapper-patch (boot on evms/lvm2) + cd ${S}; epatch ${FILESDIR}/${P}-devmapper_gentoo.patch + fi + + cd ${S} + unpack ${DOLILO_TAR} + + # Fixup things for glibc-2.3.3 (and later CVS versions of 2.3.2) + epatch ${FILESDIR}/${P}-glibc233.patch + # Fix building against 2.6 headers + epatch ${FILESDIR}/${P}-lvm.2-6headers.patch + # Fix creating install dirs, bug #39405 + epatch ${FILESDIR}/${P}-create-install-dirs.patch + # Correctly document commandline options -v and -V, bug #43554 + epatch ${FILESDIR}/${P}-correct-usage-info.patch +} + +src_compile() { + + # hardened automatic PIC plus PIE building should be suppressed + # because of assembler instructions that cannot be compiled PIC + HARDENED_CFLAGS="`test_flag -fno-pic` `test_flag -nopie`" + + # we explicitly prevent the custom CFLAGS for stability reasons + if [ `use static` ]; then + emake CC="${CC:=gcc} ${HARDENED_CFLAGS}" lilo-static || die + mv lilo-static lilo || die + else + emake CC="${CC:=gcc} ${HARDENED_CFLAGS}" lilo || die + fi +} + +src_install() { + keepdir /boot + make ROOT=${D} install || die + + into / + dosbin ${S}/dolilo/dolilo + + into /usr + dosbin keytab-lilo.pl + + insinto /etc + newins ${FILESDIR}/lilo.conf lilo.conf.example + + insinto /etc/conf.d + newins ${S}/dolilo/dolilo.conf.d dolilo + + doman manPages/*.[5-8] + dodoc CHANGES COPYING INCOMPAT README* + docinto samples ; dodoc sample/* +} + +# Check whether LILO is installed +# This function is from /usr/sbin/mkboot from debianutils, with copyright: +# +# Debian GNU/Linux +# Copyright 1996-1997 Guy Maor <maor@debian.org> +# +# Modified for Gentoo for use with the lilo ebuild by: +# Martin Schlemmer <azarah@gentoo.org> (16 Mar 2003) +# +lilocheck () { + local bootpart= + local rootpart="$(rdev 2> /dev/null | cut -d ' ' -f 1 2> /dev/null)" + + echo + einfon "Checking for LILO ..." + + if [ "$(whoami)" != "root" ] + then + echo; echo + eerror "Only root can check for LILO!" + return 1 + fi + + if [ -z "${rootpart}" ] + then + echo; echo + eerror "Could not determine root partition!" + return 1 + fi + + if [ ! -f /etc/lilo.conf -o ! -x /sbin/lilo ] + then + echo " No" + return 1 + fi + + bootpart="$(perl -ne 'print $1 if /^\s*boot\s*=\s*(\S*)/' /etc/lilo.conf)" + + if [ -z "${bootpart}" ] + then + # lilo defaults to current root when 'boot=' is not present + bootpart="${rootpart}" + fi + + if ! dd if=${bootpart} ibs=16 count=1 2>&- | grep -q 'LILO' + then + echo; echo + ewarn "Yes, but I couldn't find a LILO signature on ${bootpart}" + ewarn "Check your /etc/lilo.conf, or run /sbin/lilo by hand." + return 1 + fi + + echo " Yes, on ${bootpart}" + + return 0 +} + + +pkg_postinst() { + if [ ! -e ${ROOT}/boot/boot.b -a ! -L ${ROOT}/boot/boot.b ] + then + [ -f "${ROOT}/boot/boot-menu.b" ] && \ + ln -snf boot-menu.b ${ROOT}/boot/boot.b + fi + + if [ "${ROOT}" = "/" ] + then + if lilocheck + then + einfo "Running DOLILO to complete the install ..." + # do not redirect to /dev/null because it may display some input + # prompt + /sbin/dolilo + if [ "$?" -ne 0 ] + then + echo + ewarn "Running /sbin/dolilo failed! Please check what the problem is" + ewarn "before your next reboot." + + echo -ne "\a" ; sleep 1 ; echo -ne "\a" ; sleep 1 ; echo -ne "\a" ; sleep 1 + echo -ne "\a" ; sleep 1 ; echo -ne "\a" ; sleep 1 ; echo -ne "\a" ; sleep 1 + sleep 5 + fi + fi + echo + fi + + echo + einfo "Please note that all the loader files (/boot/*.b) are now linked" + einfo "into LILO, and thus no longer installed." + einfo "Issue 'dolilo' instead of 'lilo' to have a friendly wrapper that" + einfo "handles mounting and unmounting /boot for you, and automatically" + einfo "copies the newest available bzImage in place." + einfo "Edit /etc/conf.d/dolilo to harness it's full potential." + echo -ne "\a" ; sleep 1 ; echo -ne "\a" ; sleep 1 ; echo -ne "\a" ; sleep 1 + sleep 3 + echo +} + diff --git a/sys-boot/lilo/metadata.xml b/sys-boot/lilo/metadata.xml index 96a2d586367d..d5dc80d32a78 100644 --- a/sys-boot/lilo/metadata.xml +++ b/sys-boot/lilo/metadata.xml @@ -2,4 +2,8 @@ <!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> <pkgmetadata> <herd>base-system</herd> +<maintainer> + <email>chainsaw@gentoo.org</email> + <name>Tony Vroon</name> +</maintainer> </pkgmetadata> |