diff options
author | Jeremy Katz <katzj@redhat.com> | 2004-07-09 21:45:40 +0000 |
---|---|---|
committer | Jeremy Katz <katzj@redhat.com> | 2004-07-09 21:45:40 +0000 |
commit | 2bb09b7d284d82a54cd46b5bda5c3541a0891ce7 (patch) | |
tree | 1715880b28483108593674999df9c46cb204ad8a /loader2/hdinstall.c | |
parent | 02d56153af18491f1b964ffb506f7ad09662d030 (diff) | |
download | anaconda-2bb09b7d284d82a54cd46b5bda5c3541a0891ce7.tar.gz anaconda-2bb09b7d284d82a54cd46b5bda5c3541a0891ce7.tar.xz anaconda-2bb09b7d284d82a54cd46b5bda5c3541a0891ce7.zip |
add patch from Rezwanul_Kabir (AT dell DOT com) to add support for using
the edd module's export of mbr signatures to map BIOS disks to Linux disk
names. exposed for use in kickstart with part --onbiosdisk=,
ks=bd:80p1:/ks.cfg, and harddrive --biospart=80p1
Patch from anaconda-devel-list, #106674
Diffstat (limited to 'loader2/hdinstall.c')
-rw-r--r-- | loader2/hdinstall.c | 81 |
1 files changed, 79 insertions, 2 deletions
diff --git a/loader2/hdinstall.c b/loader2/hdinstall.c index 5da43a983..31d9b4c87 100644 --- a/loader2/hdinstall.c +++ b/loader2/hdinstall.c @@ -40,7 +40,7 @@ #include "../isys/imount.h" #include "../isys/isys.h" - +#include "../isys/eddsupport.h" /* pull in second stage image for hard drive install */ @@ -447,14 +447,17 @@ char * mountHardDrive(struct installMethod * method, void setKickstartHD(struct loaderData_s * loaderData, int argc, char ** argv, int * flagsPtr) { - char *partition, *dir; + char *biospart, *partition, *dir, *p; poptContext optCon; int rc; + struct poptOption ksHDOptions[] = { + { "biospart", '\0', POPT_ARG_STRING, &biospart, 0 }, { "partition", '\0', POPT_ARG_STRING, &partition, 0 }, { "dir", '\0', POPT_ARG_STRING, &dir, 0 }, { 0, 0, 0, 0, 0 } }; + logMessage("kickstartFromHD"); optCon = poptGetContext(NULL, argc, (const char **) argv, ksHDOptions, 0); @@ -468,6 +471,24 @@ void setKickstartHD(struct loaderData_s * loaderData, int argc, return; } + if (biospart) { + char * dev; + + p = strchr(biospart,'p'); + if(!p){ + logMessage("Bad argument for --biospart"); + return; + } + *p = '\0'; + dev = getBiosDisk(biospart); + if (dev == NULL) { + logMessage("Unable to location BIOS partition %s", biospart); + return; + } + partition = malloc(strlen(dev) + strlen(p) + 2); + sprintf(partition, "%s%s", dev, p); + } + loaderData->method = strdup("hd"); loaderData->methodData = calloc(sizeof(struct hdInstallData *), 1); if (partition) @@ -518,3 +539,59 @@ int kickstartFromHD(char *kssrc, int flags) { return 0; } + + +int kickstartFromBD(char *kssrc, int flags) { + int rc; + char *p, *q = NULL, *r = NULL, *tmpstr, *ksdev, *kspath, *biosksdev; + + logMessage("getting kickstart file from biosdrive"); + + /* format is ks=bd:[device]:/path/to/ks.cfg */ + /* split of pieces */ + tmpstr = strdup(kssrc); + p = strchr(tmpstr, ':'); + if (p) + q = strchr(p+1, ':'); + + if (!p || !q) { + logMessage("Format of command line is ks=bd:device:/path/to/ks.cfg"); + free(tmpstr); + return 1; + } + + *q = '\0'; + kspath = q+1; + + r = strchr(p+1,'p'); + if(!r){ + logMessage("Format of biosdisk is 80p1"); + free(tmpstr); + return 1; + } + + *r = '\0'; + biosksdev = getBiosDisk((p + 1)); + if(!biosksdev){ + startNewt(flags); + newtWinMessage(_("Error"), _("OK"), + _("Cannot find hard drive for BIOS disk %s"), + p + 1); + return 1; + } + + + ksdev = malloc(strlen(biosksdev) + 3); + sprintf(ksdev, "%s%s", biosksdev, r + 1); + logMessage("Loading ks from device %s on path %s", ksdev, kspath); + if ((rc=getKickstartFromBlockDevice(ksdev, kspath))) { + if (rc == 3) { + startNewt(flags); + newtWinMessage(_("Error"), _("OK"), + _("Cannot find kickstart file on hard drive.")); + } + return 1; + } + + return 0; +} |