aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/sysinstall
diff options
context:
space:
mode:
authorColin Percival <cperciva@FreeBSD.org>2009-07-08 06:07:51 +0000
committerColin Percival <cperciva@FreeBSD.org>2009-07-08 06:07:51 +0000
commit71b38b3c129bc0d737201031fb75cf407f4bdfb6 (patch)
tree450595b190b303ca2f2434f79e2a4947b4c0f0cb /usr.sbin/sysinstall
parente24256e54e2ebd40d324a739d8064debb3fed1fb (diff)
Add support for using a livefs from a USB disk.
Submitted by: randi Approved by: re (kensmith)
Notes
Notes: svn path=/head/; revision=195442
Diffstat (limited to 'usr.sbin/sysinstall')
-rw-r--r--usr.sbin/sysinstall/dispatch.c1
-rw-r--r--usr.sbin/sysinstall/install.c27
-rw-r--r--usr.sbin/sysinstall/menus.c7
-rw-r--r--usr.sbin/sysinstall/sysinstall.h1
4 files changed, 33 insertions, 3 deletions
diff --git a/usr.sbin/sysinstall/dispatch.c b/usr.sbin/sysinstall/dispatch.c
index bd22afd0b72e..0e4a6345da9e 100644
--- a/usr.sbin/sysinstall/dispatch.c
+++ b/usr.sbin/sysinstall/dispatch.c
@@ -86,6 +86,7 @@ static struct _word {
{ "installFixupBase", installFixupBase },
{ "installFixitHoloShell", installFixitHoloShell },
{ "installFixitCDROM", installFixitCDROM },
+ { "installFixitUSB", installFixitUSB },
{ "installFixitFloppy", installFixitFloppy },
{ "installFilesystems", installFilesystems },
{ "installVarDefaults", installVarDefaults },
diff --git a/usr.sbin/sysinstall/install.c b/usr.sbin/sysinstall/install.c
index 483b26ad253a..d00da3c8d4f6 100644
--- a/usr.sbin/sysinstall/install.c
+++ b/usr.sbin/sysinstall/install.c
@@ -327,6 +327,33 @@ installFixitHoloShell(dialogMenuItem *self)
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)
{
diff --git a/usr.sbin/sysinstall/menus.c b/usr.sbin/sysinstall/menus.c
index df54e1715685..9376ed114f9d 100644
--- a/usr.sbin/sysinstall/menus.c
+++ b/usr.sbin/sysinstall/menus.c
@@ -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 } },
};
diff --git a/usr.sbin/sysinstall/sysinstall.h b/usr.sbin/sysinstall/sysinstall.h
index 9e95226764f7..ff412c155e18 100644
--- a/usr.sbin/sysinstall/sysinstall.h
+++ b/usr.sbin/sysinstall/sysinstall.h
@@ -680,6 +680,7 @@ extern int installExpress(dialogMenuItem *self);
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);