summaryrefslogtreecommitdiffstats
path: root/loader/loader.c
diff options
context:
space:
mode:
authorMartin Sivak <msivak@redhat.com>2009-01-08 15:03:34 +0100
committerMartin Sivak <msivak@redhat.com>2009-01-08 15:05:55 +0100
commit89652b6fbe65e5e7922d743a99b07104d071ef42 (patch)
tree2db006864b0c009aa1529d34b944d8342b637b65 /loader/loader.c
parent162efc4dcb767db3b648939876966954ee783984 (diff)
downloadanaconda-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.c33
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";