mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-12-18 05:53:36 +01:00
Installation cleanup, round II.
This commit is contained in:
parent
3e17261bac
commit
23c0fda959
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=18619
@ -34,27 +34,15 @@ do
|
||||
|
||||
vnconfig -s labels -c /dev/r${VNDEVICE} fs-image
|
||||
|
||||
sed '/^minimum:/,$d' /etc/disktab > /etc/disktab.tmp
|
||||
cat /etc/disktab.tmp > /etc/disktab
|
||||
rm -f /etc/disktab.tmp
|
||||
(
|
||||
a=`expr ${FSSIZE} \* 2`
|
||||
echo
|
||||
echo "minimum:ty=mfs:se#512:nt#1:rm#300:\\"
|
||||
echo " :ns#$a:nc#1:\\"
|
||||
echo " :pa#$a:oa#0:ba#4096:fa#512:\\"
|
||||
echo " :pc#$a:oc#0:bc#4096:fc#512:"
|
||||
echo
|
||||
) >> /etc/disktab
|
||||
|
||||
disklabel -w -r -B \
|
||||
dd if=${RD}/trees/bin/usr/mdec/boot1 of=fs-image conv=notrunc
|
||||
disklabel /dev/r${VNDEVICE} | disklabel -R -B \
|
||||
-b ${RD}/trees/bin/usr/mdec/fdboot \
|
||||
-s ${RD}/trees/bin/usr/mdec/bootfd \
|
||||
/dev/r${VNDEVICE} minimum
|
||||
/dev/r${VNDEVICE} /dev/stdin
|
||||
|
||||
newfs -u 0 -t 0 -i ${FSINODE} -m 0 -T minimum -o space /dev/r${VNDEVICE}a
|
||||
newfs -u 0 -t 0 -i ${FSINODE} -m 0 -T minimum -o space /dev/r${VNDEVICE}c
|
||||
|
||||
mount /dev/${VNDEVICE}a ${MNT}
|
||||
mount /dev/${VNDEVICE}c ${MNT}
|
||||
|
||||
( set -e && cd ${FSPROTO} && find . -print | cpio -dump ${MNT} )
|
||||
|
||||
@ -62,7 +50,7 @@ do
|
||||
|
||||
umount ${MNT}
|
||||
|
||||
fsck -p /dev/r${VNDEVICE}a < /dev/null
|
||||
fsck -p /dev/r${VNDEVICE}c < /dev/null
|
||||
|
||||
vnconfig -u /dev/r${VNDEVICE} 2>/dev/null || true
|
||||
|
||||
|
@ -34,27 +34,15 @@ do
|
||||
|
||||
vnconfig -s labels -c /dev/r${VNDEVICE} fs-image
|
||||
|
||||
sed '/^minimum:/,$d' /etc/disktab > /etc/disktab.tmp
|
||||
cat /etc/disktab.tmp > /etc/disktab
|
||||
rm -f /etc/disktab.tmp
|
||||
(
|
||||
a=`expr ${FSSIZE} \* 2`
|
||||
echo
|
||||
echo "minimum:ty=mfs:se#512:nt#1:rm#300:\\"
|
||||
echo " :ns#$a:nc#1:\\"
|
||||
echo " :pa#$a:oa#0:ba#4096:fa#512:\\"
|
||||
echo " :pc#$a:oc#0:bc#4096:fc#512:"
|
||||
echo
|
||||
) >> /etc/disktab
|
||||
|
||||
disklabel -w -r -B \
|
||||
dd if=${RD}/trees/bin/usr/mdec/boot1 of=fs-image conv=notrunc
|
||||
disklabel /dev/r${VNDEVICE} | disklabel -R -B \
|
||||
-b ${RD}/trees/bin/usr/mdec/fdboot \
|
||||
-s ${RD}/trees/bin/usr/mdec/bootfd \
|
||||
/dev/r${VNDEVICE} minimum
|
||||
/dev/r${VNDEVICE} /dev/stdin
|
||||
|
||||
newfs -u 0 -t 0 -i ${FSINODE} -m 0 -T minimum -o space /dev/r${VNDEVICE}a
|
||||
newfs -u 0 -t 0 -i ${FSINODE} -m 0 -T minimum -o space /dev/r${VNDEVICE}c
|
||||
|
||||
mount /dev/${VNDEVICE}a ${MNT}
|
||||
mount /dev/${VNDEVICE}c ${MNT}
|
||||
|
||||
( set -e && cd ${FSPROTO} && find . -print | cpio -dump ${MNT} )
|
||||
|
||||
@ -62,7 +50,7 @@ do
|
||||
|
||||
umount ${MNT}
|
||||
|
||||
fsck -p /dev/r${VNDEVICE}a < /dev/null
|
||||
fsck -p /dev/r${VNDEVICE}c < /dev/null
|
||||
|
||||
vnconfig -u /dev/r${VNDEVICE} 2>/dev/null || true
|
||||
|
||||
|
@ -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.21 1996/07/16 17:11:38 jkh Exp $
|
||||
* $Id: cdrom.c,v 1.22 1996/08/23 07:55:57 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -83,10 +83,12 @@ mediaInitCDROM(Device *dev)
|
||||
if (!file_readable("/cdrom/cdrom.inf")) {
|
||||
Mkdir("/cdrom");
|
||||
if (mount(MOUNT_CD9660, "/cdrom", MNT_RDONLY, (caddr_t) &args) == -1) {
|
||||
msgConfirm("Error mounting %s on /cdrom: %s (%u)", dev->devname, strerror(errno), errno);
|
||||
return FALSE;
|
||||
if (errno != EBUSY) {
|
||||
msgConfirm("Error mounting %s on /cdrom: %s (%u)", dev->devname, strerror(errno), errno);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else if (!file_readable("/cdrom/cdrom.inf")) {
|
||||
if (!file_readable("/cdrom/cdrom.inf")) {
|
||||
if (msgYesNo("Warning: The CD currently in the drive is either not a FreeBSD\n"
|
||||
"CD or it is an older (pre 2.1.5) FreeBSD CD which does not\n"
|
||||
"have a version number on it. Do you wish to use this CD anyway?")) {
|
||||
|
@ -4,7 +4,7 @@
|
||||
* This is probably the last program in the `sysinstall' line - the next
|
||||
* generation being essentially a complete rewrite.
|
||||
*
|
||||
* $Id: dispatch.c,v 1.3 1996/06/26 09:09:27 jkh Exp $
|
||||
* $Id: dispatch.c,v 1.4 1996/07/02 10:57:51 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -79,7 +79,7 @@ static struct _word {
|
||||
{ "mediaSetFTPPassive", mediaSetFTPPassive },
|
||||
{ "mediaSetUFS", mediaSetUFS },
|
||||
{ "mediaSetNFS", mediaSetNFS },
|
||||
{ "mediaSetFtpUserPass", mediaSetFtpUserPass },
|
||||
{ "mediaSetFTPUserPass", mediaSetFTPUserPass },
|
||||
{ "mediaSetCPIOVerbosity", mediaSetCPIOVerbosity },
|
||||
{ "mediaGetType", mediaGetType },
|
||||
{ "optionsEditor", optionsEditor },
|
||||
|
@ -4,7 +4,7 @@
|
||||
* This is probably the last program in the `sysinstall' line - the next
|
||||
* generation being essentially a complete rewrite.
|
||||
*
|
||||
* $Id: label.c,v 1.57 1996/08/03 05:25:56 jkh Exp $
|
||||
* $Id: label.c,v 1.58 1996/08/03 10:11:10 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -263,7 +263,12 @@ get_mountpoint(struct chunk *old)
|
||||
tmp = old->private_data;
|
||||
else
|
||||
tmp = NULL;
|
||||
if (!old) {
|
||||
DialogX = 13;
|
||||
DialogY = 17;
|
||||
}
|
||||
val = msgGetInput(tmp ? tmp->mountpoint : NULL, "Please specify a mount point for the partition");
|
||||
DialogX = DialogY = 0;
|
||||
if (!val || !*val) {
|
||||
if (!old)
|
||||
return NULL;
|
||||
@ -313,7 +318,6 @@ get_partition_type(void)
|
||||
{
|
||||
char selection[20];
|
||||
int i;
|
||||
WINDOW *save = savescr();
|
||||
|
||||
static unsigned char *fs_types[] = {
|
||||
"FS",
|
||||
@ -321,12 +325,13 @@ get_partition_type(void)
|
||||
"Swap",
|
||||
"A swap partition.",
|
||||
};
|
||||
dialog_clear_norefresh();
|
||||
DialogX = 7;
|
||||
DialogY = 9;
|
||||
i = dialog_menu("Please choose a partition type",
|
||||
"If you want to use this partition for swap space, select Swap.\n"
|
||||
"If you want to put a filesystem on it, choose FS.",
|
||||
-1, -1, 2, 2, fs_types, selection, NULL, NULL);
|
||||
restorescr(save);
|
||||
DialogX = DialogY = 0;
|
||||
if (!i) {
|
||||
if (!strcmp(selection, "FS"))
|
||||
return PART_FILESYSTEM;
|
||||
@ -448,7 +453,7 @@ print_label_chunks(void)
|
||||
}
|
||||
|
||||
static void
|
||||
print_command_summary()
|
||||
print_command_summary(void)
|
||||
{
|
||||
mvprintw(17, 0, "The following commands are valid here (upper or lower case):");
|
||||
mvprintw(18, 0, "C = Create D = Delete M = Mount");
|
||||
@ -460,10 +465,17 @@ print_command_summary()
|
||||
move(0, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
clear_wins(void)
|
||||
{
|
||||
clear();
|
||||
wclear(ChunkWin);
|
||||
}
|
||||
|
||||
static int
|
||||
diskLabel(char *str)
|
||||
{
|
||||
int sz, key = 0, first_time = 1;
|
||||
int sz, key = 0;
|
||||
Boolean labeling;
|
||||
char *msg = NULL;
|
||||
PartInfo *p, *oldp;
|
||||
@ -480,13 +492,10 @@ diskLabel(char *str)
|
||||
keypad(stdscr, TRUE);
|
||||
record_label_chunks(devs);
|
||||
|
||||
dialog_clear_norefresh(); clear();
|
||||
clear();
|
||||
while (labeling) {
|
||||
print_label_chunks();
|
||||
if (first_time) {
|
||||
print_command_summary();
|
||||
first_time = 0;
|
||||
}
|
||||
print_command_summary();
|
||||
if (msg) {
|
||||
attrset(title_attr); mvprintw(23, 0, msg); attrset(A_NORMAL);
|
||||
clrtoeol();
|
||||
@ -497,13 +506,15 @@ diskLabel(char *str)
|
||||
move(23, 0);
|
||||
clrtoeol();
|
||||
}
|
||||
refresh();
|
||||
key = getch();
|
||||
switch (toupper(key)) {
|
||||
int i;
|
||||
static char _msg[40];
|
||||
|
||||
case '\014': /* ^L */
|
||||
continue;
|
||||
clear_wins();
|
||||
break;
|
||||
|
||||
case KEY_UP:
|
||||
case '-':
|
||||
@ -536,6 +547,7 @@ diskLabel(char *str)
|
||||
case KEY_F(1):
|
||||
case '?':
|
||||
systemDisplayHelp("partition");
|
||||
clear_wins();
|
||||
break;
|
||||
|
||||
case 'A':
|
||||
@ -561,6 +573,7 @@ diskLabel(char *str)
|
||||
(cp ? atoi(cp) : 32) * ONE_MEG, part, FS_BSDFFS, CHUNK_IS_ROOT);
|
||||
if (!tmp) {
|
||||
msgConfirm("Unable to create the root partition. Too big?");
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
tmp->private_data = new_part("/", TRUE, tmp->size);
|
||||
@ -583,6 +596,7 @@ diskLabel(char *str)
|
||||
swsize, part, FS_SWAP, 0);
|
||||
if (!tmp) {
|
||||
msgConfirm("Unable to create the swap partition. Too big?");
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
tmp->private_data = 0;
|
||||
@ -598,6 +612,7 @@ diskLabel(char *str)
|
||||
msgConfirm("Less than %dMB free for /var - you will need to\n"
|
||||
"partition your disk manually with a custom install!",
|
||||
(cp ? atoi(cp) : VAR_MIN_SIZE));
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
tmp->private_data = new_part("/var", TRUE, tmp->size);
|
||||
@ -614,6 +629,7 @@ diskLabel(char *str)
|
||||
if (!sz || sz < (USR_MIN_SIZE * ONE_MEG)) {
|
||||
msgConfirm("Less than %dMB free for /usr - you will need to\n"
|
||||
"partition your disk manually with a custom install!", USR_MIN_SIZE);
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
|
||||
@ -623,6 +639,7 @@ diskLabel(char *str)
|
||||
if (!tmp) {
|
||||
msgConfirm("Unable to create the /usr partition. Not enough space?\n"
|
||||
"You will need to partition your disk manually with a custom install!");
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
tmp->private_data = new_part("/usr", TRUE, tmp->size);
|
||||
@ -652,11 +669,17 @@ diskLabel(char *str)
|
||||
u_long flags = 0;
|
||||
|
||||
sprintf(osize, "%d", sz);
|
||||
val = msgGetInput(osize, "Please specify the size for new FreeBSD partition in blocks, or\n"
|
||||
"append a trailing `M' for megabytes (e.g. 20M) or `C' for cylinders.\n\n"
|
||||
"Space free is %d blocks (%dMB)", sz, sz / ONE_MEG);
|
||||
if (!val || (size = strtol(val, &cp, 0)) <= 0)
|
||||
DialogX = 3;
|
||||
DialogY = 1;
|
||||
val = msgGetInput(osize,
|
||||
"Please specify the partition size in blocks or append a trailing M for\n"
|
||||
"megabytes or C for cylinders. %d blocks (%dMB) are free.",
|
||||
sz, sz / ONE_MEG);
|
||||
DialogX = DialogY = 0;
|
||||
if (!val || (size = strtol(val, &cp, 0)) <= 0) {
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
|
||||
if (*cp) {
|
||||
if (toupper(*cp) == 'M')
|
||||
@ -666,20 +689,28 @@ diskLabel(char *str)
|
||||
}
|
||||
if (size <= FS_MIN_SIZE) {
|
||||
msgConfirm("The minimum filesystem size is %dMB", FS_MIN_SIZE / ONE_MEG);
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
type = get_partition_type();
|
||||
if (type == PART_NONE)
|
||||
if (type == PART_NONE) {
|
||||
clear_wins();
|
||||
beep();
|
||||
break;
|
||||
}
|
||||
|
||||
if (type == PART_FILESYSTEM) {
|
||||
if ((p = get_mountpoint(NULL)) == NULL)
|
||||
if ((p = get_mountpoint(NULL)) == NULL) {
|
||||
clear_wins();
|
||||
beep();
|
||||
break;
|
||||
}
|
||||
else if (!strcmp(p->mountpoint, "/"))
|
||||
flags |= CHUNK_IS_ROOT;
|
||||
else
|
||||
flags &= ~CHUNK_IS_ROOT;
|
||||
} else
|
||||
}
|
||||
else
|
||||
p = NULL;
|
||||
|
||||
if ((flags & CHUNK_IS_ROOT)) {
|
||||
@ -688,6 +719,7 @@ diskLabel(char *str)
|
||||
"FreeBSD boot code cannot deal with a root partition created\n"
|
||||
"in that location. Please choose another location or smaller\n"
|
||||
"size for your root partition and try again!");
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
if (size < (ROOT_MIN_SIZE * ONE_MEG)) {
|
||||
@ -703,6 +735,7 @@ diskLabel(char *str)
|
||||
flags);
|
||||
if (!tmp) {
|
||||
msgConfirm("Unable to create the partition. Too big?");
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
if ((flags & CHUNK_IS_ROOT) && (tmp->flags & CHUNK_PAST_1024)) {
|
||||
@ -711,6 +744,7 @@ diskLabel(char *str)
|
||||
"poor location to boot from. Please choose another\n"
|
||||
"location (or smaller size) for your root partition and try again!");
|
||||
Delete_Chunk(label_chunk_info[here].c->disk, tmp);
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
if (type != PART_SWAP) {
|
||||
@ -723,6 +757,7 @@ diskLabel(char *str)
|
||||
tmp->private_free = safe_free;
|
||||
variable_set2(DISK_LABELLED, "yes");
|
||||
record_label_chunks(devs);
|
||||
clear_wins();
|
||||
}
|
||||
break;
|
||||
|
||||
@ -767,6 +802,7 @@ diskLabel(char *str)
|
||||
}
|
||||
variable_set2(DISK_LABELLED, "yes");
|
||||
record_label_chunks(devs);
|
||||
clear();
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -791,7 +827,7 @@ diskLabel(char *str)
|
||||
safe_free(pi);
|
||||
label_chunk_info[here].c->private_free = safe_free;
|
||||
variable_set2(DISK_LABELLED, "yes");
|
||||
}
|
||||
}
|
||||
else
|
||||
msg = MSG_NOT_APPLICABLE;
|
||||
break;
|
||||
@ -814,6 +850,7 @@ diskLabel(char *str)
|
||||
}
|
||||
}
|
||||
record_label_chunks(devs);
|
||||
clear();
|
||||
break;
|
||||
|
||||
case 'W':
|
||||
@ -821,12 +858,10 @@ diskLabel(char *str)
|
||||
"operation, and it should also be noted that this option is NOT for\n"
|
||||
"use during new installations but rather for modifying existing ones.\n\n"
|
||||
"Are you absolutely SURE you want to do this now?")) {
|
||||
WINDOW *save = savescr();
|
||||
|
||||
variable_set2(DISK_LABELLED, "yes");
|
||||
diskLabelCommit(NULL);
|
||||
restorescr(save);
|
||||
}
|
||||
clear();
|
||||
break;
|
||||
|
||||
case '|':
|
||||
@ -835,7 +870,6 @@ diskLabel(char *str)
|
||||
"expected to understand!")) {
|
||||
int i;
|
||||
Device **devs;
|
||||
WINDOW *save = savescr();
|
||||
|
||||
dialog_clear();
|
||||
end_dialog();
|
||||
@ -851,9 +885,8 @@ diskLabel(char *str)
|
||||
}
|
||||
variable_set2(DISK_LABELLED, "yes");
|
||||
DialogActive = TRUE;
|
||||
dialog_clear_norefresh();
|
||||
restorescr(save);
|
||||
record_label_chunks(devs);
|
||||
clear();
|
||||
}
|
||||
else
|
||||
msg = "A most prudent choice!";
|
||||
|
@ -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.52 1996/08/03 10:11:16 jkh Exp $
|
||||
* $Id: media.c,v 1.53 1996/09/26 22:07:32 pst Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -259,21 +259,23 @@ mediaSetFTP(dialogMenuItem *self)
|
||||
static Device ftpDevice;
|
||||
char *cp, *hostname, *dir;
|
||||
extern int FtpPort;
|
||||
static int first_time = 1;
|
||||
int what;
|
||||
|
||||
dialog_clear_norefresh();
|
||||
cp = variable_get(VAR_FTP_PATH);
|
||||
if (!(cp && first_time)) {
|
||||
if (!cp) {
|
||||
dialog_clear_norefresh();
|
||||
if (!dmenuOpenSimple(&MenuMediaFTP, FALSE))
|
||||
return DITEM_FAILURE | DITEM_RECREATE;
|
||||
else
|
||||
cp = variable_get(VAR_FTP_PATH);
|
||||
what = DITEM_RECREATE;
|
||||
}
|
||||
if (first_time)
|
||||
first_time = 0;
|
||||
else
|
||||
what = DITEM_RESTORE;
|
||||
if (!cp) {
|
||||
dialog_clear_norefresh();
|
||||
msgConfirm("%s not set! Not setting an FTP installation path, OK?", VAR_FTP_PATH);
|
||||
return DITEM_FAILURE | DITEM_RECREATE;
|
||||
return DITEM_FAILURE | what;
|
||||
}
|
||||
else if (!strcmp(cp, "other")) {
|
||||
variable_set2(VAR_FTP_PATH, "ftp://");
|
||||
@ -286,20 +288,20 @@ mediaSetFTP(dialogMenuItem *self)
|
||||
"Where <path> is relative to the anonymous ftp directory or the\n"
|
||||
"home directory of the user being logged in as.");
|
||||
if (!cp || !*cp)
|
||||
return DITEM_FAILURE | DITEM_RECREATE;
|
||||
return DITEM_FAILURE | what;
|
||||
}
|
||||
if (strncmp("ftp://", cp, 6)) {
|
||||
msgConfirm("Sorry, %s is an invalid URL!", cp);
|
||||
return DITEM_FAILURE | DITEM_RECREATE;
|
||||
return DITEM_FAILURE | what;
|
||||
}
|
||||
strcpy(ftpDevice.name, cp);
|
||||
|
||||
if (!tcpDeviceSelect())
|
||||
return DITEM_FAILURE | DITEM_RECREATE;
|
||||
return DITEM_FAILURE | what;
|
||||
if (!mediaDevice || !mediaDevice->init(mediaDevice)) {
|
||||
if (isDebug())
|
||||
msgDebug("mediaSetFTP: Net device init failed.\n");
|
||||
return DITEM_FAILURE | DITEM_RECREATE;
|
||||
return DITEM_FAILURE | what;
|
||||
}
|
||||
hostname = cp + 6;
|
||||
if ((cp = index(hostname, ':')) != NULL) {
|
||||
@ -321,7 +323,7 @@ mediaSetFTP(dialogMenuItem *self)
|
||||
msgConfirm("Cannot resolve hostname `%s'! Are you sure that your\n"
|
||||
"name server, gateway and network interface are correctly configured?", hostname);
|
||||
mediaDevice->shutdown(mediaDevice);
|
||||
return DITEM_FAILURE | DITEM_RECREATE;
|
||||
return DITEM_FAILURE | what;
|
||||
}
|
||||
}
|
||||
variable_set2(VAR_FTP_HOST, hostname);
|
||||
@ -334,7 +336,7 @@ mediaSetFTP(dialogMenuItem *self)
|
||||
ftpDevice.shutdown = mediaShutdownFTP;
|
||||
ftpDevice.private = mediaDevice; /* Set to network device by tcpDeviceSelect() */
|
||||
mediaDevice = &ftpDevice;
|
||||
return DITEM_LEAVE_MENU | DITEM_RECREATE;
|
||||
return DITEM_SUCCESS | DITEM_LEAVE_MENU | what;
|
||||
}
|
||||
|
||||
int
|
||||
@ -357,6 +359,7 @@ mediaSetUFS(dialogMenuItem *self)
|
||||
static Device ufsDevice;
|
||||
char *cp;
|
||||
|
||||
dialog_clear_norefresh();
|
||||
cp = variable_get_value(VAR_UFS_PATH, "Enter a fully qualified pathname for the directory\n"
|
||||
"containing the FreeBSD distribution files:");
|
||||
if (!cp)
|
||||
@ -378,6 +381,7 @@ mediaSetNFS(dialogMenuItem *self)
|
||||
static Device nfsDevice;
|
||||
char *cp, *idx;
|
||||
|
||||
dialog_clear_norefresh();
|
||||
cp = variable_get_value(VAR_NFS_PATH, "Please enter the full NFS file specification for the remote\n"
|
||||
"host and directory containing the FreeBSD distribution files.\n"
|
||||
"This should be in the format: hostname:/some/freebsd/dir");
|
||||
@ -593,15 +597,18 @@ mediaVerify(void)
|
||||
|
||||
/* Set the FTP username and password fields */
|
||||
int
|
||||
mediaSetFtpUserPass(dialogMenuItem *self)
|
||||
mediaSetFTPUserPass(dialogMenuItem *self)
|
||||
{
|
||||
char *pass;
|
||||
|
||||
if (variable_get_value(VAR_FTP_USER, "Please enter the username you wish to login as:"))
|
||||
dialog_clear_norefresh();
|
||||
if (variable_get_value(VAR_FTP_USER, "Please enter the username you wish to login as:")) {
|
||||
dialog_clear_norefresh();
|
||||
pass = variable_get_value(VAR_FTP_PASS, "Please enter the password for this user:");
|
||||
}
|
||||
else
|
||||
pass = NULL;
|
||||
return pass ? DITEM_SUCCESS : DITEM_FAILURE;
|
||||
return (pass ? DITEM_SUCCESS : DITEM_FAILURE) | DITEM_RESTORE;
|
||||
}
|
||||
|
||||
/* Set CPIO verbosity level */
|
||||
|
@ -4,7 +4,7 @@
|
||||
* This is probably the last attempt in the `sysinstall' line, the next
|
||||
* generation being slated for what's essentially a complete rewrite.
|
||||
*
|
||||
* $Id: options.c,v 1.41 1996/07/09 14:28:18 jkh Exp $
|
||||
* $Id: options.c,v 1.42 1996/08/03 10:11:33 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -111,7 +111,7 @@ static Option Options[] = {
|
||||
{ "Yes to All", "Assume \"Yes\" answers to all non-critical dialogs",
|
||||
OPT_IS_VAR, NULL, VAR_NO_CONFIRM, varCheck },
|
||||
{ "FTP username", "Username and password to use instead of anonymous",
|
||||
OPT_IS_FUNC, mediaSetFtpUserPass, VAR_FTP_USER, varCheck },
|
||||
OPT_IS_FUNC, mediaSetFTPUserPass, VAR_FTP_USER, varCheck },
|
||||
{ "Editor", "Which text editor to use during installation",
|
||||
OPT_IS_VAR, EDITOR_PROMPT, VAR_EDITOR, varCheck },
|
||||
{ "Tape Blocksize", "Tape media block size in 512 byte blocks",
|
||||
@ -164,17 +164,22 @@ value_of(Option opt)
|
||||
return "<unknown>";
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
fire(Option opt)
|
||||
{
|
||||
if (opt.type == OPT_IS_FUNC) {
|
||||
int (*cp)(char *) = opt.data;
|
||||
int status = 0;
|
||||
|
||||
cp(NULL);
|
||||
if (opt.type == OPT_IS_FUNC) {
|
||||
int (*cp)(char *) = opt.data, rcode;
|
||||
|
||||
rcode = cp(NULL);
|
||||
if (rcode & (DITEM_RECREATE | DITEM_RESTORE))
|
||||
status = 1;
|
||||
}
|
||||
else if (opt.type == OPT_IS_VAR) {
|
||||
if (opt.data) {
|
||||
(void)variable_get_value(opt.aux, opt.data);
|
||||
status = 1;
|
||||
}
|
||||
else if (variable_get(opt.aux))
|
||||
variable_unset(opt.aux);
|
||||
@ -183,8 +188,8 @@ fire(Option opt)
|
||||
}
|
||||
if (opt.check)
|
||||
opt.check(opt);
|
||||
clear();
|
||||
refresh();
|
||||
return status;
|
||||
}
|
||||
|
||||
int
|
||||
@ -239,6 +244,7 @@ optionsEditor(dialogMenuItem *self)
|
||||
case KEY_F(1):
|
||||
case '?':
|
||||
systemDisplayHelp("options");
|
||||
clear();
|
||||
break;
|
||||
|
||||
case KEY_UP:
|
||||
@ -265,9 +271,8 @@ optionsEditor(dialogMenuItem *self)
|
||||
continue;
|
||||
|
||||
case ' ':
|
||||
clear();
|
||||
fire(Options[currOpt]);
|
||||
clear();
|
||||
if (fire(Options[currOpt]))
|
||||
clear();
|
||||
continue;
|
||||
|
||||
case 'Q':
|
||||
|
@ -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.77 1996/07/31 09:29:35 jkh Exp $
|
||||
* $Id: sysinstall.h,v 1.78 1996/08/01 10:58:53 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -513,7 +513,7 @@ extern int mediaSetFTPActive(dialogMenuItem *self);
|
||||
extern int mediaSetFTPPassive(dialogMenuItem *self);
|
||||
extern int mediaSetUFS(dialogMenuItem *self);
|
||||
extern int mediaSetNFS(dialogMenuItem *self);
|
||||
extern int mediaSetFtpUserPass(dialogMenuItem *self);
|
||||
extern int mediaSetFTPUserPass(dialogMenuItem *self);
|
||||
extern int mediaSetCPIOVerbosity(dialogMenuItem *self);
|
||||
extern int mediaGetType(dialogMenuItem *self);
|
||||
extern Boolean mediaExtractDist(char *dir, int fd);
|
||||
|
@ -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.64 1996/09/26 21:07:08 pst Exp $
|
||||
* $Id: system.c,v 1.65 1996/10/01 04:56:34 jkh Exp $
|
||||
*
|
||||
* Jordan Hubbard
|
||||
*
|
||||
@ -37,8 +37,12 @@
|
||||
static void
|
||||
handle_intr(int sig)
|
||||
{
|
||||
WINDOW *save = savescr();
|
||||
|
||||
if (!msgYesNo("Are you sure you want to abort the installation?"))
|
||||
systemShutdown(1);
|
||||
else
|
||||
restorescr(save);
|
||||
}
|
||||
|
||||
/* Expand a file into a convenient location, nuking it each time */
|
||||
|
@ -4,7 +4,7 @@
|
||||
* This is probably the last program in the `sysinstall' line - the next
|
||||
* generation being essentially a complete rewrite.
|
||||
*
|
||||
* $Id: dispatch.c,v 1.3 1996/06/26 09:09:27 jkh Exp $
|
||||
* $Id: dispatch.c,v 1.4 1996/07/02 10:57:51 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -79,7 +79,7 @@ static struct _word {
|
||||
{ "mediaSetFTPPassive", mediaSetFTPPassive },
|
||||
{ "mediaSetUFS", mediaSetUFS },
|
||||
{ "mediaSetNFS", mediaSetNFS },
|
||||
{ "mediaSetFtpUserPass", mediaSetFtpUserPass },
|
||||
{ "mediaSetFTPUserPass", mediaSetFTPUserPass },
|
||||
{ "mediaSetCPIOVerbosity", mediaSetCPIOVerbosity },
|
||||
{ "mediaGetType", mediaGetType },
|
||||
{ "optionsEditor", optionsEditor },
|
||||
|
@ -4,7 +4,7 @@
|
||||
* This is probably the last program in the `sysinstall' line - the next
|
||||
* generation being essentially a complete rewrite.
|
||||
*
|
||||
* $Id: label.c,v 1.57 1996/08/03 05:25:56 jkh Exp $
|
||||
* $Id: label.c,v 1.58 1996/08/03 10:11:10 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -263,7 +263,12 @@ get_mountpoint(struct chunk *old)
|
||||
tmp = old->private_data;
|
||||
else
|
||||
tmp = NULL;
|
||||
if (!old) {
|
||||
DialogX = 13;
|
||||
DialogY = 17;
|
||||
}
|
||||
val = msgGetInput(tmp ? tmp->mountpoint : NULL, "Please specify a mount point for the partition");
|
||||
DialogX = DialogY = 0;
|
||||
if (!val || !*val) {
|
||||
if (!old)
|
||||
return NULL;
|
||||
@ -313,7 +318,6 @@ get_partition_type(void)
|
||||
{
|
||||
char selection[20];
|
||||
int i;
|
||||
WINDOW *save = savescr();
|
||||
|
||||
static unsigned char *fs_types[] = {
|
||||
"FS",
|
||||
@ -321,12 +325,13 @@ get_partition_type(void)
|
||||
"Swap",
|
||||
"A swap partition.",
|
||||
};
|
||||
dialog_clear_norefresh();
|
||||
DialogX = 7;
|
||||
DialogY = 9;
|
||||
i = dialog_menu("Please choose a partition type",
|
||||
"If you want to use this partition for swap space, select Swap.\n"
|
||||
"If you want to put a filesystem on it, choose FS.",
|
||||
-1, -1, 2, 2, fs_types, selection, NULL, NULL);
|
||||
restorescr(save);
|
||||
DialogX = DialogY = 0;
|
||||
if (!i) {
|
||||
if (!strcmp(selection, "FS"))
|
||||
return PART_FILESYSTEM;
|
||||
@ -448,7 +453,7 @@ print_label_chunks(void)
|
||||
}
|
||||
|
||||
static void
|
||||
print_command_summary()
|
||||
print_command_summary(void)
|
||||
{
|
||||
mvprintw(17, 0, "The following commands are valid here (upper or lower case):");
|
||||
mvprintw(18, 0, "C = Create D = Delete M = Mount");
|
||||
@ -460,10 +465,17 @@ print_command_summary()
|
||||
move(0, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
clear_wins(void)
|
||||
{
|
||||
clear();
|
||||
wclear(ChunkWin);
|
||||
}
|
||||
|
||||
static int
|
||||
diskLabel(char *str)
|
||||
{
|
||||
int sz, key = 0, first_time = 1;
|
||||
int sz, key = 0;
|
||||
Boolean labeling;
|
||||
char *msg = NULL;
|
||||
PartInfo *p, *oldp;
|
||||
@ -480,13 +492,10 @@ diskLabel(char *str)
|
||||
keypad(stdscr, TRUE);
|
||||
record_label_chunks(devs);
|
||||
|
||||
dialog_clear_norefresh(); clear();
|
||||
clear();
|
||||
while (labeling) {
|
||||
print_label_chunks();
|
||||
if (first_time) {
|
||||
print_command_summary();
|
||||
first_time = 0;
|
||||
}
|
||||
print_command_summary();
|
||||
if (msg) {
|
||||
attrset(title_attr); mvprintw(23, 0, msg); attrset(A_NORMAL);
|
||||
clrtoeol();
|
||||
@ -497,13 +506,15 @@ diskLabel(char *str)
|
||||
move(23, 0);
|
||||
clrtoeol();
|
||||
}
|
||||
refresh();
|
||||
key = getch();
|
||||
switch (toupper(key)) {
|
||||
int i;
|
||||
static char _msg[40];
|
||||
|
||||
case '\014': /* ^L */
|
||||
continue;
|
||||
clear_wins();
|
||||
break;
|
||||
|
||||
case KEY_UP:
|
||||
case '-':
|
||||
@ -536,6 +547,7 @@ diskLabel(char *str)
|
||||
case KEY_F(1):
|
||||
case '?':
|
||||
systemDisplayHelp("partition");
|
||||
clear_wins();
|
||||
break;
|
||||
|
||||
case 'A':
|
||||
@ -561,6 +573,7 @@ diskLabel(char *str)
|
||||
(cp ? atoi(cp) : 32) * ONE_MEG, part, FS_BSDFFS, CHUNK_IS_ROOT);
|
||||
if (!tmp) {
|
||||
msgConfirm("Unable to create the root partition. Too big?");
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
tmp->private_data = new_part("/", TRUE, tmp->size);
|
||||
@ -583,6 +596,7 @@ diskLabel(char *str)
|
||||
swsize, part, FS_SWAP, 0);
|
||||
if (!tmp) {
|
||||
msgConfirm("Unable to create the swap partition. Too big?");
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
tmp->private_data = 0;
|
||||
@ -598,6 +612,7 @@ diskLabel(char *str)
|
||||
msgConfirm("Less than %dMB free for /var - you will need to\n"
|
||||
"partition your disk manually with a custom install!",
|
||||
(cp ? atoi(cp) : VAR_MIN_SIZE));
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
tmp->private_data = new_part("/var", TRUE, tmp->size);
|
||||
@ -614,6 +629,7 @@ diskLabel(char *str)
|
||||
if (!sz || sz < (USR_MIN_SIZE * ONE_MEG)) {
|
||||
msgConfirm("Less than %dMB free for /usr - you will need to\n"
|
||||
"partition your disk manually with a custom install!", USR_MIN_SIZE);
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
|
||||
@ -623,6 +639,7 @@ diskLabel(char *str)
|
||||
if (!tmp) {
|
||||
msgConfirm("Unable to create the /usr partition. Not enough space?\n"
|
||||
"You will need to partition your disk manually with a custom install!");
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
tmp->private_data = new_part("/usr", TRUE, tmp->size);
|
||||
@ -652,11 +669,17 @@ diskLabel(char *str)
|
||||
u_long flags = 0;
|
||||
|
||||
sprintf(osize, "%d", sz);
|
||||
val = msgGetInput(osize, "Please specify the size for new FreeBSD partition in blocks, or\n"
|
||||
"append a trailing `M' for megabytes (e.g. 20M) or `C' for cylinders.\n\n"
|
||||
"Space free is %d blocks (%dMB)", sz, sz / ONE_MEG);
|
||||
if (!val || (size = strtol(val, &cp, 0)) <= 0)
|
||||
DialogX = 3;
|
||||
DialogY = 1;
|
||||
val = msgGetInput(osize,
|
||||
"Please specify the partition size in blocks or append a trailing M for\n"
|
||||
"megabytes or C for cylinders. %d blocks (%dMB) are free.",
|
||||
sz, sz / ONE_MEG);
|
||||
DialogX = DialogY = 0;
|
||||
if (!val || (size = strtol(val, &cp, 0)) <= 0) {
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
|
||||
if (*cp) {
|
||||
if (toupper(*cp) == 'M')
|
||||
@ -666,20 +689,28 @@ diskLabel(char *str)
|
||||
}
|
||||
if (size <= FS_MIN_SIZE) {
|
||||
msgConfirm("The minimum filesystem size is %dMB", FS_MIN_SIZE / ONE_MEG);
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
type = get_partition_type();
|
||||
if (type == PART_NONE)
|
||||
if (type == PART_NONE) {
|
||||
clear_wins();
|
||||
beep();
|
||||
break;
|
||||
}
|
||||
|
||||
if (type == PART_FILESYSTEM) {
|
||||
if ((p = get_mountpoint(NULL)) == NULL)
|
||||
if ((p = get_mountpoint(NULL)) == NULL) {
|
||||
clear_wins();
|
||||
beep();
|
||||
break;
|
||||
}
|
||||
else if (!strcmp(p->mountpoint, "/"))
|
||||
flags |= CHUNK_IS_ROOT;
|
||||
else
|
||||
flags &= ~CHUNK_IS_ROOT;
|
||||
} else
|
||||
}
|
||||
else
|
||||
p = NULL;
|
||||
|
||||
if ((flags & CHUNK_IS_ROOT)) {
|
||||
@ -688,6 +719,7 @@ diskLabel(char *str)
|
||||
"FreeBSD boot code cannot deal with a root partition created\n"
|
||||
"in that location. Please choose another location or smaller\n"
|
||||
"size for your root partition and try again!");
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
if (size < (ROOT_MIN_SIZE * ONE_MEG)) {
|
||||
@ -703,6 +735,7 @@ diskLabel(char *str)
|
||||
flags);
|
||||
if (!tmp) {
|
||||
msgConfirm("Unable to create the partition. Too big?");
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
if ((flags & CHUNK_IS_ROOT) && (tmp->flags & CHUNK_PAST_1024)) {
|
||||
@ -711,6 +744,7 @@ diskLabel(char *str)
|
||||
"poor location to boot from. Please choose another\n"
|
||||
"location (or smaller size) for your root partition and try again!");
|
||||
Delete_Chunk(label_chunk_info[here].c->disk, tmp);
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
if (type != PART_SWAP) {
|
||||
@ -723,6 +757,7 @@ diskLabel(char *str)
|
||||
tmp->private_free = safe_free;
|
||||
variable_set2(DISK_LABELLED, "yes");
|
||||
record_label_chunks(devs);
|
||||
clear_wins();
|
||||
}
|
||||
break;
|
||||
|
||||
@ -767,6 +802,7 @@ diskLabel(char *str)
|
||||
}
|
||||
variable_set2(DISK_LABELLED, "yes");
|
||||
record_label_chunks(devs);
|
||||
clear();
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -791,7 +827,7 @@ diskLabel(char *str)
|
||||
safe_free(pi);
|
||||
label_chunk_info[here].c->private_free = safe_free;
|
||||
variable_set2(DISK_LABELLED, "yes");
|
||||
}
|
||||
}
|
||||
else
|
||||
msg = MSG_NOT_APPLICABLE;
|
||||
break;
|
||||
@ -814,6 +850,7 @@ diskLabel(char *str)
|
||||
}
|
||||
}
|
||||
record_label_chunks(devs);
|
||||
clear();
|
||||
break;
|
||||
|
||||
case 'W':
|
||||
@ -821,12 +858,10 @@ diskLabel(char *str)
|
||||
"operation, and it should also be noted that this option is NOT for\n"
|
||||
"use during new installations but rather for modifying existing ones.\n\n"
|
||||
"Are you absolutely SURE you want to do this now?")) {
|
||||
WINDOW *save = savescr();
|
||||
|
||||
variable_set2(DISK_LABELLED, "yes");
|
||||
diskLabelCommit(NULL);
|
||||
restorescr(save);
|
||||
}
|
||||
clear();
|
||||
break;
|
||||
|
||||
case '|':
|
||||
@ -835,7 +870,6 @@ diskLabel(char *str)
|
||||
"expected to understand!")) {
|
||||
int i;
|
||||
Device **devs;
|
||||
WINDOW *save = savescr();
|
||||
|
||||
dialog_clear();
|
||||
end_dialog();
|
||||
@ -851,9 +885,8 @@ diskLabel(char *str)
|
||||
}
|
||||
variable_set2(DISK_LABELLED, "yes");
|
||||
DialogActive = TRUE;
|
||||
dialog_clear_norefresh();
|
||||
restorescr(save);
|
||||
record_label_chunks(devs);
|
||||
clear();
|
||||
}
|
||||
else
|
||||
msg = "A most prudent choice!";
|
||||
|
@ -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.77 1996/07/31 09:29:35 jkh Exp $
|
||||
* $Id: sysinstall.h,v 1.78 1996/08/01 10:58:53 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -513,7 +513,7 @@ extern int mediaSetFTPActive(dialogMenuItem *self);
|
||||
extern int mediaSetFTPPassive(dialogMenuItem *self);
|
||||
extern int mediaSetUFS(dialogMenuItem *self);
|
||||
extern int mediaSetNFS(dialogMenuItem *self);
|
||||
extern int mediaSetFtpUserPass(dialogMenuItem *self);
|
||||
extern int mediaSetFTPUserPass(dialogMenuItem *self);
|
||||
extern int mediaSetCPIOVerbosity(dialogMenuItem *self);
|
||||
extern int mediaGetType(dialogMenuItem *self);
|
||||
extern Boolean mediaExtractDist(char *dir, int fd);
|
||||
|
@ -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.64 1996/09/26 21:07:08 pst Exp $
|
||||
* $Id: system.c,v 1.65 1996/10/01 04:56:34 jkh Exp $
|
||||
*
|
||||
* Jordan Hubbard
|
||||
*
|
||||
@ -37,8 +37,12 @@
|
||||
static void
|
||||
handle_intr(int sig)
|
||||
{
|
||||
WINDOW *save = savescr();
|
||||
|
||||
if (!msgYesNo("Are you sure you want to abort the installation?"))
|
||||
systemShutdown(1);
|
||||
else
|
||||
restorescr(save);
|
||||
}
|
||||
|
||||
/* Expand a file into a convenient location, nuking it each time */
|
||||
|
@ -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.21 1996/07/16 17:11:38 jkh Exp $
|
||||
* $Id: cdrom.c,v 1.22 1996/08/23 07:55:57 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -83,10 +83,12 @@ mediaInitCDROM(Device *dev)
|
||||
if (!file_readable("/cdrom/cdrom.inf")) {
|
||||
Mkdir("/cdrom");
|
||||
if (mount(MOUNT_CD9660, "/cdrom", MNT_RDONLY, (caddr_t) &args) == -1) {
|
||||
msgConfirm("Error mounting %s on /cdrom: %s (%u)", dev->devname, strerror(errno), errno);
|
||||
return FALSE;
|
||||
if (errno != EBUSY) {
|
||||
msgConfirm("Error mounting %s on /cdrom: %s (%u)", dev->devname, strerror(errno), errno);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else if (!file_readable("/cdrom/cdrom.inf")) {
|
||||
if (!file_readable("/cdrom/cdrom.inf")) {
|
||||
if (msgYesNo("Warning: The CD currently in the drive is either not a FreeBSD\n"
|
||||
"CD or it is an older (pre 2.1.5) FreeBSD CD which does not\n"
|
||||
"have a version number on it. Do you wish to use this CD anyway?")) {
|
||||
|
@ -4,7 +4,7 @@
|
||||
* This is probably the last program in the `sysinstall' line - the next
|
||||
* generation being essentially a complete rewrite.
|
||||
*
|
||||
* $Id: dispatch.c,v 1.3 1996/06/26 09:09:27 jkh Exp $
|
||||
* $Id: dispatch.c,v 1.4 1996/07/02 10:57:51 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -79,7 +79,7 @@ static struct _word {
|
||||
{ "mediaSetFTPPassive", mediaSetFTPPassive },
|
||||
{ "mediaSetUFS", mediaSetUFS },
|
||||
{ "mediaSetNFS", mediaSetNFS },
|
||||
{ "mediaSetFtpUserPass", mediaSetFtpUserPass },
|
||||
{ "mediaSetFTPUserPass", mediaSetFTPUserPass },
|
||||
{ "mediaSetCPIOVerbosity", mediaSetCPIOVerbosity },
|
||||
{ "mediaGetType", mediaGetType },
|
||||
{ "optionsEditor", optionsEditor },
|
||||
|
@ -4,7 +4,7 @@
|
||||
* This is probably the last program in the `sysinstall' line - the next
|
||||
* generation being essentially a complete rewrite.
|
||||
*
|
||||
* $Id: label.c,v 1.57 1996/08/03 05:25:56 jkh Exp $
|
||||
* $Id: label.c,v 1.58 1996/08/03 10:11:10 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -263,7 +263,12 @@ get_mountpoint(struct chunk *old)
|
||||
tmp = old->private_data;
|
||||
else
|
||||
tmp = NULL;
|
||||
if (!old) {
|
||||
DialogX = 13;
|
||||
DialogY = 17;
|
||||
}
|
||||
val = msgGetInput(tmp ? tmp->mountpoint : NULL, "Please specify a mount point for the partition");
|
||||
DialogX = DialogY = 0;
|
||||
if (!val || !*val) {
|
||||
if (!old)
|
||||
return NULL;
|
||||
@ -313,7 +318,6 @@ get_partition_type(void)
|
||||
{
|
||||
char selection[20];
|
||||
int i;
|
||||
WINDOW *save = savescr();
|
||||
|
||||
static unsigned char *fs_types[] = {
|
||||
"FS",
|
||||
@ -321,12 +325,13 @@ get_partition_type(void)
|
||||
"Swap",
|
||||
"A swap partition.",
|
||||
};
|
||||
dialog_clear_norefresh();
|
||||
DialogX = 7;
|
||||
DialogY = 9;
|
||||
i = dialog_menu("Please choose a partition type",
|
||||
"If you want to use this partition for swap space, select Swap.\n"
|
||||
"If you want to put a filesystem on it, choose FS.",
|
||||
-1, -1, 2, 2, fs_types, selection, NULL, NULL);
|
||||
restorescr(save);
|
||||
DialogX = DialogY = 0;
|
||||
if (!i) {
|
||||
if (!strcmp(selection, "FS"))
|
||||
return PART_FILESYSTEM;
|
||||
@ -448,7 +453,7 @@ print_label_chunks(void)
|
||||
}
|
||||
|
||||
static void
|
||||
print_command_summary()
|
||||
print_command_summary(void)
|
||||
{
|
||||
mvprintw(17, 0, "The following commands are valid here (upper or lower case):");
|
||||
mvprintw(18, 0, "C = Create D = Delete M = Mount");
|
||||
@ -460,10 +465,17 @@ print_command_summary()
|
||||
move(0, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
clear_wins(void)
|
||||
{
|
||||
clear();
|
||||
wclear(ChunkWin);
|
||||
}
|
||||
|
||||
static int
|
||||
diskLabel(char *str)
|
||||
{
|
||||
int sz, key = 0, first_time = 1;
|
||||
int sz, key = 0;
|
||||
Boolean labeling;
|
||||
char *msg = NULL;
|
||||
PartInfo *p, *oldp;
|
||||
@ -480,13 +492,10 @@ diskLabel(char *str)
|
||||
keypad(stdscr, TRUE);
|
||||
record_label_chunks(devs);
|
||||
|
||||
dialog_clear_norefresh(); clear();
|
||||
clear();
|
||||
while (labeling) {
|
||||
print_label_chunks();
|
||||
if (first_time) {
|
||||
print_command_summary();
|
||||
first_time = 0;
|
||||
}
|
||||
print_command_summary();
|
||||
if (msg) {
|
||||
attrset(title_attr); mvprintw(23, 0, msg); attrset(A_NORMAL);
|
||||
clrtoeol();
|
||||
@ -497,13 +506,15 @@ diskLabel(char *str)
|
||||
move(23, 0);
|
||||
clrtoeol();
|
||||
}
|
||||
refresh();
|
||||
key = getch();
|
||||
switch (toupper(key)) {
|
||||
int i;
|
||||
static char _msg[40];
|
||||
|
||||
case '\014': /* ^L */
|
||||
continue;
|
||||
clear_wins();
|
||||
break;
|
||||
|
||||
case KEY_UP:
|
||||
case '-':
|
||||
@ -536,6 +547,7 @@ diskLabel(char *str)
|
||||
case KEY_F(1):
|
||||
case '?':
|
||||
systemDisplayHelp("partition");
|
||||
clear_wins();
|
||||
break;
|
||||
|
||||
case 'A':
|
||||
@ -561,6 +573,7 @@ diskLabel(char *str)
|
||||
(cp ? atoi(cp) : 32) * ONE_MEG, part, FS_BSDFFS, CHUNK_IS_ROOT);
|
||||
if (!tmp) {
|
||||
msgConfirm("Unable to create the root partition. Too big?");
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
tmp->private_data = new_part("/", TRUE, tmp->size);
|
||||
@ -583,6 +596,7 @@ diskLabel(char *str)
|
||||
swsize, part, FS_SWAP, 0);
|
||||
if (!tmp) {
|
||||
msgConfirm("Unable to create the swap partition. Too big?");
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
tmp->private_data = 0;
|
||||
@ -598,6 +612,7 @@ diskLabel(char *str)
|
||||
msgConfirm("Less than %dMB free for /var - you will need to\n"
|
||||
"partition your disk manually with a custom install!",
|
||||
(cp ? atoi(cp) : VAR_MIN_SIZE));
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
tmp->private_data = new_part("/var", TRUE, tmp->size);
|
||||
@ -614,6 +629,7 @@ diskLabel(char *str)
|
||||
if (!sz || sz < (USR_MIN_SIZE * ONE_MEG)) {
|
||||
msgConfirm("Less than %dMB free for /usr - you will need to\n"
|
||||
"partition your disk manually with a custom install!", USR_MIN_SIZE);
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
|
||||
@ -623,6 +639,7 @@ diskLabel(char *str)
|
||||
if (!tmp) {
|
||||
msgConfirm("Unable to create the /usr partition. Not enough space?\n"
|
||||
"You will need to partition your disk manually with a custom install!");
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
tmp->private_data = new_part("/usr", TRUE, tmp->size);
|
||||
@ -652,11 +669,17 @@ diskLabel(char *str)
|
||||
u_long flags = 0;
|
||||
|
||||
sprintf(osize, "%d", sz);
|
||||
val = msgGetInput(osize, "Please specify the size for new FreeBSD partition in blocks, or\n"
|
||||
"append a trailing `M' for megabytes (e.g. 20M) or `C' for cylinders.\n\n"
|
||||
"Space free is %d blocks (%dMB)", sz, sz / ONE_MEG);
|
||||
if (!val || (size = strtol(val, &cp, 0)) <= 0)
|
||||
DialogX = 3;
|
||||
DialogY = 1;
|
||||
val = msgGetInput(osize,
|
||||
"Please specify the partition size in blocks or append a trailing M for\n"
|
||||
"megabytes or C for cylinders. %d blocks (%dMB) are free.",
|
||||
sz, sz / ONE_MEG);
|
||||
DialogX = DialogY = 0;
|
||||
if (!val || (size = strtol(val, &cp, 0)) <= 0) {
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
|
||||
if (*cp) {
|
||||
if (toupper(*cp) == 'M')
|
||||
@ -666,20 +689,28 @@ diskLabel(char *str)
|
||||
}
|
||||
if (size <= FS_MIN_SIZE) {
|
||||
msgConfirm("The minimum filesystem size is %dMB", FS_MIN_SIZE / ONE_MEG);
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
type = get_partition_type();
|
||||
if (type == PART_NONE)
|
||||
if (type == PART_NONE) {
|
||||
clear_wins();
|
||||
beep();
|
||||
break;
|
||||
}
|
||||
|
||||
if (type == PART_FILESYSTEM) {
|
||||
if ((p = get_mountpoint(NULL)) == NULL)
|
||||
if ((p = get_mountpoint(NULL)) == NULL) {
|
||||
clear_wins();
|
||||
beep();
|
||||
break;
|
||||
}
|
||||
else if (!strcmp(p->mountpoint, "/"))
|
||||
flags |= CHUNK_IS_ROOT;
|
||||
else
|
||||
flags &= ~CHUNK_IS_ROOT;
|
||||
} else
|
||||
}
|
||||
else
|
||||
p = NULL;
|
||||
|
||||
if ((flags & CHUNK_IS_ROOT)) {
|
||||
@ -688,6 +719,7 @@ diskLabel(char *str)
|
||||
"FreeBSD boot code cannot deal with a root partition created\n"
|
||||
"in that location. Please choose another location or smaller\n"
|
||||
"size for your root partition and try again!");
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
if (size < (ROOT_MIN_SIZE * ONE_MEG)) {
|
||||
@ -703,6 +735,7 @@ diskLabel(char *str)
|
||||
flags);
|
||||
if (!tmp) {
|
||||
msgConfirm("Unable to create the partition. Too big?");
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
if ((flags & CHUNK_IS_ROOT) && (tmp->flags & CHUNK_PAST_1024)) {
|
||||
@ -711,6 +744,7 @@ diskLabel(char *str)
|
||||
"poor location to boot from. Please choose another\n"
|
||||
"location (or smaller size) for your root partition and try again!");
|
||||
Delete_Chunk(label_chunk_info[here].c->disk, tmp);
|
||||
clear_wins();
|
||||
break;
|
||||
}
|
||||
if (type != PART_SWAP) {
|
||||
@ -723,6 +757,7 @@ diskLabel(char *str)
|
||||
tmp->private_free = safe_free;
|
||||
variable_set2(DISK_LABELLED, "yes");
|
||||
record_label_chunks(devs);
|
||||
clear_wins();
|
||||
}
|
||||
break;
|
||||
|
||||
@ -767,6 +802,7 @@ diskLabel(char *str)
|
||||
}
|
||||
variable_set2(DISK_LABELLED, "yes");
|
||||
record_label_chunks(devs);
|
||||
clear();
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -791,7 +827,7 @@ diskLabel(char *str)
|
||||
safe_free(pi);
|
||||
label_chunk_info[here].c->private_free = safe_free;
|
||||
variable_set2(DISK_LABELLED, "yes");
|
||||
}
|
||||
}
|
||||
else
|
||||
msg = MSG_NOT_APPLICABLE;
|
||||
break;
|
||||
@ -814,6 +850,7 @@ diskLabel(char *str)
|
||||
}
|
||||
}
|
||||
record_label_chunks(devs);
|
||||
clear();
|
||||
break;
|
||||
|
||||
case 'W':
|
||||
@ -821,12 +858,10 @@ diskLabel(char *str)
|
||||
"operation, and it should also be noted that this option is NOT for\n"
|
||||
"use during new installations but rather for modifying existing ones.\n\n"
|
||||
"Are you absolutely SURE you want to do this now?")) {
|
||||
WINDOW *save = savescr();
|
||||
|
||||
variable_set2(DISK_LABELLED, "yes");
|
||||
diskLabelCommit(NULL);
|
||||
restorescr(save);
|
||||
}
|
||||
clear();
|
||||
break;
|
||||
|
||||
case '|':
|
||||
@ -835,7 +870,6 @@ diskLabel(char *str)
|
||||
"expected to understand!")) {
|
||||
int i;
|
||||
Device **devs;
|
||||
WINDOW *save = savescr();
|
||||
|
||||
dialog_clear();
|
||||
end_dialog();
|
||||
@ -851,9 +885,8 @@ diskLabel(char *str)
|
||||
}
|
||||
variable_set2(DISK_LABELLED, "yes");
|
||||
DialogActive = TRUE;
|
||||
dialog_clear_norefresh();
|
||||
restorescr(save);
|
||||
record_label_chunks(devs);
|
||||
clear();
|
||||
}
|
||||
else
|
||||
msg = "A most prudent choice!";
|
||||
|
@ -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.52 1996/08/03 10:11:16 jkh Exp $
|
||||
* $Id: media.c,v 1.53 1996/09/26 22:07:32 pst Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -259,21 +259,23 @@ mediaSetFTP(dialogMenuItem *self)
|
||||
static Device ftpDevice;
|
||||
char *cp, *hostname, *dir;
|
||||
extern int FtpPort;
|
||||
static int first_time = 1;
|
||||
int what;
|
||||
|
||||
dialog_clear_norefresh();
|
||||
cp = variable_get(VAR_FTP_PATH);
|
||||
if (!(cp && first_time)) {
|
||||
if (!cp) {
|
||||
dialog_clear_norefresh();
|
||||
if (!dmenuOpenSimple(&MenuMediaFTP, FALSE))
|
||||
return DITEM_FAILURE | DITEM_RECREATE;
|
||||
else
|
||||
cp = variable_get(VAR_FTP_PATH);
|
||||
what = DITEM_RECREATE;
|
||||
}
|
||||
if (first_time)
|
||||
first_time = 0;
|
||||
else
|
||||
what = DITEM_RESTORE;
|
||||
if (!cp) {
|
||||
dialog_clear_norefresh();
|
||||
msgConfirm("%s not set! Not setting an FTP installation path, OK?", VAR_FTP_PATH);
|
||||
return DITEM_FAILURE | DITEM_RECREATE;
|
||||
return DITEM_FAILURE | what;
|
||||
}
|
||||
else if (!strcmp(cp, "other")) {
|
||||
variable_set2(VAR_FTP_PATH, "ftp://");
|
||||
@ -286,20 +288,20 @@ mediaSetFTP(dialogMenuItem *self)
|
||||
"Where <path> is relative to the anonymous ftp directory or the\n"
|
||||
"home directory of the user being logged in as.");
|
||||
if (!cp || !*cp)
|
||||
return DITEM_FAILURE | DITEM_RECREATE;
|
||||
return DITEM_FAILURE | what;
|
||||
}
|
||||
if (strncmp("ftp://", cp, 6)) {
|
||||
msgConfirm("Sorry, %s is an invalid URL!", cp);
|
||||
return DITEM_FAILURE | DITEM_RECREATE;
|
||||
return DITEM_FAILURE | what;
|
||||
}
|
||||
strcpy(ftpDevice.name, cp);
|
||||
|
||||
if (!tcpDeviceSelect())
|
||||
return DITEM_FAILURE | DITEM_RECREATE;
|
||||
return DITEM_FAILURE | what;
|
||||
if (!mediaDevice || !mediaDevice->init(mediaDevice)) {
|
||||
if (isDebug())
|
||||
msgDebug("mediaSetFTP: Net device init failed.\n");
|
||||
return DITEM_FAILURE | DITEM_RECREATE;
|
||||
return DITEM_FAILURE | what;
|
||||
}
|
||||
hostname = cp + 6;
|
||||
if ((cp = index(hostname, ':')) != NULL) {
|
||||
@ -321,7 +323,7 @@ mediaSetFTP(dialogMenuItem *self)
|
||||
msgConfirm("Cannot resolve hostname `%s'! Are you sure that your\n"
|
||||
"name server, gateway and network interface are correctly configured?", hostname);
|
||||
mediaDevice->shutdown(mediaDevice);
|
||||
return DITEM_FAILURE | DITEM_RECREATE;
|
||||
return DITEM_FAILURE | what;
|
||||
}
|
||||
}
|
||||
variable_set2(VAR_FTP_HOST, hostname);
|
||||
@ -334,7 +336,7 @@ mediaSetFTP(dialogMenuItem *self)
|
||||
ftpDevice.shutdown = mediaShutdownFTP;
|
||||
ftpDevice.private = mediaDevice; /* Set to network device by tcpDeviceSelect() */
|
||||
mediaDevice = &ftpDevice;
|
||||
return DITEM_LEAVE_MENU | DITEM_RECREATE;
|
||||
return DITEM_SUCCESS | DITEM_LEAVE_MENU | what;
|
||||
}
|
||||
|
||||
int
|
||||
@ -357,6 +359,7 @@ mediaSetUFS(dialogMenuItem *self)
|
||||
static Device ufsDevice;
|
||||
char *cp;
|
||||
|
||||
dialog_clear_norefresh();
|
||||
cp = variable_get_value(VAR_UFS_PATH, "Enter a fully qualified pathname for the directory\n"
|
||||
"containing the FreeBSD distribution files:");
|
||||
if (!cp)
|
||||
@ -378,6 +381,7 @@ mediaSetNFS(dialogMenuItem *self)
|
||||
static Device nfsDevice;
|
||||
char *cp, *idx;
|
||||
|
||||
dialog_clear_norefresh();
|
||||
cp = variable_get_value(VAR_NFS_PATH, "Please enter the full NFS file specification for the remote\n"
|
||||
"host and directory containing the FreeBSD distribution files.\n"
|
||||
"This should be in the format: hostname:/some/freebsd/dir");
|
||||
@ -593,15 +597,18 @@ mediaVerify(void)
|
||||
|
||||
/* Set the FTP username and password fields */
|
||||
int
|
||||
mediaSetFtpUserPass(dialogMenuItem *self)
|
||||
mediaSetFTPUserPass(dialogMenuItem *self)
|
||||
{
|
||||
char *pass;
|
||||
|
||||
if (variable_get_value(VAR_FTP_USER, "Please enter the username you wish to login as:"))
|
||||
dialog_clear_norefresh();
|
||||
if (variable_get_value(VAR_FTP_USER, "Please enter the username you wish to login as:")) {
|
||||
dialog_clear_norefresh();
|
||||
pass = variable_get_value(VAR_FTP_PASS, "Please enter the password for this user:");
|
||||
}
|
||||
else
|
||||
pass = NULL;
|
||||
return pass ? DITEM_SUCCESS : DITEM_FAILURE;
|
||||
return (pass ? DITEM_SUCCESS : DITEM_FAILURE) | DITEM_RESTORE;
|
||||
}
|
||||
|
||||
/* Set CPIO verbosity level */
|
||||
|
@ -4,7 +4,7 @@
|
||||
* This is probably the last attempt in the `sysinstall' line, the next
|
||||
* generation being slated for what's essentially a complete rewrite.
|
||||
*
|
||||
* $Id: options.c,v 1.41 1996/07/09 14:28:18 jkh Exp $
|
||||
* $Id: options.c,v 1.42 1996/08/03 10:11:33 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -111,7 +111,7 @@ static Option Options[] = {
|
||||
{ "Yes to All", "Assume \"Yes\" answers to all non-critical dialogs",
|
||||
OPT_IS_VAR, NULL, VAR_NO_CONFIRM, varCheck },
|
||||
{ "FTP username", "Username and password to use instead of anonymous",
|
||||
OPT_IS_FUNC, mediaSetFtpUserPass, VAR_FTP_USER, varCheck },
|
||||
OPT_IS_FUNC, mediaSetFTPUserPass, VAR_FTP_USER, varCheck },
|
||||
{ "Editor", "Which text editor to use during installation",
|
||||
OPT_IS_VAR, EDITOR_PROMPT, VAR_EDITOR, varCheck },
|
||||
{ "Tape Blocksize", "Tape media block size in 512 byte blocks",
|
||||
@ -164,17 +164,22 @@ value_of(Option opt)
|
||||
return "<unknown>";
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
fire(Option opt)
|
||||
{
|
||||
if (opt.type == OPT_IS_FUNC) {
|
||||
int (*cp)(char *) = opt.data;
|
||||
int status = 0;
|
||||
|
||||
cp(NULL);
|
||||
if (opt.type == OPT_IS_FUNC) {
|
||||
int (*cp)(char *) = opt.data, rcode;
|
||||
|
||||
rcode = cp(NULL);
|
||||
if (rcode & (DITEM_RECREATE | DITEM_RESTORE))
|
||||
status = 1;
|
||||
}
|
||||
else if (opt.type == OPT_IS_VAR) {
|
||||
if (opt.data) {
|
||||
(void)variable_get_value(opt.aux, opt.data);
|
||||
status = 1;
|
||||
}
|
||||
else if (variable_get(opt.aux))
|
||||
variable_unset(opt.aux);
|
||||
@ -183,8 +188,8 @@ fire(Option opt)
|
||||
}
|
||||
if (opt.check)
|
||||
opt.check(opt);
|
||||
clear();
|
||||
refresh();
|
||||
return status;
|
||||
}
|
||||
|
||||
int
|
||||
@ -239,6 +244,7 @@ optionsEditor(dialogMenuItem *self)
|
||||
case KEY_F(1):
|
||||
case '?':
|
||||
systemDisplayHelp("options");
|
||||
clear();
|
||||
break;
|
||||
|
||||
case KEY_UP:
|
||||
@ -265,9 +271,8 @@ optionsEditor(dialogMenuItem *self)
|
||||
continue;
|
||||
|
||||
case ' ':
|
||||
clear();
|
||||
fire(Options[currOpt]);
|
||||
clear();
|
||||
if (fire(Options[currOpt]))
|
||||
clear();
|
||||
continue;
|
||||
|
||||
case 'Q':
|
||||
|
@ -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.77 1996/07/31 09:29:35 jkh Exp $
|
||||
* $Id: sysinstall.h,v 1.78 1996/08/01 10:58:53 jkh Exp $
|
||||
*
|
||||
* Copyright (c) 1995
|
||||
* Jordan Hubbard. All rights reserved.
|
||||
@ -513,7 +513,7 @@ extern int mediaSetFTPActive(dialogMenuItem *self);
|
||||
extern int mediaSetFTPPassive(dialogMenuItem *self);
|
||||
extern int mediaSetUFS(dialogMenuItem *self);
|
||||
extern int mediaSetNFS(dialogMenuItem *self);
|
||||
extern int mediaSetFtpUserPass(dialogMenuItem *self);
|
||||
extern int mediaSetFTPUserPass(dialogMenuItem *self);
|
||||
extern int mediaSetCPIOVerbosity(dialogMenuItem *self);
|
||||
extern int mediaGetType(dialogMenuItem *self);
|
||||
extern Boolean mediaExtractDist(char *dir, int fd);
|
||||
|
@ -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.64 1996/09/26 21:07:08 pst Exp $
|
||||
* $Id: system.c,v 1.65 1996/10/01 04:56:34 jkh Exp $
|
||||
*
|
||||
* Jordan Hubbard
|
||||
*
|
||||
@ -37,8 +37,12 @@
|
||||
static void
|
||||
handle_intr(int sig)
|
||||
{
|
||||
WINDOW *save = savescr();
|
||||
|
||||
if (!msgYesNo("Are you sure you want to abort the installation?"))
|
||||
systemShutdown(1);
|
||||
else
|
||||
restorescr(save);
|
||||
}
|
||||
|
||||
/* Expand a file into a convenient location, nuking it each time */
|
||||
|
Loading…
Reference in New Issue
Block a user