[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[PATCH 05/10] ppc64/yaboot: add support for probing the currently installed bootloader



Changes from v1:
 * Settled on simplistic check for yaboot, but left comment on how to
   do an installation check.

Signed-off-by: Cleber Rosa <crosa redhat com>
---
 grubby.c |   38 +++++++++++++++++++++++++++++++++-----
 1 files changed, 33 insertions(+), 5 deletions(-)

diff --git a/grubby.c b/grubby.c
index b9da724..f366c42 100644
--- a/grubby.c
+++ b/grubby.c
@@ -3159,6 +3159,23 @@ int checkForExtLinux(struct grubConfig * config) {
     return checkDeviceBootloader(boot, bootSect);
 }
 
+int checkForYaboot(struct grubConfig * config) {
+    /*
+     * This is a simplistic check that we consider good enough for own puporses
+     *
+     * If we were to properly check if yaboot is *installed* we'd need to:
+     * 1) get the system boot device (LT_BOOT)
+     * 2) considering it's a raw filesystem, check if the yaboot binary matches
+     *    the content on the boot device
+     * 3) if not, copy the binary to a temporary file and run "addnote" on it
+     * 4) check again if binary and boot device contents match
+     */
+    if (!access("/etc/yaboot.conf", R_OK))
+	return 2;
+
+    return 1;
+}
+
 static char * getRootSpecifier(char * str) {
     char * idx, * rootspec = NULL;
 
@@ -3646,9 +3663,9 @@ int main(int argc, const char ** argv) {
 	{ "boot-filesystem", 0, POPT_ARG_STRING, &bootPrefix, 0,
 	    _("filestystem which contains /boot directory (for testing only)"),
 	    _("bootfs") },
-#if defined(__i386__) || defined(__x86_64__)
+#if defined(__i386__) || defined(__x86_64__) || defined (__powerpc64__)
 	{ "bootloader-probe", 0, POPT_ARG_NONE, &bootloaderProbe, 0,
-	    _("check if lilo is installed on lilo.conf boot sector") },
+	    _("check which bootloader is installed on boot sector") },
 #endif
 	{ "config-file", 'c', POPT_ARG_STRING, &grubConfig, 0,
 	    _("path to grub config file to update (\"-\" for stdin)"), 
@@ -3888,8 +3905,8 @@ int main(int argc, const char ** argv) {
     }
 
     if (bootloaderProbe) {
-	int lrc = 0, grc = 0, gr2c = 0, erc = 0;
-	struct grubConfig * lconfig, * gconfig;
+	int lrc = 0, grc = 0, gr2c = 0, erc = 0, yrc = 0;
+	struct grubConfig * lconfig, * gconfig, * yconfig;
 
 	const char *grub2config = grub2FindConfig(&grub2ConfigType);
 	if (grub2config) {
@@ -3925,12 +3942,23 @@ int main(int argc, const char ** argv) {
 		erc = checkForExtLinux(lconfig);
 	} 
 
-	if (lrc == 1 || grc == 1 || gr2c == 1) return 1;
+
+	if (!access(yabootConfigType.defaultConfig, F_OK)) {
+	    yconfig = readConfig(yabootConfigType.defaultConfig,
+				 &yabootConfigType);
+	    if (!yconfig)
+		yrc = 1;
+	    else
+	      yrc = checkForYaboot(lconfig);
+	}
+
+	if (lrc == 1 || grc == 1 || gr2c == 1 || yrc == 1) return 1;
 
 	if (lrc == 2) printf("lilo\n");
 	if (gr2c == 2) printf("grub2\n");
 	if (grc == 2) printf("grub\n");
 	if (erc == 2) printf("extlinux\n");
+	if (yrc == 2) printf("yaboot\n");
 
 	return 0;
     }
-- 
1.7.6.5


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]