summaryrefslogtreecommitdiffstats
path: root/loader2/hdinstall.c
diff options
context:
space:
mode:
authorJeremy Katz <katzj@redhat.com>2004-07-09 21:45:40 +0000
committerJeremy Katz <katzj@redhat.com>2004-07-09 21:45:40 +0000
commit2bb09b7d284d82a54cd46b5bda5c3541a0891ce7 (patch)
tree1715880b28483108593674999df9c46cb204ad8a /loader2/hdinstall.c
parent02d56153af18491f1b964ffb506f7ad09662d030 (diff)
downloadanaconda-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.c81
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;
+}