📄 kickstart.c
字号:
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 + -