diff options
author | Colin Percival <cperciva@FreeBSD.org> | 2009-07-08 06:07:51 +0000 |
---|---|---|
committer | Colin Percival <cperciva@FreeBSD.org> | 2009-07-08 06:07:51 +0000 |
commit | 71b38b3c129bc0d737201031fb75cf407f4bdfb6 (patch) | |
tree | 450595b190b303ca2f2434f79e2a4947b4c0f0cb /usr.sbin/sysinstall | |
parent | e24256e54e2ebd40d324a739d8064debb3fed1fb (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.c | 1 | ||||
-rw-r--r-- | usr.sbin/sysinstall/install.c | 27 | ||||
-rw-r--r-- | usr.sbin/sysinstall/menus.c | 7 | ||||
-rw-r--r-- | usr.sbin/sysinstall/sysinstall.h | 1 |
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); |