svn commit: r195441 - head/usr.sbin/sysinstall

Colin Percival cperciva at FreeBSD.org
Wed Jul 8 06:07:24 UTC 2009


Author: cperciva
Date: Wed Jul  8 06:07:23 2009
New Revision: 195441
URL: http://svn.freebsd.org/changeset/base/195441

Log:
  Refactor code from installFixitCDROM into a new function, fixit_livefs_common.
  While doing so, improve style and reword some comments.
  
  This should not result in any functional changes, but the fixit_livefs_common
  function will be used by future code.
  
  Submitted by:	randi
  Approved by:	re (kensmith)

Modified:
  head/usr.sbin/sysinstall/install.c

Modified: head/usr.sbin/sysinstall/install.c
==============================================================================
--- head/usr.sbin/sysinstall/install.c	Wed Jul  8 06:01:37 2009	(r195440)
+++ head/usr.sbin/sysinstall/install.c	Wed Jul  8 06:07:23 2009	(r195441)
@@ -65,6 +65,7 @@ int NCpus;
 
 static void	create_termcap(void);
 static void	fixit_common(void);
+int		fixit_livefs_common(dialogMenuItem *self);
 
 #define TERMCAP_FILE	"/usr/share/misc/termcap"
 
@@ -336,9 +337,6 @@ installFixitCDROM(dialogMenuItem *self)
 	return DITEM_SUCCESS;
 
     variable_set2(SYSTEM_STATE, "fixit", 0);
-    (void)unlink("/mnt2");
-    (void)rmdir("/mnt2");
-
     need_eject = 0;
     CDROMInitQuiet = 1;
     while (1) {
@@ -363,53 +361,9 @@ installFixitCDROM(dialogMenuItem *self)
     }
     CDROMInitQuiet = 0;
 
-    /* Since the fixit code expects everything to be in /mnt2, and the CDROM mounting stuff /dist, do
-     * a little kludge dance here..
-     */
-    if (symlink("/dist", "/mnt2")) {
-	msgConfirm("Unable to symlink /mnt2 to the disc mount point.  Please report this\n"
-		   "unexpected failure to freebsd-bugs at FreeBSD.org.");
-	return DITEM_FAILURE;
-    }
-
-    /*
-     * If /tmp points to /mnt2/tmp from a previous fixit floppy session, it's
-     * not very good for us if we point it to the CDROM now.  Rather make it
-     * a directory in the root MFS then.  Experienced admins will still be
-     * able to mount their disk's /tmp over this if they need.
-     */
-    if (lstat("/tmp", &sb) == 0 && (sb.st_mode & S_IFMT) == S_IFLNK)
-	(void)unlink("/tmp");
-    Mkdir("/tmp");
-
-    /*
-     * Since setuid binaries ignore LD_LIBRARY_PATH, we indeed need the
-     * ld.so.hints file.  Fortunately, it's fairly small (~ 3 KB).
-     */
-    if (!file_readable("/var/run/ld.so.hints")) {
-	Mkdir("/var/run");
-	if (vsystem("/mnt2/rescue/ldconfig -s /mnt2/lib /mnt2/usr/lib")) {
-	    msgConfirm("Warning: ldconfig could not create the ld.so hints file.\n"
-		       "Dynamic executables from the disc likely won't work.");
-	}
-    }
+    if (DITEM_STATUS(fixit_livefs_common(self)) == DITEM_FAILURE)
+	return (DITEM_FAILURE);
 
-    /* Yet more iggly hardcoded pathnames. */
-    Mkdir("/libexec");
-    if (!file_readable("/libexec/ld.so") && file_readable("/mnt2/libexec/ld.so")) {
-	if (symlink("/mnt2/libexec/ld.so", "/libexec/ld.so"))
-	    msgDebug("Couldn't link to ld.so - not necessarily a problem for ELF\n");
-    }
-    if (!file_readable("/libexec/ld-elf.so.1")) {
-	if (symlink("/mnt2/libexec/ld-elf.so.1", "/libexec/ld-elf.so.1")) {
-	    msgConfirm("Warning: could not create the symlink for ld-elf.so.1\n"
-		       "Dynamic executables from the disc likely won't work.");
-	}
-    }
-    /* optional nicety */
-    if (!file_readable("/usr/bin/vi"))
-	symlink("/mnt2/usr/bin/vi", "/usr/bin/vi");
-    fixit_common();
     mediaClose();
     if (need_eject)
 	msgConfirm("Please remove the FreeBSD fixit CDROM/DVD now.");
@@ -552,6 +506,73 @@ fixit_common(void)
     dialog_clear();
 }
 
+/*
+ * Some path/lib setup is required for the livefs fixit image. Since there's
+ * more than one media type for livefs now, this has been broken off into it's
+ * own function.
+ */
+int
+fixit_livefs_common(dialogMenuItem *self)
+{
+	struct stat sb;
+
+	/*
+	 * USB and CDROM media get mounted to /dist, but fixit code looks in
+	 * /mnt2.
+	 */
+	unlink("/mnt2");
+	rmdir("/mnt2");
+
+	if (symlink("/dist", "/mnt2")) {
+		msgConfirm("Unable to symlink /mnt2 to the disc mount point.");
+		return (DITEM_FAILURE);
+	}
+
+	/*
+	 * If /tmp points to /mnt2/tmp from a previous fixit floppy session,
+	 * recreate it.
+	 */
+	if (lstat("/tmp", &sb) == 0 && (sb.st_mode & S_IFMT) == S_IFLNK)
+		unlink("/tmp");
+	Mkdir("/tmp");
+
+	/* Generate a new ld.so.hints */
+	if (!file_readable("/var/run/ld.so.hints")) {
+		Mkdir("/var/run");
+		if (vsystem("/mnt2/rescue/ldconfig -s /mnt2/lib "
+		    "/mnt2/usr/lib")) {
+			msgConfirm("Warning: ldconfig could not create the "
+			    "ld.so hints file.\nDynamic executables from the "
+			    "disc likely won't work.");
+		}
+	}
+
+	/* Create required libexec symlinks. */
+	Mkdir("/libexec");
+	if (!file_readable("/libexec/ld.so") &&
+	    file_readable("/mnt2/libexec/ld.so")) {
+		if (symlink("/mnt2/libexec/ld.so", "/libexec/ld.so"))
+			msgDebug("Couldn't link to ld.so\n");
+	}
+
+	if (!file_readable("/libexec/ld-elf.so.1")) {
+		if (symlink("/mnt2/libexec/ld-elf.so.1",
+		    "/libexec/ld-elf.so.1")) {
+			msgConfirm("Warning: could not create the symlink for "
+			    "ld-elf.so.1\nDynamic executables from the disc "
+			    "likely won't work.");
+		}
+	}
+
+	/* $PATH doesn't include /mnt2 by default. Create convenient symlink. */
+	if (!file_readable("/usr/bin/vi"))
+		symlink("/mnt2/usr/bin/vi", "/usr/bin/vi");
+
+	/* Shared code used by all fixit types. */
+	fixit_common();
+
+	return (DITEM_SUCCESS);
+}
 
 int
 installExpress(dialogMenuItem *self)


More information about the svn-src-head mailing list