summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/stage1.c
diff options
context:
space:
mode:
authorColin Guthrie <colin@mageia.org>2013-10-19 21:30:12 +0100
committerColin Guthrie <colin@mageia.org>2013-10-29 20:29:07 +0000
commitc4321813f9f3cd4136203d52c0f20343d7722228 (patch)
treeba1cbb296d3d490142d670f88a2a76452a87829d /mdk-stage1/stage1.c
parent7213bee2f13e551bffb7754846726833e196719b (diff)
downloaddrakx-c4321813f9f3cd4136203d52c0f20343d7722228.tar
drakx-c4321813f9f3cd4136203d52c0f20343d7722228.tar.gz
drakx-c4321813f9f3cd4136203d52c0f20343d7722228.tar.bz2
drakx-c4321813f9f3cd4136203d52c0f20343d7722228.tar.xz
drakx-c4321813f9f3cd4136203d52c0f20343d7722228.zip
stage1: Move the symlink creation from stage1 to init.
In order to run stage1 we now need to do things a little differently, namely that we move the symlinking fixups into 'init' itself which we will actually call as a kind of fake switch_root implementation to avoid hacking dracut too much[1]. As we run stage1 during dracut's 'mount' phase we should not do the symlink hacks so early otherwise it will mess up the rest of the dracut initqueue processing. Currently, the initrd's /usr is nuked and then symlinked, but to allow for easier debugging I now just bind mount the stage2 /usr over the top which allows us to unmount it again easily enough if we want to go back. We no longer touch the /bin, /sbin or /lib[64] symlinks as these are relative and simply bind mounting /usr is enough to fix all of them. 1. This scheme will have to change if we eventually swtich to a systemd based dracut invocation.
Diffstat (limited to 'mdk-stage1/stage1.c')
-rw-r--r--mdk-stage1/stage1.c31
1 files changed, 0 insertions, 31 deletions
diff --git a/mdk-stage1/stage1.c b/mdk-stage1/stage1.c
index ee24bf0a1..4439b7d37 100644
--- a/mdk-stage1/stage1.c
+++ b/mdk-stage1/stage1.c
@@ -344,39 +344,8 @@ static void method_select_and_prepare(void)
}
#endif
-static enum return_type create_initial_fs_symlinks(char* symlinks)
-{
- FILE *f;
- char buf[5000];
-
- if (scall(!(f = fopen(symlinks, "rb")), "fopen"))
- return RETURN_ERROR;
- while (fgets(buf, sizeof(buf), f)) {
- char oldpath[500], newpath[500];
- 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);
- }
- recursiveRemove_if_it_exists(newpath);
- log_message("creating symlink %s -> %s", oldpath, newpath);
- if (scall(symlink(oldpath, newpath), "symlink"))
- return RETURN_ERROR;
- }
- fclose(f);
- return RETURN_OK;
-}
-
void finish_preparing(void)
{
- recursiveRemove("/init");
-
- if (create_initial_fs_symlinks(STAGE2_LOCATION "/usr/share/symlinks") != RETURN_OK)
- stg1_fatal_message("Fatal error finishing initialization.");
-
- /* /tmp/syslog is used by the second init, so it must be copied now, not in stage2 */
- /* we remove it to ensure the old one is not copied over it in stage2 */
-
#ifdef SPAWN_SHELL
if (shell_pid != 0) {
int fd;