summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Jones <pjones@redhat.com>2006-07-17 19:17:03 +0000
committerPeter Jones <pjones@redhat.com>2006-07-17 19:17:03 +0000
commit2eb6538bfbbad00abbdc5d0ad7b2ab223a9ea721 (patch)
treedeb3e12c4ca525967f865e71892bc48bff590790
parentcab88723fb2af7a518a360138a4f0b60b020bd22 (diff)
downloadanaconda-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--ChangeLog8
-rw-r--r--anaconda.spec2
-rw-r--r--loader2/Makefile6
-rw-r--r--loader2/loader.c35
4 files changed, 48 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index f63677efe..93fa40b58 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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