summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Vroon <chainsaw@gentoo.org>2004-06-09 16:40:40 +0000
committerTony Vroon <chainsaw@gentoo.org>2004-06-09 16:40:40 +0000
commit2d99a6213cab10dcba559d675a6b6e25a70ceb50 (patch)
tree04857c173b92d959791c17db950bdefaea46846f /sys-boot/lilo
parenti do not have the time to maintain this anymore (diff)
downloadgentoo-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/ChangeLog13
-rw-r--r--sys-boot/lilo/Manifest29
-rw-r--r--sys-boot/lilo/files/digest-lilo-22.5.92
-rw-r--r--sys-boot/lilo/files/lilo-22.5.9-correct-usage-info.patch13
-rw-r--r--sys-boot/lilo/files/lilo-22.5.9-create-install-dirs.patch21
-rw-r--r--sys-boot/lilo/files/lilo-22.5.9-devmapper_gentoo.patch406
-rw-r--r--sys-boot/lilo/files/lilo-22.5.9-glibc233.patch24
-rw-r--r--sys-boot/lilo/files/lilo-22.5.9-lvm.2-6headers.patch16
-rw-r--r--sys-boot/lilo/lilo-22.5.9.ebuild200
-rw-r--r--sys-boot/lilo/metadata.xml4
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, &params);
++
++ 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>