Sync up my work for the night. This should implement ALL possible

installation methods and provide a fairly robust set of menu options.
This should also fix a few more bugs on Poul-Henning's latest gripe
list.
This commit is contained in:
Jordan K. Hubbard 1995-05-29 11:01:42 +00:00
parent d802eeef31
commit 8fdde019ad
50 changed files with 1005 additions and 464 deletions

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: cdrom.c,v 1.3 1995/05/28 03:04:46 jkh Exp $
* $Id: cdrom.c,v 1.4 1995/05/28 07:05:21 phk Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -72,6 +72,7 @@ mediaInitCDROM(Device *dev)
if (Mkdir("/cdrom", NULL))
return FALSE;
bzero(&args, sizeof(args));
args.fspec = dev->devname;
args.flags = 0;

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: command.c,v 1.8 1995/05/19 21:30:32 jkh Exp $
* $Id: command.c,v 1.9 1995/05/20 13:24:33 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -167,14 +167,16 @@ command_execute(void)
if (commandStack[i]->cmds[j].type == CMD_SHELL) {
msgNotify("Doing %s", commandStack[i]->cmds[j].ptr);
ret = vsystem((char *)commandStack[i]->cmds[j].ptr);
msgDebug("Command `%s' returns status %d\n", commandStack[i]->cmds[j].ptr, ret);
if (isDebug())
msgDebug("Command `%s' returns status %d\n", commandStack[i]->cmds[j].ptr, ret);
}
else {
/* It's a function pointer - call it with the key and the data */
func = (commandFunc)commandStack[i]->cmds[j].ptr;
msgNotify("%x: Execute(%s, %s)", func, commandStack[i]->key, commandStack[i]->cmds[j].data);
ret = (*func)(commandStack[i]->key, commandStack[i]->cmds[j].data);
msgDebug("Function @ %x returns status %d\n", commandStack[i]->cmds[j].ptr, ret);
if (isDebug())
msgDebug("Function @ %x returns status %d\n", commandStack[i]->cmds[j].ptr, ret);
}
}
}

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: config.c,v 1.11 1995/05/28 09:31:29 jkh Exp $
* $Id: config.c,v 1.12 1995/05/28 20:28:07 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -174,7 +174,7 @@ configFstab(void)
}
/* Go for the burn */
msgDebug("Generating /etc/fstab file");
msgDebug("Generating /etc/fstab file\n");
for (i = 0; i < nchunks; i++) {
fprintf(fstab, "/dev/%s\t\t\t%s\t\t%s %s %d %d\n", nameof(chunk_list[i]), mount_point(chunk_list[i]),
fstype(chunk_list[i]), fstype_short(chunk_list[i]), seq_num(chunk_list[i]),
@ -351,7 +351,7 @@ configPackages(char *str)
i = (pid == -1) ? -1 : WEXITSTATUS(pstat);
}
}
if (i != 0)
if (i != 0 && isDebug())
msgDebug("pkg_manage returns status of %d\n", i);
return 0;
}

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: devices.c,v 1.32 1995/05/27 23:52:55 jkh Exp $
* $Id: devices.c,v 1.33 1995/05/28 09:31:31 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -183,15 +183,28 @@ deviceGetAll(void)
int i;
for (i = 0; names[i]; i++) {
Chunk *c1;
Disk *d;
d = Open_Disk(names[i]);
if (!d)
msgFatal("Unable to open disk %s", names[i]);
(void)deviceRegister(names[i], names[i], d->name, DEVICE_TYPE_DISK, FALSE,
mediaInitUFS, mediaGetUFS, NULL, deviceDiskFree, d);
(void)deviceRegister(names[i], names[i], d->name, DEVICE_TYPE_DISK, FALSE, NULL, NULL, NULL, NULL, d);
msgDebug("Found a device of type disk named: %s\n", names[i]);
/* Look for existing DOS partitions to register */
for (c1 = d->chunks->part; c1; c1 = c1->next) {
if (c1->type == fat) {
Device *dev;
/* Got one! */
dev = deviceRegister(c1->name, c1->name, c1->name, DEVICE_TYPE_DOS, TRUE,
mediaInitDOS, mediaGetDOS, NULL, mediaShutdownDOS, NULL);
dev->private = c1;
msgDebug("Found a DOS partition %s on drive %s\n", c1->name, d->name);
}
}
}
free(names);
}

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: dist.c,v 1.30 1995/05/28 09:43:36 jkh Exp $
* $Id: dist.c,v 1.31 1995/05/28 20:28:11 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -250,7 +250,8 @@ distExtract(char *parent, Distribution *me)
snprintf(buf, 512, "%s/%s.tgz", path, dist);
fd = (*mediaDevice->get)(buf);
if (fd != -1) {
status = mediaExtractDist(me[i].my_name, me[i].my_dir, fd);
msgNotify("Extracting %s into %s directory...", me[i].my_name, me[i].my_dir);
status = mediaExtractDist(me[i].my_dir, fd);
if (mediaDevice->close)
(*mediaDevice->close)(mediaDevice, fd);
else
@ -260,14 +261,16 @@ distExtract(char *parent, Distribution *me)
snprintf(buf, sizeof buf, "/stand/info/%s/%s.inf", path, dist);
if (!access(buf, R_OK)) {
msgDebug("Parsing attributes file for %s\n", dist);
if (isDebug())
msgDebug("Parsing attributes file for %s\n", dist);
dist_attr = safe_malloc(sizeof(Attribs) * MAX_ATTRIBS);
if (attr_parse(&dist_attr, buf) == 0) {
msgConfirm("Cannot load information file for %s distribution!\nPlease verify that your media is valid and try again.", dist);
return FALSE;
}
msgDebug("Looking for attribute `pieces'\n");
if (isDebug())
msgDebug("Looking for attribute `pieces'\n");
tmp = attr_match(dist_attr, "pieces");
if (tmp)
numchunks = atoi(tmp);
@ -277,7 +280,8 @@ distExtract(char *parent, Distribution *me)
else
numchunks = 0;
msgDebug("Attempting to extract distribution from %u chunks.\n", numchunks);
if (isDebug())
msgDebug("Attempting to extract distribution from %u chunks.\n", numchunks);
if (numchunks < 2 ) {
snprintf(buf, 512, "%s/%s", path, dist);
@ -287,7 +291,8 @@ distExtract(char *parent, Distribution *me)
if (fd == -1) {
status = FALSE;
} else {
status = mediaExtractDist(me[i].my_name, me[i].my_dir, fd);
msgNotify("Extracting %s into %s directory...", me[i].my_name, me[i].my_dir);
status = mediaExtractDist(me[i].my_dir, fd);
if (mediaDevice->close)
(*mediaDevice->close)(mediaDevice, fd);
else
@ -296,9 +301,11 @@ distExtract(char *parent, Distribution *me)
goto done;
}
mediaExtractDistBegin(dist, me[i].my_dir, &fd2, &zpid, &cpid);
mediaExtractDistBegin(me[i].my_dir, &fd2, &zpid, &cpid);
dialog_clear();
for (chunk = 0; chunk < numchunks; chunk++) {
int n, retval;
char prompt[80];
snprintf(buf, 512, "%s/%s.%c%c", path, dist, (chunk / 26) + 'a', (chunk % 26) + 'a');
fd = (*mediaDevice->get)(buf);
@ -306,6 +313,8 @@ distExtract(char *parent, Distribution *me)
msgConfirm("failed to retreive piece file %s!\nAborting the transfer", buf);
goto punt;
}
snprintf(prompt, 80, "Extracting %s into %s directory...", me[i].my_name, me[i].my_dir);
dialog_gauge(" Progress ", prompt, 8, 10, 10, 40, (numchunks / (chunk + 1)));
while ((n = read(fd, buf, sizeof buf)) > 0) {
retval = write(fd2, buf, n);
if (retval != n)
@ -354,5 +363,6 @@ distExtract(char *parent, Distribution *me)
void
distExtractAll(void)
{
distExtract(NULL, DistTable);
while (Dists)
distExtract(NULL, DistTable);
}

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: dos.c,v 1.2 1995/05/27 23:39:28 phk Exp $
* $Id: dos.c,v 1.3 1995/05/28 03:04:54 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -69,6 +69,7 @@ mediaInitDOS(Device *dev)
if (Mkdir("/dos", NULL))
return FALSE;
bzero(&args, sizeof(args));
args.fspec = dev->devname;
args.uid = args.gid = 0;
@ -85,7 +86,10 @@ mediaGetDOS(char *file)
{
char buf[PATH_MAX];
snprintf(buf, PATH_MAX, "/dos/%s", file);
snprintf(buf, PATH_MAX, "/dos/freebsd/%s", file);
if (!access(buf, R_OK))
return open(buf, O_RDONLY);
snprintf(buf, PATH_MAX, "/dos/freebsd/dists/%s", file);
return open(buf, O_RDONLY);
}
@ -97,7 +101,8 @@ mediaShutdownDOS(Device *dev)
msgDebug("Unmounting /dos\n");
if (unmount("/dos", 0) != 0)
msgConfirm("Could not unmount the DOS partition: %s\n", strerror(errno));
msgDebug("Unmount returned\n");
if (isDebug())
msgDebug("Unmount returned\n");
DOSMounted = FALSE;
return;
}

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: floppy.c,v 1.3 1995/05/28 03:04:56 jkh Exp $
* $Id: floppy.c,v 1.4 1995/05/29 00:50:01 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -142,7 +142,6 @@ mediaGetFloppy(char *file)
char buf[PATH_MAX];
snprintf(buf, PATH_MAX, "/mnt/%s", file);
return open(buf, O_RDONLY);
}

View file

@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
* $Id: ftp.c,v 1.10 1995/05/26 19:28:01 jkh Exp $
* $Id: ftp.c,v 1.11 1995/05/27 06:19:59 phk Exp $
*
*/
@ -48,7 +48,8 @@ debug(FTP_t ftp, const char *fmt, ...)
#ifdef STANDALONE_FTP
write(ftp->fd_debug,p,strlen(p));
#else
msgDebug(p);
if (isDebug())
msgDebug(p);
#endif
}

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: ftp_strat.c,v 1.3 1995/05/27 21:18:07 jkh Exp $
* $Id: ftp_strat.c,v 1.4 1995/05/27 23:39:30 phk Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -84,13 +84,16 @@ mediaInitFTP(Device *dev)
return FALSE;
}
strncpy(url, cp, BUFSIZ);
msgDebug("Using URL `%s'\n", url);
if (isDebug())
msgDebug("Using URL `%s'\n", url);
hostname = url + 6;
if ((dir = index(hostname, '/')) != NULL)
*(dir++) = '\0';
strcpy(dev->name, hostname);
msgDebug("hostname = `%s'\n", hostname);
msgDebug("dir = `%s'\n", dir ? dir : "/");
if (isDebug()) {
msgDebug("hostname = `%s'\n", hostname);
msgDebug("dir = `%s'\n", dir ? dir : "/");
}
msgNotify("Looking up host %s..", hostname);
if ((gethostbyname(hostname) == NULL) && (inet_addr(hostname) == INADDR_NONE)) {
msgConfirm("Cannot resolve hostname `%s'! Are you sure your name server\nand/or gateway values are set properly?", hostname);
@ -98,7 +101,8 @@ mediaInitFTP(Device *dev)
}
snprintf(email, BUFSIZ, "installer@%s", my_name);
msgDebug("Using fake e-mail `%s'\n", email);
if (isDebug())
msgDebug("Using fake e-mail `%s'\n", email);
msgNotify("Logging in as anonymous.");
if ((i = FtpOpen(ftp, hostname, "anonymous", email)) != 0) {
@ -113,7 +117,8 @@ mediaInitFTP(Device *dev)
msgNotify("CD to distribution in ~ftp/%s", dir);
FtpChdir(ftp, dir);
}
msgDebug("leaving mediaInitFTP!\n");
if (isDebug())
msgDebug("leaving mediaInitFTP!\n");
ftpInitted = TRUE;
return TRUE;
}

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: install.c,v 1.65 1995/05/28 23:12:05 jkh Exp $
* $Id: install.c,v 1.66 1995/05/29 00:50:02 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -254,6 +254,10 @@ installCommit(char *str)
fclose(fp);
hostsModified = TRUE;
}
/* If there's no kernel but there is a kernel.GENERIC, link it over */
if (access("/kernel", R_OK))
vsystem("ln -f /kernel.GENERIC /kernel");
msgConfirm("Installation completed successfully.\nHit return now to go back to the main menu.");
SystemWasInstalled = TRUE;
return 0;
@ -379,7 +383,7 @@ copy_self(void)
msgConfirm("Copy returned error status of %d!", i);
/* Copy the /etc files into their rightful place */
(void)vsystem("(cd /stand; find etc) | cpio -pdmv /mnt");
(void)vsystem("cd /mnt/stand; find etc | cpio -pdmv /mnt");
}
static void loop_on_root_floppy();
@ -391,7 +395,7 @@ root_extract(void)
if (OnCDROM) {
fd = open("/floppies/root.flp", O_RDONLY);
(void)mediaExtractDist("root.flp", "/", fd);
(void)mediaExtractDist("/", fd);
return;
}
if (mediaDevice) {
@ -408,7 +412,7 @@ root_extract(void)
fd = (*mediaDevice->get)("floppies/root.flp");
if (fd != -1) {
msgNotify("Loading root floppy from %s", mediaDevice->name);
(void)mediaExtractDist("root.flp", "/", fd);
(void)mediaExtractDist("/", fd);
if (mediaDevice->close)
(*mediaDevice->close)(mediaDevice, fd);
else
@ -416,12 +420,14 @@ root_extract(void)
if (mediaDevice->shutdown)
(*mediaDevice->shutdown)(mediaDevice);
} else {
msgConfirm("Couldn't get root floppy image from %s\n, falling back to floppy.", mediaDevice->name);
if (mediaDevice->shutdown)
(*mediaDevice->shutdown)(mediaDevice);
loop_on_root_floppy();
}
break;
case DEVICE_TYPE_TAPE:
case DEVICE_TYPE_FLOPPY:
default:
loop_on_root_floppy();
@ -437,7 +443,11 @@ loop_on_root_floppy(void)
{
int fd;
fd = getRootFloppy();
if (fd != -1)
mediaExtractDist("root.flp", "/", fd);
while (1) {
fd = getRootFloppy();
if (fd != -1) {
mediaExtractDist("/", fd);
break;
}
}
}

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: media.c,v 1.20 1995/05/27 23:39:31 phk Exp $
* $Id: media.c,v 1.21 1995/05/28 03:04:58 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -164,13 +164,15 @@ int
mediaSetDOS(char *str)
{
Device **devs;
Disk *d;
Chunk *c1;
int i, cnt;
int cnt;
devs = deviceFind(NULL, DEVICE_TYPE_DOS);
cnt = deviceCount(devs);
if (cnt > 1) {
if (!cnt) {
msgConfirm("No DOS primary partitions found! This installation method is unavailable");
return 0;
}
else if (cnt > 1) {
DMenu *menu;
menu = deviceCreateMenu(&MenuMediaDOS, DEVICE_TYPE_DOS, DOSHook);
@ -179,34 +181,8 @@ mediaSetDOS(char *str)
dmenuOpenSimple(menu);
free(menu);
}
else if (cnt) {
else
mediaDevice = devs[0];
return 1;
}
else {
devs = deviceFind(NULL, DEVICE_TYPE_DISK);
if (!devs) {
msgConfirm("No disk devices found!");
return 0;
}
/* Now go chewing through looking for a DOS FAT partition */
for (i = 0; devs[i]; i++) {
d = (Disk *)devs[i]->private;
/* Now try to find a DOS partition */
for (c1 = d->chunks->part; c1; c1 = c1->next) {
if (c1->type == fat) {
/* Got one! */
mediaDevice = deviceRegister(c1->name, c1->name, c1->name, DEVICE_TYPE_DOS, TRUE,
mediaInitDOS, mediaGetDOS, NULL, mediaShutdownDOS, NULL);
mediaDevice->private = c1;
msgDebug("Found a DOS partition %s on drive %s\n", c1->name, d->name);
break;
}
}
}
}
if (!mediaDevice)
msgConfirm("No DOS primary partitions found! This installation method is unavailable");
return mediaDevice ? 1 : 0;
}
@ -280,25 +256,49 @@ mediaSetFTP(char *str)
return 1;
}
/*
* Return 0 if we successfully found and set the installation type to
* be some sort of mounted filesystem (it's also mounted at this point)
*/
int
mediaSetFS(char *str)
mediaSetUFS(char *str)
{
return 0;
static Device ufsDevice;
char *val;
val = msgGetInput(NULL, "Enter a fully qualified pathname for the directory\ncontaining the FreeBSD distribtion files:");
if (!val)
return 0;
strcpy(ufsDevice.name, "ufs");
ufsDevice.type = DEVICE_TYPE_UFS;
ufsDevice.get = mediaGetUFS;
ufsDevice.private = strdup(val);
mediaDevice = &ufsDevice;
return 1;
}
int
mediaSetNFS(char *str)
{
static Device nfsDevice;
char *val;
val = msgGetInput(NULL, "Please enter the full NFS file specification for the remote\nhost and directory containing the FreeBSD distribution files.\nThis should be in the format: hostname:/some/freebsd/dir");
if (!val)
return 0;
strcpy(nfsDevice.name, "nfs");
nfsDevice.type = DEVICE_TYPE_NFS;
nfsDevice.init = mediaInitNFS;
nfsDevice.get = mediaGetNFS;
nfsDevice.shutdown = mediaShutdownNFS;
nfsDevice.private = strdup(val);
mediaDevice = &nfsDevice;
return 1;
}
Boolean
mediaExtractDistBegin(char *distname, char *dir, int *fd, int *zpid, int *cpid)
mediaExtractDistBegin(char *dir, int *fd, int *zpid, int *cpid)
{
int i, pfd[2],qfd[2];
if (!dir)
dir = "/";
msgWeHaveOutput("Extracting %s into %s directory..", distname, dir);
Mkdir(dir, NULL);
chdir(dir);
pipe(pfd);
@ -316,7 +316,8 @@ mediaExtractDistBegin(char *distname, char *dir, int *fd, int *zpid, int *cpid)
close(qfd[1]);
close(pfd[0]);
i = execl("/stand/gunzip", "/stand/gunzip", 0);
msgDebug("/stand/gunzip command returns %d status\n", i);
if (isDebug())
msgDebug("/stand/gunzip command returns %d status\n", i);
exit(i);
}
*fd = qfd[1];
@ -335,7 +336,8 @@ mediaExtractDistBegin(char *distname, char *dir, int *fd, int *zpid, int *cpid)
dup2(1, 2);
}
i = execl("/stand/cpio", "/stand/cpio", "-iduVm", "-H", "tar", 0);
msgDebug("/stand/cpio command returns %d status\n", i);
if (isDebug())
msgDebug("/stand/cpio command returns %d status\n", i);
exit(i);
}
close(pfd[0]);
@ -351,13 +353,15 @@ mediaExtractDistEnd(int zpid, int cpid)
i = waitpid(zpid, &j, 0);
if (i < 0) { /* Don't check status - gunzip seems to return a bogus one! */
dialog_clear();
msgDebug("wait for gunzip returned status of %d!\n", i);
if (isDebug())
msgDebug("wait for gunzip returned status of %d!\n", i);
return FALSE;
}
i = waitpid(cpid, &j, 0);
if (i < 0 || WEXITSTATUS(j)) {
dialog_clear();
msgDebug("cpio returned error status of %d!\n", WEXITSTATUS(j));
if (isDebug())
msgDebug("cpio returned error status of %d!\n", WEXITSTATUS(j));
return FALSE;
}
return TRUE;
@ -365,13 +369,12 @@ mediaExtractDistEnd(int zpid, int cpid)
Boolean
mediaExtractDist(char *distname, char *dir, int fd)
mediaExtractDist(char *dir, int fd)
{
int i, j, zpid, cpid, pfd[2];
if (!dir)
dir = "/";
msgWeHaveOutput("Extracting %s into %s directory..", distname, dir);
Mkdir(dir, NULL);
chdir(dir);
@ -388,7 +391,8 @@ mediaExtractDist(char *distname, char *dir, int fd)
}
close(pfd[0]);
i = execl("/stand/gunzip", "/stand/gunzip", 0);
msgDebug("/stand/gunzip command returns %d status\n", i);
if (isDebug())
msgDebug("/stand/gunzip command returns %d status\n", i);
exit(i);
}
cpid = fork();
@ -405,7 +409,8 @@ mediaExtractDist(char *distname, char *dir, int fd)
dup2(1, 2);
}
i = execl("/stand/cpio", "/stand/cpio", "-iduVm", "-H", "tar", 0);
msgDebug("/stand/cpio command returns %d status\n", i);
if (isDebug())
msgDebug("/stand/cpio command returns %d status\n", i);
exit(i);
}
close(pfd[0]);
@ -414,13 +419,15 @@ mediaExtractDist(char *distname, char *dir, int fd)
i = waitpid(zpid, &j, 0);
if (i < 0) { /* Don't check status - gunzip seems to return a bogus one! */
dialog_clear();
msgDebug("wait for gunzip returned status of %d!\n", i);
if (isDebug())
msgDebug("wait for gunzip returned status of %d!\n", i);
return FALSE;
}
i = waitpid(cpid, &j, 0);
if (i < 0 || WEXITSTATUS(j)) {
dialog_clear();
msgDebug("cpio returned error status of %d!\n", WEXITSTATUS(j));
if (isDebug())
msgDebug("cpio returned error status of %d!\n", WEXITSTATUS(j));
return FALSE;
}
return TRUE;

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: menus.c,v 1.36 1995/05/28 23:12:07 jkh Exp $
* $Id: menus.c,v 1.37 1995/05/29 01:43:17 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -302,12 +302,14 @@ method.",
DMENU_CALL, mediaSetCDROM, 0, 0 },
{ "DOS", "Install from a DOS partition",
DMENU_CALL, mediaSetDOS, 0, 0 },
{ "File System", "Install from a UFS or NFS mounted distribution",
DMENU_CALL, mediaSetFS, 0, 0 },
{ "File System", "Install from a mounted filesystem",
DMENU_CALL, mediaSetUFS, 0, 0 },
{ "Floppy", "Install from a floppy disk set",
DMENU_CALL, mediaSetFloppy, 0, 0 },
{ "FTP", "Install from an Internet FTP server",
DMENU_CALL, mediaSetFTP, 0, 0 },
{ "NFS", "Install over NFS",
DMENU_CALL, mediaSetNFS, 0, 0 },
{ "Tape", "Install from SCSI or QIC tape",
DMENU_CALL, mediaSetTape, 0, 0 },
{ NULL } },
@ -642,7 +644,7 @@ When you're done, select Cancel",
"Press F1 for more information on these options",
"configure.hlp",
{ { "Add User", "Add users to the system",
DMENU_SYSTEM_COMMAND, "adduser", 0, 0 },
DMENU_SYSTEM_COMMAND, "adduser -silent", 0, 0 },
{ "Console", "Customize system console behavior",
DMENU_SUBMENU, &MenuSyscons, 0, 0 },
{ "Networking", "Configure additional network services",
@ -700,11 +702,11 @@ close to you to have your system time syncronized accordingly.",
DMENU_SET_VARIABLE, "ntpdate=canon.inria.fr", 0, 0 },
{ "Germany", "ntps1-{0,1,2}.uni-erlangen.de (GPS)",
DMENU_SET_VARIABLE, "ntpdate=ntps1-0.uni-erlangen.de", 0, 0 },
{ "Germany", "ntps1-0.cs.tu-berlin.de (GPS)",
{ "Germany #2", "ntps1-0.cs.tu-berlin.de (GPS)",
DMENU_SET_VARIABLE, "ntpdate=ntps1-0.cs.tu-berlin.de", 0, 0 },
{ "Japan", "clock.nc.fukuoka-u.ac.jp (GPS clock)",
DMENU_SET_VARIABLE, "ntpdate=clock.nc.fukuoka-u.ac.jp", 0, 0},
{ "Japan", "clock.tl.fukuoka-u.ac.jp (GPS clock)",
{ "Japan #2", "clock.tl.fukuoka-u.ac.jp (GPS clock)",
DMENU_SET_VARIABLE, "ntpdate=clock.tl.fukuoka-u.ac.jp", 0, 0},
{ "Netherlands", "ntp0.nl.net (GPS clock)",
DMENU_SET_VARIABLE, "ntpdate=ntp0.nl.net", 0, 0 },
@ -716,20 +718,20 @@ close to you to have your system time syncronized accordingly.",
DMENU_SET_VARIABLE, "ntpdate=swisstime.ethz.ch", 0, 0 },
{ "U.S. East Coast", "bitsy.mit.edu (WWV clock)",
DMENU_SET_VARIABLE, "ntpdate=bitsy.mit.edu", 0, 0 },
{ "U.S. East Coast", "otc1.psu.edu (WWV clock)",
{ "U.S. East Coast #2", "otc1.psu.edu (WWV clock)",
DMENU_SET_VARIABLE, "ntpdate=otc1.psu.edu", 0, 0 },
{ "U.S. West Coast", "apple.com (WWV clock)",
DMENU_SET_VARIABLE, "ntpdate=apple.com", 0, 0 },
{ "U.S. West Coast", "clepsydra.dec.com (GOES clock)",
{ "U.S. West Coast #2", "clepsydra.dec.com (GOES clock)",
DMENU_SET_VARIABLE, "ntpdate=clepsydra.dec.com", 0, 0 },
{ "U.S. West Coast", "clock.llnl.gov (WWVB clock)",
DMENU_SET_VARIABLE, "ntpdate=clock.llnl.gov", 0, 0 },
{ "U.S. West Coast #3", "clock.llnl.gov (WWVB clock)",
DMENU_SET_VARIABLE, "ntpdate=clock.llnl.gov", 0, 0 },
{ "U.S. Midwest", "ncar.ucar.edu (WWVB clock)",
DMENU_SET_VARIABLE, "ntpdate=ncar.ucar.edu", 0, 0 },
DMENU_SET_VARIABLE, "ntpdate=ncar.ucar.edu", 0, 0 },
{ "U.S. Pacific", "chantry.hawaii.net (WWV/H clock)",
DMENU_SET_VARIABLE, "ntpdate=chantry.hawaii.net", 0, 0 },
{ "U.S. Southwest", "shorty.chpc.utexas.edu (WWV clock)",
DMENU_SET_VARIABLE, "ntpdate=shorty.chpc.utexas.edu", 0, 0 },
DMENU_SET_VARIABLE, "ntpdate=shorty.chpc.utexas.edu", 0, 0 },
{ NULL } },
};
@ -738,9 +740,9 @@ DMenu MenuSyscons = {
"System Console Configuration",
"The default system console driver for FreeBSD (syscons) has a\n\
number of configuration options which may be set according to\n\
your preference. When you are done setting configuration options,\n\
select Cancel.",
"Configure your screen saver settings",
your preference.\n\n\
When you are done setting configuration options, select Cancel.",
"Configure your system console settings",
NULL,
{ { "Keymap", "Choose an alternate keyboard map",
DMENU_SUBMENU, &MenuSysconsKeymap, 0, 0 },
@ -798,9 +800,9 @@ when held down.",
NULL,
{ { "Slow", "Slow keyboard repeat rate",
DMENU_SET_VARIABLE, "keyrate=slow", 0, 0 },
{ "Normal", "\"normal\" keyboard repeat rate",
{ "Normal", "\"Normal\" keyboard repeat rate",
DMENU_SET_VARIABLE, "keyrate=normal", 0, 0 },
{ "Fast", "fast keyboard repeat rate",
{ "Fast", "Fast keyboard repeat rate",
DMENU_SET_VARIABLE, "keyrate=fast", 0, 0 },
{ "Default", "Use default keyboard repeat rate",
DMENU_SET_VARIABLE, "keyrate=NO", 0, 0 },
@ -818,11 +820,11 @@ probably enable one of these screen savers to prevent phosphor burn-in.",
NULL,
{ { "blank", "Simply blank the screen",
DMENU_SET_VARIABLE, "saver=star", 0, 0 },
{ "Green", "\"green\" power saving mode (if supported by monitor)",
{ "Green", "\"Green\" power saving mode (if supported by monitor)",
DMENU_SET_VARIABLE, "saver=snake", 0, 0 },
{ "Snake", "Draw a FreeBSD \"snake\" on your screen",
DMENU_SET_VARIABLE, "saver=snake", 0, 0 },
{ "Star", "\"twinkling stars\" effect",
{ "Star", "A \"twinkling stars\" effect",
DMENU_SET_VARIABLE, "saver=star", 0, 0 },
{ "Timeout", "Set the screen saver timeout interval",
DMENU_CALL, configSaverTimeout, 0, 0 },

View file

@ -1,7 +1,7 @@
/*
* Miscellaneous support routines..
*
* $Id: misc.c,v 1.8 1995/05/23 18:06:15 jkh Exp $
* $Id: misc.c,v 1.9 1995/05/25 01:22:19 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -183,7 +183,8 @@ Mkdir(char *ipath, void *data)
return 0;
path = strdup(ipath);
msgDebug("mkdir(%s)\n", path);
if (isDebug())
msgDebug("mkdir(%s)\n", path);
p = path;
if (p[0] == '/') /* Skip leading '/'. */
++p;
@ -198,7 +199,8 @@ Mkdir(char *ipath, void *data)
msgConfirm("Couldn't stat directory %s: %s", path, strerror(errno));
return 1;
}
msgDebug("mkdir(%s..)\n", path);
if (isDebug())
msgDebug("mkdir(%s..)\n", path);
if (mkdir(path, S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
msgConfirm("Couldn't create directory %s: %s", path,strerror(errno));
return 1;
@ -231,7 +233,9 @@ Mount(char *mountp, void *dev)
msgConfirm("Unable to make directory mountpoint for %s!", mountpoint);
return 1;
}
msgDebug("mount %s %s\n", device, mountpoint);
if (isDebug())
msgDebug("mount %s %s\n", device, mountpoint);
bzero(&ufsargs, sizeof(ufsargs));
ufsargs.fspec = device;
if (mount(MOUNT_UFS, mountpoint, 0, (caddr_t)&ufsargs) == -1) {
msgConfirm("Error mounting %s on %s : %s\n", device, mountpoint, strerror(errno));

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: msg.c,v 1.25 1995/05/29 00:50:04 jkh Exp $
* $Id: msg.c,v 1.26 1995/05/29 01:43:18 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -49,6 +49,17 @@
#define VTY_STATLINE 24
#define TTY_STATLINE 23
Boolean
isDebug(void)
{
char *cp;
cp = getenv("debug");
if (cp && !strcmp(cp, "yes"))
return TRUE;
return FALSE;
}
/* Whack up an informational message on the status line, in stand-out */
void
msgYap(char *fmt, ...)
@ -105,7 +116,8 @@ msgInfo(char *fmt, ...)
move(OnVTY ? VTY_STATLINE : TTY_STATLINE, 79);
refresh();
if (OnVTY) {
msgDebug("Information: `%s'\n", errstr);
if (isDebug())
msgDebug("Information: `%s'\n", errstr);
msgInfo(NULL);
}
free(errstr);
@ -130,7 +142,7 @@ msgWarn(char *fmt, ...)
mvaddstr(OnVTY ? VTY_STATLINE : TTY_STATLINE, 0, errstr);
attrset(attrs);
refresh();
if (OnVTY)
if (OnVTY && isDebug())
msgDebug("Warning message `%s'\n", errstr);
free(errstr);
}
@ -154,7 +166,7 @@ msgError(char *fmt, ...)
mvaddstr(OnVTY ? VTY_STATLINE : TTY_STATLINE, 0, errstr);
attrset(attrs);
refresh();
if (OnVTY)
if (OnVTY && isDebug())
msgDebug("Error message `%s'\n", errstr);
free(errstr);
}
@ -231,7 +243,8 @@ msgNotify(char *fmt, ...)
va_end(args);
use_helpline(NULL);
use_helpfile(NULL);
msgDebug("Notify: %s\n", errstr);
if (isDebug())
msgDebug("Notify: %s\n", errstr);
dialog_clear();
dialog_msgbox("Information Dialog", errstr, -1, -1, 0);
free(errstr);
@ -254,8 +267,8 @@ msgYesNo(char *fmt, ...)
use_helpfile(NULL);
w = dupwin(newscr);
if (OnVTY) {
msgDebug("Switching back to VTY 0\n");
ioctl(0, VT_RELDISP, 1); /* Switch back */
msgDebug("User decision requested (type ALT-F1)\n");
msgInfo(NULL);
}
ret = dialog_yesno("User Confirmation Requested", errstr, -1, -1);

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: network.c,v 1.3 1995/05/28 09:31:38 jkh Exp $
* $Id: network.c,v 1.4 1995/05/29 01:43:20 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -47,6 +47,7 @@
#include "sysinstall.h"
#include <sys/fcntl.h>
#include <sys/stat.h>
static Boolean networkInitialized;
static Boolean startPPP(Device *devp);
@ -68,8 +69,22 @@ mediaInitNetwork(Device *dev)
return FALSE;
}
}
else
msgConfirm("Warning: SLIP is rather poorly supported in this revision\nof the installation due to the lack of a dialing utility.\nIf you can use PPP for this instead then you're much better\noff doing so, otherwise SLIP works fairly well for *hardwired*\nlinks. Use the shell on the 4TH screen (ALT-F4) to run slattach\nand otherwise set the link up, then hit return here to continue.");
else {
char *val;
char attach[256];
/* Cheesy slip attach */
snprintf(attach, 256, "slattach -a -h -l -s 9600 %s", dev->devname);
val = msgGetInput(attach, "Warning: SLIP is rather poorly supported in this revision\nof the installation due to the lack of a dialing utility.\nIf you can use PPP for this instead then you're much better\noff doing so, otherwise SLIP works fairly well for *hardwired*\nlinks. Please edit the following slattach command for\ncorrectness (default here is VJ compression, Hardware flow-control,\nignore carrier and 9600 baud data rate) and hit return to execute it.");
if (!val)
return FALSE;
else if (!vsystem(attach))
return TRUE;
else {
msgConfirm("slattach returned a bad status! Please verify that\nthe command is correct and try again.");
return FALSE;
}
}
}
else {
char *cp, ifconfig[64];

View file

@ -1,21 +1,97 @@
/*
* The new sysinstall program.
*
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: media.c,v 1.21 1995/05/28 03:04:58 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer,
* verbatim and that no modifications are made prior to this
* point in the file.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Jordan Hubbard
* for the FreeBSD Project.
* 4. The name of Jordan Hubbard or the FreeBSD project may not be used to
* endorse or promote products derived from this software without specific
* prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*/
#include "sysinstall.h"
#include <stdio.h>
#include <ctype.h>
#include <sys/stat.h>
#include <sys/errno.h>
#include <sys/file.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/fcntl.h>
#include <sys/syslimits.h>
#include <sys/param.h>
#include <sys/dkbad.h>
#include <sys/mman.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include "ftp.h"
#define NFS
#include <sys/mount.h>
#undef NFS
Boolean NFSMounted;
Boolean
mediaInitNFS(Device *dev)
{
if (NFSMounted)
return TRUE;
if (Mkdir("/nfs", NULL))
return FALSE;
if (!vsystem("mount_nfs %s %s %s /nfs", getenv("nfsSlowPC") ? "-r 1024 -w 1024" : "",
getenv("nfsServerSecure") ? "-P" : "", dev->private))
return TRUE;
else {
msgConfirm("Error mounting %s on /nfs: %s (%u)\n", dev->private, strerror(errno), errno);
return FALSE;
}
NFSMounted = TRUE;
return TRUE;
}
int
mediaGetNFS(char *file)
{
char buf[PATH_MAX];
snprintf(buf, PATH_MAX, "/nfs/%s", file);
if (!access(buf, R_OK))
return open(buf, O_RDONLY);
snprintf(buf, PATH_MAX, "/nfs/dists/%s", file);
return open(buf, O_RDONLY);
}
void
mediaShutdownNFS(Device *dev)
{
if (!NFSMounted)
return;
msgDebug("Unmounting /nfs\n");
if (unmount("/nfs", 0) != 0)
msgConfirm("Could not unmount the NFS partition: %s\n", strerror(errno));
if (isDebug())
msgDebug("Unmount returned\n");
NFSMounted = FALSE;
return;
}

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: sysinstall.h,v 1.38 1995/05/28 03:05:03 jkh Exp $
* $Id: sysinstall.h,v 1.39 1995/05/28 09:31:39 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -160,6 +160,8 @@ typedef enum {
DEVICE_TYPE_CDROM,
DEVICE_TYPE_TAPE,
DEVICE_TYPE_DOS,
DEVICE_TYPE_UFS,
DEVICE_TYPE_NFS,
DEVICE_TYPE_ANY,
} DeviceType;
@ -378,10 +380,11 @@ extern int mediaSetFloppy(char *str);
extern int mediaSetDOS(char *str);
extern int mediaSetTape(char *str);
extern int mediaSetFTP(char *str);
extern int mediaSetFS(char *str);
extern int mediaSetUFS(char *str);
extern int mediaSetNFS(char *str);
extern Boolean mediaGetType(void);
extern Boolean mediaExtractDist(char *distname, char *dir, int fd);
extern Boolean mediaExtractDistBegin(char *distname, char *dir, int *fd, int *zpid, int *cpic);
extern Boolean mediaExtractDist(char *dir, int fd);
extern Boolean mediaExtractDistBegin(char *dir, int *fd, int *zpid, int *cpic);
extern Boolean mediaExtractDistEnd(int zpid, int cpid);
extern Boolean mediaVerify(void);
@ -403,6 +406,7 @@ extern int Mount(char *, void *data);
extern int Mount_DOS(char *, void *data);
/* msg.c */
extern Boolean isDebug(void);
extern void msgInfo(char *fmt, ...);
extern void msgYap(char *fmt, ...);
extern void msgWarn(char *fmt, ...);
@ -420,6 +424,11 @@ extern Boolean mediaInitNetwork(Device *dev);
extern void mediaShutdownNetwork(Device *dev);
extern int configRoutedFlags(char *str);
/* nfs.c */
extern Boolean mediaInitNFS(Device *dev);
extern int mediaGetNFS(char *file);
extern void mediaShutdownNFS(Device *dev);
/* system.c */
extern void systemInitialize(int argc, char **argv);
extern void systemShutdown(void);
@ -448,6 +457,7 @@ extern int tcpDeviceSelect(char *str);
extern int set_termcap(void);
/* ufs.c */
extern void mediaShutdownUFS(Device *dev);
extern Boolean mediaInitUFS(Device *dev);
extern int mediaGetUFS(char *file);

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: system.c,v 1.40 1995/05/29 00:50:05 jkh Exp $
* $Id: system.c,v 1.41 1995/05/29 02:13:31 phk Exp $
*
* Jordan Hubbard
*
@ -102,10 +102,8 @@ systemShutdown(void)
}
/* REALLY exit! */
if (RunningAsInit) {
int fd, on = 1;
/* Put the console back */
ioctl(0, VT_RELDISP, 1);
ioctl(DebugFD, VT_RELDISP, 1);
reboot(RB_HALT);
}
else
@ -187,7 +185,6 @@ systemDisplayFile(char *file)
use_helpline(NULL);
w = dupwin(newscr);
dialog_textbox(file, fname, LINES, COLS);
unlink(fname);
touchwin(w);
wrefresh(w);
delwin(w);
@ -199,24 +196,45 @@ char *
systemHelpFile(char *file, char *buf)
{
char *cp;
static char oldfile[64]; /* Should be FILENAME_MAX but I don't feel like wasting that much space */
if (!file)
return NULL;
if ((cp = getenv("LANG")) != NULL) {
snprintf(buf, FILENAME_MAX, "%s/%s", cp, file);
vsystem("cd /stand && zcat help.tgz | cpio --format=tar -idv %s",buf);
if (oldfile[0]) {
if (!strcmp(buf, oldfile))
return oldfile;
else {
unlink(oldfile);
oldfile[0] = '\0';
}
}
vsystem("cd /stand && zcat help.tgz | cpio --format=tar -idv %s > /dev/null 2>&1",buf);
snprintf(buf, FILENAME_MAX, "/stand/%s/%s", cp, file);
if (file_readable(buf))
if (file_readable(buf)) {
strcpy(oldfile, buf);
return buf;
}
}
/* Fall back to normal imperialistic mode :-) */
cp = "en_US.ISO8859-1";
snprintf(buf, FILENAME_MAX, "%s/%s", cp, file);
vsystem("cd /stand && zcat help.tgz | cpio --format=tar -idv %s",buf);
if (oldfile[0]) {
if (!strcmp(buf, oldfile))
return oldfile;
else {
unlink(oldfile);
oldfile[0] = '\0';
}
}
vsystem("cd /stand && zcat help.tgz | cpio --format=tar -idv %s > /dev/null 2>&1",buf);
snprintf(buf, FILENAME_MAX, "/stand/%s/%s", cp, file);
if (file_readable(buf))
if (file_readable(buf)) {
strcpy(oldfile, buf);
return buf;
}
return NULL;
}
@ -290,11 +308,14 @@ vsystem(char *fmt, ...)
va_start(args, fmt);
vsnprintf(cmd, FILENAME_MAX, fmt, args);
va_end(args);
/* Find out if this command needs the wizardry of the shell */
for (p="<>|'`=\"()" ; *p; p++)
if (strchr(cmd,*p)) magic++;
if (strchr(cmd, *p))
magic++;
omask = sigblock(sigmask(SIGCHLD));
msgDebug("Executing command `%s' (Magic=%d)\n", cmd, magic);
if (isDebug())
msgDebug("Executing command `%s' (Magic=%d)\n", cmd, magic);
switch(pid = fork()) {
case -1: /* error */
(void)sigsetmask(omask);
@ -303,7 +324,7 @@ vsystem(char *fmt, ...)
case 0: /* child */
(void)sigsetmask(omask);
if (DebugFD != -1) {
if (OnVTY)
if (OnVTY && isDebug())
msgInfo("Command output is on debugging screen - type ALT-F2 to see it");
dup2(DebugFD, 0);
dup2(DebugFD, 1);
@ -311,29 +332,29 @@ vsystem(char *fmt, ...)
}
#ifdef NOT_A_GOOD_IDEA_CRUNCHED_BINARY
if (magic) {
char *argv[100];
i = 0;
argv[i++] = "crunch";
argv[i++] = "sh";
argv[i++] = "-c";
argv[i++] = cmd;
argv[i] = 0;
exit(crunched_main(i,argv));
char *argv[100];
i = 0;
argv[i++] = "crunch";
argv[i++] = "sh";
argv[i++] = "-c";
argv[i++] = cmd;
argv[i] = 0;
exit(crunched_main(i,argv));
} else {
char *argv[100];
i = 0;
argv[i++] = "crunch";
while (cmd && *cmd) {
argv[i] = strsep(&cmd," \t");
if (*argv[i])
i++;
}
argv[i] = 0;
if (crunched_here(argv[1]))
exit(crunched_main(i,argv));
else
execvp(argv[1],argv+1);
kill(getpid(),9);
char *argv[100];
i = 0;
argv[i++] = "crunch";
while (cmd && *cmd) {
argv[i] = strsep(&cmd," \t");
if (*argv[i])
i++;
}
argv[i] = 0;
if (crunched_here(argv[1]))
exit(crunched_main(i,argv));
else
execvp(argv[1],argv+1);
kill(getpid(),9);
}
#else /* !CRUNCHED_BINARY */
execl("/stand/sh", "sh", "-c", cmd, (char *)NULL);
@ -347,7 +368,8 @@ vsystem(char *fmt, ...)
(void)signal(SIGINT, intsave);
(void)signal(SIGQUIT, quitsave);
i = (pid == -1) ? -1 : WEXITSTATUS(pstat);
msgDebug("Command `%s' returns status of %d\n", cmd, i);
if (isDebug())
msgDebug("Command `%s' returns status of %d\n", cmd, i);
free(cmd);
return i;
}

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: tape.c,v 1.2 1995/05/27 23:39:33 phk Exp $
* $Id: tape.c,v 1.3 1995/05/28 03:05:04 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -46,21 +46,59 @@
/* These routines deal with getting things off of tape media */
#include "sysinstall.h"
#include <sys/fcntl.h>
#include <sys/param.h>
static Boolean tapeInitted;
Boolean
mediaInitTape(Device *dev)
{
return TRUE;
int i;
if (tapeInitted)
return TRUE;
Mkdir("/usr/tmp/tape", NULL);
if (chdir("/usr/tmp/tape")) {
Mkdir("/var/tmp/tape", NULL);
if (chdir("/var/tmp/tape"))
return FALSE;
}
msgConfirm("Insert tape into %s and press return", dev->description);
if (!strcmp(dev->name, "ft0"))
i = vsystem("ft | tar xvf -");
else
i = vsystem("tar xvf %s", dev->devname);
if (!i) {
tapeInitted = TRUE;
return TRUE;
}
else
msgConfirm("Tape extract command failed with status %d!", i);
return FALSE;
}
int
mediaGetTape(char *file)
{
return -1;
char buf[PATH_MAX];
sprintf(buf, "/usr/tmp/tape/%s", file);
if (!access(buf, R_OK))
return open(buf, O_RDONLY);
sprintf(buf, "/var/tmp/tape/%s", file);
return open(buf, O_RDONLY);
}
void
mediaShutdownTape(Device *dev)
{
return;
if (!tapeInitted)
return;
if (!access("/usr/tmp/tape", X_OK))
(void)vsystem("rm -rf /usr/tmp/tape");
else if (!access("/var/tmp/tape", X_OK))
(void)vsystem("rm -rf /var/tmp/tape");
tapeInitted = FALSE;
}

View file

@ -1,5 +1,5 @@
/*
* $Id: tcpip.c,v 1.25 1995/05/28 09:31:44 jkh Exp $
* $Id: tcpip.c,v 1.26 1995/05/28 23:12:09 jkh Exp $
*
* Copyright (c) 1995
* Gary J Palmer. All rights reserved.
@ -196,12 +196,12 @@ tcpOpenDialog(Device *devp)
/* Setup a nice screen for us to splat stuff onto */
draw_box(ds_win, TCP_DIALOG_Y, TCP_DIALOG_X, TCP_DIALOG_HEIGHT, TCP_DIALOG_WIDTH, dialog_attr, border_attr);
wattrset(ds_win, dialog_attr);
sprintf(title, " Interface %s ", devp->name);
mvwaddstr(ds_win, TCP_DIALOG_Y, TCP_DIALOG_X + 22, title);
mvwaddstr(ds_win, TCP_DIALOG_Y, TCP_DIALOG_X + 15, " Network Configuration ");
draw_box(ds_win, TCP_DIALOG_Y + 9, TCP_DIALOG_X + 8, TCP_DIALOG_HEIGHT - 13, TCP_DIALOG_WIDTH - 17,
dialog_attr, border_attr);
wattrset(ds_win, dialog_attr);
mvwaddstr(ds_win, TCP_DIALOG_Y + 9, TCP_DIALOG_X + 16, " Per Interface Configuration ");
sprintf(title, " Configuration for Interface %s ", devp->name);
mvwaddstr(ds_win, TCP_DIALOG_Y + 9, TCP_DIALOG_X + 14, title);
/* Initialise vars from previous device values */
if (devp->private) {

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: ufs.c,v 1.1 1995/05/27 10:39:04 jkh Exp $
* $Id: ufs.c,v 1.2 1995/05/27 23:39:35 phk Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -44,17 +44,19 @@
*/
#include "sysinstall.h"
#include <sys/fcntl.h>
#include <sys/param.h>
Boolean
mediaInitUFS(Device *dev)
{
return TRUE;
}
/* No init or shutdown routines necessary - all done in mediaSetUFS() */
int
mediaGetUFS(char *file)
{
return -1;
}
char buf[PATH_MAX];
/* UFS has no Shutdown routine since this is handled at the device level */
snprintf(buf, PATH_MAX, "%s/%s", (char *)mediaDevice->private, file);
if (!access(buf, R_OK))
return open(buf, O_RDONLY);
snprintf(buf, PATH_MAX, "%s/dists/%s", (char *)mediaDevice->private, file);
return open(buf, O_RDONLY);
}

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: command.c,v 1.8 1995/05/19 21:30:32 jkh Exp $
* $Id: command.c,v 1.9 1995/05/20 13:24:33 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -167,14 +167,16 @@ command_execute(void)
if (commandStack[i]->cmds[j].type == CMD_SHELL) {
msgNotify("Doing %s", commandStack[i]->cmds[j].ptr);
ret = vsystem((char *)commandStack[i]->cmds[j].ptr);
msgDebug("Command `%s' returns status %d\n", commandStack[i]->cmds[j].ptr, ret);
if (isDebug())
msgDebug("Command `%s' returns status %d\n", commandStack[i]->cmds[j].ptr, ret);
}
else {
/* It's a function pointer - call it with the key and the data */
func = (commandFunc)commandStack[i]->cmds[j].ptr;
msgNotify("%x: Execute(%s, %s)", func, commandStack[i]->key, commandStack[i]->cmds[j].data);
ret = (*func)(commandStack[i]->key, commandStack[i]->cmds[j].data);
msgDebug("Function @ %x returns status %d\n", commandStack[i]->cmds[j].ptr, ret);
if (isDebug())
msgDebug("Function @ %x returns status %d\n", commandStack[i]->cmds[j].ptr, ret);
}
}
}

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: config.c,v 1.11 1995/05/28 09:31:29 jkh Exp $
* $Id: config.c,v 1.12 1995/05/28 20:28:07 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -174,7 +174,7 @@ configFstab(void)
}
/* Go for the burn */
msgDebug("Generating /etc/fstab file");
msgDebug("Generating /etc/fstab file\n");
for (i = 0; i < nchunks; i++) {
fprintf(fstab, "/dev/%s\t\t\t%s\t\t%s %s %d %d\n", nameof(chunk_list[i]), mount_point(chunk_list[i]),
fstype(chunk_list[i]), fstype_short(chunk_list[i]), seq_num(chunk_list[i]),
@ -351,7 +351,7 @@ configPackages(char *str)
i = (pid == -1) ? -1 : WEXITSTATUS(pstat);
}
}
if (i != 0)
if (i != 0 && isDebug())
msgDebug("pkg_manage returns status of %d\n", i);
return 0;
}

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: devices.c,v 1.32 1995/05/27 23:52:55 jkh Exp $
* $Id: devices.c,v 1.33 1995/05/28 09:31:31 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -183,15 +183,28 @@ deviceGetAll(void)
int i;
for (i = 0; names[i]; i++) {
Chunk *c1;
Disk *d;
d = Open_Disk(names[i]);
if (!d)
msgFatal("Unable to open disk %s", names[i]);
(void)deviceRegister(names[i], names[i], d->name, DEVICE_TYPE_DISK, FALSE,
mediaInitUFS, mediaGetUFS, NULL, deviceDiskFree, d);
(void)deviceRegister(names[i], names[i], d->name, DEVICE_TYPE_DISK, FALSE, NULL, NULL, NULL, NULL, d);
msgDebug("Found a device of type disk named: %s\n", names[i]);
/* Look for existing DOS partitions to register */
for (c1 = d->chunks->part; c1; c1 = c1->next) {
if (c1->type == fat) {
Device *dev;
/* Got one! */
dev = deviceRegister(c1->name, c1->name, c1->name, DEVICE_TYPE_DOS, TRUE,
mediaInitDOS, mediaGetDOS, NULL, mediaShutdownDOS, NULL);
dev->private = c1;
msgDebug("Found a DOS partition %s on drive %s\n", c1->name, d->name);
}
}
}
free(names);
}

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: install.c,v 1.65 1995/05/28 23:12:05 jkh Exp $
* $Id: install.c,v 1.66 1995/05/29 00:50:02 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -254,6 +254,10 @@ installCommit(char *str)
fclose(fp);
hostsModified = TRUE;
}
/* If there's no kernel but there is a kernel.GENERIC, link it over */
if (access("/kernel", R_OK))
vsystem("ln -f /kernel.GENERIC /kernel");
msgConfirm("Installation completed successfully.\nHit return now to go back to the main menu.");
SystemWasInstalled = TRUE;
return 0;
@ -379,7 +383,7 @@ copy_self(void)
msgConfirm("Copy returned error status of %d!", i);
/* Copy the /etc files into their rightful place */
(void)vsystem("(cd /stand; find etc) | cpio -pdmv /mnt");
(void)vsystem("cd /mnt/stand; find etc | cpio -pdmv /mnt");
}
static void loop_on_root_floppy();
@ -391,7 +395,7 @@ root_extract(void)
if (OnCDROM) {
fd = open("/floppies/root.flp", O_RDONLY);
(void)mediaExtractDist("root.flp", "/", fd);
(void)mediaExtractDist("/", fd);
return;
}
if (mediaDevice) {
@ -408,7 +412,7 @@ root_extract(void)
fd = (*mediaDevice->get)("floppies/root.flp");
if (fd != -1) {
msgNotify("Loading root floppy from %s", mediaDevice->name);
(void)mediaExtractDist("root.flp", "/", fd);
(void)mediaExtractDist("/", fd);
if (mediaDevice->close)
(*mediaDevice->close)(mediaDevice, fd);
else
@ -416,12 +420,14 @@ root_extract(void)
if (mediaDevice->shutdown)
(*mediaDevice->shutdown)(mediaDevice);
} else {
msgConfirm("Couldn't get root floppy image from %s\n, falling back to floppy.", mediaDevice->name);
if (mediaDevice->shutdown)
(*mediaDevice->shutdown)(mediaDevice);
loop_on_root_floppy();
}
break;
case DEVICE_TYPE_TAPE:
case DEVICE_TYPE_FLOPPY:
default:
loop_on_root_floppy();
@ -437,7 +443,11 @@ loop_on_root_floppy(void)
{
int fd;
fd = getRootFloppy();
if (fd != -1)
mediaExtractDist("root.flp", "/", fd);
while (1) {
fd = getRootFloppy();
if (fd != -1) {
mediaExtractDist("/", fd);
break;
}
}
}

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: menus.c,v 1.36 1995/05/28 23:12:07 jkh Exp $
* $Id: menus.c,v 1.37 1995/05/29 01:43:17 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -302,12 +302,14 @@ method.",
DMENU_CALL, mediaSetCDROM, 0, 0 },
{ "DOS", "Install from a DOS partition",
DMENU_CALL, mediaSetDOS, 0, 0 },
{ "File System", "Install from a UFS or NFS mounted distribution",
DMENU_CALL, mediaSetFS, 0, 0 },
{ "File System", "Install from a mounted filesystem",
DMENU_CALL, mediaSetUFS, 0, 0 },
{ "Floppy", "Install from a floppy disk set",
DMENU_CALL, mediaSetFloppy, 0, 0 },
{ "FTP", "Install from an Internet FTP server",
DMENU_CALL, mediaSetFTP, 0, 0 },
{ "NFS", "Install over NFS",
DMENU_CALL, mediaSetNFS, 0, 0 },
{ "Tape", "Install from SCSI or QIC tape",
DMENU_CALL, mediaSetTape, 0, 0 },
{ NULL } },
@ -642,7 +644,7 @@ When you're done, select Cancel",
"Press F1 for more information on these options",
"configure.hlp",
{ { "Add User", "Add users to the system",
DMENU_SYSTEM_COMMAND, "adduser", 0, 0 },
DMENU_SYSTEM_COMMAND, "adduser -silent", 0, 0 },
{ "Console", "Customize system console behavior",
DMENU_SUBMENU, &MenuSyscons, 0, 0 },
{ "Networking", "Configure additional network services",
@ -700,11 +702,11 @@ close to you to have your system time syncronized accordingly.",
DMENU_SET_VARIABLE, "ntpdate=canon.inria.fr", 0, 0 },
{ "Germany", "ntps1-{0,1,2}.uni-erlangen.de (GPS)",
DMENU_SET_VARIABLE, "ntpdate=ntps1-0.uni-erlangen.de", 0, 0 },
{ "Germany", "ntps1-0.cs.tu-berlin.de (GPS)",
{ "Germany #2", "ntps1-0.cs.tu-berlin.de (GPS)",
DMENU_SET_VARIABLE, "ntpdate=ntps1-0.cs.tu-berlin.de", 0, 0 },
{ "Japan", "clock.nc.fukuoka-u.ac.jp (GPS clock)",
DMENU_SET_VARIABLE, "ntpdate=clock.nc.fukuoka-u.ac.jp", 0, 0},
{ "Japan", "clock.tl.fukuoka-u.ac.jp (GPS clock)",
{ "Japan #2", "clock.tl.fukuoka-u.ac.jp (GPS clock)",
DMENU_SET_VARIABLE, "ntpdate=clock.tl.fukuoka-u.ac.jp", 0, 0},
{ "Netherlands", "ntp0.nl.net (GPS clock)",
DMENU_SET_VARIABLE, "ntpdate=ntp0.nl.net", 0, 0 },
@ -716,20 +718,20 @@ close to you to have your system time syncronized accordingly.",
DMENU_SET_VARIABLE, "ntpdate=swisstime.ethz.ch", 0, 0 },
{ "U.S. East Coast", "bitsy.mit.edu (WWV clock)",
DMENU_SET_VARIABLE, "ntpdate=bitsy.mit.edu", 0, 0 },
{ "U.S. East Coast", "otc1.psu.edu (WWV clock)",
{ "U.S. East Coast #2", "otc1.psu.edu (WWV clock)",
DMENU_SET_VARIABLE, "ntpdate=otc1.psu.edu", 0, 0 },
{ "U.S. West Coast", "apple.com (WWV clock)",
DMENU_SET_VARIABLE, "ntpdate=apple.com", 0, 0 },
{ "U.S. West Coast", "clepsydra.dec.com (GOES clock)",
{ "U.S. West Coast #2", "clepsydra.dec.com (GOES clock)",
DMENU_SET_VARIABLE, "ntpdate=clepsydra.dec.com", 0, 0 },
{ "U.S. West Coast", "clock.llnl.gov (WWVB clock)",
DMENU_SET_VARIABLE, "ntpdate=clock.llnl.gov", 0, 0 },
{ "U.S. West Coast #3", "clock.llnl.gov (WWVB clock)",
DMENU_SET_VARIABLE, "ntpdate=clock.llnl.gov", 0, 0 },
{ "U.S. Midwest", "ncar.ucar.edu (WWVB clock)",
DMENU_SET_VARIABLE, "ntpdate=ncar.ucar.edu", 0, 0 },
DMENU_SET_VARIABLE, "ntpdate=ncar.ucar.edu", 0, 0 },
{ "U.S. Pacific", "chantry.hawaii.net (WWV/H clock)",
DMENU_SET_VARIABLE, "ntpdate=chantry.hawaii.net", 0, 0 },
{ "U.S. Southwest", "shorty.chpc.utexas.edu (WWV clock)",
DMENU_SET_VARIABLE, "ntpdate=shorty.chpc.utexas.edu", 0, 0 },
DMENU_SET_VARIABLE, "ntpdate=shorty.chpc.utexas.edu", 0, 0 },
{ NULL } },
};
@ -738,9 +740,9 @@ DMenu MenuSyscons = {
"System Console Configuration",
"The default system console driver for FreeBSD (syscons) has a\n\
number of configuration options which may be set according to\n\
your preference. When you are done setting configuration options,\n\
select Cancel.",
"Configure your screen saver settings",
your preference.\n\n\
When you are done setting configuration options, select Cancel.",
"Configure your system console settings",
NULL,
{ { "Keymap", "Choose an alternate keyboard map",
DMENU_SUBMENU, &MenuSysconsKeymap, 0, 0 },
@ -798,9 +800,9 @@ when held down.",
NULL,
{ { "Slow", "Slow keyboard repeat rate",
DMENU_SET_VARIABLE, "keyrate=slow", 0, 0 },
{ "Normal", "\"normal\" keyboard repeat rate",
{ "Normal", "\"Normal\" keyboard repeat rate",
DMENU_SET_VARIABLE, "keyrate=normal", 0, 0 },
{ "Fast", "fast keyboard repeat rate",
{ "Fast", "Fast keyboard repeat rate",
DMENU_SET_VARIABLE, "keyrate=fast", 0, 0 },
{ "Default", "Use default keyboard repeat rate",
DMENU_SET_VARIABLE, "keyrate=NO", 0, 0 },
@ -818,11 +820,11 @@ probably enable one of these screen savers to prevent phosphor burn-in.",
NULL,
{ { "blank", "Simply blank the screen",
DMENU_SET_VARIABLE, "saver=star", 0, 0 },
{ "Green", "\"green\" power saving mode (if supported by monitor)",
{ "Green", "\"Green\" power saving mode (if supported by monitor)",
DMENU_SET_VARIABLE, "saver=snake", 0, 0 },
{ "Snake", "Draw a FreeBSD \"snake\" on your screen",
DMENU_SET_VARIABLE, "saver=snake", 0, 0 },
{ "Star", "\"twinkling stars\" effect",
{ "Star", "A \"twinkling stars\" effect",
DMENU_SET_VARIABLE, "saver=star", 0, 0 },
{ "Timeout", "Set the screen saver timeout interval",
DMENU_CALL, configSaverTimeout, 0, 0 },

View file

@ -1,7 +1,7 @@
/*
* Miscellaneous support routines..
*
* $Id: misc.c,v 1.8 1995/05/23 18:06:15 jkh Exp $
* $Id: misc.c,v 1.9 1995/05/25 01:22:19 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -183,7 +183,8 @@ Mkdir(char *ipath, void *data)
return 0;
path = strdup(ipath);
msgDebug("mkdir(%s)\n", path);
if (isDebug())
msgDebug("mkdir(%s)\n", path);
p = path;
if (p[0] == '/') /* Skip leading '/'. */
++p;
@ -198,7 +199,8 @@ Mkdir(char *ipath, void *data)
msgConfirm("Couldn't stat directory %s: %s", path, strerror(errno));
return 1;
}
msgDebug("mkdir(%s..)\n", path);
if (isDebug())
msgDebug("mkdir(%s..)\n", path);
if (mkdir(path, S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
msgConfirm("Couldn't create directory %s: %s", path,strerror(errno));
return 1;
@ -231,7 +233,9 @@ Mount(char *mountp, void *dev)
msgConfirm("Unable to make directory mountpoint for %s!", mountpoint);
return 1;
}
msgDebug("mount %s %s\n", device, mountpoint);
if (isDebug())
msgDebug("mount %s %s\n", device, mountpoint);
bzero(&ufsargs, sizeof(ufsargs));
ufsargs.fspec = device;
if (mount(MOUNT_UFS, mountpoint, 0, (caddr_t)&ufsargs) == -1) {
msgConfirm("Error mounting %s on %s : %s\n", device, mountpoint, strerror(errno));

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: msg.c,v 1.25 1995/05/29 00:50:04 jkh Exp $
* $Id: msg.c,v 1.26 1995/05/29 01:43:18 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -49,6 +49,17 @@
#define VTY_STATLINE 24
#define TTY_STATLINE 23
Boolean
isDebug(void)
{
char *cp;
cp = getenv("debug");
if (cp && !strcmp(cp, "yes"))
return TRUE;
return FALSE;
}
/* Whack up an informational message on the status line, in stand-out */
void
msgYap(char *fmt, ...)
@ -105,7 +116,8 @@ msgInfo(char *fmt, ...)
move(OnVTY ? VTY_STATLINE : TTY_STATLINE, 79);
refresh();
if (OnVTY) {
msgDebug("Information: `%s'\n", errstr);
if (isDebug())
msgDebug("Information: `%s'\n", errstr);
msgInfo(NULL);
}
free(errstr);
@ -130,7 +142,7 @@ msgWarn(char *fmt, ...)
mvaddstr(OnVTY ? VTY_STATLINE : TTY_STATLINE, 0, errstr);
attrset(attrs);
refresh();
if (OnVTY)
if (OnVTY && isDebug())
msgDebug("Warning message `%s'\n", errstr);
free(errstr);
}
@ -154,7 +166,7 @@ msgError(char *fmt, ...)
mvaddstr(OnVTY ? VTY_STATLINE : TTY_STATLINE, 0, errstr);
attrset(attrs);
refresh();
if (OnVTY)
if (OnVTY && isDebug())
msgDebug("Error message `%s'\n", errstr);
free(errstr);
}
@ -231,7 +243,8 @@ msgNotify(char *fmt, ...)
va_end(args);
use_helpline(NULL);
use_helpfile(NULL);
msgDebug("Notify: %s\n", errstr);
if (isDebug())
msgDebug("Notify: %s\n", errstr);
dialog_clear();
dialog_msgbox("Information Dialog", errstr, -1, -1, 0);
free(errstr);
@ -254,8 +267,8 @@ msgYesNo(char *fmt, ...)
use_helpfile(NULL);
w = dupwin(newscr);
if (OnVTY) {
msgDebug("Switching back to VTY 0\n");
ioctl(0, VT_RELDISP, 1); /* Switch back */
msgDebug("User decision requested (type ALT-F1)\n");
msgInfo(NULL);
}
ret = dialog_yesno("User Confirmation Requested", errstr, -1, -1);

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: sysinstall.h,v 1.38 1995/05/28 03:05:03 jkh Exp $
* $Id: sysinstall.h,v 1.39 1995/05/28 09:31:39 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -160,6 +160,8 @@ typedef enum {
DEVICE_TYPE_CDROM,
DEVICE_TYPE_TAPE,
DEVICE_TYPE_DOS,
DEVICE_TYPE_UFS,
DEVICE_TYPE_NFS,
DEVICE_TYPE_ANY,
} DeviceType;
@ -378,10 +380,11 @@ extern int mediaSetFloppy(char *str);
extern int mediaSetDOS(char *str);
extern int mediaSetTape(char *str);
extern int mediaSetFTP(char *str);
extern int mediaSetFS(char *str);
extern int mediaSetUFS(char *str);
extern int mediaSetNFS(char *str);
extern Boolean mediaGetType(void);
extern Boolean mediaExtractDist(char *distname, char *dir, int fd);
extern Boolean mediaExtractDistBegin(char *distname, char *dir, int *fd, int *zpid, int *cpic);
extern Boolean mediaExtractDist(char *dir, int fd);
extern Boolean mediaExtractDistBegin(char *dir, int *fd, int *zpid, int *cpic);
extern Boolean mediaExtractDistEnd(int zpid, int cpid);
extern Boolean mediaVerify(void);
@ -403,6 +406,7 @@ extern int Mount(char *, void *data);
extern int Mount_DOS(char *, void *data);
/* msg.c */
extern Boolean isDebug(void);
extern void msgInfo(char *fmt, ...);
extern void msgYap(char *fmt, ...);
extern void msgWarn(char *fmt, ...);
@ -420,6 +424,11 @@ extern Boolean mediaInitNetwork(Device *dev);
extern void mediaShutdownNetwork(Device *dev);
extern int configRoutedFlags(char *str);
/* nfs.c */
extern Boolean mediaInitNFS(Device *dev);
extern int mediaGetNFS(char *file);
extern void mediaShutdownNFS(Device *dev);
/* system.c */
extern void systemInitialize(int argc, char **argv);
extern void systemShutdown(void);
@ -448,6 +457,7 @@ extern int tcpDeviceSelect(char *str);
extern int set_termcap(void);
/* ufs.c */
extern void mediaShutdownUFS(Device *dev);
extern Boolean mediaInitUFS(Device *dev);
extern int mediaGetUFS(char *file);

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: system.c,v 1.40 1995/05/29 00:50:05 jkh Exp $
* $Id: system.c,v 1.41 1995/05/29 02:13:31 phk Exp $
*
* Jordan Hubbard
*
@ -102,10 +102,8 @@ systemShutdown(void)
}
/* REALLY exit! */
if (RunningAsInit) {
int fd, on = 1;
/* Put the console back */
ioctl(0, VT_RELDISP, 1);
ioctl(DebugFD, VT_RELDISP, 1);
reboot(RB_HALT);
}
else
@ -187,7 +185,6 @@ systemDisplayFile(char *file)
use_helpline(NULL);
w = dupwin(newscr);
dialog_textbox(file, fname, LINES, COLS);
unlink(fname);
touchwin(w);
wrefresh(w);
delwin(w);
@ -199,24 +196,45 @@ char *
systemHelpFile(char *file, char *buf)
{
char *cp;
static char oldfile[64]; /* Should be FILENAME_MAX but I don't feel like wasting that much space */
if (!file)
return NULL;
if ((cp = getenv("LANG")) != NULL) {
snprintf(buf, FILENAME_MAX, "%s/%s", cp, file);
vsystem("cd /stand && zcat help.tgz | cpio --format=tar -idv %s",buf);
if (oldfile[0]) {
if (!strcmp(buf, oldfile))
return oldfile;
else {
unlink(oldfile);
oldfile[0] = '\0';
}
}
vsystem("cd /stand && zcat help.tgz | cpio --format=tar -idv %s > /dev/null 2>&1",buf);
snprintf(buf, FILENAME_MAX, "/stand/%s/%s", cp, file);
if (file_readable(buf))
if (file_readable(buf)) {
strcpy(oldfile, buf);
return buf;
}
}
/* Fall back to normal imperialistic mode :-) */
cp = "en_US.ISO8859-1";
snprintf(buf, FILENAME_MAX, "%s/%s", cp, file);
vsystem("cd /stand && zcat help.tgz | cpio --format=tar -idv %s",buf);
if (oldfile[0]) {
if (!strcmp(buf, oldfile))
return oldfile;
else {
unlink(oldfile);
oldfile[0] = '\0';
}
}
vsystem("cd /stand && zcat help.tgz | cpio --format=tar -idv %s > /dev/null 2>&1",buf);
snprintf(buf, FILENAME_MAX, "/stand/%s/%s", cp, file);
if (file_readable(buf))
if (file_readable(buf)) {
strcpy(oldfile, buf);
return buf;
}
return NULL;
}
@ -290,11 +308,14 @@ vsystem(char *fmt, ...)
va_start(args, fmt);
vsnprintf(cmd, FILENAME_MAX, fmt, args);
va_end(args);
/* Find out if this command needs the wizardry of the shell */
for (p="<>|'`=\"()" ; *p; p++)
if (strchr(cmd,*p)) magic++;
if (strchr(cmd, *p))
magic++;
omask = sigblock(sigmask(SIGCHLD));
msgDebug("Executing command `%s' (Magic=%d)\n", cmd, magic);
if (isDebug())
msgDebug("Executing command `%s' (Magic=%d)\n", cmd, magic);
switch(pid = fork()) {
case -1: /* error */
(void)sigsetmask(omask);
@ -303,7 +324,7 @@ vsystem(char *fmt, ...)
case 0: /* child */
(void)sigsetmask(omask);
if (DebugFD != -1) {
if (OnVTY)
if (OnVTY && isDebug())
msgInfo("Command output is on debugging screen - type ALT-F2 to see it");
dup2(DebugFD, 0);
dup2(DebugFD, 1);
@ -311,29 +332,29 @@ vsystem(char *fmt, ...)
}
#ifdef NOT_A_GOOD_IDEA_CRUNCHED_BINARY
if (magic) {
char *argv[100];
i = 0;
argv[i++] = "crunch";
argv[i++] = "sh";
argv[i++] = "-c";
argv[i++] = cmd;
argv[i] = 0;
exit(crunched_main(i,argv));
char *argv[100];
i = 0;
argv[i++] = "crunch";
argv[i++] = "sh";
argv[i++] = "-c";
argv[i++] = cmd;
argv[i] = 0;
exit(crunched_main(i,argv));
} else {
char *argv[100];
i = 0;
argv[i++] = "crunch";
while (cmd && *cmd) {
argv[i] = strsep(&cmd," \t");
if (*argv[i])
i++;
}
argv[i] = 0;
if (crunched_here(argv[1]))
exit(crunched_main(i,argv));
else
execvp(argv[1],argv+1);
kill(getpid(),9);
char *argv[100];
i = 0;
argv[i++] = "crunch";
while (cmd && *cmd) {
argv[i] = strsep(&cmd," \t");
if (*argv[i])
i++;
}
argv[i] = 0;
if (crunched_here(argv[1]))
exit(crunched_main(i,argv));
else
execvp(argv[1],argv+1);
kill(getpid(),9);
}
#else /* !CRUNCHED_BINARY */
execl("/stand/sh", "sh", "-c", cmd, (char *)NULL);
@ -347,7 +368,8 @@ vsystem(char *fmt, ...)
(void)signal(SIGINT, intsave);
(void)signal(SIGQUIT, quitsave);
i = (pid == -1) ? -1 : WEXITSTATUS(pstat);
msgDebug("Command `%s' returns status of %d\n", cmd, i);
if (isDebug())
msgDebug("Command `%s' returns status of %d\n", cmd, i);
free(cmd);
return i;
}

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: cdrom.c,v 1.3 1995/05/28 03:04:46 jkh Exp $
* $Id: cdrom.c,v 1.4 1995/05/28 07:05:21 phk Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -72,6 +72,7 @@ mediaInitCDROM(Device *dev)
if (Mkdir("/cdrom", NULL))
return FALSE;
bzero(&args, sizeof(args));
args.fspec = dev->devname;
args.flags = 0;

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: command.c,v 1.8 1995/05/19 21:30:32 jkh Exp $
* $Id: command.c,v 1.9 1995/05/20 13:24:33 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -167,14 +167,16 @@ command_execute(void)
if (commandStack[i]->cmds[j].type == CMD_SHELL) {
msgNotify("Doing %s", commandStack[i]->cmds[j].ptr);
ret = vsystem((char *)commandStack[i]->cmds[j].ptr);
msgDebug("Command `%s' returns status %d\n", commandStack[i]->cmds[j].ptr, ret);
if (isDebug())
msgDebug("Command `%s' returns status %d\n", commandStack[i]->cmds[j].ptr, ret);
}
else {
/* It's a function pointer - call it with the key and the data */
func = (commandFunc)commandStack[i]->cmds[j].ptr;
msgNotify("%x: Execute(%s, %s)", func, commandStack[i]->key, commandStack[i]->cmds[j].data);
ret = (*func)(commandStack[i]->key, commandStack[i]->cmds[j].data);
msgDebug("Function @ %x returns status %d\n", commandStack[i]->cmds[j].ptr, ret);
if (isDebug())
msgDebug("Function @ %x returns status %d\n", commandStack[i]->cmds[j].ptr, ret);
}
}
}

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: config.c,v 1.11 1995/05/28 09:31:29 jkh Exp $
* $Id: config.c,v 1.12 1995/05/28 20:28:07 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -174,7 +174,7 @@ configFstab(void)
}
/* Go for the burn */
msgDebug("Generating /etc/fstab file");
msgDebug("Generating /etc/fstab file\n");
for (i = 0; i < nchunks; i++) {
fprintf(fstab, "/dev/%s\t\t\t%s\t\t%s %s %d %d\n", nameof(chunk_list[i]), mount_point(chunk_list[i]),
fstype(chunk_list[i]), fstype_short(chunk_list[i]), seq_num(chunk_list[i]),
@ -351,7 +351,7 @@ configPackages(char *str)
i = (pid == -1) ? -1 : WEXITSTATUS(pstat);
}
}
if (i != 0)
if (i != 0 && isDebug())
msgDebug("pkg_manage returns status of %d\n", i);
return 0;
}

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: devices.c,v 1.32 1995/05/27 23:52:55 jkh Exp $
* $Id: devices.c,v 1.33 1995/05/28 09:31:31 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -183,15 +183,28 @@ deviceGetAll(void)
int i;
for (i = 0; names[i]; i++) {
Chunk *c1;
Disk *d;
d = Open_Disk(names[i]);
if (!d)
msgFatal("Unable to open disk %s", names[i]);
(void)deviceRegister(names[i], names[i], d->name, DEVICE_TYPE_DISK, FALSE,
mediaInitUFS, mediaGetUFS, NULL, deviceDiskFree, d);
(void)deviceRegister(names[i], names[i], d->name, DEVICE_TYPE_DISK, FALSE, NULL, NULL, NULL, NULL, d);
msgDebug("Found a device of type disk named: %s\n", names[i]);
/* Look for existing DOS partitions to register */
for (c1 = d->chunks->part; c1; c1 = c1->next) {
if (c1->type == fat) {
Device *dev;
/* Got one! */
dev = deviceRegister(c1->name, c1->name, c1->name, DEVICE_TYPE_DOS, TRUE,
mediaInitDOS, mediaGetDOS, NULL, mediaShutdownDOS, NULL);
dev->private = c1;
msgDebug("Found a DOS partition %s on drive %s\n", c1->name, d->name);
}
}
}
free(names);
}

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: dist.c,v 1.30 1995/05/28 09:43:36 jkh Exp $
* $Id: dist.c,v 1.31 1995/05/28 20:28:11 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -250,7 +250,8 @@ distExtract(char *parent, Distribution *me)
snprintf(buf, 512, "%s/%s.tgz", path, dist);
fd = (*mediaDevice->get)(buf);
if (fd != -1) {
status = mediaExtractDist(me[i].my_name, me[i].my_dir, fd);
msgNotify("Extracting %s into %s directory...", me[i].my_name, me[i].my_dir);
status = mediaExtractDist(me[i].my_dir, fd);
if (mediaDevice->close)
(*mediaDevice->close)(mediaDevice, fd);
else
@ -260,14 +261,16 @@ distExtract(char *parent, Distribution *me)
snprintf(buf, sizeof buf, "/stand/info/%s/%s.inf", path, dist);
if (!access(buf, R_OK)) {
msgDebug("Parsing attributes file for %s\n", dist);
if (isDebug())
msgDebug("Parsing attributes file for %s\n", dist);
dist_attr = safe_malloc(sizeof(Attribs) * MAX_ATTRIBS);
if (attr_parse(&dist_attr, buf) == 0) {
msgConfirm("Cannot load information file for %s distribution!\nPlease verify that your media is valid and try again.", dist);
return FALSE;
}
msgDebug("Looking for attribute `pieces'\n");
if (isDebug())
msgDebug("Looking for attribute `pieces'\n");
tmp = attr_match(dist_attr, "pieces");
if (tmp)
numchunks = atoi(tmp);
@ -277,7 +280,8 @@ distExtract(char *parent, Distribution *me)
else
numchunks = 0;
msgDebug("Attempting to extract distribution from %u chunks.\n", numchunks);
if (isDebug())
msgDebug("Attempting to extract distribution from %u chunks.\n", numchunks);
if (numchunks < 2 ) {
snprintf(buf, 512, "%s/%s", path, dist);
@ -287,7 +291,8 @@ distExtract(char *parent, Distribution *me)
if (fd == -1) {
status = FALSE;
} else {
status = mediaExtractDist(me[i].my_name, me[i].my_dir, fd);
msgNotify("Extracting %s into %s directory...", me[i].my_name, me[i].my_dir);
status = mediaExtractDist(me[i].my_dir, fd);
if (mediaDevice->close)
(*mediaDevice->close)(mediaDevice, fd);
else
@ -296,9 +301,11 @@ distExtract(char *parent, Distribution *me)
goto done;
}
mediaExtractDistBegin(dist, me[i].my_dir, &fd2, &zpid, &cpid);
mediaExtractDistBegin(me[i].my_dir, &fd2, &zpid, &cpid);
dialog_clear();
for (chunk = 0; chunk < numchunks; chunk++) {
int n, retval;
char prompt[80];
snprintf(buf, 512, "%s/%s.%c%c", path, dist, (chunk / 26) + 'a', (chunk % 26) + 'a');
fd = (*mediaDevice->get)(buf);
@ -306,6 +313,8 @@ distExtract(char *parent, Distribution *me)
msgConfirm("failed to retreive piece file %s!\nAborting the transfer", buf);
goto punt;
}
snprintf(prompt, 80, "Extracting %s into %s directory...", me[i].my_name, me[i].my_dir);
dialog_gauge(" Progress ", prompt, 8, 10, 10, 40, (numchunks / (chunk + 1)));
while ((n = read(fd, buf, sizeof buf)) > 0) {
retval = write(fd2, buf, n);
if (retval != n)
@ -354,5 +363,6 @@ distExtract(char *parent, Distribution *me)
void
distExtractAll(void)
{
distExtract(NULL, DistTable);
while (Dists)
distExtract(NULL, DistTable);
}

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: dos.c,v 1.2 1995/05/27 23:39:28 phk Exp $
* $Id: dos.c,v 1.3 1995/05/28 03:04:54 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -69,6 +69,7 @@ mediaInitDOS(Device *dev)
if (Mkdir("/dos", NULL))
return FALSE;
bzero(&args, sizeof(args));
args.fspec = dev->devname;
args.uid = args.gid = 0;
@ -85,7 +86,10 @@ mediaGetDOS(char *file)
{
char buf[PATH_MAX];
snprintf(buf, PATH_MAX, "/dos/%s", file);
snprintf(buf, PATH_MAX, "/dos/freebsd/%s", file);
if (!access(buf, R_OK))
return open(buf, O_RDONLY);
snprintf(buf, PATH_MAX, "/dos/freebsd/dists/%s", file);
return open(buf, O_RDONLY);
}
@ -97,7 +101,8 @@ mediaShutdownDOS(Device *dev)
msgDebug("Unmounting /dos\n");
if (unmount("/dos", 0) != 0)
msgConfirm("Could not unmount the DOS partition: %s\n", strerror(errno));
msgDebug("Unmount returned\n");
if (isDebug())
msgDebug("Unmount returned\n");
DOSMounted = FALSE;
return;
}

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: floppy.c,v 1.3 1995/05/28 03:04:56 jkh Exp $
* $Id: floppy.c,v 1.4 1995/05/29 00:50:01 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -142,7 +142,6 @@ mediaGetFloppy(char *file)
char buf[PATH_MAX];
snprintf(buf, PATH_MAX, "/mnt/%s", file);
return open(buf, O_RDONLY);
}

View file

@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
* $Id: ftp.c,v 1.10 1995/05/26 19:28:01 jkh Exp $
* $Id: ftp.c,v 1.11 1995/05/27 06:19:59 phk Exp $
*
*/
@ -48,7 +48,8 @@ debug(FTP_t ftp, const char *fmt, ...)
#ifdef STANDALONE_FTP
write(ftp->fd_debug,p,strlen(p));
#else
msgDebug(p);
if (isDebug())
msgDebug(p);
#endif
}

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: install.c,v 1.65 1995/05/28 23:12:05 jkh Exp $
* $Id: install.c,v 1.66 1995/05/29 00:50:02 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -254,6 +254,10 @@ installCommit(char *str)
fclose(fp);
hostsModified = TRUE;
}
/* If there's no kernel but there is a kernel.GENERIC, link it over */
if (access("/kernel", R_OK))
vsystem("ln -f /kernel.GENERIC /kernel");
msgConfirm("Installation completed successfully.\nHit return now to go back to the main menu.");
SystemWasInstalled = TRUE;
return 0;
@ -379,7 +383,7 @@ copy_self(void)
msgConfirm("Copy returned error status of %d!", i);
/* Copy the /etc files into their rightful place */
(void)vsystem("(cd /stand; find etc) | cpio -pdmv /mnt");
(void)vsystem("cd /mnt/stand; find etc | cpio -pdmv /mnt");
}
static void loop_on_root_floppy();
@ -391,7 +395,7 @@ root_extract(void)
if (OnCDROM) {
fd = open("/floppies/root.flp", O_RDONLY);
(void)mediaExtractDist("root.flp", "/", fd);
(void)mediaExtractDist("/", fd);
return;
}
if (mediaDevice) {
@ -408,7 +412,7 @@ root_extract(void)
fd = (*mediaDevice->get)("floppies/root.flp");
if (fd != -1) {
msgNotify("Loading root floppy from %s", mediaDevice->name);
(void)mediaExtractDist("root.flp", "/", fd);
(void)mediaExtractDist("/", fd);
if (mediaDevice->close)
(*mediaDevice->close)(mediaDevice, fd);
else
@ -416,12 +420,14 @@ root_extract(void)
if (mediaDevice->shutdown)
(*mediaDevice->shutdown)(mediaDevice);
} else {
msgConfirm("Couldn't get root floppy image from %s\n, falling back to floppy.", mediaDevice->name);
if (mediaDevice->shutdown)
(*mediaDevice->shutdown)(mediaDevice);
loop_on_root_floppy();
}
break;
case DEVICE_TYPE_TAPE:
case DEVICE_TYPE_FLOPPY:
default:
loop_on_root_floppy();
@ -437,7 +443,11 @@ loop_on_root_floppy(void)
{
int fd;
fd = getRootFloppy();
if (fd != -1)
mediaExtractDist("root.flp", "/", fd);
while (1) {
fd = getRootFloppy();
if (fd != -1) {
mediaExtractDist("/", fd);
break;
}
}
}

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: media.c,v 1.20 1995/05/27 23:39:31 phk Exp $
* $Id: media.c,v 1.21 1995/05/28 03:04:58 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -164,13 +164,15 @@ int
mediaSetDOS(char *str)
{
Device **devs;
Disk *d;
Chunk *c1;
int i, cnt;
int cnt;
devs = deviceFind(NULL, DEVICE_TYPE_DOS);
cnt = deviceCount(devs);
if (cnt > 1) {
if (!cnt) {
msgConfirm("No DOS primary partitions found! This installation method is unavailable");
return 0;
}
else if (cnt > 1) {
DMenu *menu;
menu = deviceCreateMenu(&MenuMediaDOS, DEVICE_TYPE_DOS, DOSHook);
@ -179,34 +181,8 @@ mediaSetDOS(char *str)
dmenuOpenSimple(menu);
free(menu);
}
else if (cnt) {
else
mediaDevice = devs[0];
return 1;
}
else {
devs = deviceFind(NULL, DEVICE_TYPE_DISK);
if (!devs) {
msgConfirm("No disk devices found!");
return 0;
}
/* Now go chewing through looking for a DOS FAT partition */
for (i = 0; devs[i]; i++) {
d = (Disk *)devs[i]->private;
/* Now try to find a DOS partition */
for (c1 = d->chunks->part; c1; c1 = c1->next) {
if (c1->type == fat) {
/* Got one! */
mediaDevice = deviceRegister(c1->name, c1->name, c1->name, DEVICE_TYPE_DOS, TRUE,
mediaInitDOS, mediaGetDOS, NULL, mediaShutdownDOS, NULL);
mediaDevice->private = c1;
msgDebug("Found a DOS partition %s on drive %s\n", c1->name, d->name);
break;
}
}
}
}
if (!mediaDevice)
msgConfirm("No DOS primary partitions found! This installation method is unavailable");
return mediaDevice ? 1 : 0;
}
@ -280,25 +256,49 @@ mediaSetFTP(char *str)
return 1;
}
/*
* Return 0 if we successfully found and set the installation type to
* be some sort of mounted filesystem (it's also mounted at this point)
*/
int
mediaSetFS(char *str)
mediaSetUFS(char *str)
{
return 0;
static Device ufsDevice;
char *val;
val = msgGetInput(NULL, "Enter a fully qualified pathname for the directory\ncontaining the FreeBSD distribtion files:");
if (!val)
return 0;
strcpy(ufsDevice.name, "ufs");
ufsDevice.type = DEVICE_TYPE_UFS;
ufsDevice.get = mediaGetUFS;
ufsDevice.private = strdup(val);
mediaDevice = &ufsDevice;
return 1;
}
int
mediaSetNFS(char *str)
{
static Device nfsDevice;
char *val;
val = msgGetInput(NULL, "Please enter the full NFS file specification for the remote\nhost and directory containing the FreeBSD distribution files.\nThis should be in the format: hostname:/some/freebsd/dir");
if (!val)
return 0;
strcpy(nfsDevice.name, "nfs");
nfsDevice.type = DEVICE_TYPE_NFS;
nfsDevice.init = mediaInitNFS;
nfsDevice.get = mediaGetNFS;
nfsDevice.shutdown = mediaShutdownNFS;
nfsDevice.private = strdup(val);
mediaDevice = &nfsDevice;
return 1;
}
Boolean
mediaExtractDistBegin(char *distname, char *dir, int *fd, int *zpid, int *cpid)
mediaExtractDistBegin(char *dir, int *fd, int *zpid, int *cpid)
{
int i, pfd[2],qfd[2];
if (!dir)
dir = "/";
msgWeHaveOutput("Extracting %s into %s directory..", distname, dir);
Mkdir(dir, NULL);
chdir(dir);
pipe(pfd);
@ -316,7 +316,8 @@ mediaExtractDistBegin(char *distname, char *dir, int *fd, int *zpid, int *cpid)
close(qfd[1]);
close(pfd[0]);
i = execl("/stand/gunzip", "/stand/gunzip", 0);
msgDebug("/stand/gunzip command returns %d status\n", i);
if (isDebug())
msgDebug("/stand/gunzip command returns %d status\n", i);
exit(i);
}
*fd = qfd[1];
@ -335,7 +336,8 @@ mediaExtractDistBegin(char *distname, char *dir, int *fd, int *zpid, int *cpid)
dup2(1, 2);
}
i = execl("/stand/cpio", "/stand/cpio", "-iduVm", "-H", "tar", 0);
msgDebug("/stand/cpio command returns %d status\n", i);
if (isDebug())
msgDebug("/stand/cpio command returns %d status\n", i);
exit(i);
}
close(pfd[0]);
@ -351,13 +353,15 @@ mediaExtractDistEnd(int zpid, int cpid)
i = waitpid(zpid, &j, 0);
if (i < 0) { /* Don't check status - gunzip seems to return a bogus one! */
dialog_clear();
msgDebug("wait for gunzip returned status of %d!\n", i);
if (isDebug())
msgDebug("wait for gunzip returned status of %d!\n", i);
return FALSE;
}
i = waitpid(cpid, &j, 0);
if (i < 0 || WEXITSTATUS(j)) {
dialog_clear();
msgDebug("cpio returned error status of %d!\n", WEXITSTATUS(j));
if (isDebug())
msgDebug("cpio returned error status of %d!\n", WEXITSTATUS(j));
return FALSE;
}
return TRUE;
@ -365,13 +369,12 @@ mediaExtractDistEnd(int zpid, int cpid)
Boolean
mediaExtractDist(char *distname, char *dir, int fd)
mediaExtractDist(char *dir, int fd)
{
int i, j, zpid, cpid, pfd[2];
if (!dir)
dir = "/";
msgWeHaveOutput("Extracting %s into %s directory..", distname, dir);
Mkdir(dir, NULL);
chdir(dir);
@ -388,7 +391,8 @@ mediaExtractDist(char *distname, char *dir, int fd)
}
close(pfd[0]);
i = execl("/stand/gunzip", "/stand/gunzip", 0);
msgDebug("/stand/gunzip command returns %d status\n", i);
if (isDebug())
msgDebug("/stand/gunzip command returns %d status\n", i);
exit(i);
}
cpid = fork();
@ -405,7 +409,8 @@ mediaExtractDist(char *distname, char *dir, int fd)
dup2(1, 2);
}
i = execl("/stand/cpio", "/stand/cpio", "-iduVm", "-H", "tar", 0);
msgDebug("/stand/cpio command returns %d status\n", i);
if (isDebug())
msgDebug("/stand/cpio command returns %d status\n", i);
exit(i);
}
close(pfd[0]);
@ -414,13 +419,15 @@ mediaExtractDist(char *distname, char *dir, int fd)
i = waitpid(zpid, &j, 0);
if (i < 0) { /* Don't check status - gunzip seems to return a bogus one! */
dialog_clear();
msgDebug("wait for gunzip returned status of %d!\n", i);
if (isDebug())
msgDebug("wait for gunzip returned status of %d!\n", i);
return FALSE;
}
i = waitpid(cpid, &j, 0);
if (i < 0 || WEXITSTATUS(j)) {
dialog_clear();
msgDebug("cpio returned error status of %d!\n", WEXITSTATUS(j));
if (isDebug())
msgDebug("cpio returned error status of %d!\n", WEXITSTATUS(j));
return FALSE;
}
return TRUE;

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: menus.c,v 1.36 1995/05/28 23:12:07 jkh Exp $
* $Id: menus.c,v 1.37 1995/05/29 01:43:17 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -302,12 +302,14 @@ method.",
DMENU_CALL, mediaSetCDROM, 0, 0 },
{ "DOS", "Install from a DOS partition",
DMENU_CALL, mediaSetDOS, 0, 0 },
{ "File System", "Install from a UFS or NFS mounted distribution",
DMENU_CALL, mediaSetFS, 0, 0 },
{ "File System", "Install from a mounted filesystem",
DMENU_CALL, mediaSetUFS, 0, 0 },
{ "Floppy", "Install from a floppy disk set",
DMENU_CALL, mediaSetFloppy, 0, 0 },
{ "FTP", "Install from an Internet FTP server",
DMENU_CALL, mediaSetFTP, 0, 0 },
{ "NFS", "Install over NFS",
DMENU_CALL, mediaSetNFS, 0, 0 },
{ "Tape", "Install from SCSI or QIC tape",
DMENU_CALL, mediaSetTape, 0, 0 },
{ NULL } },
@ -642,7 +644,7 @@ When you're done, select Cancel",
"Press F1 for more information on these options",
"configure.hlp",
{ { "Add User", "Add users to the system",
DMENU_SYSTEM_COMMAND, "adduser", 0, 0 },
DMENU_SYSTEM_COMMAND, "adduser -silent", 0, 0 },
{ "Console", "Customize system console behavior",
DMENU_SUBMENU, &MenuSyscons, 0, 0 },
{ "Networking", "Configure additional network services",
@ -700,11 +702,11 @@ close to you to have your system time syncronized accordingly.",
DMENU_SET_VARIABLE, "ntpdate=canon.inria.fr", 0, 0 },
{ "Germany", "ntps1-{0,1,2}.uni-erlangen.de (GPS)",
DMENU_SET_VARIABLE, "ntpdate=ntps1-0.uni-erlangen.de", 0, 0 },
{ "Germany", "ntps1-0.cs.tu-berlin.de (GPS)",
{ "Germany #2", "ntps1-0.cs.tu-berlin.de (GPS)",
DMENU_SET_VARIABLE, "ntpdate=ntps1-0.cs.tu-berlin.de", 0, 0 },
{ "Japan", "clock.nc.fukuoka-u.ac.jp (GPS clock)",
DMENU_SET_VARIABLE, "ntpdate=clock.nc.fukuoka-u.ac.jp", 0, 0},
{ "Japan", "clock.tl.fukuoka-u.ac.jp (GPS clock)",
{ "Japan #2", "clock.tl.fukuoka-u.ac.jp (GPS clock)",
DMENU_SET_VARIABLE, "ntpdate=clock.tl.fukuoka-u.ac.jp", 0, 0},
{ "Netherlands", "ntp0.nl.net (GPS clock)",
DMENU_SET_VARIABLE, "ntpdate=ntp0.nl.net", 0, 0 },
@ -716,20 +718,20 @@ close to you to have your system time syncronized accordingly.",
DMENU_SET_VARIABLE, "ntpdate=swisstime.ethz.ch", 0, 0 },
{ "U.S. East Coast", "bitsy.mit.edu (WWV clock)",
DMENU_SET_VARIABLE, "ntpdate=bitsy.mit.edu", 0, 0 },
{ "U.S. East Coast", "otc1.psu.edu (WWV clock)",
{ "U.S. East Coast #2", "otc1.psu.edu (WWV clock)",
DMENU_SET_VARIABLE, "ntpdate=otc1.psu.edu", 0, 0 },
{ "U.S. West Coast", "apple.com (WWV clock)",
DMENU_SET_VARIABLE, "ntpdate=apple.com", 0, 0 },
{ "U.S. West Coast", "clepsydra.dec.com (GOES clock)",
{ "U.S. West Coast #2", "clepsydra.dec.com (GOES clock)",
DMENU_SET_VARIABLE, "ntpdate=clepsydra.dec.com", 0, 0 },
{ "U.S. West Coast", "clock.llnl.gov (WWVB clock)",
DMENU_SET_VARIABLE, "ntpdate=clock.llnl.gov", 0, 0 },
{ "U.S. West Coast #3", "clock.llnl.gov (WWVB clock)",
DMENU_SET_VARIABLE, "ntpdate=clock.llnl.gov", 0, 0 },
{ "U.S. Midwest", "ncar.ucar.edu (WWVB clock)",
DMENU_SET_VARIABLE, "ntpdate=ncar.ucar.edu", 0, 0 },
DMENU_SET_VARIABLE, "ntpdate=ncar.ucar.edu", 0, 0 },
{ "U.S. Pacific", "chantry.hawaii.net (WWV/H clock)",
DMENU_SET_VARIABLE, "ntpdate=chantry.hawaii.net", 0, 0 },
{ "U.S. Southwest", "shorty.chpc.utexas.edu (WWV clock)",
DMENU_SET_VARIABLE, "ntpdate=shorty.chpc.utexas.edu", 0, 0 },
DMENU_SET_VARIABLE, "ntpdate=shorty.chpc.utexas.edu", 0, 0 },
{ NULL } },
};
@ -738,9 +740,9 @@ DMenu MenuSyscons = {
"System Console Configuration",
"The default system console driver for FreeBSD (syscons) has a\n\
number of configuration options which may be set according to\n\
your preference. When you are done setting configuration options,\n\
select Cancel.",
"Configure your screen saver settings",
your preference.\n\n\
When you are done setting configuration options, select Cancel.",
"Configure your system console settings",
NULL,
{ { "Keymap", "Choose an alternate keyboard map",
DMENU_SUBMENU, &MenuSysconsKeymap, 0, 0 },
@ -798,9 +800,9 @@ when held down.",
NULL,
{ { "Slow", "Slow keyboard repeat rate",
DMENU_SET_VARIABLE, "keyrate=slow", 0, 0 },
{ "Normal", "\"normal\" keyboard repeat rate",
{ "Normal", "\"Normal\" keyboard repeat rate",
DMENU_SET_VARIABLE, "keyrate=normal", 0, 0 },
{ "Fast", "fast keyboard repeat rate",
{ "Fast", "Fast keyboard repeat rate",
DMENU_SET_VARIABLE, "keyrate=fast", 0, 0 },
{ "Default", "Use default keyboard repeat rate",
DMENU_SET_VARIABLE, "keyrate=NO", 0, 0 },
@ -818,11 +820,11 @@ probably enable one of these screen savers to prevent phosphor burn-in.",
NULL,
{ { "blank", "Simply blank the screen",
DMENU_SET_VARIABLE, "saver=star", 0, 0 },
{ "Green", "\"green\" power saving mode (if supported by monitor)",
{ "Green", "\"Green\" power saving mode (if supported by monitor)",
DMENU_SET_VARIABLE, "saver=snake", 0, 0 },
{ "Snake", "Draw a FreeBSD \"snake\" on your screen",
DMENU_SET_VARIABLE, "saver=snake", 0, 0 },
{ "Star", "\"twinkling stars\" effect",
{ "Star", "A \"twinkling stars\" effect",
DMENU_SET_VARIABLE, "saver=star", 0, 0 },
{ "Timeout", "Set the screen saver timeout interval",
DMENU_CALL, configSaverTimeout, 0, 0 },

View file

@ -1,7 +1,7 @@
/*
* Miscellaneous support routines..
*
* $Id: misc.c,v 1.8 1995/05/23 18:06:15 jkh Exp $
* $Id: misc.c,v 1.9 1995/05/25 01:22:19 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -183,7 +183,8 @@ Mkdir(char *ipath, void *data)
return 0;
path = strdup(ipath);
msgDebug("mkdir(%s)\n", path);
if (isDebug())
msgDebug("mkdir(%s)\n", path);
p = path;
if (p[0] == '/') /* Skip leading '/'. */
++p;
@ -198,7 +199,8 @@ Mkdir(char *ipath, void *data)
msgConfirm("Couldn't stat directory %s: %s", path, strerror(errno));
return 1;
}
msgDebug("mkdir(%s..)\n", path);
if (isDebug())
msgDebug("mkdir(%s..)\n", path);
if (mkdir(path, S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
msgConfirm("Couldn't create directory %s: %s", path,strerror(errno));
return 1;
@ -231,7 +233,9 @@ Mount(char *mountp, void *dev)
msgConfirm("Unable to make directory mountpoint for %s!", mountpoint);
return 1;
}
msgDebug("mount %s %s\n", device, mountpoint);
if (isDebug())
msgDebug("mount %s %s\n", device, mountpoint);
bzero(&ufsargs, sizeof(ufsargs));
ufsargs.fspec = device;
if (mount(MOUNT_UFS, mountpoint, 0, (caddr_t)&ufsargs) == -1) {
msgConfirm("Error mounting %s on %s : %s\n", device, mountpoint, strerror(errno));

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: msg.c,v 1.25 1995/05/29 00:50:04 jkh Exp $
* $Id: msg.c,v 1.26 1995/05/29 01:43:18 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -49,6 +49,17 @@
#define VTY_STATLINE 24
#define TTY_STATLINE 23
Boolean
isDebug(void)
{
char *cp;
cp = getenv("debug");
if (cp && !strcmp(cp, "yes"))
return TRUE;
return FALSE;
}
/* Whack up an informational message on the status line, in stand-out */
void
msgYap(char *fmt, ...)
@ -105,7 +116,8 @@ msgInfo(char *fmt, ...)
move(OnVTY ? VTY_STATLINE : TTY_STATLINE, 79);
refresh();
if (OnVTY) {
msgDebug("Information: `%s'\n", errstr);
if (isDebug())
msgDebug("Information: `%s'\n", errstr);
msgInfo(NULL);
}
free(errstr);
@ -130,7 +142,7 @@ msgWarn(char *fmt, ...)
mvaddstr(OnVTY ? VTY_STATLINE : TTY_STATLINE, 0, errstr);
attrset(attrs);
refresh();
if (OnVTY)
if (OnVTY && isDebug())
msgDebug("Warning message `%s'\n", errstr);
free(errstr);
}
@ -154,7 +166,7 @@ msgError(char *fmt, ...)
mvaddstr(OnVTY ? VTY_STATLINE : TTY_STATLINE, 0, errstr);
attrset(attrs);
refresh();
if (OnVTY)
if (OnVTY && isDebug())
msgDebug("Error message `%s'\n", errstr);
free(errstr);
}
@ -231,7 +243,8 @@ msgNotify(char *fmt, ...)
va_end(args);
use_helpline(NULL);
use_helpfile(NULL);
msgDebug("Notify: %s\n", errstr);
if (isDebug())
msgDebug("Notify: %s\n", errstr);
dialog_clear();
dialog_msgbox("Information Dialog", errstr, -1, -1, 0);
free(errstr);
@ -254,8 +267,8 @@ msgYesNo(char *fmt, ...)
use_helpfile(NULL);
w = dupwin(newscr);
if (OnVTY) {
msgDebug("Switching back to VTY 0\n");
ioctl(0, VT_RELDISP, 1); /* Switch back */
msgDebug("User decision requested (type ALT-F1)\n");
msgInfo(NULL);
}
ret = dialog_yesno("User Confirmation Requested", errstr, -1, -1);

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: network.c,v 1.3 1995/05/28 09:31:38 jkh Exp $
* $Id: network.c,v 1.4 1995/05/29 01:43:20 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -47,6 +47,7 @@
#include "sysinstall.h"
#include <sys/fcntl.h>
#include <sys/stat.h>
static Boolean networkInitialized;
static Boolean startPPP(Device *devp);
@ -68,8 +69,22 @@ mediaInitNetwork(Device *dev)
return FALSE;
}
}
else
msgConfirm("Warning: SLIP is rather poorly supported in this revision\nof the installation due to the lack of a dialing utility.\nIf you can use PPP for this instead then you're much better\noff doing so, otherwise SLIP works fairly well for *hardwired*\nlinks. Use the shell on the 4TH screen (ALT-F4) to run slattach\nand otherwise set the link up, then hit return here to continue.");
else {
char *val;
char attach[256];
/* Cheesy slip attach */
snprintf(attach, 256, "slattach -a -h -l -s 9600 %s", dev->devname);
val = msgGetInput(attach, "Warning: SLIP is rather poorly supported in this revision\nof the installation due to the lack of a dialing utility.\nIf you can use PPP for this instead then you're much better\noff doing so, otherwise SLIP works fairly well for *hardwired*\nlinks. Please edit the following slattach command for\ncorrectness (default here is VJ compression, Hardware flow-control,\nignore carrier and 9600 baud data rate) and hit return to execute it.");
if (!val)
return FALSE;
else if (!vsystem(attach))
return TRUE;
else {
msgConfirm("slattach returned a bad status! Please verify that\nthe command is correct and try again.");
return FALSE;
}
}
}
else {
char *cp, ifconfig[64];

View file

@ -1,21 +1,97 @@
/*
* The new sysinstall program.
*
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: media.c,v 1.21 1995/05/28 03:04:58 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer,
* verbatim and that no modifications are made prior to this
* point in the file.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Jordan Hubbard
* for the FreeBSD Project.
* 4. The name of Jordan Hubbard or the FreeBSD project may not be used to
* endorse or promote products derived from this software without specific
* prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*/
#include "sysinstall.h"
#include <stdio.h>
#include <ctype.h>
#include <sys/stat.h>
#include <sys/errno.h>
#include <sys/file.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/fcntl.h>
#include <sys/syslimits.h>
#include <sys/param.h>
#include <sys/dkbad.h>
#include <sys/mman.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include "ftp.h"
#define NFS
#include <sys/mount.h>
#undef NFS
Boolean NFSMounted;
Boolean
mediaInitNFS(Device *dev)
{
if (NFSMounted)
return TRUE;
if (Mkdir("/nfs", NULL))
return FALSE;
if (!vsystem("mount_nfs %s %s %s /nfs", getenv("nfsSlowPC") ? "-r 1024 -w 1024" : "",
getenv("nfsServerSecure") ? "-P" : "", dev->private))
return TRUE;
else {
msgConfirm("Error mounting %s on /nfs: %s (%u)\n", dev->private, strerror(errno), errno);
return FALSE;
}
NFSMounted = TRUE;
return TRUE;
}
int
mediaGetNFS(char *file)
{
char buf[PATH_MAX];
snprintf(buf, PATH_MAX, "/nfs/%s", file);
if (!access(buf, R_OK))
return open(buf, O_RDONLY);
snprintf(buf, PATH_MAX, "/nfs/dists/%s", file);
return open(buf, O_RDONLY);
}
void
mediaShutdownNFS(Device *dev)
{
if (!NFSMounted)
return;
msgDebug("Unmounting /nfs\n");
if (unmount("/nfs", 0) != 0)
msgConfirm("Could not unmount the NFS partition: %s\n", strerror(errno));
if (isDebug())
msgDebug("Unmount returned\n");
NFSMounted = FALSE;
return;
}

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: sysinstall.h,v 1.38 1995/05/28 03:05:03 jkh Exp $
* $Id: sysinstall.h,v 1.39 1995/05/28 09:31:39 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -160,6 +160,8 @@ typedef enum {
DEVICE_TYPE_CDROM,
DEVICE_TYPE_TAPE,
DEVICE_TYPE_DOS,
DEVICE_TYPE_UFS,
DEVICE_TYPE_NFS,
DEVICE_TYPE_ANY,
} DeviceType;
@ -378,10 +380,11 @@ extern int mediaSetFloppy(char *str);
extern int mediaSetDOS(char *str);
extern int mediaSetTape(char *str);
extern int mediaSetFTP(char *str);
extern int mediaSetFS(char *str);
extern int mediaSetUFS(char *str);
extern int mediaSetNFS(char *str);
extern Boolean mediaGetType(void);
extern Boolean mediaExtractDist(char *distname, char *dir, int fd);
extern Boolean mediaExtractDistBegin(char *distname, char *dir, int *fd, int *zpid, int *cpic);
extern Boolean mediaExtractDist(char *dir, int fd);
extern Boolean mediaExtractDistBegin(char *dir, int *fd, int *zpid, int *cpic);
extern Boolean mediaExtractDistEnd(int zpid, int cpid);
extern Boolean mediaVerify(void);
@ -403,6 +406,7 @@ extern int Mount(char *, void *data);
extern int Mount_DOS(char *, void *data);
/* msg.c */
extern Boolean isDebug(void);
extern void msgInfo(char *fmt, ...);
extern void msgYap(char *fmt, ...);
extern void msgWarn(char *fmt, ...);
@ -420,6 +424,11 @@ extern Boolean mediaInitNetwork(Device *dev);
extern void mediaShutdownNetwork(Device *dev);
extern int configRoutedFlags(char *str);
/* nfs.c */
extern Boolean mediaInitNFS(Device *dev);
extern int mediaGetNFS(char *file);
extern void mediaShutdownNFS(Device *dev);
/* system.c */
extern void systemInitialize(int argc, char **argv);
extern void systemShutdown(void);
@ -448,6 +457,7 @@ extern int tcpDeviceSelect(char *str);
extern int set_termcap(void);
/* ufs.c */
extern void mediaShutdownUFS(Device *dev);
extern Boolean mediaInitUFS(Device *dev);
extern int mediaGetUFS(char *file);

View file

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: system.c,v 1.40 1995/05/29 00:50:05 jkh Exp $
* $Id: system.c,v 1.41 1995/05/29 02:13:31 phk Exp $
*
* Jordan Hubbard
*
@ -102,10 +102,8 @@ systemShutdown(void)
}
/* REALLY exit! */
if (RunningAsInit) {
int fd, on = 1;
/* Put the console back */
ioctl(0, VT_RELDISP, 1);
ioctl(DebugFD, VT_RELDISP, 1);
reboot(RB_HALT);
}
else
@ -187,7 +185,6 @@ systemDisplayFile(char *file)
use_helpline(NULL);
w = dupwin(newscr);
dialog_textbox(file, fname, LINES, COLS);
unlink(fname);
touchwin(w);
wrefresh(w);
delwin(w);
@ -199,24 +196,45 @@ char *
systemHelpFile(char *file, char *buf)
{
char *cp;
static char oldfile[64]; /* Should be FILENAME_MAX but I don't feel like wasting that much space */
if (!file)
return NULL;
if ((cp = getenv("LANG")) != NULL) {
snprintf(buf, FILENAME_MAX, "%s/%s", cp, file);
vsystem("cd /stand && zcat help.tgz | cpio --format=tar -idv %s",buf);
if (oldfile[0]) {
if (!strcmp(buf, oldfile))
return oldfile;
else {
unlink(oldfile);
oldfile[0] = '\0';
}
}
vsystem("cd /stand && zcat help.tgz | cpio --format=tar -idv %s > /dev/null 2>&1",buf);
snprintf(buf, FILENAME_MAX, "/stand/%s/%s", cp, file);
if (file_readable(buf))
if (file_readable(buf)) {
strcpy(oldfile, buf);
return buf;
}
}
/* Fall back to normal imperialistic mode :-) */
cp = "en_US.ISO8859-1";
snprintf(buf, FILENAME_MAX, "%s/%s", cp, file);
vsystem("cd /stand && zcat help.tgz | cpio --format=tar -idv %s",buf);
if (oldfile[0]) {
if (!strcmp(buf, oldfile))
return oldfile;
else {
unlink(oldfile);
oldfile[0] = '\0';
}
}
vsystem("cd /stand && zcat help.tgz | cpio --format=tar -idv %s > /dev/null 2>&1",buf);
snprintf(buf, FILENAME_MAX, "/stand/%s/%s", cp, file);
if (file_readable(buf))
if (file_readable(buf)) {
strcpy(oldfile, buf);
return buf;
}
return NULL;
}
@ -290,11 +308,14 @@ vsystem(char *fmt, ...)
va_start(args, fmt);
vsnprintf(cmd, FILENAME_MAX, fmt, args);
va_end(args);
/* Find out if this command needs the wizardry of the shell */
for (p="<>|'`=\"()" ; *p; p++)
if (strchr(cmd,*p)) magic++;
if (strchr(cmd, *p))
magic++;
omask = sigblock(sigmask(SIGCHLD));
msgDebug("Executing command `%s' (Magic=%d)\n", cmd, magic);
if (isDebug())
msgDebug("Executing command `%s' (Magic=%d)\n", cmd, magic);
switch(pid = fork()) {
case -1: /* error */
(void)sigsetmask(omask);
@ -303,7 +324,7 @@ vsystem(char *fmt, ...)
case 0: /* child */
(void)sigsetmask(omask);
if (DebugFD != -1) {
if (OnVTY)
if (OnVTY && isDebug())
msgInfo("Command output is on debugging screen - type ALT-F2 to see it");
dup2(DebugFD, 0);
dup2(DebugFD, 1);
@ -311,29 +332,29 @@ vsystem(char *fmt, ...)
}
#ifdef NOT_A_GOOD_IDEA_CRUNCHED_BINARY
if (magic) {
char *argv[100];
i = 0;
argv[i++] = "crunch";
argv[i++] = "sh";
argv[i++] = "-c";
argv[i++] = cmd;
argv[i] = 0;
exit(crunched_main(i,argv));
char *argv[100];
i = 0;
argv[i++] = "crunch";
argv[i++] = "sh";
argv[i++] = "-c";
argv[i++] = cmd;
argv[i] = 0;
exit(crunched_main(i,argv));
} else {
char *argv[100];
i = 0;
argv[i++] = "crunch";
while (cmd && *cmd) {
argv[i] = strsep(&cmd," \t");
if (*argv[i])
i++;
}
argv[i] = 0;
if (crunched_here(argv[1]))
exit(crunched_main(i,argv));
else
execvp(argv[1],argv+1);
kill(getpid(),9);
char *argv[100];
i = 0;
argv[i++] = "crunch";
while (cmd && *cmd) {
argv[i] = strsep(&cmd," \t");
if (*argv[i])
i++;
}
argv[i] = 0;
if (crunched_here(argv[1]))
exit(crunched_main(i,argv));
else
execvp(argv[1],argv+1);
kill(getpid(),9);
}
#else /* !CRUNCHED_BINARY */
execl("/stand/sh", "sh", "-c", cmd, (char *)NULL);
@ -347,7 +368,8 @@ vsystem(char *fmt, ...)
(void)signal(SIGINT, intsave);
(void)signal(SIGQUIT, quitsave);
i = (pid == -1) ? -1 : WEXITSTATUS(pstat);
msgDebug("Command `%s' returns status of %d\n", cmd, i);
if (isDebug())
msgDebug("Command `%s' returns status of %d\n", cmd, i);
free(cmd);
return i;
}

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: tape.c,v 1.2 1995/05/27 23:39:33 phk Exp $
* $Id: tape.c,v 1.3 1995/05/28 03:05:04 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -46,21 +46,59 @@
/* These routines deal with getting things off of tape media */
#include "sysinstall.h"
#include <sys/fcntl.h>
#include <sys/param.h>
static Boolean tapeInitted;
Boolean
mediaInitTape(Device *dev)
{
return TRUE;
int i;
if (tapeInitted)
return TRUE;
Mkdir("/usr/tmp/tape", NULL);
if (chdir("/usr/tmp/tape")) {
Mkdir("/var/tmp/tape", NULL);
if (chdir("/var/tmp/tape"))
return FALSE;
}
msgConfirm("Insert tape into %s and press return", dev->description);
if (!strcmp(dev->name, "ft0"))
i = vsystem("ft | tar xvf -");
else
i = vsystem("tar xvf %s", dev->devname);
if (!i) {
tapeInitted = TRUE;
return TRUE;
}
else
msgConfirm("Tape extract command failed with status %d!", i);
return FALSE;
}
int
mediaGetTape(char *file)
{
return -1;
char buf[PATH_MAX];
sprintf(buf, "/usr/tmp/tape/%s", file);
if (!access(buf, R_OK))
return open(buf, O_RDONLY);
sprintf(buf, "/var/tmp/tape/%s", file);
return open(buf, O_RDONLY);
}
void
mediaShutdownTape(Device *dev)
{
return;
if (!tapeInitted)
return;
if (!access("/usr/tmp/tape", X_OK))
(void)vsystem("rm -rf /usr/tmp/tape");
else if (!access("/var/tmp/tape", X_OK))
(void)vsystem("rm -rf /var/tmp/tape");
tapeInitted = FALSE;
}

View file

@ -1,5 +1,5 @@
/*
* $Id: tcpip.c,v 1.25 1995/05/28 09:31:44 jkh Exp $
* $Id: tcpip.c,v 1.26 1995/05/28 23:12:09 jkh Exp $
*
* Copyright (c) 1995
* Gary J Palmer. All rights reserved.
@ -196,12 +196,12 @@ tcpOpenDialog(Device *devp)
/* Setup a nice screen for us to splat stuff onto */
draw_box(ds_win, TCP_DIALOG_Y, TCP_DIALOG_X, TCP_DIALOG_HEIGHT, TCP_DIALOG_WIDTH, dialog_attr, border_attr);
wattrset(ds_win, dialog_attr);
sprintf(title, " Interface %s ", devp->name);
mvwaddstr(ds_win, TCP_DIALOG_Y, TCP_DIALOG_X + 22, title);
mvwaddstr(ds_win, TCP_DIALOG_Y, TCP_DIALOG_X + 15, " Network Configuration ");
draw_box(ds_win, TCP_DIALOG_Y + 9, TCP_DIALOG_X + 8, TCP_DIALOG_HEIGHT - 13, TCP_DIALOG_WIDTH - 17,
dialog_attr, border_attr);
wattrset(ds_win, dialog_attr);
mvwaddstr(ds_win, TCP_DIALOG_Y + 9, TCP_DIALOG_X + 16, " Per Interface Configuration ");
sprintf(title, " Configuration for Interface %s ", devp->name);
mvwaddstr(ds_win, TCP_DIALOG_Y + 9, TCP_DIALOG_X + 14, title);
/* Initialise vars from previous device values */
if (devp->private) {

View file

@ -4,7 +4,7 @@
* This is probably the last attempt in the `sysinstall' line, the next
* generation being slated to essentially a complete rewrite.
*
* $Id: ufs.c,v 1.1 1995/05/27 10:39:04 jkh Exp $
* $Id: ufs.c,v 1.2 1995/05/27 23:39:35 phk Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -44,17 +44,19 @@
*/
#include "sysinstall.h"
#include <sys/fcntl.h>
#include <sys/param.h>
Boolean
mediaInitUFS(Device *dev)
{
return TRUE;
}
/* No init or shutdown routines necessary - all done in mediaSetUFS() */
int
mediaGetUFS(char *file)
{
return -1;
}
char buf[PATH_MAX];
/* UFS has no Shutdown routine since this is handled at the device level */
snprintf(buf, PATH_MAX, "%s/%s", (char *)mediaDevice->private, file);
if (!access(buf, R_OK))
return open(buf, O_RDONLY);
snprintf(buf, PATH_MAX, "%s/dists/%s", (char *)mediaDevice->private, file);
return open(buf, O_RDONLY);
}