George Dunlap
2012-Apr-26 14:26 UTC
[PATCH 0 of 3] tools: Move bootloaders to libexec directory
pygrub and xenpvnetboot are meant to be run by tools, and not by the user, and thus should be in /usr/lib/xen/bin rather than /usr/bin. This patch series: * Causes libxl to look in the libexec dir if a full path is not specified * Moves pygrub and xenpvnetboot into the libexec dir * For compatibility with existing configs, puts a link to pygrub in /usr/bin * Warns the user that /usr/bin/pygrub is deprecated
George Dunlap
2012-Apr-26 14:26 UTC
[PATCH 1 of 3] libxl: Look for bootloader in libexec path
If the full path for a bootloader (such as pygrub or xenpvnetboot) is not
given, look for it in the libexec path.
Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
diff -r b4cbf273b1cb -r b810908dea7d tools/libxl/libxl_bootloader.c
--- a/tools/libxl/libxl_bootloader.c Wed Feb 29 16:30:34 2012 +0000
+++ b/tools/libxl/libxl_bootloader.c Thu Apr 26 15:09:35 2012 +0100
@@ -333,6 +333,7 @@ int libxl_run_bootloader(libxl_ctx *ctx,
char tempdir_template[] = "/var/run/libxl/bl.XXXXXX";
char *tempdir;
+ const char *bootloader = NULL;
char *dom_console_xs_path;
char dom_console_slave_tty_path[PATH_MAX];
@@ -397,6 +398,13 @@ int libxl_run_bootloader(libxl_ctx *ctx,
goto out_close;
}
+ bootloader = libxl__abs_path(gc, info->u.pv.bootloader,
+ libxl__libexec_path());
+ if ( bootloader == NULL ) {
+ rc = ERROR_NOMEM;
+ goto out_close;
+ }
+
/*
* We need to present the bootloader''s tty as a pty slave that
xenconsole
* can access. Since the bootloader itself needs a pty slave,
@@ -417,7 +425,7 @@ int libxl_run_bootloader(libxl_ctx *ctx,
dom_console_xs_path = libxl__sprintf(gc, "%s/console/tty",
libxl__xs_get_dompath(gc, domid));
libxl__xs_write(gc, XBT_NULL, dom_console_xs_path, "%s",
dom_console_slave_tty_path);
- pid = fork_exec_bootloader(&bootloader_fd, info->u.pv.bootloader,
args);
+ pid = fork_exec_bootloader(&bootloader_fd, bootloader, args);
if (pid < 0) {
goto out_close;
}
George Dunlap
2012-Apr-26 14:26 UTC
[PATCH 2 of 3] tools: Install pv bootloaders in libexec rather than /usr/bin
pygrub and xenpvnetboot are meant to be run by tools, and not by the user, and thus should be in /usr/lib/xen/bin rather than /usr/bin. Because most config files will still have an absolute path pointing to /usr/bin/pygrub, make a symbolic link that we will deprecate. diff -r b810908dea7d -r 2783a97c5d5d tools/misc/Makefile --- a/tools/misc/Makefile Thu Apr 26 15:09:35 2012 +0100 +++ b/tools/misc/Makefile Thu Apr 26 15:23:56 2012 +0100 @@ -18,7 +18,7 @@ SUBDIRS-$(CONFIG_LOMOUNT) += lomount SUBDIRS-$(CONFIG_MINITERM) += miniterm SUBDIRS := $(SUBDIRS-y) -INSTALL_BIN-y := xencons xenpvnetboot +INSTALL_BIN-y := xencons INSTALL_BIN-$(CONFIG_X86) += xen-detect INSTALL_BIN := $(INSTALL_BIN-y) @@ -27,6 +27,9 @@ INSTALL_SBIN-$(CONFIG_X86) += xen-hvmctx INSTALL_SBIN-$(CONFIG_MIGRATE) += xen-hptool INSTALL_SBIN := $(INSTALL_SBIN-y) +INSTALL_PRIVBIN-y := xenpvnetboot +INSTALL_PRIVBIN := $(INSTALL_PRIVBIN-y) + # Include configure output (config.h) to headers search path CFLAGS += -I$(XEN_ROOT)/tools @@ -41,8 +44,10 @@ build: $(TARGETS) install: build $(INSTALL_DIR) $(DESTDIR)$(BINDIR) $(INSTALL_DIR) $(DESTDIR)$(SBINDIR) + $(INSTALL_DIR) $(DESTDIR)$(PRIVATE_BINDIR) $(INSTALL_PYTHON_PROG) $(INSTALL_BIN) $(DESTDIR)$(BINDIR) $(INSTALL_PYTHON_PROG) $(INSTALL_SBIN) $(DESTDIR)$(SBINDIR) + $(INSTALL_PYTHON_PROG) $(INSTALL_PRIVBIN) $(DESTDIR)$(PRIVATE_BINDIR) set -e; for d in $(SUBDIRS); do $(MAKE) -C $$d install-recurse; done .PHONY: clean diff -r b810908dea7d -r 2783a97c5d5d tools/pygrub/Makefile --- a/tools/pygrub/Makefile Thu Apr 26 15:09:35 2012 +0100 +++ b/tools/pygrub/Makefile Thu Apr 26 15:23:56 2012 +0100 @@ -11,9 +11,11 @@ build: .PHONY: install install: all CC="$(CC)" CFLAGS="$(CFLAGS)" $(PYTHON) setup.py install \ - $(PYTHON_PREFIX_ARG) --root="$(DESTDIR)" --force - $(INSTALL_PYTHON_PROG) src/pygrub $(DESTDIR)/$(BINDIR)/pygrub + $(PYTHON_PREFIX_ARG) --root="$(DESTDIR)" \ + --install-scripts=$(DESTDIR)/$(PRIVATE_BINDIR) --force + $(INSTALL_PYTHON_PROG) src/pygrub $(DESTDIR)/$(PRIVATE_BINDIR)/pygrub $(INSTALL_DIR) $(DESTDIR)/var/run/xend/boot + ln -sf $(PRIVATE_BINDIR)/pygrub $(DESTDIR)/$(BINDIR) .PHONY: clean clean:
George Dunlap
2012-Apr-26 14:26 UTC
[PATCH 3 of 3] libxl: Warn that /usr/bin/pygrub is deprecated
Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
diff -r 2783a97c5d5d -r 1e09187be21d tools/libxl/libxl_bootloader.c
--- a/tools/libxl/libxl_bootloader.c Thu Apr 26 15:23:56 2012 +0100
+++ b/tools/libxl/libxl_bootloader.c Thu Apr 26 15:23:56 2012 +0100
@@ -15,6 +15,7 @@
#include "libxl_osdeps.h" /* must come before any other headers */
#include <termios.h>
+#include <string.h>
#include "libxl_internal.h"
@@ -398,6 +399,11 @@ int libxl_run_bootloader(libxl_ctx *ctx,
goto out_close;
}
+ if ( !strncmp(info->u.pv.bootloader, "/usr/bin/pygrub", 20) )
+ LIBXL__LOG(ctx, LIBXL__LOG_WARNING,
+ "WARNING:
bootloader=''/usr/bin/pygrub'' " \
+ "is deprecated; use
bootloader=''pygrub'' instead");
+
bootloader = libxl__abs_path(gc, info->u.pv.bootloader,
libxl__libexec_path());
if ( bootloader == NULL ) {