Make upgrade potentially a little less interactive.
Add and document new loadConfig function (sort of like a script #include). Make TCP/IP setup far less chatty when it doesn't need to be.
This commit is contained in:
parent
6514ad5540
commit
321a8d519a
@ -4,7 +4,7 @@
|
||||
* This is probably the last program in the `sysinstall' line - the next
|
||||
* generation being essentially a complete rewrite.
|
||||
*
|
||||
* $Id: dispatch.c,v 1.20 1997/07/16 05:22:40 jkh Exp $
|
||||
* $Id: dispatch.c,v 1.21 1997/08/11 13:08:18 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -39,7 +39,8 @@
|
||||
|
||||
static int _shutdown(dialogMenuItem *unused);
|
||||
static int _systemExecute(dialogMenuItem *unused);
|
||||
|
||||
static int _loadConfig(dialogMenuItem *unused);
|
||||
|
||||
static struct _word {
|
||||
char *name;
|
||||
int (*handler)(dialogMenuItem *self);
|
||||
@ -82,6 +83,7 @@ static struct _word {
|
||||
{ "installFixitFloppy", installFixitFloppy },
|
||||
{ "installFilesystems", installFilesystems },
|
||||
{ "installVarDefaults", installVarDefaults },
|
||||
{ "loadConfig", _loadConfig },
|
||||
{ "mediaSetCDROM", mediaSetCDROM },
|
||||
{ "mediaSetFloppy", mediaSetFloppy },
|
||||
{ "mediaSetDOS", mediaSetDOS },
|
||||
@ -140,6 +142,35 @@ _systemExecute(dialogMenuItem *unused)
|
||||
return DITEM_FAILURE;
|
||||
}
|
||||
|
||||
static int
|
||||
_loadConfig(dialogMenuItem *unused)
|
||||
{
|
||||
FILE *fp;
|
||||
char *cp, buf[BUFSIZ];
|
||||
int i = DITEM_SUCCESS;
|
||||
|
||||
cp = variable_get("file");
|
||||
if ((!cp || (fp = fopen(cp, "r")) == NULL) &&
|
||||
(fp = fopen("install.cfg", "r")) == NULL &&
|
||||
(fp = fopen("/stand/install.cfg", "r")) == NULL &&
|
||||
(fp = fopen("/tmp/install.cfg", "r")) == NULL) {
|
||||
msgConfirm("Unable to locate an install.cfg file in $CWD, /stand or /tmp.");
|
||||
i = DITEM_FAILURE;
|
||||
}
|
||||
else {
|
||||
variable_set2(VAR_NONINTERACTIVE, "YES");
|
||||
while (fgets(buf, sizeof buf, fp)) {
|
||||
if ((i = DITEM_STATUS(dispatchCommand(buf))) != DITEM_SUCCESS) {
|
||||
msgDebug("Command `%s' failed - rest of script aborted.\n", buf);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
variable_unset(VAR_NONINTERACTIVE);
|
||||
return i;
|
||||
}
|
||||
|
||||
/* For a given string, call it or spit out an undefined command diagnostic */
|
||||
int
|
||||
dispatchCommand(char *str)
|
||||
|
@ -4,7 +4,7 @@
|
||||
* This is probably the last program in the `sysinstall' line - the next
|
||||
* generation being essentially a complete rewrite.
|
||||
*
|
||||
* $Id: installUpgrade.c,v 1.48 1997/04/28 10:31:14 jkh Exp $
|
||||
* $Id: installUpgrade.c,v 1.49 1997/05/09 07:44:19 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -45,6 +45,8 @@
|
||||
#include <unistd.h>
|
||||
#include <sys/mount.h>
|
||||
|
||||
static int installUpgradeNonInteractive(dialogMenuItem *self);
|
||||
|
||||
typedef struct _hitList {
|
||||
enum { JUST_COPY, CALL_HANDLER } action ;
|
||||
char *name;
|
||||
@ -153,6 +155,9 @@ installUpgrade(dialogMenuItem *self)
|
||||
char *saved_etc;
|
||||
Boolean extractingBin = TRUE;
|
||||
|
||||
if (variable_get(VAR_NONINTERACTIVE))
|
||||
return installUpgradeNonInteractive(self);
|
||||
|
||||
variable_set2(SYSTEM_STATE, "upgrade");
|
||||
systemDisplayHelp("upgrade");
|
||||
|
||||
@ -276,7 +281,7 @@ installUpgrade(dialogMenuItem *self)
|
||||
|
||||
if (saved_etc) {
|
||||
msgNotify("Preserving /etc directory..");
|
||||
if (vsystem("tar -cf - -C /etc . | tar -xpf - -C %s", saved_etc))
|
||||
if (vsystem("tar -cBpf - -C /etc . | tar -xBpf - -C %s", saved_etc))
|
||||
if (msgYesNo("Unable to backup your /etc into %s.\n"
|
||||
"Do you want to continue anyway?", saved_etc) != 0)
|
||||
return DITEM_FAILURE | DITEM_RESTORE;
|
||||
@ -351,3 +356,134 @@ installUpgrade(dialogMenuItem *self)
|
||||
"the new system, just exit the installation.");
|
||||
return DITEM_SUCCESS | DITEM_REDRAW;
|
||||
}
|
||||
|
||||
static int
|
||||
installUpgradeNonInteractive(dialogMenuItem *self)
|
||||
{
|
||||
char *saved_etc;
|
||||
Boolean extractingBin = TRUE;
|
||||
|
||||
variable_set2(SYSTEM_STATE, "upgrade");
|
||||
|
||||
/* Make sure at least BIN is selected */
|
||||
Dists |= DIST_BIN;
|
||||
|
||||
if (RunningAsInit) {
|
||||
Device **devs;
|
||||
int i, cnt;
|
||||
char *cp;
|
||||
|
||||
cp = variable_get(VAR_DISK);
|
||||
devs = deviceFind(cp, DEVICE_TYPE_DISK);
|
||||
cnt = deviceCount(devs);
|
||||
if (!cnt) {
|
||||
msgConfirm("No disks found! Please verify that your disk controller is being\n"
|
||||
"properly probed at boot time. See the Hardware Guide on the\n"
|
||||
"Documentation menu for clues on diagnosing this type of problem.");
|
||||
return DITEM_FAILURE;
|
||||
}
|
||||
else {
|
||||
/* Enable all the drives befor we start */
|
||||
for (i = 0; i < cnt; i++)
|
||||
devs[i]->enabled = TRUE;
|
||||
}
|
||||
|
||||
msgConfirm("OK. First, we're going to go to the disk label editor. In this editor\n"
|
||||
"you will be expected to Mount any partitions you're interested in\n"
|
||||
"upgrading. DO NOT set the Newfs flag to Y on anything in the label editor\n"
|
||||
"unless you're absolutely sure you know what you're doing! In this\n"
|
||||
"instance, you'll be using the label editor as little more than a fancy\n"
|
||||
"screen-oriented partition mounting tool.\n\n"
|
||||
"Once you're done in the label editor, press Q to return here for the next\n"
|
||||
"step.");
|
||||
|
||||
if (DITEM_STATUS(diskLabelEditor(self)) == DITEM_FAILURE) {
|
||||
msgConfirm("The disk label editor returned an error status. Upgrade operation\n"
|
||||
"aborted.");
|
||||
return DITEM_FAILURE | DITEM_RESTORE;
|
||||
}
|
||||
|
||||
/* Don't write out MBR info */
|
||||
variable_set2(DISK_PARTITIONED, "written");
|
||||
if (DITEM_STATUS(diskLabelCommit(self)) == DITEM_FAILURE) {
|
||||
msgConfirm("Not all file systems were properly mounted. Upgrade operation\n"
|
||||
"aborted.");
|
||||
variable_unset(DISK_PARTITIONED);
|
||||
return DITEM_FAILURE | DITEM_RESTORE;
|
||||
}
|
||||
|
||||
if (extractingBin) {
|
||||
msgNotify("chflags'ing old binaries - please wait.");
|
||||
(void)vsystem("chflags -R noschg /mnt/");
|
||||
}
|
||||
msgNotify("Updating /stand on root filesystem");
|
||||
(void)vsystem("find -x /stand | cpio %s -pdum /mnt", cpioVerbosity());
|
||||
|
||||
if (DITEM_STATUS(chroot("/mnt")) == DITEM_FAILURE) {
|
||||
msgConfirm("Unable to chroot to /mnt - something is wrong with the\n"
|
||||
"root partition or the way it's mounted if this doesn't work.");
|
||||
variable_unset(DISK_PARTITIONED);
|
||||
return DITEM_FAILURE | DITEM_RESTORE;
|
||||
}
|
||||
chdir("/");
|
||||
systemCreateHoloshell();
|
||||
}
|
||||
|
||||
if (!mediaVerify() || !mediaDevice->init(mediaDevice)) {
|
||||
msgNotify("Upgrade: Couldn't initialize media.");
|
||||
return DITEM_FAILURE | DITEM_RESTORE;
|
||||
}
|
||||
|
||||
saved_etc = "/usr/tmp/etc";
|
||||
Mkdir(saved_etc);
|
||||
msgNotify("Preserving /etc directory..");
|
||||
if (vsystem("tar -cpBf - -C /etc . | tar -xpBf - -C %s", saved_etc)) {
|
||||
msgNotify("Unable to backup your /etc into %s.", saved_etc);
|
||||
return DITEM_FAILURE | DITEM_RESTORE;
|
||||
}
|
||||
|
||||
if (file_readable("/kernel")) {
|
||||
msgNotify("Moving old kernel to /kernel.prev");
|
||||
system("chflags noschg /kernel && mv /kernel /kernel.prev");
|
||||
}
|
||||
|
||||
msgNotify("Beginning extraction of distributions..");
|
||||
if (DITEM_STATUS(distExtractAll(self)) == DITEM_FAILURE) {
|
||||
msgConfirm("Hmmmm. We couldn't even extract the bin distribution. This upgrade\n"
|
||||
"should be considered a failure and started from the beginning, sorry!\n"
|
||||
"The system will reboot now.");
|
||||
dialog_clear();
|
||||
systemShutdown(1);
|
||||
}
|
||||
else if (Dists) {
|
||||
if (!(Dists & DIST_BIN)) {
|
||||
msgNotify("The extraction process seems to have had some problems, but we got most\n"
|
||||
"of the essentials. We'll treat this as a warning since it may have been\n"
|
||||
"only non-essential distributions which failed to upgrade.");
|
||||
}
|
||||
else {
|
||||
msgConfirm("Hmmmm. We couldn't even extract the bin distribution. This upgrade\n"
|
||||
"should be considered a failure and started from the beginning, sorry!\n"
|
||||
"The system will reboot now.");
|
||||
dialog_clear();
|
||||
systemShutdown(1);
|
||||
}
|
||||
}
|
||||
|
||||
msgNotify("OK, now it's time to go pound on your root a little bit to create all the\n"
|
||||
"/dev entries and such that a new system expects to see. I'll also perform a\n"
|
||||
"few \"fixup\" operations to repair the effects of splatting a bin distribution\n"
|
||||
"on top of an existing system..");
|
||||
if (DITEM_STATUS(installFixup(self)) == DITEM_FAILURE) {
|
||||
msgNotify("Hmmmmm. The fixups don't seem to have been very happy.\n"
|
||||
"You may wish to examine the system a little more closely when\n"
|
||||
"it comes time to merge your /etc customizations back.");
|
||||
}
|
||||
|
||||
msgNotify("First stage of upgrade completed successfully.");
|
||||
if (vsystem("tar -cpBf - -C %s . | tar --unlink -xpBf - -C /etc", saved_etc)) {
|
||||
msgNotify("Unable to resurrect your old /etc!");
|
||||
return DITEM_FAILURE | DITEM_RESTORE;
|
||||
}
|
||||
return DITEM_SUCCESS | DITEM_REDRAW;
|
||||
}
|
||||
|
@ -22,7 +22,7 @@
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" $Id: sysinstall.8,v 1.2 1997/08/11 13:20:38 jkh Exp $
|
||||
.\" $Id: sysinstall.8,v 1.3 1997/08/18 21:10:26 jkh Exp $
|
||||
.\"
|
||||
.Dd August 9, 1997
|
||||
.Dt SYSINSTALL 8
|
||||
@ -608,6 +608,15 @@ Initialize all variables to their defaults, overriding any
|
||||
previous settings.
|
||||
.Pp
|
||||
\fBVariables:\fR None
|
||||
.It loadConfig
|
||||
Sort of like an #include statement, it allows you to load one
|
||||
configuration file from another.
|
||||
.Pp
|
||||
\fBVariables:\fR
|
||||
.Bl -tag -width indent
|
||||
.It file
|
||||
The fully pathname of the file to load.
|
||||
.El
|
||||
.It mediaSetCDROM
|
||||
Select a FreeBSD CDROM as the installation media.
|
||||
.Pp
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: tcpip.c,v 1.68 1997/06/12 09:01:38 jkh Exp $
|
||||
* $Id: tcpip.c,v 1.69 1997/06/18 05:11:37 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Gary J Palmer. All rights reserved.
|
||||
@ -156,10 +156,6 @@ tcpOpenDialog(Device *devp)
|
||||
char *tmp;
|
||||
char title[80];
|
||||
|
||||
if (!RunningAsInit) {
|
||||
if (!msgYesNo("Running multi-user, assume that the network is already configured?"))
|
||||
return DITEM_SUCCESS;
|
||||
}
|
||||
/* Initialise vars from previous device values */
|
||||
if (devp->private) {
|
||||
DevInfo *di = (DevInfo *)devp->private;
|
||||
@ -346,9 +342,15 @@ tcpDeviceSelect(void)
|
||||
cnt = deviceCount(devs);
|
||||
rval = NULL;
|
||||
|
||||
if (!cnt)
|
||||
if (!cnt) {
|
||||
msgConfirm("No network devices available!");
|
||||
else if (cnt == 1) {
|
||||
return NULL;
|
||||
}
|
||||
else if (!RunningAsInit) {
|
||||
if (!msgYesNo("Running multi-user, assume that the network is already configured?"))
|
||||
return devs[0];
|
||||
}
|
||||
if (cnt == 1) {
|
||||
if (DITEM_STATUS(tcpOpenDialog(devs[0]) == DITEM_SUCCESS))
|
||||
rval = devs[0];
|
||||
}
|
||||
|
@ -4,7 +4,7 @@
|
||||
* This is probably the last program in the `sysinstall' line - the next
|
||||
* generation being essentially a complete rewrite.
|
||||
*
|
||||
* $Id: dispatch.c,v 1.20 1997/07/16 05:22:40 jkh Exp $
|
||||
* $Id: dispatch.c,v 1.21 1997/08/11 13:08:18 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -39,7 +39,8 @@
|
||||
|
||||
static int _shutdown(dialogMenuItem *unused);
|
||||
static int _systemExecute(dialogMenuItem *unused);
|
||||
|
||||
static int _loadConfig(dialogMenuItem *unused);
|
||||
|
||||
static struct _word {
|
||||
char *name;
|
||||
int (*handler)(dialogMenuItem *self);
|
||||
@ -82,6 +83,7 @@ static struct _word {
|
||||
{ "installFixitFloppy", installFixitFloppy },
|
||||
{ "installFilesystems", installFilesystems },
|
||||
{ "installVarDefaults", installVarDefaults },
|
||||
{ "loadConfig", _loadConfig },
|
||||
{ "mediaSetCDROM", mediaSetCDROM },
|
||||
{ "mediaSetFloppy", mediaSetFloppy },
|
||||
{ "mediaSetDOS", mediaSetDOS },
|
||||
@ -140,6 +142,35 @@ _systemExecute(dialogMenuItem *unused)
|
||||
return DITEM_FAILURE;
|
||||
}
|
||||
|
||||
static int
|
||||
_loadConfig(dialogMenuItem *unused)
|
||||
{
|
||||
FILE *fp;
|
||||
char *cp, buf[BUFSIZ];
|
||||
int i = DITEM_SUCCESS;
|
||||
|
||||
cp = variable_get("file");
|
||||
if ((!cp || (fp = fopen(cp, "r")) == NULL) &&
|
||||
(fp = fopen("install.cfg", "r")) == NULL &&
|
||||
(fp = fopen("/stand/install.cfg", "r")) == NULL &&
|
||||
(fp = fopen("/tmp/install.cfg", "r")) == NULL) {
|
||||
msgConfirm("Unable to locate an install.cfg file in $CWD, /stand or /tmp.");
|
||||
i = DITEM_FAILURE;
|
||||
}
|
||||
else {
|
||||
variable_set2(VAR_NONINTERACTIVE, "YES");
|
||||
while (fgets(buf, sizeof buf, fp)) {
|
||||
if ((i = DITEM_STATUS(dispatchCommand(buf))) != DITEM_SUCCESS) {
|
||||
msgDebug("Command `%s' failed - rest of script aborted.\n", buf);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
variable_unset(VAR_NONINTERACTIVE);
|
||||
return i;
|
||||
}
|
||||
|
||||
/* For a given string, call it or spit out an undefined command diagnostic */
|
||||
int
|
||||
dispatchCommand(char *str)
|
||||
|
@ -22,7 +22,7 @@
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" $Id: sysinstall.8,v 1.2 1997/08/11 13:20:38 jkh Exp $
|
||||
.\" $Id: sysinstall.8,v 1.3 1997/08/18 21:10:26 jkh Exp $
|
||||
.\"
|
||||
.Dd August 9, 1997
|
||||
.Dt SYSINSTALL 8
|
||||
@ -608,6 +608,15 @@ Initialize all variables to their defaults, overriding any
|
||||
previous settings.
|
||||
.Pp
|
||||
\fBVariables:\fR None
|
||||
.It loadConfig
|
||||
Sort of like an #include statement, it allows you to load one
|
||||
configuration file from another.
|
||||
.Pp
|
||||
\fBVariables:\fR
|
||||
.Bl -tag -width indent
|
||||
.It file
|
||||
The fully pathname of the file to load.
|
||||
.El
|
||||
.It mediaSetCDROM
|
||||
Select a FreeBSD CDROM as the installation media.
|
||||
.Pp
|
||||
|
@ -4,7 +4,7 @@
|
||||
* This is probably the last program in the `sysinstall' line - the next
|
||||
* generation being essentially a complete rewrite.
|
||||
*
|
||||
* $Id: dispatch.c,v 1.20 1997/07/16 05:22:40 jkh Exp $
|
||||
* $Id: dispatch.c,v 1.21 1997/08/11 13:08:18 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -39,7 +39,8 @@
|
||||
|
||||
static int _shutdown(dialogMenuItem *unused);
|
||||
static int _systemExecute(dialogMenuItem *unused);
|
||||
|
||||
static int _loadConfig(dialogMenuItem *unused);
|
||||
|
||||
static struct _word {
|
||||
char *name;
|
||||
int (*handler)(dialogMenuItem *self);
|
||||
@ -82,6 +83,7 @@ static struct _word {
|
||||
{ "installFixitFloppy", installFixitFloppy },
|
||||
{ "installFilesystems", installFilesystems },
|
||||
{ "installVarDefaults", installVarDefaults },
|
||||
{ "loadConfig", _loadConfig },
|
||||
{ "mediaSetCDROM", mediaSetCDROM },
|
||||
{ "mediaSetFloppy", mediaSetFloppy },
|
||||
{ "mediaSetDOS", mediaSetDOS },
|
||||
@ -140,6 +142,35 @@ _systemExecute(dialogMenuItem *unused)
|
||||
return DITEM_FAILURE;
|
||||
}
|
||||
|
||||
static int
|
||||
_loadConfig(dialogMenuItem *unused)
|
||||
{
|
||||
FILE *fp;
|
||||
char *cp, buf[BUFSIZ];
|
||||
int i = DITEM_SUCCESS;
|
||||
|
||||
cp = variable_get("file");
|
||||
if ((!cp || (fp = fopen(cp, "r")) == NULL) &&
|
||||
(fp = fopen("install.cfg", "r")) == NULL &&
|
||||
(fp = fopen("/stand/install.cfg", "r")) == NULL &&
|
||||
(fp = fopen("/tmp/install.cfg", "r")) == NULL) {
|
||||
msgConfirm("Unable to locate an install.cfg file in $CWD, /stand or /tmp.");
|
||||
i = DITEM_FAILURE;
|
||||
}
|
||||
else {
|
||||
variable_set2(VAR_NONINTERACTIVE, "YES");
|
||||
while (fgets(buf, sizeof buf, fp)) {
|
||||
if ((i = DITEM_STATUS(dispatchCommand(buf))) != DITEM_SUCCESS) {
|
||||
msgDebug("Command `%s' failed - rest of script aborted.\n", buf);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
variable_unset(VAR_NONINTERACTIVE);
|
||||
return i;
|
||||
}
|
||||
|
||||
/* For a given string, call it or spit out an undefined command diagnostic */
|
||||
int
|
||||
dispatchCommand(char *str)
|
||||
|
@ -4,7 +4,7 @@
|
||||
* This is probably the last program in the `sysinstall' line - the next
|
||||
* generation being essentially a complete rewrite.
|
||||
*
|
||||
* $Id: installUpgrade.c,v 1.48 1997/04/28 10:31:14 jkh Exp $
|
||||
* $Id: installUpgrade.c,v 1.49 1997/05/09 07:44:19 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -45,6 +45,8 @@
|
||||
#include <unistd.h>
|
||||
#include <sys/mount.h>
|
||||
|
||||
static int installUpgradeNonInteractive(dialogMenuItem *self);
|
||||
|
||||
typedef struct _hitList {
|
||||
enum { JUST_COPY, CALL_HANDLER } action ;
|
||||
char *name;
|
||||
@ -153,6 +155,9 @@ installUpgrade(dialogMenuItem *self)
|
||||
char *saved_etc;
|
||||
Boolean extractingBin = TRUE;
|
||||
|
||||
if (variable_get(VAR_NONINTERACTIVE))
|
||||
return installUpgradeNonInteractive(self);
|
||||
|
||||
variable_set2(SYSTEM_STATE, "upgrade");
|
||||
systemDisplayHelp("upgrade");
|
||||
|
||||
@ -276,7 +281,7 @@ installUpgrade(dialogMenuItem *self)
|
||||
|
||||
if (saved_etc) {
|
||||
msgNotify("Preserving /etc directory..");
|
||||
if (vsystem("tar -cf - -C /etc . | tar -xpf - -C %s", saved_etc))
|
||||
if (vsystem("tar -cBpf - -C /etc . | tar -xBpf - -C %s", saved_etc))
|
||||
if (msgYesNo("Unable to backup your /etc into %s.\n"
|
||||
"Do you want to continue anyway?", saved_etc) != 0)
|
||||
return DITEM_FAILURE | DITEM_RESTORE;
|
||||
@ -351,3 +356,134 @@ installUpgrade(dialogMenuItem *self)
|
||||
"the new system, just exit the installation.");
|
||||
return DITEM_SUCCESS | DITEM_REDRAW;
|
||||
}
|
||||
|
||||
static int
|
||||
installUpgradeNonInteractive(dialogMenuItem *self)
|
||||
{
|
||||
char *saved_etc;
|
||||
Boolean extractingBin = TRUE;
|
||||
|
||||
variable_set2(SYSTEM_STATE, "upgrade");
|
||||
|
||||
/* Make sure at least BIN is selected */
|
||||
Dists |= DIST_BIN;
|
||||
|
||||
if (RunningAsInit) {
|
||||
Device **devs;
|
||||
int i, cnt;
|
||||
char *cp;
|
||||
|
||||
cp = variable_get(VAR_DISK);
|
||||
devs = deviceFind(cp, DEVICE_TYPE_DISK);
|
||||
cnt = deviceCount(devs);
|
||||
if (!cnt) {
|
||||
msgConfirm("No disks found! Please verify that your disk controller is being\n"
|
||||
"properly probed at boot time. See the Hardware Guide on the\n"
|
||||
"Documentation menu for clues on diagnosing this type of problem.");
|
||||
return DITEM_FAILURE;
|
||||
}
|
||||
else {
|
||||
/* Enable all the drives befor we start */
|
||||
for (i = 0; i < cnt; i++)
|
||||
devs[i]->enabled = TRUE;
|
||||
}
|
||||
|
||||
msgConfirm("OK. First, we're going to go to the disk label editor. In this editor\n"
|
||||
"you will be expected to Mount any partitions you're interested in\n"
|
||||
"upgrading. DO NOT set the Newfs flag to Y on anything in the label editor\n"
|
||||
"unless you're absolutely sure you know what you're doing! In this\n"
|
||||
"instance, you'll be using the label editor as little more than a fancy\n"
|
||||
"screen-oriented partition mounting tool.\n\n"
|
||||
"Once you're done in the label editor, press Q to return here for the next\n"
|
||||
"step.");
|
||||
|
||||
if (DITEM_STATUS(diskLabelEditor(self)) == DITEM_FAILURE) {
|
||||
msgConfirm("The disk label editor returned an error status. Upgrade operation\n"
|
||||
"aborted.");
|
||||
return DITEM_FAILURE | DITEM_RESTORE;
|
||||
}
|
||||
|
||||
/* Don't write out MBR info */
|
||||
variable_set2(DISK_PARTITIONED, "written");
|
||||
if (DITEM_STATUS(diskLabelCommit(self)) == DITEM_FAILURE) {
|
||||
msgConfirm("Not all file systems were properly mounted. Upgrade operation\n"
|
||||
"aborted.");
|
||||
variable_unset(DISK_PARTITIONED);
|
||||
return DITEM_FAILURE | DITEM_RESTORE;
|
||||
}
|
||||
|
||||
if (extractingBin) {
|
||||
msgNotify("chflags'ing old binaries - please wait.");
|
||||
(void)vsystem("chflags -R noschg /mnt/");
|
||||
}
|
||||
msgNotify("Updating /stand on root filesystem");
|
||||
(void)vsystem("find -x /stand | cpio %s -pdum /mnt", cpioVerbosity());
|
||||
|
||||
if (DITEM_STATUS(chroot("/mnt")) == DITEM_FAILURE) {
|
||||
msgConfirm("Unable to chroot to /mnt - something is wrong with the\n"
|
||||
"root partition or the way it's mounted if this doesn't work.");
|
||||
variable_unset(DISK_PARTITIONED);
|
||||
return DITEM_FAILURE | DITEM_RESTORE;
|
||||
}
|
||||
chdir("/");
|
||||
systemCreateHoloshell();
|
||||
}
|
||||
|
||||
if (!mediaVerify() || !mediaDevice->init(mediaDevice)) {
|
||||
msgNotify("Upgrade: Couldn't initialize media.");
|
||||
return DITEM_FAILURE | DITEM_RESTORE;
|
||||
}
|
||||
|
||||
saved_etc = "/usr/tmp/etc";
|
||||
Mkdir(saved_etc);
|
||||
msgNotify("Preserving /etc directory..");
|
||||
if (vsystem("tar -cpBf - -C /etc . | tar -xpBf - -C %s", saved_etc)) {
|
||||
msgNotify("Unable to backup your /etc into %s.", saved_etc);
|
||||
return DITEM_FAILURE | DITEM_RESTORE;
|
||||
}
|
||||
|
||||
if (file_readable("/kernel")) {
|
||||
msgNotify("Moving old kernel to /kernel.prev");
|
||||
system("chflags noschg /kernel && mv /kernel /kernel.prev");
|
||||
}
|
||||
|
||||
msgNotify("Beginning extraction of distributions..");
|
||||
if (DITEM_STATUS(distExtractAll(self)) == DITEM_FAILURE) {
|
||||
msgConfirm("Hmmmm. We couldn't even extract the bin distribution. This upgrade\n"
|
||||
"should be considered a failure and started from the beginning, sorry!\n"
|
||||
"The system will reboot now.");
|
||||
dialog_clear();
|
||||
systemShutdown(1);
|
||||
}
|
||||
else if (Dists) {
|
||||
if (!(Dists & DIST_BIN)) {
|
||||
msgNotify("The extraction process seems to have had some problems, but we got most\n"
|
||||
"of the essentials. We'll treat this as a warning since it may have been\n"
|
||||
"only non-essential distributions which failed to upgrade.");
|
||||
}
|
||||
else {
|
||||
msgConfirm("Hmmmm. We couldn't even extract the bin distribution. This upgrade\n"
|
||||
"should be considered a failure and started from the beginning, sorry!\n"
|
||||
"The system will reboot now.");
|
||||
dialog_clear();
|
||||
systemShutdown(1);
|
||||
}
|
||||
}
|
||||
|
||||
msgNotify("OK, now it's time to go pound on your root a little bit to create all the\n"
|
||||
"/dev entries and such that a new system expects to see. I'll also perform a\n"
|
||||
"few \"fixup\" operations to repair the effects of splatting a bin distribution\n"
|
||||
"on top of an existing system..");
|
||||
if (DITEM_STATUS(installFixup(self)) == DITEM_FAILURE) {
|
||||
msgNotify("Hmmmmm. The fixups don't seem to have been very happy.\n"
|
||||
"You may wish to examine the system a little more closely when\n"
|
||||
"it comes time to merge your /etc customizations back.");
|
||||
}
|
||||
|
||||
msgNotify("First stage of upgrade completed successfully.");
|
||||
if (vsystem("tar -cpBf - -C %s . | tar --unlink -xpBf - -C /etc", saved_etc)) {
|
||||
msgNotify("Unable to resurrect your old /etc!");
|
||||
return DITEM_FAILURE | DITEM_RESTORE;
|
||||
}
|
||||
return DITEM_SUCCESS | DITEM_REDRAW;
|
||||
}
|
||||
|
@ -22,7 +22,7 @@
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" $Id: sysinstall.8,v 1.2 1997/08/11 13:20:38 jkh Exp $
|
||||
.\" $Id: sysinstall.8,v 1.3 1997/08/18 21:10:26 jkh Exp $
|
||||
.\"
|
||||
.Dd August 9, 1997
|
||||
.Dt SYSINSTALL 8
|
||||
@ -608,6 +608,15 @@ Initialize all variables to their defaults, overriding any
|
||||
previous settings.
|
||||
.Pp
|
||||
\fBVariables:\fR None
|
||||
.It loadConfig
|
||||
Sort of like an #include statement, it allows you to load one
|
||||
configuration file from another.
|
||||
.Pp
|
||||
\fBVariables:\fR
|
||||
.Bl -tag -width indent
|
||||
.It file
|
||||
The fully pathname of the file to load.
|
||||
.El
|
||||
.It mediaSetCDROM
|
||||
Select a FreeBSD CDROM as the installation media.
|
||||
.Pp
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: tcpip.c,v 1.68 1997/06/12 09:01:38 jkh Exp $
|
||||
* $Id: tcpip.c,v 1.69 1997/06/18 05:11:37 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Gary J Palmer. All rights reserved.
|
||||
@ -156,10 +156,6 @@ tcpOpenDialog(Device *devp)
|
||||
char *tmp;
|
||||
char title[80];
|
||||
|
||||
if (!RunningAsInit) {
|
||||
if (!msgYesNo("Running multi-user, assume that the network is already configured?"))
|
||||
return DITEM_SUCCESS;
|
||||
}
|
||||
/* Initialise vars from previous device values */
|
||||
if (devp->private) {
|
||||
DevInfo *di = (DevInfo *)devp->private;
|
||||
@ -346,9 +342,15 @@ tcpDeviceSelect(void)
|
||||
cnt = deviceCount(devs);
|
||||
rval = NULL;
|
||||
|
||||
if (!cnt)
|
||||
if (!cnt) {
|
||||
msgConfirm("No network devices available!");
|
||||
else if (cnt == 1) {
|
||||
return NULL;
|
||||
}
|
||||
else if (!RunningAsInit) {
|
||||
if (!msgYesNo("Running multi-user, assume that the network is already configured?"))
|
||||
return devs[0];
|
||||
}
|
||||
if (cnt == 1) {
|
||||
if (DITEM_STATUS(tcpOpenDialog(devs[0]) == DITEM_SUCCESS))
|
||||
rval = devs[0];
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user