Module Name: src
Committed By: tsutsui
Date: Wed Feb 19 12:14:41 UTC 2014
Modified Files:
src/distrib/utils/sysinst: bsddisklabel.c
src/distrib/utils/sysinst/arch/luna68k: md.c md.h msg.md.en
Log Message:
Improve luna68k md part of sysinst.
- setup a boot UFS partition and install native bootloader
- add messages how to setup NVRAM variables for firmware to load bootloader
- enable swap on <= 32MB machines
To generate a diff of this commit:
cvs rdiff -u -r1.59 -r1.60 src/distrib/utils/sysinst/bsddisklabel.c
cvs rdiff -u -r1.2 -r1.3 src/distrib/utils/sysinst/arch/luna68k/md.c \
src/distrib/utils/sysinst/arch/luna68k/md.h
cvs rdiff -u -r1.1 -r1.2 src/distrib/utils/sysinst/arch/luna68k/msg.md.en
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/distrib/utils/sysinst/bsddisklabel.c
diff -u src/distrib/utils/sysinst/bsddisklabel.c:1.59 src/distrib/utils/sysinst/bsddisklabel.c:1.60
--- src/distrib/utils/sysinst/bsddisklabel.c:1.59 Mon Nov 4 20:07:49 2013
+++ src/distrib/utils/sysinst/bsddisklabel.c Wed Feb 19 12:14:40 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: bsddisklabel.c,v 1.59 2013/11/04 20:07:49 christos Exp $ */
+/* $NetBSD: bsddisklabel.c,v 1.60 2014/02/19 12:14:40 tsutsui Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -594,7 +594,12 @@ make_bsd_partitions(void)
i = (i + dlcylsize * sectorsize - 1) / (dlcylsize * sectorsize);
i *= dlcylsize;
}
+#if defined(PART_BOOT_FFS)
+ bsdlabel[PART_BOOT].pi_fstype = FS_BSDFFS;
+ bsdlabel[PART_BOOT].pi_flags = PIF_NEWFS;
+#else
bsdlabel[PART_BOOT].pi_fstype = FS_BOOT;
+#endif
bsdlabel[PART_BOOT].pi_size = i;
#ifdef BOOT_HIGH
bsdlabel[PART_BOOT].pi_offset = ptend - i;
Index: src/distrib/utils/sysinst/arch/luna68k/md.c
diff -u src/distrib/utils/sysinst/arch/luna68k/md.c:1.2 src/distrib/utils/sysinst/arch/luna68k/md.c:1.3
--- src/distrib/utils/sysinst/arch/luna68k/md.c:1.2 Fri Nov 4 11:27:03 2011
+++ src/distrib/utils/sysinst/arch/luna68k/md.c Wed Feb 19 12:14:40 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.2 2011/11/04 11:27:03 martin Exp $ */
+/* $NetBSD: md.c,v 1.3 2014/02/19 12:14:40 tsutsui Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -38,7 +38,9 @@
#include <sys/disklabel.h>
#include <sys/ioctl.h>
#include <sys/param.h>
+#include <sys/stat.h>
#include <stdio.h>
+#include <stdlib.h>
#include <curses.h>
#include <unistd.h>
#include <fcntl.h>
@@ -49,6 +51,9 @@
#include "msg_defs.h"
#include "menu_defs.h"
+#define PART_BOOT_BSIZE 4096
+#define PART_BOOT_FSIZE 512
+
void
md_init(void)
{
@@ -120,6 +125,16 @@ int
md_check_partitions(void)
{
+ /*
+ * Make sure that a boot partition (old 4.3BSD UFS) is prepared
+ * properly for our native bootloader.
+ */
+ if (bsdlabel[PART_BOOT].pi_fstype != FS_BSDFFS ||
+ (bsdlabel[PART_BOOT].pi_flags & PIF_NEWFS) == 0) {
+ msg_display(MSG_nobootpartdisklabel);
+ process_menu(MENU_ok, NULL);
+ return 0;
+ }
return 1;
}
@@ -140,29 +155,45 @@ int
md_post_disklabel(void)
{
+ if (get_ramsize() <= 32)
+ set_swap(diskdev, bsdlabel);
+
+ return 0;
+}
+
+static int
+copy_bootloader(void)
+{
+ const char *mntdir = "/mnt2";
+
+ msg_display(MSG_copybootloader, diskdev);
+ if (!run_program(RUN_SILENT | RUN_ERROR_OK,
+ "mount /dev/%s%c %s", diskdev, 'a' + PART_BOOT, mntdir)) {
+ mnt2_mounted = 1;
+ run_program(0, "/bin/cp /usr/mdec/boot %s", mntdir);
+ run_program(RUN_SILENT | RUN_ERROR_OK, "umount %s", mntdir);
+ mnt2_mounted = 0;
+ } else {
+ /* XXX print proper error message */
+ return 1;
+ }
return 0;
}
/*
- * hook called after upgrade() or install() has finished setting
- * up the target disk but immediately before the user is given the
- * ``disks are now set up'' message.
- *
- * On the news68k, we use this opportunity to install the boot blocks.
+ * hook called after install() has finished setting up the target disk
+ * but immediately before the user is given the ``disks are now set up''
+ * message.
*/
int
md_post_newfs(void)
{
-#if 0 /* no bootloader (yet) */
- const char *bootfile = "/boot";
- printf(msg_string(MSG_dobootblks), diskdev);
- cp_to_target("/usr/mdec/boot", bootfile);
- sync();
- run_program(RUN_DISPLAY, "/usr/sbin/installboot /dev/r%sc %s %s",
- diskdev, "/usr/mdec/bootxx", bootfile);
-#endif
- return 0;
+ if (run_program(RUN_DISPLAY | RUN_PROGRESS,
+ "/sbin/newfs -V2 -O 0 -b %d -f %d /dev/r%s%c",
+ PART_BOOT_BSIZE, PART_BOOT_FSIZE, diskdev, 'a' + PART_BOOT))
+ return 1;
+ return copy_bootloader();
}
int
@@ -179,12 +210,17 @@ md_cleanup_install(void)
#ifndef DEBUG
enable_rc_conf();
#endif
+ msg_display(MSG_howtoboot);
+ process_menu(MENU_ok, NULL);
}
int
md_pre_update(void)
{
+ if (get_ramsize() <= 32)
+ set_swap(diskdev, bsdlabel);
+
return 1;
}
@@ -192,8 +228,26 @@ md_pre_update(void)
int
md_update(void)
{
+ const char *mntdir = "/mnt2";
+ char bootpath[MAXPATHLEN];
+ struct stat sb;
+ bool hasboot = false;
- md_post_newfs();
+ /*
+ * Check if there is a boot UFS parttion and it has the old bootloader.
+ * We'll update bootloader only if the old one was installed.
+ */
+ if (!run_program(RUN_SILENT | RUN_ERROR_OK,
+ "mount -r /dev/%s%c %s", diskdev, 'a' + PART_BOOT, mntdir)) {
+ mnt2_mounted = 1;
+ snprintf(bootpath, sizeof(bootpath), "%s/%s", mntdir, "boot");
+ if (stat(bootpath, &sb) == 0 && S_ISREG(sb.st_mode))
+ hasboot = true;
+ run_program(RUN_SILENT | RUN_ERROR_OK, "umount %s", mntdir);
+ mnt2_mounted = 0;
+ if (hasboot)
+ (void)copy_bootloader();
+ }
return 1;
}
Index: src/distrib/utils/sysinst/arch/luna68k/md.h
diff -u src/distrib/utils/sysinst/arch/luna68k/md.h:1.2 src/distrib/utils/sysinst/arch/luna68k/md.h:1.3
--- src/distrib/utils/sysinst/arch/luna68k/md.h:1.2 Tue May 14 13:08:57 2013
+++ src/distrib/utils/sysinst/arch/luna68k/md.h Wed Feb 19 12:14:40 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: md.h,v 1.2 2013/05/14 13:08:57 tsutsui Exp $ */
+/* $NetBSD: md.h,v 1.3 2014/02/19 12:14:40 tsutsui Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -43,8 +43,12 @@
#define PART_ROOT PART_A
#define PART_SWAP PART_B
#define PART_RAW PART_C
+#define PART_BOOT PART_D
#define PART_USR PART_G /* Can be after PART_FIRST_FREE */
-#define PART_FIRST_FREE PART_D
+#define PART_FIRST_FREE PART_E
+
+#define PART_BOOT_FFS
+#define BOOT_SIZE (8 * 1024 * 1024) /* for a.out kernel and boot */
#define DEFSWAPRAM 8 /* Assume at least this RAM for swap calc */
#define DEFROOTSIZE 64 /* Default root size */
Index: src/distrib/utils/sysinst/arch/luna68k/msg.md.en
diff -u src/distrib/utils/sysinst/arch/luna68k/msg.md.en:1.1 src/distrib/utils/sysinst/arch/luna68k/msg.md.en:1.2
--- src/distrib/utils/sysinst/arch/luna68k/msg.md.en:1.1 Sat Jul 16 15:52:21 2011
+++ src/distrib/utils/sysinst/arch/luna68k/msg.md.en Wed Feb 19 12:14:40 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: msg.md.en,v 1.1 2011/07/16 15:52:21 tsutsui Exp $ */
+/* $NetBSD: msg.md.en,v 1.2 2014/02/19 12:14:40 tsutsui Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -44,12 +44,30 @@ message md_may_remove_boot_medium
{
}
-message dobootblks
-{Installing boot blocks on %s....
+message nobootpartdisklabel
+{There is no boot UFS partition in the disklabel. The boot partition should
+be prepared for the LUNA's firmware to load our native bootloader.}
+
+message copybootloader
+{Copying bootloader into the 4.3BSD boot partition on %s...
+}
+
+message howtoboot
+{The installation is almost complete. Note the installer doesn't set
+firmware NVRAM variables to load NetBSD's bootloader by default.
+
+To boot NetBSD, you need to set boot NVRAM variables 'drv'
+(or 'id' on LUNA-II), 'par' (partition, should be 'd'), and 'fname'
+(filename, should be 'boot') by 'k' (Set Boot-file constant) command.
+
+On LUNA-I, drv 0 is SCSI ID 6 disk, and drv 1 is SCSI ID 5 disk.
+The firmware can't boot from other SCSI ID disks.
+On LUNA-II, 'id' is SCSI ID and you can also specify the external SCSI
+controller number (1) like '1-6'.
+
+Check 'h' (Help) and 'hk' (Help of 'k' command) commands on the firmware
+prompt for more details.
}
message set_kernel_1
{Kernel (GENERIC)}
-message set_kernel_2
-{Kernel (GENERIC_TINY)}
-