[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
[PATCH] Strip hdinstall.c down to just looking for the stage2 image.
- From: Chris Lumens <clumens redhat com>
- To: anaconda-devel-list redhat com
- Cc:
- Subject: [PATCH] Strip hdinstall.c down to just looking for the stage2 image.
- Date: Tue, 17 Jun 2008 11:45:44 -0400
---
loader2/hdinstall.c | 218 +++++++++++----------------------------------------
1 files changed, 45 insertions(+), 173 deletions(-)
diff --git a/loader2/hdinstall.c b/loader2/hdinstall.c
index 87b0713..1f0ea69 100644
--- a/loader2/hdinstall.c
+++ b/loader2/hdinstall.c
@@ -54,110 +54,10 @@
/* boot flags */
extern uint64_t flags;
-/* Pull in second stage image for hard drive install. This is only used
- * if method= is passed, not if stage2= is pased.
- */
-static int loadHDImages(char * prefix, char * dir,
- char * device, char * mntpoint,
- char * location) {
- int fd = 0, rc, idx, tmp;
- char *path = NULL, *target = NULL, *dest, *cdurl = NULL;
- char *stg2list[] = {"stage2.img", "minstg2.img", NULL};
-
- if (totalMemory() < 128000)
- idx = 1;
- else
- idx = 0;
-
- /* Try to see if we're booted off of a CD with stage2. However,
- * passing stage2= overrides this check.
- */
- if (!FL_STAGE2(flags))
- cdurl = findAnacondaCD("/mnt/stage2");
-
- if (cdurl) {
- logMessage(INFO, "Detected stage 2 image on CD");
- winStatus(50, 3, _("Media Detected"),
- _("Local installation media detected..."), 0);
- sleep(3);
- newtPopWindow();
- rc = 0;
- } else {
- target = NULL;
- for (; stg2list[idx]; idx++) {
- target = stg2list[idx];
-
- if (path)
- free(path);
-
- if (!dir || (dir && (!strcmp(dir, "/") || strcmp(dir, ""))))
- tmp = asprintf(&path, "%s/images/%s", prefix, target);
- else
- tmp = asprintf(&path, "%s/%s/images/%s", prefix, dir ? dir : "", target);
-
- logMessage(INFO, "Looking for hd stage2 image %s", path);
- if (!access(path, F_OK))
- break;
- logMessage(INFO, "%s does not exist: %s, trying next target", path, strerror(errno));
- }
-
- if (!target) {
- logMessage(ERROR, "failed to find hd stage 2 image%s: %s", path, strerror(errno));
- free(path);
- return 1;
- }
-
- logMessage(INFO, "Found hd stage2, copying %s in RAM as stage2", path);
-
- if ((fd = open(path, O_RDONLY)) < 0) {
- logMessage(ERROR, "failed to open %s: %s", path, strerror(errno));
- free(path);
- return 1;
- }
-
- free(path);
- }
-
- /* handle updates.img now before we copy stage2 over... this allows
- * us to keep our ramdisk size as small as possible */
- tmp = asprintf(&path, "%s/%s/images/updates.img", prefix, dir ? dir : "");
- copyUpdatesImg(path);
- free(path);
-
- /* handle product.img now before we copy stage2 over... this allows
- * us to keep our ramdisk size as small as possible */
- tmp = asprintf(&path, "%s/%s/images/product.img", prefix, dir ? dir : "");
- copyProductImg(path);
- free(path);
-
- if (!cdurl) {
- dest = alloca(strlen(target) + 50);
- sprintf(dest,"/tmp/%s", target);
- rc = copyFileAndLoopbackMount(fd, dest, device, mntpoint);
- close(fd);
-
- if (!verifyStamp(mntpoint)) {
- char * buf;
- fd = asprintf(&buf,
- _("The %s installation tree in that directory does "
- "not seem to match your boot media."),
- getProductName());
-
- newtWinMessage(_("Error"), _("OK"), buf);
- free(buf);
- umountLoopback(mntpoint, device);
- return 1;
- }
- }
-
- return rc;
-}
-
/* given a partition device and directory, tries to mount hd install image */
static char * setupIsoImages(char * device, char * dirName, char * location) {
int rc;
- char *url = NULL, *dirspec, *updpath;
- char *path;
+ char *url = NULL, *dirspec, *updpath, *path;
char *typetry[] = {"ext3", "ext2", "vfat", NULL};
char **type;
@@ -173,75 +73,37 @@ static char * setupIsoImages(char * device, char * dirName, char * location) {
if (!type)
return NULL;
- if (FL_STAGE2(flags)) {
- rc = asprintf(&dirspec, "/mnt/isodir%.*s", (int) (strrchr(dirName, '/') - dirName), dirName);
- rc = asprintf(&path, "/mnt/isodir%s", dirName);
- } else {
- if (*dirName == '/')
- rc = asprintf(&dirspec, "/mnt/isodir%s", dirName);
- else
- rc = asprintf(&dirspec, "/mnt/isodir/%s", dirName);
-
- path = validIsoImages(dirspec, 0, 1);
- }
+ rc = asprintf(&dirspec, "/mnt/isodir%.*s", (int) (strrchr(dirName, '/') - dirName), dirName);
+ rc = asprintf(&path, "/mnt/isodir%s", dirName);
if (path) {
- logMessage(INFO, "Path to valid iso is %s", path);
+ logMessage(INFO, "Path to stage2 image is %s", path);
rc = asprintf(&updpath, "%s/updates.img", dirspec);
logMessage(INFO, "Looking for updates for HD in %s", updpath);
copyUpdatesImg(updpath);
+ rc = asprintf(&updpath, "%s/product.img", dirspec);
+ logMessage(INFO, "Looking for product for HD in %s", updpath);
+ copyProductImg(updpath);
+
+ rc = mountStage2(path);
+
free(updpath);
free(dirspec);
+ free(path);
- if (FL_STAGE2(flags)) {
- if (!copyFile(path, "/tmp/stage2.img")) {
- rc = mountStage2("/tmp/stage2.img");
- umount("/mnt/isodir");
- free(path);
-
- if (rc) {
- umountLoopback("/mnt/runtime", "/dev/loop0");
- flags &= ~LOADER_FLAGS_STAGE2;
- goto err;
- } else {
- rc = asprintf(&url, "hd:%s:%s:/%s",
- device,
- *type, dirName ? dirName : ".");
- return url;
- }
- }
- else {
- free(path);
- umount("/mnt/isodir");
- flags &= ~LOADER_FLAGS_STAGE2;
- goto err;
- }
- }
-
- rc = mountLoopback(path, "/mnt/source", "/dev/loop1");
- if (!rc) {
- /* This code is for copying small stage2 into ram */
- /* and mounting */
- rc = loadHDImages("/mnt/source", "/", "/dev/loop0",
- "/mnt/runtime", location);
- umountLoopback("/mnt/source", "/dev/loop1");
-
- if (rc) {
- umount("/mnt/isodir");
- free(path);
- goto err;
- } else {
- queryIsoMediaCheck(path);
- free(path);
- rc = asprintf(&url, "hd:%s:%s:/%s", device,
- *type, dirName ? dirName : ".");
- return url;
- }
+ if (rc) {
+ umountLoopback("/mnt/runtime", "/dev/loop0");
+ goto err;
+ } else {
+ rc = asprintf(&url, "hd:%s:%s:/%s", device, *type,
+ dirName ? dirName : ".");
+ return url;
}
} else {
free(dirspec);
+ free(path);
if (rc) {
umount("/mnt/isodir");
@@ -277,18 +139,18 @@ char * mountHardDrive(struct installMethod * method,
char * dir = strdup("");
char * tmpDir;
char * url = NULL;
- char * buf;
+ char * buf, *stage2img;
int numPartitions;
char **partition_list;
char *selpart;
char *kspartition, *ksdirectory;
- /* handle kickstart data first if available */
+ /* handle kickstart/stage2= data first if available */
if (loaderData->method == METHOD_HD && loaderData->stage2Data) {
kspartition = ((struct hdInstallData *)loaderData->stage2Data)->partition;
ksdirectory = ((struct hdInstallData *)loaderData->stage2Data)->directory;
- logMessage(INFO, "partition is %s, dir is %s", kspartition, ksdirectory);
+ logMessage(INFO, "partition is %s, dir is %s", kspartition, ksdirectory);
/* if exist, duplicate */
if (kspartition)
@@ -350,20 +212,20 @@ char * mountHardDrive(struct installMethod * method,
continue;
}
- /* now find out which partition has the hard drive install images */
+ /* now find out which partition has the stage2 image*/
rc = asprintf(&buf, _("What partition and directory on that "
- "partition hold the CD (iso9660) images "
- "for %s? If you don't see the disk drive "
- "you're using listed here, press F2 "
- "to configure additional devices."),
+ "partition hold the installation images "
+ "for %s? If you don't see the disk drive "
+ "you're using listed here, press F2 to "
+ "configure additional devices."),
getProductName());
text = newtTextboxReflowed(-1, -1, buf, 62, 5, 5, 0);
free(buf);
-
+
listbox = newtListbox(-1, -1, numPartitions > 5 ? 5 : numPartitions,
NEWT_FLAG_RETURNEXIT |
(numPartitions > 5 ? NEWT_FLAG_SCROLL : 0));
-
+
for (i = 0; i < numPartitions; i++)
newtListboxAppendEntry(listbox,partition_list[i],partition_list[i]);
@@ -391,7 +253,7 @@ char * mountHardDrive(struct installMethod * method,
NEWT_GRID_EMPTY);
buttons = newtButtonBar(_("OK"), &okay, _("Back"), &back, NULL);
-
+
grid = newtCreateGrid(1, 4);
newtGridSetField(grid, 0, 0, NEWT_GRID_COMPONENT, text,
0, 0, 0, 1, 0, 0);
@@ -401,9 +263,9 @@ char * mountHardDrive(struct installMethod * method,
0, 0, 0, 1, 0, 0);
newtGridSetField(grid, 0, 3, NEWT_GRID_SUBGRID, buttons,
0, 0, 0, 0, 0, NEWT_GRID_FLAG_GROWX);
-
+
newtGridWrappedWindow(grid, _("Select Partition"));
-
+
form = newtForm(NULL, NULL, 0);
newtFormAddHotKey(form, NEWT_KEY_F2);
newtFormAddHotKey(form, NEWT_KEY_F12);
@@ -414,7 +276,7 @@ char * mountHardDrive(struct installMethod * method,
newtFormRun(form, &es);
selpart = newtListboxGetCurrent(listbox);
-
+
free(dir);
if (tmpDir && *tmpDir) {
/* Protect from form free. */
@@ -422,7 +284,7 @@ char * mountHardDrive(struct installMethod * method,
} else {
dir = strdup("");
}
-
+
newtFormDestroy(form);
newtPopWindow();
@@ -437,7 +299,17 @@ char * mountHardDrive(struct installMethod * method,
}
logMessage(INFO, "partition %s selected", selpart);
-
+
+ /* The user-provided dir points at a repo instead of a stage2
+ * image, so we have to fix that up now.
+ */
+ if (totalMemory() < GUI_STAGE2_RAM)
+ stage2img = "minstg2.img";
+ else
+ stage2img = "stage2.img";
+
+ rc = asprintf(&dir, "%s/%s", dir, stage2img);
+
url = setupIsoImages(selpart, dir, location);
if (!url) {
newtWinMessage(_("Error"), _("OK"),
--
1.5.5.1
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]