diff options
author | Martin Sivak <msivak@redhat.com> | 2009-01-08 15:03:34 +0100 |
---|---|---|
committer | Martin Sivak <msivak@redhat.com> | 2009-01-08 15:05:55 +0100 |
commit | 89652b6fbe65e5e7922d743a99b07104d071ef42 (patch) | |
tree | 2db006864b0c009aa1529d34b944d8342b637b65 /loader/loader.c | |
parent | 162efc4dcb767db3b648939876966954ee783984 (diff) | |
download | anaconda-89652b6fbe65e5e7922d743a99b07104d071ef42.tar.gz anaconda-89652b6fbe65e5e7922d743a99b07104d071ef42.tar.xz anaconda-89652b6fbe65e5e7922d743a99b07104d071ef42.zip |
Port the dlabel feature from RHEL5 bug #316481 into Fedora (#436951)
Diffstat (limited to 'loader/loader.c')
-rw-r--r-- | loader/loader.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/loader/loader.c b/loader/loader.c index 4a2c2e6c3..8da64d01b 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -928,6 +928,10 @@ static void parseCmdLineFlags(struct loaderData_s * loaderData, else if (!strcasecmp(argv[i], "dd") || !strcasecmp(argv[i], "driverdisk")) flags |= LOADER_FLAGS_MODDISK; + else if (!strcasecmp(argv[i], "dlabel=on")) + flags |= LOADER_FLAGS_AUTOMODDISK; + else if (!strcasecmp(argv[i], "dlabel=off")) + flags &= ~LOADER_FLAGS_AUTOMODDISK; else if (!strcasecmp(argv[i], "rescue")) flags |= LOADER_FLAGS_RESCUE; else if (!strcasecmp(argv[i], "nopass")) @@ -1788,7 +1792,11 @@ int main(int argc, char ** argv) { int testing = 0; int mediacheck = 0; char * virtpcon = NULL; + + struct ddlist *dd, *dditer; + poptContext optCon; + struct poptOption optionTable[] = { { "cmdline", '\0', POPT_ARG_STRING, &cmdLine, 0, NULL, NULL }, { "ksfile", '\0', POPT_ARG_STRING, &ksFile, 0, NULL, NULL }, @@ -1852,6 +1860,12 @@ int main(int argc, char ** argv) { flags |= LOADER_FLAGS_NOSHELL | LOADER_FLAGS_NOUSB; #endif + /* XXX if RHEL, enable the AUTODD feature by default, + * but we should come with more general way how to control this */ + if(!strncmp(getProductName(), "Red Hat", 7)){ + flags |= LOADER_FLAGS_AUTOMODDISK; + } + openLog(FL_TESTING(flags)); if (!FL_TESTING(flags)) openlog("loader", 0, LOG_LOCAL0); @@ -1912,6 +1926,22 @@ int main(int argc, char ** argv) { /* FIXME: this is a bit of a hack */ loaderData.modInfo = modInfo; + if(FL_AUTOMODDISK(flags)){ + logMessage(INFO, "Trying to detect vendor driver discs"); + dd = findDriverDiskByLabel(); + dditer = dd; + while(dditer){ + if(loadDriverDiskFromPartition(&loaderData, dditer->device)){ + logMessage(ERROR, "Automatic driver disk loader failed for %s.", dditer->device); + } + else{ + logMessage(INFO, "Automatic driver disk loader succeeded for %s.", dditer->device); + } + dditer = dditer->next; + } + ddlist_free(dd); + } + if (FL_MODDISK(flags)) { startNewt(); loadDriverDisks(DEVICE_ANY, &loaderData); @@ -2108,6 +2138,9 @@ int main(int argc, char ** argv) { tmparg++; } + if (FL_AUTOMODDISK(flags)) + *argptr++ = "--dlabel"; + if (FL_NOIPV4(flags)) *argptr++ = "--noipv4"; |