anaconda: try to use installation disk directly, before searching for ISO images (#440)

This commit is contained in:
Marek Marczykowski 2012-04-28 02:45:52 +02:00
parent ba1ff47849
commit 5fd3c8b151

View File

@ -1232,9 +1232,75 @@ static char *doLoaderMain(struct loaderData_s *loaderData,
* That will also then bypass any method selection UI in loader.
*/
if (!FL_ASKMETHOD(flags)) {
url = findAnacondaCD("/mnt/stage2");
int stage2ok = 0;
// marmarek hack for USB install
if (loaderData->method == METHOD_HD) {
char *location = "/mnt/stage2";
char *device = ((struct hdInstallData *)loaderData->stage2Data)->partition;
char *stage2loc = "/mnt/stage2/images/install.img";
char *stage2img;
int stage2inram;
if (!(rc=doPwMount(device, location, "auto", "ro", NULL))) {
if (!access(stage2loc, R_OK)) {
char *updpath;
//TODO? queryCDMediaCheck(device, location);
/* if in rescue mode lets copy stage 2 into RAM so we can */
/* free up the CD drive and user can have it avaiable to */
/* aid system recovery. */
if (FL_RESCUE(flags) && !FL_TEXT(flags) &&
totalMemory() > MIN_GUI_RAM ) {
rc = copyFile(stage2loc, "/tmp/install.img");
stage2img = strdup("/tmp/install.img");
stage2inram = 1;
} else {
stage2img = strdup(stage2loc);
stage2inram = 0;
}
rc = mountStage2(stage2img);
free(stage2img);
if (!rc) {
checked_asprintf(&updpath, "%s/images/updates.img", location);
logMessage(INFO, "Looking for updates in %s", updpath);
copyUpdatesImg(updpath);
free(updpath);
checked_asprintf(&updpath, "%s/images/product.img", location);
logMessage(INFO, "Looking for product in %s", updpath);
copyProductImg(updpath);
free(updpath);
/* if in rescue mode and we copied stage2 to RAM */
/* we can now unmount the CD */
if (FL_RESCUE(flags) && stage2inram) {
umount(location);
}
stage2ok = 1;
checked_asprintf(&url, "file://%s", location);
} else {
logMessage(INFO, "mounting stage2 failed");
umount(location);
}
} else {
/* this wasnt the CD we were looking for, clean up and */
/* try the next CD drive */
umount(location);
}
} else {
logMessage(WARNING, "Mount failed for %s at %s", device, location);
}
}
if (!url)
url = findAnacondaCD("/mnt/stage2");
if (url) {
setStage2LocFromCmdline(url, loaderData);
if (!stage2ok)
setStage2LocFromCmdline(url, loaderData);
skipMethodDialog = 1;
logMessage(INFO, "Detected stage 2 image on CD (url: %s)", url);