summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
authorcperciva <cperciva@FreeBSD.org>2009-07-08 06:07:51 +0000
committercperciva <cperciva@FreeBSD.org>2009-07-08 06:07:51 +0000
commita4c5e4ab3aa7e0bab4845ba6d6d5df0c9d40cf10 (patch)
tree450595b190b303ca2f2434f79e2a4947b4c0f0cb /usr.sbin
parentf9b9f0286acd8a631353e4c5c621f079ec832cd9 (diff)
downloadFreeBSD-src-a4c5e4ab3aa7e0bab4845ba6d6d5df0c9d40cf10.zip
FreeBSD-src-a4c5e4ab3aa7e0bab4845ba6d6d5df0c9d40cf10.tar.gz
Add support for using a livefs from a USB disk.
Submitted by: randi Approved by: re (kensmith)
Diffstat (limited to 'usr.sbin')
-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 bd22afd..0e4a634 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 483b26a..d00da3c 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 df54e17..9376ed1 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 9e95226..ff412c1 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);
OpenPOWER on IntegriCloud