version 1.39, 2000/12/22 10:12:12 |
version 1.40, 2001/01/14 02:38:14 |
Line 64 static void foundffs (struct data *list, |
|
Line 64 static void foundffs (struct data *list, |
|
static int do_fsck(const char *diskpart); |
static int do_fsck(const char *diskpart); |
static int fsck_root (void); |
static int fsck_root (void); |
static int |
static int |
do_ffs_newfs(const char *partname, int part, const char *mountpoint); |
do_flfs_newfs(const char *partname, int part, const char *mountpoint); |
|
static int fsck_num(const char *mp); |
|
|
static int fsck_with_error_menu(const char *diskpart); |
static int fsck_with_error_menu(const char *diskpart); |
static int target_mount_with_error_menu(const char *opt, char *diskpart, |
static int target_mount_with_error_menu(const char *opt, char *diskpart, |
Line 203 disp_cur_fspart(int disp, int showall) |
|
Line 204 disp_cur_fspart(int disp, int showall) |
|
msg_table_add(MSG_fspart_row_start, |
msg_table_add(MSG_fspart_row_start, |
'a'+i, psize, poffset, pend, |
'a'+i, psize, poffset, pend, |
fstypenames[bsdlabel[i].pi_fstype]); |
fstypenames[bsdlabel[i].pi_fstype]); |
if (bsdlabel[i].pi_fstype == FS_BSDFFS) |
if (PI_ISBSDFS(&bsdlabel[i])) |
msg_table_add(MSG_fspart_row_end_bsd, |
msg_table_add(MSG_fspart_row_end_bsd, |
bsdlabel[i].pi_bsize, |
bsdlabel[i].pi_bsize, |
bsdlabel[i].pi_fsize, |
bsdlabel[i].pi_fsize, |
|
preservemount[i] ? "Yes" : "No", |
fsmount[i]); |
fsmount[i]); |
else if (bsdlabel[i].pi_fstype == FS_MSDOS) |
else if (bsdlabel[i].pi_fstype == FS_MSDOS) |
msg_table_add(MSG_fspart_row_end_msdos, |
msg_table_add(MSG_fspart_row_end_msdos, |
Line 252 make_filesystems(void) |
|
Line 254 make_filesystems(void) |
|
for (i = 0; i < getmaxpartitions(); i++) { |
for (i = 0; i < getmaxpartitions(); i++) { |
/* |
/* |
* newfs and mount. For now, process only BSD filesystems. |
* newfs and mount. For now, process only BSD filesystems. |
* but if this is the mounted-on root, don't touch it! |
* but if this is the mounted-on root, has no mount |
|
* point defined, or is marked preserve, don't touch it! |
*/ |
*/ |
snprintf(partname, STRSIZE, "%s%c", diskdev, 'a'+i); |
snprintf(partname, STRSIZE, "%s%c", diskdev, 'a'+i); |
if (bsdlabel[i].pi_fstype == FS_BSDFFS && |
if (PI_ISBSDFS(&bsdlabel[i]) && !is_active_rootpart(partname)) { |
!is_active_rootpart(partname)) { |
error = do_flfs_newfs(partname, i, fsmount[i]); |
error = do_ffs_newfs(partname, i, fsmount[i]); |
|
if (error) |
if (error) |
return error; |
return error; |
} |
} |
Line 267 make_filesystems(void) |
|
Line 269 make_filesystems(void) |
|
|
|
/* newfs and mount an ffs filesystem. */ |
/* newfs and mount an ffs filesystem. */ |
static int |
static int |
do_ffs_newfs(const char *partname, int partno, const char *mountpoint) |
do_flfs_newfs(const char *partname, int partno, const char *mountpoint) |
{ |
{ |
char devname[STRSIZE]; |
char devname[STRSIZE]; |
int error; |
int error; |
|
|
error = run_prog(RUN_DISPLAY, MSG_cmdfail, |
if (*mountpoint && !preservemount[partno]) |
"/sbin/newfs /dev/r%s", partname); |
error = run_prog(RUN_DISPLAY, MSG_cmdfail, "%s /dev/r%s", |
|
bsdlabel[partno].pi_fstype == FS_BSDFFS ? |
|
"/sbin/newfs" : "/sbin/newfs_lfs", partname); |
|
else |
|
error = 0; |
if (*mountpoint && error == 0) { |
if (*mountpoint && error == 0) { |
snprintf(devname, STRSIZE, "/dev/%s", partname); |
snprintf(devname, STRSIZE, "/dev/%s", partname); |
if (partno > 0) { |
if (partno > 0) /* XXX strcmp(mountpoint, "/") ? XXX */ |
make_target_dir(mountpoint); |
make_target_dir(mountpoint); |
error = target_mount("-v -o async", |
error = target_mount(bsdlabel[partno].pi_fstype == FS_BSDFFS ? |
devname, mountpoint); |
"-v -o async" : "-v", devname, mountpoint); |
} else |
|
error = target_mount("-v -o async", |
|
devname, mountpoint); |
|
if (error) { |
if (error) { |
msg_display(MSG_mountfail, devname, mountpoint); |
msg_display(MSG_mountfail, devname, mountpoint); |
process_menu (MENU_ok); |
process_menu (MENU_ok); |
|
|
make_fstab(void) |
make_fstab(void) |
{ |
{ |
FILE *f; |
FILE *f; |
int i; |
int i, swapdev = -1; |
|
|
/* Create the fstab. */ |
/* Create the fstab. */ |
make_target_dir("/etc"); |
make_target_dir("/etc"); |
f = target_fopen("/etc/fstab", "w"); |
f = target_fopen("/etc/fstab", "w"); |
if (logging) |
if (logging) |
(void)fprintf(log, "Creating %s/etc/fstab.\n", target_prefix()); |
(void)fprintf(log, "Creating %s/etc/fstab.\n", target_prefix()); |
if (scripting) |
scripting_fprintf(NULL, "cat <<EOF >%s/etc/fstab\n", target_prefix()); |
(void)fprintf(script, "cat <<EOF >%s/etc/fstab\n", target_prefix()); |
|
|
|
if (f == NULL) { |
if (f == NULL) { |
#ifndef DEBUG |
#ifndef DEBUG |
Line 316 make_fstab(void) |
|
Line 318 make_fstab(void) |
|
f = stdout; |
f = stdout; |
#endif |
#endif |
} |
} |
(void)fprintf (f, "/dev/%sa / ffs rw 1 1\n", diskdev); |
for (i = 0; i < getmaxpartitions(); i++) |
if (scripting) |
if (bsdlabel[i].pi_fstype == FS_BSDFFS) |
(void)fprintf (script, "/dev/%sa / ffs rw 1 1\n", diskdev); |
scripting_fprintf(f, "/dev/%s%c %s ffs rw 1 %d\n", |
(void)fprintf (f, "/dev/%sb none swap sw 0 0\n", diskdev); |
diskdev, 'a'+i, fsmount[i], |
if (scripting) |
fsck_num(fsmount[i])); |
(void)fprintf (script, "/dev/%sb none swap sw 0 0\n", diskdev); |
else if (bsdlabel[i].pi_fstype == FS_BSDLFS) { |
for (i = getrawpartition() + 1; i < getmaxpartitions(); i++) |
char *s = "#"; |
if (bsdlabel[i].pi_fstype == FS_BSDFFS) { |
|
(void)fprintf (f, "/dev/%s%c %s ffs rw 1 2\n", |
/* If there is no LFS, just comment it out. */ |
diskdev, 'a'+i, fsmount[i]); |
if (!check_lfs_progs()) |
if (scripting) |
s++; |
(void)fprintf (script, "/dev/%s%c %s ffs rw 1 2\n", |
scripting_fprintf(f, "%s/dev/%s%c %s lfs rw 1 %d\n", s, |
diskdev, 'a'+i, fsmount[i]); |
diskdev, 'a'+i, fsmount[i], |
} else if (bsdlabel[i].pi_fstype == FS_MSDOS ) { |
fsck_num(fsmount[i])); |
(void)fprintf(f, "/dev/%s%c %s msdos rw 0 0\n", |
} else if (bsdlabel[i].pi_fstype == FS_MSDOS) |
|
scripting_fprintf(f, "/dev/%s%c %s msdos rw 0 0\n", |
diskdev, 'a'+i, fsmount[i]); |
diskdev, 'a'+i, fsmount[i]); |
if (scripting) |
else if (bsdlabel[i].pi_fstype == FS_SWAP) { |
(void)fprintf(script, "/dev/%s%c %s msdos rw 0 0\n", |
if (swapdev == -1) |
diskdev, 'a'+i, fsmount[i]); |
swapdev = i; |
|
scripting_fprintf(f, "/dev/%s%c none swap sw 0 0\n", diskdev, 'a'+i); |
} |
} |
(void)fprintf(f, "/kern /kern kernfs rw\n"); |
if (layout_tmp) { |
if (scripting) { |
if (swapdev != -1) |
(void)fprintf(script, "/kern /kern kernfs rw\n"); |
scripting_fprintf(f, "/dev/%s%c /tmp mfs rw\n", diskdev, 'a'+swapdev); |
(void)fprintf(script, "EOF\n"); |
else |
|
scripting_fprintf(f, "swap /tmp mfs rw\n"); |
} |
} |
|
scripting_fprintf(script, "/kern /kern kernfs rw\n"); |
|
scripting_fprintf(NULL, "EOF\n"); |
|
|
#ifndef DEBUG |
#ifndef DEBUG |
fclose(f); |
fclose(f); |
fflush(NULL); |
fflush(NULL); |
Line 350 make_fstab(void) |
|
Line 358 make_fstab(void) |
|
return 0; |
return 0; |
} |
} |
|
|
|
static int |
|
fsck_num(const char *mp) |
|
{ |
|
static int num = 1; |
|
|
|
if (strcmp(mp, "/")) |
|
return 1; |
|
|
|
return (++num); |
|
} |
|
|
|
|
/* Get information on the file systems mounted from the root filesystem. |
/* Get information on the file systems mounted from the root filesystem. |
* Offer to convert them into 4.4BSD inodes if they are not 4.4BSD |
* Offer to convert them into 4.4BSD inodes if they are not 4.4BSD |
Line 402 inode_kind(char *dev) |
|
Line 421 inode_kind(char *dev) |
|
return -2; |
return -2; |
} |
} |
close(fd); |
close(fd); |
|
if (fs_is_lfs(&fs.fs)) |
|
return -4; |
if (fs.fs.fs_magic != FS_MAGIC) |
if (fs.fs.fs_magic != FS_MAGIC) |
return -3; |
return -3; |
if (fs.fs.fs_inodefmt < FS_44INODEFMT) |
if (fs.fs.fs_inodefmt < FS_44INODEFMT) |
Line 423 do_fsck(const char *diskpart) |
|
Line 444 do_fsck(const char *diskpart) |
|
{ |
{ |
char raw[SSTRSIZE]; |
char raw[SSTRSIZE]; |
int inodetype; |
int inodetype; |
char * upgr = ""; |
char *upgr = "", *prog = "/sbin/fsck_ffs"; |
int err; |
int err; |
|
|
/* cons up raw partition name. */ |
/* cons up raw partition name. */ |
snprintf (raw, SSTRSIZE, "/dev/r%s", diskpart); |
snprintf (raw, SSTRSIZE, "/dev/r%s", diskpart); |
inodetype = inode_kind (raw); |
inodetype = inode_kind (raw); |
|
|
if (inodetype < 0) { |
if (inodetype == -4) { |
|
if (check_lfs_progs() == 0) |
|
return EOPNOTSUPP; /* XXX */ |
|
prog = "/sbin/fsck_lfs"; |
|
} else if (inodetype < 0) { |
/* error */ |
/* error */ |
return inodetype; |
return inodetype; |
} |
} else if (inodetype == 0) { |
else if (inodetype == 0) { |
|
/* Ask to upgrade */ |
/* Ask to upgrade */ |
msg_display(MSG_upgrinode, raw); |
msg_display(MSG_upgrinode, raw); |
process_menu(MENU_yesno); |
process_menu(MENU_yesno); |
Line 444 do_fsck(const char *diskpart) |
|
Line 468 do_fsck(const char *diskpart) |
|
|
|
/*endwin();*/ |
/*endwin();*/ |
#ifndef DEBUG_SETS |
#ifndef DEBUG_SETS |
err = run_prog(RUN_DISPLAY, NULL, "/sbin/fsck_ffs %s%s", upgr, raw); |
err = run_prog(RUN_DISPLAY, NULL, "%s %s%s", prog, upgr, raw); |
#else |
#else |
err = run_prog(RUN_DISPLAY, NULL, "/sbin/fsck_ffs -f %s%s", upgr, raw); |
err = run_prog(RUN_DISPLAY, NULL, "%s -f %s%s", prog, upgr, raw); |
#endif |
#endif |
wrefresh(stdscr); |
wrefresh(stdscr); |
return err; |
return err; |
} |
} |
|
|
Line 461 do_fsck(const char *diskpart) |
|
Line 485 do_fsck(const char *diskpart) |
|
int |
int |
fsck_with_error_menu(const char *diskpart) |
fsck_with_error_menu(const char *diskpart) |
{ |
{ |
register int error; |
int error; |
if ((error = do_fsck (diskpart)) != 0) { |
|
|
if ((error = do_fsck(diskpart)) != 0) { |
#ifdef DEBUG |
#ifdef DEBUG |
fprintf(stderr, "sysinst: do_fsck() returned err %d\n", error); |
fprintf(stderr, "sysinst: do_fsck() returned err %d\n", error); |
#endif |
#endif |
Line 482 fsck_with_error_menu(const char *diskpar |
|
Line 507 fsck_with_error_menu(const char *diskpar |
|
int target_mount_with_error_menu(const char *opt, |
int target_mount_with_error_menu(const char *opt, |
char *diskpart, const char *mntpoint) |
char *diskpart, const char *mntpoint) |
{ |
{ |
register int error; |
int error; |
char devname[STRSIZE]; |
char devname[STRSIZE]; |
|
|
snprintf(devname, STRSIZE, "/dev/%s", diskpart); |
snprintf(devname, STRSIZE, "/dev/%s", diskpart); |