diff options
author | Peter Jones <pjones@redhat.com> | 2006-07-17 19:17:03 +0000 |
---|---|---|
committer | Peter Jones <pjones@redhat.com> | 2006-07-17 19:17:03 +0000 |
commit | 2eb6538bfbbad00abbdc5d0ad7b2ab223a9ea721 (patch) | |
tree | deb3e12c4ca525967f865e71892bc48bff590790 | |
parent | cab88723fb2af7a518a360138a4f0b60b020bd22 (diff) | |
download | anaconda-2eb6538bfbbad00abbdc5d0ad7b2ab223a9ea721.tar.gz anaconda-2eb6538bfbbad00abbdc5d0ad7b2ab223a9ea721.tar.xz anaconda-2eb6538bfbbad00abbdc5d0ad7b2ab223a9ea721.zip |
- add firmware handler so I don't have to keep patching it to work with the
broken qlogic crap in the kernel.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | anaconda.spec | 2 | ||||
-rw-r--r-- | loader2/Makefile | 6 | ||||
-rw-r--r-- | loader2/loader.c | 35 |
4 files changed, 48 insertions, 3 deletions
@@ -1,3 +1,11 @@ +2006-07-17 Peter Jones <pjones@redhat.com> + + * loader2/loader.c: use nash's hotplug handler + + * loader2/Makefile: link against libnash + + * anaconda.spec: add mkinitrd-devel buildprereq + 2006-07-17 Jeremy Katz <katzj@redhat.com> * anaconda.spec: Bump version. diff --git a/anaconda.spec b/anaconda.spec index 3e28f64da..8db60a232 100644 --- a/anaconda.spec +++ b/anaconda.spec @@ -15,7 +15,7 @@ BuildPreReq: pykickstart, yum >= 2.9.2, device-mapper >= 1.01.05-3, BuildPreReq: libsepol-devel BuildPreReq: pango-devel, pirut, libXt-devel, slang-devel >= 2.0.6-2 BuildPreReq: glib2-devel >= 2.11.1-5 -BuildPreReq: libdhcp-devel >= 1.9 +BuildPreReq: libdhcp-devel >= 1.9, mkinitrd-devel Requires: rpm-python >= 4.2-0.61, rhpl >= 0.170, parted >= 1.6.3-7, booty Requires: kudzu > 1.2.0, yum >= 2.9.2, pirut >= 1.1.0 Requires: pyparted, libxml2-python, python-urlgrabber diff --git a/loader2/Makefile b/loader2/Makefile index 87ab2aeff..7cafd9434 100644 --- a/loader2/Makefile +++ b/loader2/Makefile @@ -15,6 +15,10 @@ CFLAGS += $(shell pkg-config --cflags glib-2.0) DHCP = $(shell pkg-config --libs libdhcp) CFLAGS += $(shell pkg-config --cflags libdhcp) +# nash library flags +NASH = $(shell pkg-config --libs libnash) +CFLAGS += $(shell pkg-config --cflags libnash) + SLANGLIB = -lslang NEWTLIB = -lnewt ISYSLIB = ../isys/libisys.a @@ -112,7 +116,7 @@ loader-net.o: loader.c loader: loader.o $(OBJS) $(NETOBJS) $(CC) -g $(STATIC) $(NSSFLAGS) -o $@ $^ -lpopt \ $(HWLIBS) $(ISYSLIB) $(GUNZIP) $(UNICODELIB) \ - -lresolv $(NEWTLIB) $(SLANGLIB) $(DMLIB) $(GLIB) $(DHCP) -lm + -lresolv $(NEWTLIB) $(SLANGLIB) $(DMLIB) $(GLIB) $(DHCP) $(NASH) -lm clean: rm -f *.o *~ .depend init ctype.c mkctype \ diff --git a/loader2/loader.c b/loader2/loader.c index 5f93d3ac7..4ecd3ca92 100644 --- a/loader2/loader.c +++ b/loader2/loader.c @@ -36,6 +36,8 @@ #include <syslog.h> #include <unistd.h> +#include <nash.h> + #include <sys/ioctl.h> #include <sys/types.h> #include <sys/stat.h> @@ -1186,7 +1188,7 @@ static void loaderSegvHandler(int signum) { size_t i, j; const char const * const errmsg = "loader received SIGSEGV! Backtrace:\n"; - signal(SIGSEGV, SIG_DFL); /* back to default */ + signal(signum, SIG_DFL); /* back to default */ newtFinished(); size = backtrace (array, 10); @@ -1221,10 +1223,28 @@ static int anaconda_trace_init(void) { /* set up signal handler */ signal(SIGSEGV, loaderSegvHandler); + signal(SIGABRT, loaderSegvHandler); return 0; } +int nashHotplugLogger(nashContext *nc, const nash_log_level level, + const char *fmt, va_list ap) { + FILE *f = fopen("/tmp/hotplug.log", "a+"); + int ret; + va_list apc; + + ret = fprintf(f ? f : stderr, "<%d> ", level); + va_copy(apc, ap); + if (ret > 0) + ret = vfprintf(f ? f : stderr, fmt, apc); + va_end(apc); + + if (f) + fclose(f); + return ret; +} + int main(int argc, char ** argv) { /* Very first thing, set up tracebacks and debug features. */ int rc = anaconda_trace_init(); @@ -1263,6 +1283,7 @@ int main(int argc, char ** argv) { { "virtpconsole", '\0', POPT_ARG_STRING, &virtpcon, 0, NULL, NULL }, { 0, 0, 0, 0, 0, 0, 0 } }; + nashContext *nc = nashNewContext(); /* Make sure sort order is right. */ setenv ("LC_COLLATE", "C", 1); @@ -1274,6 +1295,9 @@ int main(int argc, char ** argv) { if (!strcmp(argv[0] + strlen(argv[0]) - 5, "rmmod")) return ourRmmodCommand(argc, argv); + nashSetFirmwarePath(nc, "/firmware/:/lib/firmware/:/tmp/updates/firmware/:/tmp/product/firmware"); + nashSetLogger(nc, nashHotplugLogger); + /* now we parse command line options */ optCon = poptGetContext(NULL, argc, (const char **) argv, optionTable, 0); @@ -1299,6 +1323,7 @@ int main(int argc, char ** argv) { fprintf(f, "%d\n", getpid()); fclose(f); + nashHotplugInit(nc); /* The fstat checks disallows serial console if we're running through a pty. This is handy for Japanese. */ fstat(0, &sb); @@ -1344,6 +1369,7 @@ int main(int argc, char ** argv) { if (readModuleInfo(arg, modInfo, NULL, 0)) { fprintf(stderr, "failed to read %s\n", arg); sleep(5); + nashHotplugKill(nc); exit(1); } mlReadLoadedList(&modLoaded); @@ -1520,10 +1546,16 @@ int main(int argc, char ** argv) { setenv("LD_LIBRARY_PATH", sdupprintf("/tmp/updates:/tmp/product:/mnt/source/RHupdates:%s", LIBPATH), 1); + nashSetFirmwarePath(nc, "/firmware/:/lib/firmware/:/tmp/updates/firmware/:/tmp/product/firmware:/mnt/source/RHupdates/firmware/"); + nashHotplugKill(nc); + nashHotplugInit(nc); } else { setenv("PYTHONPATH", "/tmp/updates:/tmp/product", 1); setenv("LD_LIBRARY_PATH", sdupprintf("/tmp/updates:/tmp/product:%s", LIBPATH), 1); + nashSetFirmwarePath(nc, "/firmware/:/lib/firmware/:/tmp/updates/firmware/:/tmp/product/firmware"); + nashHotplugKill(nc); + nashHotplugInit(nc); } if (!access("/mnt/runtime/usr/lib/libunicode-lite.so.1", R_OK)) @@ -1697,6 +1729,7 @@ int main(int argc, char ** argv) { ret = fgets(buf, 256, f); pid = atoi(buf); } + nashHotplugKill(nc); kill(pid, SIGUSR1); return rc; #else |