summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'mdk-stage1/init.c')
-rw-r--r--mdk-stage1/init.c38
1 files changed, 28 insertions, 10 deletions
diff --git a/mdk-stage1/init.c b/mdk-stage1/init.c
index b5fb6115b..7c48f64ec 100644
--- a/mdk-stage1/init.c
+++ b/mdk-stage1/init.c
@@ -52,19 +52,15 @@ static inline long reboot(unsigned int command)
#include "config-stage1.h"
#include <linux/cdrom.h>
-#if defined(__powerpc__)
-#define TIOCSCTTY 0x540E
-#endif
-
#define BINARY_STAGE2 "/usr/bin/runinstall2"
char * env[] = {
"PATH=/usr/bin:/bin:/sbin:/usr/sbin:/mnt/sbin:/mnt/usr/sbin:/mnt/bin:/mnt/usr/bin",
- "LD_LIBRARY_PATH=/lib:/usr/lib:/mnt/lib:/mnt/usr/lib:/usr/X11R6/lib:/mnt/usr/X11R6/lib"
-#if defined(__x86_64__) || defined(__ppc64__)
- ":/lib64:/usr/lib64:/usr/X11R6/lib64:/mnt/lib64:/mnt/usr/lib64:/mnt/usr/X11R6/lib64"
+ "LD_LIBRARY_PATH=/lib:/usr/lib:/mnt/lib:/mnt/usr/lib"
+#if defined(__x86_64__)
+ ":/lib64:/usr/lib64:/mnt/lib64:/mnt/usr/lib64"
#endif
,
"HOME=/",
@@ -284,7 +280,9 @@ char* strcat(register char* s,register const char* t)
char *dest=s;
s+=strlen(s);
for (;;) {
- if (!(*s = *t)) break; ++s; ++t;
+ if (!(*s = *t))
+ break;
+ ++s; ++t;
}
return dest;
}
@@ -442,8 +440,8 @@ int create_initial_fs_symlinks(char* symlinks)
buf[strlen(buf)-1] = '\0'; // trim \n
if (sscanf(buf, "%s %s", oldpath, newpath) != 2) {
- sprintf(oldpath, "%s%s", STAGE2_LOCATION, buf);
- sprintf(newpath, "%s", buf);
+ snprintf(oldpath, sizeof(oldpath), "%s%s", STAGE2_LOCATION, buf);
+ snprintf(newpath, sizeof(newpath), "%s", buf);
}
if (lstat(newpath, &sb) == 0)
recursive_remove(newpath);
@@ -482,6 +480,12 @@ int main(int argc, char **argv)
printf("*** TESTING MODE *** (pid is %d)\n", getpid());
+ // needed for ldetect:
+ if (!testing)
+ if (mount("none", "/sys/kernel/debug", "debugfs", MS_NOSUID, "mode=0755"))
+ fatal_error("Unable to mount debugfs filesystem");
+
+
/* ignore Control-C and keyboard stop signals */
signal(SIGINT, SIG_IGN);
signal(SIGTSTP, SIG_IGN);
@@ -517,6 +521,20 @@ int main(int argc, char **argv)
if (create_initial_fs_symlinks(STAGE2_LOCATION "/usr/share/symlinks") != 0)
fatal_error("Fatal error finishing initialization (could not create symlinks).");
+ /* kernel modules and firmware is needed by stage2, so move them to the root */
+ if (rename("/usr/lib/modules", "/modules"))
+ fatal_error("Cannot rename modules folder");
+
+ if (rename("/usr/lib/firmware", "/firmware"))
+ fatal_error("Cannot rename firmware folder");
+
+ /* Add some symlinks so stage1 is still valid on it's own - not strictly needed */
+ if (symlink("/modules", "/usr/lib/modules"))
+ fatal_error("Cannot symlink modules folder");
+
+ if (symlink("/firmware", "/usr/lib/firmware"))
+ fatal_error("Cannot symlink firmware folder");
+
if (mount(STAGE2_LOCATION "/usr", "/usr", "none", MS_BIND|MS_RDONLY, NULL))
fatal_error("Unable to bind mount /usr filesystem from rescue or installer stage2");