diff options
Diffstat (limited to 'mdk-stage1/ka.c')
| -rw-r--r-- | mdk-stage1/ka.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/mdk-stage1/ka.c b/mdk-stage1/ka.c index d3c98e2fc..7b9d98fbe 100644 --- a/mdk-stage1/ka.c +++ b/mdk-stage1/ka.c @@ -1,5 +1,5 @@ /* - * Copyright 2005 Mandrakesoft + * Copyright 2005 Mandriva * * This software may be freely redistributed under the terms of the GNU * public license. @@ -19,6 +19,7 @@ #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> +#include <unistd.h> #include "config-stage1.h" #include "frontend.h" @@ -40,31 +41,36 @@ static void my_pause(void) { read(0, &t, 1); } -static enum return_type ka_wait_for_stage2(void) +static enum return_type ka_wait_for_stage2(int count) { char * ramdisk = "/dev/ram3"; /* warning, verify that this file exists in the initrd*/ - char * ka_launch[] = { "/ka/ka-d-client", "-w","-s","getstage2","-e","(cd /tmp/stage2; tar --extract --read-full-records --same-permissions --numeric-o wner --sparse --file - )", NULL }; /* The command line for ka_launch */ - char * mkfs_launch[] = { "/sbin/mke2fs", ramdisk, NULL}; /* The mkfs command for formating the ramdisk */ + char * ka_launch[] = { "/ka/ka-d-client", "-w","-s","getstage2","-e","(cd " STAGE2_LOCATION "; tar -x -f - )", NULL }; /* The command line for ka_launch */ + char * mkfs_launch[] = { "/sbin/mke2fs", "-m", "0", ramdisk, NULL}; /* The mkfs command for formating the ramdisk */ log_message("KA: Preparing to receive stage 2...."); + wait_message("Preparing to receive stage 2"); + int pida, wait_status; if (!(pida = fork())) { /* Forking current process for running mkfs */ - // close(1); - // close(2); + //close(1); + close(2); execv(mkfs_launch[0], mkfs_launch); /* Formating the ramdisk */ printf("KA: Can't execute %s\n<press Enter>\n", mkfs_launch[0]); my_pause(); return KAERR_CANTFORK; } while (wait4(-1, &wait_status, 0, NULL) != pida) {}; /* Waiting the end of mkfs */ + remove_wait_message(); + wait_message("Mounting /dev/ram3 at %s", STAGE2_LOCATION); if (my_mount(ramdisk, STAGE2_LOCATION, "ext2", 1)) {/* Trying to mount the ramdisk */ return RETURN_ERROR; } + remove_wait_message(); log_message("KA: Waiting for stage 2...."); - wait_message("Waiting for rescue from KA server"); + wait_message("Waiting for rescue from KA server (Try %d/%d)", count, KA_MAX_RETRY); pid_t pid; /* Process ID of the child process */ pid_t wpid; /* Process ID from wait() */ int status; /* Exit status from wait() */ @@ -74,9 +80,7 @@ static enum return_type ka_wait_for_stage2(void) fprintf(stderr, "%s: Failed to fork()\n", strerror(errno)); exit(13); } else if ( pid == 0 ) { - fprintf(stderr, "%s: Failed to fork()\n", strerror(errno)); - exit(13); - } else if ( pid == 0 ) { + // close(2); execv(ka_launch[0], ka_launch); } else { // wpid = wait(&status); /* Child's exit status */ @@ -129,7 +133,7 @@ enum return_type perform_ka(void) { log_message("KA: ka_wait_for_stage2"); do { /* We are trying to get a valid stage 2 (rescue) */ - results=ka_wait_for_stage2(); + results=ka_wait_for_stage2(server_failure); if (results != RETURN_OK) { return results; } else { @@ -160,6 +164,7 @@ enum return_type perform_ka(void) { for (cpt=5; cpt>0; cpt--) { wait_message("KA server not found ! (Try %d/%d in %d sec)",server_failure,KA_MAX_RETRY,cpt); + log_message("Ka not found %d/%d", server_failure,KA_MAX_RETRY); sleep (1); } remove_wait_message(); |
