From 87a10efed6a06b14ecf4bca18afac09ad7800d45 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Thu, 23 Jan 2003 22:21:06 +0000 Subject: add back support for 'linux ks' to grab server and filename from dhcp (#82404) --- loader2/kickstart.c | 5 +++-- loader2/nfsinstall.c | 24 +++++++++++++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) (limited to 'loader2') diff --git a/loader2/kickstart.c b/loader2/kickstart.c index 4fc129674..9758459f7 100644 --- a/loader2/kickstart.c +++ b/loader2/kickstart.c @@ -345,8 +345,9 @@ void getKickstartFile(struct knownDevices * kd, } else if (!strncmp(c, "ks=file:", 8)) { loaderData->ksFile = c + 8; } else if (!strcmp(c, "ks")) { - logMessage("grabbing kickstart from nfs with dhcp next-server currently unsupported"); - return; + if (kickstartFromNfs(NULL, kd, loaderData, flags)) + return; + loaderData->ksFile = strdup("/tmp/ks.cfg"); } (*flagsPtr) = (*flagsPtr) | LOADER_FLAGS_KICKSTART; diff --git a/loader2/nfsinstall.c b/loader2/nfsinstall.c index 69526ee6c..1598e362f 100644 --- a/loader2/nfsinstall.c +++ b/loader2/nfsinstall.c @@ -26,6 +26,7 @@ #include "loader.h" #include "lang.h" #include "loadermisc.h" +#include "kickstart.h" #include "log.h" #include "method.h" #include "nfsinstall.h" @@ -286,13 +287,34 @@ int kickstartFromNfs(char * url, struct knownDevices * kd, return 1; } + /* if they just did 'linux ks', they want us to figure it out from + * the dhcp/bootp information + */ + if (url == NULL) { + if (!(netCfg.dev.set & PUMP_INTFINFO_HAS_NEXTSERVER)) { + logMessage("no bootserver was found"); + return 1; + } + + if (!(netCfg.dev.set & PUMP_INTFINFO_HAS_BOOTFILE)) { + url = sdupprintf("%s:%s", inet_ntoa(netCfg.dev.nextServer), + "/kickstart/"); + logMessage("bootp: no bootfile received"); + } else { + url = sdupprintf("%s:%s", inet_ntoa(netCfg.dev.nextServer), + netCfg.dev.bootFile); + } + } + + logMessage("url is %s", url); + getHostandPath(url, &host, &path, inet_ntoa(netCfg.dev.ip)); /* nfs has to be a little bit different... split off the last part as * the file and then concatenate host + dir path */ file = strrchr(path, '/'); if (!file) { - file = "/"; + file = path; } else { *file++ ='\0'; host = sdupprintf("%s/%s", host, path); -- cgit