diff options
author | gordon <gordon@FreeBSD.org> | 2002-06-06 20:20:58 +0000 |
---|---|---|
committer | gordon <gordon@FreeBSD.org> | 2002-06-06 20:20:58 +0000 |
commit | e5b172f462d498835247f250a9e0a4b975c7681d (patch) | |
tree | 44649865638dce3c5a3d8a41de011caa408f5e0d /sbin | |
parent | efb6005b12a1c3b836b9ce96c58a3388d3f38388 (diff) | |
download | FreeBSD-src-e5b172f462d498835247f250a9e0a4b975c7681d.zip FreeBSD-src-e5b172f462d498835247f250a9e0a4b975c7681d.tar.gz |
Remove the old nextboot from Whistler. AFAIK this hasn't been useable in
quite a while and only works on i386.
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/nextboot/Makefile | 8 | ||||
-rw-r--r-- | sbin/nextboot/nextboot.8 | 116 | ||||
-rw-r--r-- | sbin/nextboot/nextboot.c | 202 |
3 files changed, 0 insertions, 326 deletions
diff --git a/sbin/nextboot/Makefile b/sbin/nextboot/Makefile deleted file mode 100644 index cff95d2..0000000 --- a/sbin/nextboot/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# @(#)Makefile 1.1 (Julian Elischer) 3/28/93 -# $FreeBSD$ - -PROG= nextboot -WARNS= 0 -MAN= nextboot.8 - -.include <bsd.prog.mk> diff --git a/sbin/nextboot/nextboot.8 b/sbin/nextboot/nextboot.8 deleted file mode 100644 index fa9882b..0000000 --- a/sbin/nextboot/nextboot.8 +++ /dev/null @@ -1,116 +0,0 @@ -.\" $FreeBSD$ -.Dd July 9, 1996 -.Dt NEXTBOOT 8 -.Os -.Sh NAME -.Nm nextboot -.Nd install a default bootstring block on the boot disk -.Sh SYNOPSIS -.Nm -.Op Fl b -.Ar filename bootstring -.Ar -.Nm -.Op Fl ed -.Ar filename -.Sh DESCRIPTION -The -.Fx -program -.Nm -controls the actions of the boot blocks at the time of the next boot. -If compiled with the correct option, -the boot blocks will check the nameblock for a magic number and a -default name to use for booting. -If compiled to do so they will also -delete the name from the block, ensuring that if the boot should fail, -then it will not be tried again. -It is the job of -.Pa /etc/rc -to use -.Nm -to re-install the string if that boot is found to have succeeded. -This allows a one-time only boot string to be used for such applications -as remote debugging, and installation of new, untrusted kernels. -The nameblock is defined at compile time to be the second physical block -on the disk. -.Pp -The following options are available: -.Bl -tag -width indent -.It Fl b -Is used for bootstrapping (initially configuring) the nameblock. -Without -this, -.Nm -will refuse to write to a block that does not already contain the magic -number. -.It Fl d -Disable (temporarily) an existing name block by changing a bit -in the magic number. -.It Fl e -Restore the good magic number on a block disabled by -.Fl d . -.El -.Pp -The -.Fl e -and -.Fl d -flags are mutually exclusive. -.Sh DESCRIPTION -.Nm Nextboot -first checks that the disk has an fdisk table and checks that none of the -partitions defined in that table include the nameblock. -If the name block is -shown to be unused, it will install the bootstrings given as arguments, -one after the other, each preceded by a small magic number, and NULL -terminated. -The end of the list of strings is delimited by a sequence of -0xff bytes. -If the boot blocks are compiled to write back the nameblock -after each boot, it will zero out the supplied names as it uses them, -one per boot, -until it reaches the 0xff, at which time it will revert to the compiled in -boot string. -At this time the nameblock will contain only zeroed out names. -.Pp -An example of usage might be: -.Bd -literal - nextboot -b /dev/rwd0 1:sd(0,a)/boot/kernel/kernel.experimental \\ - wd(0,a)/boot/kernel.old/kernel -.Ed -.Pp -Which would instruct the boot blocks at the next boot, -to try boot the experimental kernel off the SCSI disk. -If for any reason this failed, the next boot attempt would -boot the kernel -.Pa /boot/kernel.old/kernel -off the IDE drive. (Assuming the write-back option were enabled) If this -in turn failed. -The compiled in default would be used. -.Pp -If the write-back feature is disabled, the nextboot program is a convenient way -to change the default boot string. -Note, that should the file specified in -the nameblock be non-existent, then the name compiled into the boot blocks -will be used for the boot rather than the next name in the nameblock. -The -nameblock is only consulted -.Em once -per boot. -.Sh SEE ALSO -.Xr boot 8 , -.Xr disklabel 8 , -.Xr fdisk 8 -.Sh BUGS -This program works only in conjunction with the legacy boot code. -.Pp -The entire program should be made more user-friendly. -The option of whether to write back or not should be stored on the -disk and not a compile time option. -I want to rethink this at some -later stage to make it co-exist with disks that do not have -a fdisk partitioning table (i.e. purely disklabel'd systems). -.Pp -Whether to write back or not should be specified at run-time in the nameblock -so that the boot blocks need not be altered to get this feature. diff --git a/sbin/nextboot/nextboot.c b/sbin/nextboot/nextboot.c deleted file mode 100644 index 5893ca3..0000000 --- a/sbin/nextboot/nextboot.c +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright (c) 1996 Whistle Communications - * All Rights Reserved. - * - * Permission to use, copy, modify and distribute this software and its - * documentation is hereby granted, provided that both the copyright - * notice and this permission notice appear in all copies of the - * software, derivative works or modified versions, and any portions - * thereof, and that both notices appear in supporting documentation. - * - * Whistle Communications allows free use of this software in its "as is" - * condition. Whistle Communications disclaims any liability of any kind for - * any damages whatsoever resulting from the use of this software. - */ - -#ifndef lint -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include <sys/types.h> -#include <sys/disklabel.h> -#include <fcntl.h> -#include <err.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> - -struct mboot -{ - unsigned char padding[2]; /* force the longs to be long aligned */ - unsigned char bootinst[DOSPARTOFF]; - struct dos_partition parts[4]; - unsigned short int signature; -}; -struct mboot mboot; - -#define NAMEBLOCK 1 /* 2nd block */ -#define BLOCKSIZE 512 -#define ENABLE_MAGIC 0xfadefeed -#define DISABLE_MAGIC 0xfadefade -static int bflag; -static int eflag; -static int dflag; - -#define BOOT_MAGIC 0xAA55 - -static void -usage(void) { - fprintf (stderr, "%s\n%s\n", - "usage: nextboot [-b] device bootstring [bootstring] ...", - " nextboot {-e,-d} device"); - exit(1); -} - -int -main (int argc, char** argv) -{ - int fd = -1; - char namebuf[1024], *cp = namebuf; - int i,j; - int ch; - int part; - - bflag = 0; - while ((ch = getopt(argc, argv, "bde")) != -1) { - switch(ch) { - case 'b': - bflag = 1; - break; - case 'd': - dflag = 1; - break; - case 'e': - eflag = 1; - break; - case '?': - default: - usage(); - } - } - argc -= optind; - argv += optind; - - if ( (dflag + eflag + bflag) > 1 ) { - usage(); - } - if (dflag + eflag){ - if(argc != 1 ) { - usage(); - } - } else { - if (argc <2) { - usage(); - } - } - if ((fd = open(argv[0], O_RDWR, 0)) < 0) - errx(1, "can't open %s", argv[0]); - - argc--; - argv++; - - /******************************************* - * Check that we have an MBR - */ - if (lseek(fd,0,0) == -1) - err(1, "lseek"); - if (read (fd,&mboot.bootinst[0],BLOCKSIZE ) != BLOCKSIZE) - err(1, "read0"); - if (mboot.signature != (unsigned short)BOOT_MAGIC) - errx(1, "no fdisk part.. not touching block 1"); - - /******************************************* - * And check that none of the partitions in it cover the name block; - */ - for ( part = 0; part < 4; part++) { - if( mboot.parts[part].dp_size - && (mboot.parts[part].dp_start <= NAMEBLOCK) - && (mboot.parts[part].dp_start - + mboot.parts[part].dp_size > NAMEBLOCK)) - errx(1, - "name sector lies within a Bios partition: aborting write"); - } - - - /******************************************* - * Now check the name sector itself to see if it's been initialized. - */ - if (lseek(fd,NAMEBLOCK * BLOCKSIZE,0) == -1) - err(1, "lseek"); - if (read(fd,namebuf,BLOCKSIZE) != BLOCKSIZE) - err(1, "read1"); - /******************************************* - * check if we are just enabling or disabling - * Remember the flags are exclusive.. - */ - if(!bflag) { /* don't care what's there if bflag is set */ - switch(*(unsigned long *)cp) - { - case DISABLE_MAGIC: - case ENABLE_MAGIC: - break; - default: - errx(1, "namesector not initialized, use the -b flag"); - } - } - - - /******************************************* - * If the z or r flag is set, damage or restore the magic number.. - * to disable/enable the feature - */ - if(dflag) { - *(unsigned long *)cp = DISABLE_MAGIC; - } else { - *(unsigned long *)cp = ENABLE_MAGIC; - } - if ((!dflag) && (!eflag)) { - /******************************************* - * Create a new namesector in ram - */ - cp += 4; - for ( i = 0 ; i < argc ; i++ ) { - *cp++ = 'D'; - *cp++ = 'N'; - j = strlen(argv[i]); - strncpy(cp,argv[i],j); - cp += j; - *cp++ = 0; - } - *cp++ = 0xff; - *cp++ = 0xff; - *cp++ = 0xff; - namebuf[BLOCKSIZE-1] = 0; /* paranoid */ - namebuf[BLOCKSIZE] = 0xff; - } - - /******************************************* - * write it to disk. - */ - if (lseek(fd,NAMEBLOCK * BLOCKSIZE,0) == -1) - err(1, "lseek"); - if(write (fd,namebuf,BLOCKSIZE ) != BLOCKSIZE) - err(1, "write"); - -#if 0 - /******************************************* - * just to be safe/paranoid.. read it back.. - * and print it.. - */ - if (lseek(fd,NAMEBLOCK * BLOCKSIZE,0) == -1) - err(1, "lseek (second)"); - read (fd,namebuf,512); - for (i = 0;i< 16;i++) { - for ( j = 0; j < 16; j++) { - printf("%02x ",(unsigned char )namebuf[(i*16) + j ]); - } - printf("\n"); - } -#endif - exit(0); -} |