diff options
Diffstat (limited to 'mdk-stage1/init.c')
| -rw-r--r-- | mdk-stage1/init.c | 38 |
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"); |
