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

Log:
  Add support for using a livefs from a USB disk.
  
  Submitted by: randi
  Approved by:  re (kensmith)

Modified:
  head/usr.sbin/sysinstall/dispatch.c
  head/usr.sbin/sysinstall/install.c
  head/usr.sbin/sysinstall/menus.c
  head/usr.sbin/sysinstall/sysinstall.h

Modified: head/usr.sbin/sysinstall/dispatch.c
==============================================================================
--- head/usr.sbin/sysinstall/dispatch.c Wed Jul  8 06:07:23 2009        
(r195441)
+++ head/usr.sbin/sysinstall/dispatch.c Wed Jul  8 06:07:51 2009        
(r195442)
@@ -86,6 +86,7 @@ static struct _word {
     { "installFixupBase",      installFixupBase        },
     { "installFixitHoloShell", installFixitHoloShell   },
     { "installFixitCDROM",     installFixitCDROM       },
+    { "installFixitUSB",       installFixitUSB         },
     { "installFixitFloppy",    installFixitFloppy      },
     { "installFilesystems",    installFilesystems      },
     { "installVarDefaults",    installVarDefaults      },

Modified: head/usr.sbin/sysinstall/install.c
==============================================================================
--- head/usr.sbin/sysinstall/install.c  Wed Jul  8 06:07:23 2009        
(r195441)
+++ head/usr.sbin/sysinstall/install.c  Wed Jul  8 06:07:51 2009        
(r195442)
@@ -327,6 +327,33 @@ installFixitHoloShell(dialogMenuItem *se
     return DITEM_SUCCESS;
 }
 
+/*
+ * Load the live filesystem from USB media.
+ */
+int
+installFixitUSB(dialogMenuItem *self)
+{
+       if (!RunningAsInit)
+               return (DITEM_SUCCESS);
+
+       variable_set2(SYSTEM_STATE, "fixit", 0);
+
+       if (DITEM_STATUS(mediaSetUSB(NULL)) != DITEM_SUCCESS ||
+           !DEVICE_INIT(mediaDevice)) {
+               msgConfirm("No USB devices found!");
+               return (DITEM_FAILURE);
+       } else if (!file_readable("/dist/rescue/ldconfig")) {
+               msgConfirm("Unable to find a FreeBSD live filesystem.");
+               return (DITEM_FAILURE);
+       }
+
+       if (DITEM_STATUS(fixit_livefs_common(self)) == DITEM_FAILURE)
+               return (DITEM_FAILURE);
+
+       mediaClose();
+       return (DITEM_SUCCESS);
+}
+
 int
 installFixitCDROM(dialogMenuItem *self)
 {

Modified: head/usr.sbin/sysinstall/menus.c
==============================================================================
--- head/usr.sbin/sysinstall/menus.c    Wed Jul  8 06:07:23 2009        
(r195441)
+++ head/usr.sbin/sysinstall/menus.c    Wed Jul  8 06:07:51 2009        
(r195442)
@@ -2173,8 +2173,9 @@ DMenu MenuFixit = {
     "Press F1 for more detailed repair instructions",
     "fixit",
 { { "X Exit",          "Exit this menu (returning to previous)",       NULL, 
dmenuExit },
-  { "2 CDROM/DVD",     "Use the \"live\" filesystem CDROM/DVD",        NULL, 
installFixitCDROM },
-  { "3 Floppy",                "Use a floppy generated from the fixit image",  
NULL, installFixitFloppy },
-  { "4 Shell",         "Start an Emergency Holographic Shell",         NULL, 
installFixitHoloShell },
+  { "2 CDROM/DVD",     "Use the live filesystem CDROM/DVD",            NULL, 
installFixitCDROM },
+  { "3 USB",           "Use the live filesystem from a USB drive",     NULL, 
installFixitUSB },
+  { "4 Floppy",        "Use a floppy generated from the fixit image",  NULL, 
installFixitFloppy },
+  { "5 Shell",         "Start an Emergency Holographic Shell",         NULL, 
installFixitHoloShell },
   { NULL } },
 };

Modified: head/usr.sbin/sysinstall/sysinstall.h
==============================================================================
--- head/usr.sbin/sysinstall/sysinstall.h       Wed Jul  8 06:07:23 2009        
(r195441)
+++ head/usr.sbin/sysinstall/sysinstall.h       Wed Jul  8 06:07:51 2009        
(r195442)
@@ -680,6 +680,7 @@ extern int  installExpress(dialogMenuItem
 extern int     installStandard(dialogMenuItem *self);
 extern int     installFixitHoloShell(dialogMenuItem *self);
 extern int     installFixitCDROM(dialogMenuItem *self);
+extern int     installFixitUSB(dialogMenuItem *self);
 extern int     installFixitFloppy(dialogMenuItem *self);
 extern int     installFixupBase(dialogMenuItem *self);
 extern int     installFixupKernel(dialogMenuItem *self, int dists);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to