summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mdk-stage1/cdrom.c4
-rw-r--r--mdk-stage1/disk.c55
-rw-r--r--mdk-stage1/network.c2
-rw-r--r--mdk-stage1/stage1.h2
4 files changed, 42 insertions, 21 deletions
diff --git a/mdk-stage1/cdrom.c b/mdk-stage1/cdrom.c
index d5f8aafa3..1c400726d 100644
--- a/mdk-stage1/cdrom.c
+++ b/mdk-stage1/cdrom.c
@@ -51,7 +51,7 @@ static enum return_type try_with_device(char *dev_name)
return results;
}
- if (access("/tmp/image/Mandrake/mdkinst", R_OK)) {
+ if (access("/tmp/image" LIVE_LOCATION, R_OK)) {
enum return_type results;
umount("/tmp/image");
results = ask_yes_no("That CDROM disc does not seem to be a " DISTRIB_NAME " Installation CDROM.\nRetry with another disc?");
@@ -66,7 +66,7 @@ static enum return_type try_with_device(char *dev_name)
load_ramdisk(); /* we don't care about return code, we'll do it live if we failed */
if (IS_RESCUE)
- umount("/tmp/image"); /* TOCHECK */
+ umount("/tmp/image");
method_name = strdup("cdrom");
return RETURN_OK;
diff --git a/mdk-stage1/disk.c b/mdk-stage1/disk.c
index efe569e2a..2465e7442 100644
--- a/mdk-stage1/disk.c
+++ b/mdk-stage1/disk.c
@@ -89,7 +89,8 @@ static enum return_type try_with_device(char *dev_name)
parts[i] = NULL;
fclose(f);
- results = ask_from_list_comments("Please choose the partition where is copied the " DISTRIB_NAME " Distribution.", parts, parts_comments, &choice);
+ results = ask_from_list_comments("Please choose the partition where is copied the " DISTRIB_NAME " Distribution.",
+ parts, parts_comments, &choice);
if (results != RETURN_OK)
return results;
@@ -103,9 +104,8 @@ static enum return_type try_with_device(char *dev_name)
return try_with_device(dev_name);
}
- results = ask_from_entries("Please enter the directory containing the " DISTRIB_NAME " Distribution.",
- questions_location, &answers_location, 24);
- if (results != RETURN_OK) {
+ if (ask_from_entries("Please enter the directory containing the " DISTRIB_NAME " Distribution.",
+ questions_location, &answers_location, 24) != RETURN_OK) {
umount("/tmp/disk");
return try_with_device(dev_name);
}
@@ -124,27 +124,46 @@ static enum return_type try_with_device(char *dev_name)
unlink("/tmp/image");
symlink(location_full, "/tmp/image");
- if (access("/tmp/image/Mandrake/mdkinst", R_OK)) {
- error_message("I can't find the " DISTRIB_NAME " Distribution in the specified directory.\n"
- "Here's a short extract of the files in the directory:\n"
- "%s", list_directory("/tmp/image"));
- if (umount("/tmp/disk"))
- log_message("umount failed");
- unlink("/tmp/image");
- return try_with_device(dev_name);
- }
-
- log_message("found the " DISTRIB_NAME " Installation, good news!");
-
- if (IS_SPECIAL_STAGE2) {
+ if (IS_SPECIAL_STAGE2 || ramdisk_possible()) {
+ /* RAMDISK install */
+ if (access("/tmp/image" RAMDISK_LOCATION, R_OK)) {
+ error_message("I can't find the " DISTRIB_NAME " Distribution in the specified directory. "
+ "(I need the directory " RAMDISK_LOCATION ")\n"
+ "Here's a short extract of the files in the directory:\n"
+ "%s", list_directory("/tmp/image"));
+ umount("/tmp/disk");
+ unlink("/tmp/image");
+ return try_with_device(dev_name);
+ }
if (load_ramdisk() != RETURN_OK) {
error_message("Could not load program into memory");
return try_with_device(dev_name);
}
+ } else {
+ /* LIVE install */
+ char p;
+ if (access("/tmp/image" LIVE_LOCATION, R_OK)) {
+ error_message("I can't find the " DISTRIB_NAME " Distribution in the specified directory. "
+ "(I need the directory " LIVE_LOCATION ")\n"
+ "Here's a short extract of the files in the directory:\n"
+ "%s", list_directory("/tmp/image"));
+ umount("/tmp/disk");
+ unlink("/tmp/image");
+ return try_with_device(dev_name);
+ }
+ if (readlink("/tmp/image" LIVE_LOCATION "/usr/bin/runinstall2", &p, 1) != 1) {
+ error_message("The " DISTRIB_NAME " Distribution seems to be copied on a Windows partition. "
+ "You need more memory to perform an installation from a Windows partition. "
+ "Another solution if to copy the " DISTRIB_NAME " Distribution on a Linux partition.");
+ umount("/tmp/disk");
+ unlink("/tmp/image");
+ return try_with_device(dev_name);
+ }
+ log_message("found the " DISTRIB_NAME " Installation, good news!");
}
if (IS_RESCUE)
- umount("/tmp/image"); /* TOCHECK */
+ umount("/tmp/image");
method_name = strdup("disk");
return RETURN_OK;
diff --git a/mdk-stage1/network.c b/mdk-stage1/network.c
index 4c67bd77b..91e954508 100644
--- a/mdk-stage1/network.c
+++ b/mdk-stage1/network.c
@@ -602,7 +602,7 @@ enum return_type nfs_prepare(void)
}
if (IS_RESCUE)
- umount("/tmp/image"); /* TOCHECK */
+ umount("/tmp/image");
method_name = strdup("nfs");
return RETURN_OK;
diff --git a/mdk-stage1/stage1.h b/mdk-stage1/stage1.h
index 210664074..ad96e32c6 100644
--- a/mdk-stage1/stage1.h
+++ b/mdk-stage1/stage1.h
@@ -48,5 +48,7 @@ extern char * method_name;
void fatal_error(char *msg);
+#define LIVE_LOCATION "/Mandrake/mdkinst"
+#define RAMDISK_LOCATION "/Mandrake/base"
#endif