⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kickstart.c

📁 linux 安装程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    if ((rc=getKickstartFromBlockDevice(devices[i]->device, kspath))) {	if (rc == 3) {	    startNewt();	    newtWinMessage(_("Error"), _("OK"),			   _("Cannot find ks.cfg on boot floppy."));	}	return 1;    }    return 0;}/* given a device name (w/o '/dev' on it), try to get ks file *//* Error codes:       1 - could not create device node      2 - could not mount device as ext2, vfat, or iso9660      3 - kickstart file named path not there*/int getKickstartFromBlockDevice(char *device, char *path) {    return getFileFromBlockDevice(device, path, "/tmp/ks.cfg");}void getHostPathandLogin(char * ksSource, char **host, char ** file, char ** login, char ** password, char * ip) {    char *tmp;    *host = strdup(ksSource);    tmp = strchr(*host, '/');    if (tmp) {       *file = strdup(tmp);       *tmp = '\0';    }    else {        *file = malloc(sizeof(char *));        **file = '\0';    }    logMessage(DEBUGLVL, "getHostandPath host: |%s|", *host);    logMessage(DEBUGLVL, "getHostandPath file(1): |%s|", *file);    /* if the filename ends with / or is null, use default kickstart     * name of IP_ADDRESS-kickstart appended to *file     */    if ((*file) && (((*file)[strlen(*file) - 1] == '/') ||                    ((*file)[strlen(*file) - 1] == '\0'))) {        *file = sdupprintf("%s%s-kickstart", *file, ip);        logMessage(DEBUGLVL, "getHostandPath file(2): |%s|", *file);    }    /* Do we have a password? */    tmp = strchr(*host, '@');    if (tmp != NULL) {        *login = *host;        *tmp = '\0';        *host = tmp + 1;        tmp = strchr(*login, ':');        if (tmp != NULL) {            *password = tmp + 1;            *tmp = '\0';        } else {            *password = malloc(sizeof(char *));            **password = '\0';        }    } else {        *login = malloc(sizeof(char *));        **login = '\0';        *password = malloc(sizeof(char *));        **password = '\0';    }}void getHostandPath(char * ksSource, char **host, char ** file, char * ip) {    char *password, *login;    getHostPathandLogin (ksSource, host, file, &login, &password, ip);}static char *newKickstartLocation(char *origLocation) {    const char *location;    char *retval = NULL;    newtComponent f, okay, cancel, answer, locationEntry;    newtGrid grid, buttons;    startNewt();    locationEntry = newtEntry(-1, -1, NULL, 60, &location, NEWT_FLAG_SCROLL);    newtEntrySet(locationEntry, origLocation, 1);    /* button bar at the bottom of the window */    buttons = newtButtonBar(_("OK"), &okay, _("Cancel"), &cancel, NULL);    grid = newtCreateGrid(1, 3);    newtGridSetField(grid, 0, 0, NEWT_GRID_COMPONENT,                     newtTextboxReflowed(-1, -1, _("Unable to download the kickstart file.  Please modify the kickstart parameter below or press Cancel to proceed as an interactive installation."), 60, 0, 0, 0),                     0, 0, 0, 0, NEWT_ANCHOR_LEFT, 0);    newtGridSetField(grid, 0, 1, NEWT_GRID_COMPONENT, locationEntry,                     0, 1, 0, 0, NEWT_ANCHOR_LEFT, 0);    newtGridSetField(grid, 0, 2, NEWT_GRID_SUBGRID, buttons,                     0, 1, 0, 0, 0, NEWT_GRID_FLAG_GROWX);    f = newtForm(NULL, NULL, 0);    newtGridAddComponentsToForm(grid, f, 1);    newtGridWrappedWindow(grid, _("Error downloading kickstart file"));    newtGridFree(grid, 1);    /* run the form */    answer = newtRunForm(f);    if (answer != cancel)        retval = strdup(location);    newtFormDestroy(f);    newtPopWindow();    return retval;}void getKickstartFile(struct loaderData_s *loaderData) {    char *c;    int rc = 1;    /* Chop off the parameter name, if given. */    if (!strncmp(loaderData->ksFile, "ks=", 3))        c = loaderData->ksFile+3;    else        c = loaderData->ksFile;    while (rc != 0) {        if (!strncmp(c, "ks", 2)) {            rc = kickstartFromNfs(NULL, loaderData);            loaderData->ksFile = strdup("/tmp/ks.cfg");        } else if (!strncmp(c, "http://", 7) || !strncmp(c, "ftp://", 6)) {            rc = kickstartFromUrl(c, loaderData);            loaderData->ksFile = strdup("/tmp/ks.cfg");        } else if (!strncmp(c, "nfs:", 4)) {            rc = kickstartFromNfs(c+4, loaderData);            loaderData->ksFile = strdup("/tmp/ks.cfg");        } else if (!strncmp(c, "floppy", 6)) {            rc = kickstartFromFloppy(c);            loaderData->ksFile = strdup("/tmp/ks.cfg");        } else if (!strncmp(c, "hd:", 3)) {            rc = kickstartFromHD(c);            loaderData->ksFile = strdup("/tmp/ks.cfg");        } else if (!strncmp(c, "bd:", 3)) {            rc = kickstartFromBD(c);            loaderData->ksFile = strdup("/tmp/ks.cfg");        } else if (!strncmp(c, "cdrom", 5)) {            rc = kickstartFromCD(c);            loaderData->ksFile = strdup("/tmp/ks.cfg");        } else if (!strncmp(c, "file:", 5)) {            loaderData->ksFile = c+5;            break;        }        if (rc != 0) {            if (loaderData->ksFile != NULL)                free(loaderData->ksFile);            loaderData->ksFile = newKickstartLocation(c);            if (loaderData->ksFile != NULL)               return getKickstartFile(loaderData);            else               return;        }    }    flags |= LOADER_FLAGS_KICKSTART;    return;}static void setUpdates(struct loaderData_s * loaderData, int argc,                       char ** argv) {   if (argc == 1)      flags |= LOADER_FLAGS_UPDATES;   else if (argc == 2)      loaderData->updatessrc = strdup(argv[1]);   else      logMessage(WARNING, "updates command given with incorrect arguments");}static void setTextMode(struct loaderData_s * loaderData, int argc,                         char ** argv) {    logMessage(INFO, "kickstart forcing text mode");    flags |= LOADER_FLAGS_TEXT;    return;}static void setGraphicalMode(struct loaderData_s * loaderData, int argc,                         char ** argv) {    logMessage(INFO, "kickstart forcing graphical mode");    flags |= LOADER_FLAGS_GRAPHICAL;    return;}static void setCmdlineMode(struct loaderData_s * loaderData, int argc,                            char ** argv) {    logMessage(INFO, "kickstart forcing cmdline mode");    flags |= LOADER_FLAGS_CMDLINE;    return;}static void setSELinux(struct loaderData_s * loaderData, int argc,                        char ** argv) {    flags |= LOADER_FLAGS_SELINUX;    return;}static void setPowerOff(struct loaderData_s * loaderData, int argc,                         char ** argv) {    flags |= LOADER_FLAGS_POWEROFF;    return;}static void setHalt(struct loaderData_s * loaderData, int argc,                     char ** argv) {    flags |= LOADER_FLAGS_HALT;    return;}static void setShutdown(struct loaderData_s * loaderData, int argc,                     char ** argv) {    poptContext optCon;    int reboot = 0, halt = 0, poweroff = 0;    int rc;    struct poptOption ksOptions[] = {        { "eject", 'e', POPT_ARG_NONE, NULL, 0, NULL, NULL },        { "reboot", 'r', POPT_ARG_NONE, &reboot, 0, NULL, NULL },        { "halt", 'h', POPT_ARG_NONE, &halt, 0, NULL, NULL },        { "poweroff", 'p', POPT_ARG_NONE, &poweroff, 0, NULL, NULL },        { 0, 0, 0, 0, 0, 0, 0 }    };    optCon = poptGetContext(NULL, argc, (const char **) argv, ksOptions, 0);    if ((rc = poptGetNextOpt(optCon)) < -1) {        startNewt();        newtWinMessage(_("Kickstart Error"), _("OK"),                       _("Bad argument to shutdown kickstart method "                         "command %s: %s"),                       poptBadOption(optCon, POPT_BADOPTION_NOALIAS),                        poptStrerror(rc));        return;    }    if (poweroff)         flags |= LOADER_FLAGS_POWEROFF;    if ((!poweroff && !reboot) || (halt))        flags |= LOADER_FLAGS_HALT;    return;}static void setMediaCheck(struct loaderData_s * loaderData, int argc,                           char ** argv) {    flags |= LOADER_FLAGS_MEDIACHECK;    return;}void runKickstart(struct loaderData_s * loaderData) {    struct ksCommandNames * cmd;    int argc;    char ** argv;    logMessage(INFO, "setting up kickstart");    for (cmd = ksTable; cmd->name; cmd++) {        if ((!ksGetCommand(cmd->code, NULL, &argc, &argv)) && cmd->setupData) {            cmd->setupData(loaderData, argc, argv);        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -