Convert ' ' to 0 to ensure a valid device name is genarated.
(This will be a problem in 'upgrade' when filesystems are mounted
using the targets extisting /etc/fstab.)
written into the correct place - even if the user decides not to update
the mbr code and has the old (pre layout change) code installed.
Tell the user that the mbr code needs updating if the new install uses
'all the disk' and teh old version had the bootselect code (otherwise you
get an empty menu).
Probably fixes PR install/25146
use union to align struct fs
don't check error return from fsck upgrade/downgrade runs
use RUN_DISPLAY | RUN_PROGRESS when running upgrade runs
don't use opendisk
much the same function).
Mainly some extra comments, also moved a 'static' so we use 512bytes of
stack and not static data. Killed call to access() as it is pointless
and doesn't do what you want (access is for suid programs to check whether
the real user could do the operation).
that has holes.
This needs the 'bios sectors per track' before it has been setup - so we
default it to the 'hardware' value. Since both numbers are 63, and this only
affects the size of the headers on extended partitions it should be safe.
leave 4 bytes for the Windows NT Drive Serial Number (DSN) at 440-443
(as mbr_sector.mbr_dsn).
Ensure that all the MBR & PBR code reserves space for mbr_sector.mbr_dsn.
Leave the bootsel magic number at 444-445 as mbr_sector.mbr_bootsel_magic
(instead of mbr_sector.mbr_bootsel.mbrbs_magic), but use 0xb5e1 (MBR_BS_MAGIC)
instead of 0xaa55 (MBR_MAGIC) to indicate that this change has occurred.
Rework MBR_BS_NEWMBR to mean "mbr_bootsel has moved to 400".
Modify fdisk(8) to automatically relocate the mbr_bootsel from 404 to 400
if mbr_bootsel_magic is the old value (0xaa55), and unset MBR_BS_NEWMBR
to flag that new mbr_bootsel code must be used if updating the MBR.
These changes fixes a problem where Windows 2000 or Windows XP would corrupt
the last 3 bytes + NUL of MBR partition 3's bootsel name if the bootsel name
was 5 characters long, replacing bytes 6-9 with the DSN.
Also, by explicitly reserving the space for the DSN we prevent problems in the
future if non bootsel MBR or PBR code had other information at bytes 440-443.
DISTRIBVERDEP in Makefile.distrib, and make both sysinst and
distribution notes use that information so that they rebuild
if the kernel version changes.
Distribution notes didn't have this before, sysinst had a private
(now outdated, since sys/sys/param.h now determines version) copy
of this.
Don't write out dummy extended partitions for unused ares in the extended
partition.
Add some more comments - I write this and I couldn't remember how it worked.
- Rename run_prog() to run_program() and remove the 'errmsg' argument (almost
never used).
- Be consistent about #define<space> in defs.h
- Allow BSDFFS partitions to be FFSv1 or FFSv2 (fixes PR install/23547)
- i386: install correct bootblocks for root filesystem type.
- Do 'fsck -p' before all mounts (but never a full fsck), rename fsck_xxx()
to mount_xxx() and remove some wrapper functions.
- Allow root to be an APPLEUFS partition - and allow them to be newfsed,
should fix PR install/23198
- Redo fstab processing for upgrade to avoid large static data items and
memory leaks. Change walk() to abort on user defined error.
(the fstab stuff really needs more work though...)
- i386: 'Warp' cursor to alternate option when selecting console/bootblocks,
should fix PR port-i386/23546.
- Allow MENU_ok and MENU_yesno to take user defined title.
- Ensure that mountpoint not defined for swap (and similar issues) when
editing netbsd label.
- Tweaks to error handling in run_program(), allow user to say that errors
are expected or that the display shouldn't be cleared before returning.
- Remove some old code that has been festering under #if 0
down to a cylinder boundary before adding in the requested size.
Stops the partition being one cylinder larger than requested when the
partition doesn't start at the beginning of a cylinder (eg for partitions
starting in sector 63).
Fixes part of PR install/23548
Tweak dependency rules for (menu|msg)_defs.h so that everything isn't
recompiled if the xxx_def file has changed but the generated header
is unaffected.
* use cd0a rather than cd0[cd] as the CDROM installation device.
This fixes problems with platforms that install from iso9660 images
encapsulated in a partition, and should not affect platforms that
don't.
* add RUN_PROGRESS to the run_prog() flags for ftp installs.
Okay'ed by David Laight.
Make sure that there is a domain set before printing a "search" line.
hosts:
Add domain to the second "localhost" line if there is a domain set.
Add domain to hostname (in addition to bare version) if there is a
domain set.
Patches from William Simpson, PR 21999
- rework run_prog() so that the program name (etc) is usually displayed if
the program generates any output, or terminates with an error.
Allow arguments to included in single quotes.
Try to collect console output so it doesn't interfere with curses.
- Add a '*' to the cylinder count if non-integral number of cylinders
(on disklabel editor)
- Only show partition type for unused partitions.
- Show size including unused space on '+' partition, remove a..z since
the don't relate to partition IDs (netbsd partition sizes)
- Fix deleting of 'user' partitions - killed size of next ptn.
- Don't default a swap partition is the disk already has one.
- Fix deleting of extended MBR partitions - changed size of ptn 2.
- Show error message if user tries something illegal in mbr editor.
- Default to old diskname (actually disk type - dunno why!)
- Use MI enable_rc_conf() to set RC_CONFIGURED=YES, use a single sed
command instead of a raft of code playing with files etc.
- Float some menus to just below header text, saves counting and lets
language variants have different height headers (use y=-1)
- Track whether anything is mounted on /mnt2 better.
- Put more texts into message file.
- Change english prose texts to be more correct.
- Stop french and polish versions core dumping if ptn start/size changed.
- Fix processing logic for saving /etc (action is still borked)
- Do tail-end setup if any sets (eg X) can't be found (but not if you give
in (yet)).
<sys/bootblock.h>:
* Added definitions for the Master Boot Record (MBR) used by
a variety of systems (primarily i386), including the format
of the BIOS Parameter Block (BPB).
This information was cribbed from a variety of sources
including <sys/disklabel_mbr.h> which this is a superset of.
As part of this, some data structure elements and #defines
were renamed to be more "namespace friendly" and consistent
with other bootblocks and MBR documentation.
Update all uses of the old names to the new names.
<sys/disklabel_mbr.h>:
* Deprecated in favor of <sys/bootblock.h> (the latter is more
"host tool" friendly).
amd64 & i386:
* Renamed /usr/mdec/bootxx_dosfs to /usr/mdec/bootxx_msdos, to
be consistent with the naming convention of the msdosfs tools.
* Removed /usr/mdec/bootxx_ufs, as it's equivalent to bootxx_ffsv1
and it's confusing to have two functionally equivalent bootblocks,
especially given that "ufs" has multiple meanings (it could be
a synonym for "ffs", or the group of ffs/lfs/ext2fs file systems).
* Rework pbr.S (the first sector of bootxx_*):
+ Ensure that BPB (bytes 11..89) and the partition table
(bytes 446..509) do not contain code.
+ Add support for booting from FAT partitions if BOOT_FROM_FAT
is defined. (Only set for bootxx_msdos).
+ Remove "dummy" partition 3; if people want to installboot(8)
these to the start of the disk they can use fdisk(8) to
create a real MBR partition table...
+ Compile with TERSE_ERROR so it fits because of the above.
Whilst this is less user friendly, I feel it's important
to have a valid partition table and BPB in the MBR/PBR.
* Renamed /usr/mdec/biosboot to /usr/mdec/boot, to be consistent
with other platforms.
* Enable SUPPORT_DOSFS in /usr/mdec/boot (stage2), so that
we can boot off FAT partitions.
* Crank version of /usr/mdec/boot to 3.1, and fix some of the other
entries in the version file.
installboot(8) (i386):
* Read the existing MBR of the filesystem and retain the BIOS
Parameter Block (BPB) in bytes 11..89 and the MBR partition
table in bytes 446..509. (Previously installboot(8) would
trash those two sections of the MBR.)
mbrlabel(8):
* Use sys/lib/libkern/xlat_mbr_fstype.c instead of homegrown code
to map the MBR partition type to the NetBSD disklabel type.
Test built "make release" for i386, and new bootblocks verified to work
(even off FAT!).
add support for setting mount options of async, noatime, nodevmtine and softdep.
add noauto if 'mount' was not requested.
add entry for /proc (with noauto)
Display fragment size and block size on the correct line.
Ask for numeric fragment size (not # fragments/block).
Show one unused partition when editing disklabel.
Zap all fields when a partition is made FS_UNSED.
Tweak some menu texts (a space at the end of a line causes a line break!).
Simplify code that displays output from commands - curses is requied to not DTRT
with CR/LF sequences, I need to revert libcurses :-(
to sysinst's main process when a command is run (eg the file list from pax).
Since the pty is in 'packet' mode, the boundaries of the pty reads would
need to be preserved in order to detect control records.
If the pipe became full the main process could treat part of a filename
as a control byte and then save the rest of the name as tty settings.
The effect of 'random' tty settings is unknown, but could be responsible
for core dumps while displaying the full file list from pax.
I suspect that the extra pipe was originally used because select wasn't
supported on the master side of a pty (not checked).
Also cd out of /targetroot if set installation is killed with ^C ^C.
Add menu for all disklabel partition types.
Default 'partition type' and 'sizechoice' menus to current value.
Change 'standard/use existing' to 'set sizes/use existing'.
Remove one or two fixed length strings (use malloc etc instead).
Change a lot of 'if (strlen(x) == 0)' to 'if (x[0] === 0)'.
Let user skip network config if any non-loopback interfaces are UP.
Always free() buffer allocated by collect(), could be a massive leak.
Whitespace changes.
whenever a command was run. Maybe a screen redraw is required if the
command is able to corrupt the screen - but the refresh was happening
much too early to fix that, and it would be better to collect/discard
the commands output anyway.
When asking for bios geometry, ask for sectors per track and heads
then calculate cylinders from volume size.
Write MBR_MAGIC into correct place when writing extened partitions.
Make disk_desc[], disk and numdisks local to get_disks (instead of globals).
Fix a little fallout from the above.
A bit of mbr.c was missing #ifdef BOOTSEL...
Remove the abberant call to endwin() in i386 md_update() that caused
echo to be left on. I've not removed the endwin from the other ports.
Only run MAKEDEV if etc.tgz installed.
Some extra sanity checks on an 'rm -rf %s'.
program/tool from "FOO" to "TOOL_FOO". The new variables are:
TOOL_ASN1_COMPILE TOOL_CAP_MKDB TOOL_CAT TOOL_CKSUM TOOL_COMPILE_ET
TOOL_CONFIG TOOL_CRUNCHGEN TOOL_CTAGS TOOL_DB TOOL_EQN TOOL_FGEN
TOOL_GENCAT TOOL_GROFF TOOL_HEXDUMP TOOL_INDXBIB TOOL_INSTALLBOOT
TOOL_INSTALL_INFO TOOL_M4 TOOL_MAKEFS TOOL_MAKEINFO TOOL_MAKEWHATIS
TOOL_MDSETIMAGE TOOL_MENUC TOOL_MKCSMAPPER TOOL_MKESDB
TOOL_MKLOCALE TOOL_MKMAGIC TOOL_MKTEMP TOOL_MSGC TOOL_MTREE
TOOL_PAX TOOL_PIC TOOL_PREPMKBOOTIMAGE TOOL_PWD_MKDB TOOL_REFER
TOOL_ROFF_ASCII TOOL_ROFF_DVI TOOL_ROFF_HTML TOOL_ROFF_PS
TOOL_ROFF_RAW TOOL_RPCGEN TOOL_SOELIM TOOL_SUNLABEL TOOL_TBL
TOOL_UUDECODE TOOL_VGRIND TOOL_ZIC
For each, provide default in <bsd.sys.mk> of the form:
TOOL_FOO?= foo
and for the ${USETOOLS}=="yes" case in <bsd.own.mk>, provide override:
TOOL_FOO= ${TOOLDIR}/bin/${_TOOL_PREFIX}foo
Document all of these in bsd.README.
This cleans up a chunk of potential (and actual) namespace collision
within our build infrastructure, as well as improves consistency in
the share/mk documentation and provision of appropriate defaults for
each of these variables.
This should stop the i386 code splatting all over the start of the disk
during upgrade.
Upgrade will still use partition 'a' (unless you loop through the install
far enough first!)
Actually this needs changing to use /usr/sbin/etcupdate (or similar),
but the script needs fixing first.
Might be better for sysinst to have its own copy, gets to be fun to run
because you have to pull the commands from the target FS.
Use swapctl() for all swap operations.
Remove md_upgrade_mbrtype() from arc and hpcmips ports.
(I haven't finalised what I'm doing about type 165 partitions, but the
existing code is borked.)
Remove pointless 'len' parameter from read_mbr and write_mbr.
Make read_mbr initialise mbr if it can't be read (delete MD code).
Make i386 always ask at least once about the bootcode.
Move LIB_MOVE and LIB_COUNT from md.h to aout2elf.c
Make same function return useful defaults if it can't find an answer.
Make all ports default to the useful defaults if bios geometry is unknown.
Move some messages to mbr set from mi set.
Fix i386 code that selects which bios disk, simplify interface to menus.
Remove now unnecessary global data from many ports.
4 times system memory). (These numbers need moving to a different menu still.)
Remove size of /usr from default sized / when /usr created.
Shrink swap in order to get partitions into available disk space.
Add twice ram size to / if space available (for system dumps).
Keep all but last partition cylinder aligned when the disk isn't a whole
number of cylinders.
Hack to give free space to a default sized /usr
Add extra space to / and /usr is any of the X sets are included.
Remove last reference to 'layoutkind == 3'.
I've also made the set selection happen first. This lets me test it!
also measn the selected sets could be used in the disk partition code.
Removed the 'with X' disk layout question (now too late to change the sets).
Fix menu size so that user defined partitions can be allocated instead of
standard ones (need > MAXPARTITIONS entries in menu).
Make partition size info static - with a view to including it in a longer loop.
Update lists for ramdisks to include the required files.
NB /usr/sbin/installboot is not used by sysinst and is only in ramdisk-big.
Increase the sizes of the ramdisks, there is plenty of space in all the
boot floppies except rescue-tiny (2k) and boot-tiny (32k).
This does change the default size of /, but I'm going to rewrite
make_bsd_partitions next to make it less user-hostile.
(I'm not sure adding in 2 * ram is actually useful! Especially size it left
/usr with a -ve size on all my test installs with 256MB ram and 1GB disk)
Make bootsel code delete menu names if the partition is unused.
Use raw device for cdrom access (I've a kernel that doesn't report an invalid
label so /dev/cd0a dosn't work).
- make_bsd_partitions() correctly handles PART_BOOT
- use bsddisklabel.c for pc532 and sgimips (this does change the default size
for the root partition, as it no longer includes twice the memory size).
- Change way ports define disk_names[] (in particular this lets me add "vnd"
for testing), also ensures all ports pick up new drivers.
I've make most ports use the default "wd", "sd", "ld".
Abort the search for disk units if we get ENOENT (ie no /dev entry) to
speed up the case where we are looking for a disk type that isn't
supprted by the port.
(it is possible we could just check all possible disks on all ports...)
left consistently.
Make the i386 install let you partition a disk beyond the CHS limit if the
system bios doesn't support LBA reads (the checks aren't ideal yet).
Make the bsddislabel.c code usable onan i386 system - but don't use it yet.
Use strlcpy() instead of strncpy() where appropriate.
Recode timezone menu so that it can stand opt_name being const char *
and to only do the fts_read() once (there were problems if the filestore
changed between passes!).
Remove stupid check for errno != 0 which probably stopped the tomezone
menu being displayed!
those ports which are using the now-modified MI mbr.c file which
was recently modified to use those messages. French translation
courtesy of Manuel Bouyer, Polish copied from the i386 port.
(I hope the edits for the ports I can't build are right!)
i386/amd64 pick up a minor change to the md_read_bootcode which
might preseve the bootselect config.
on a set, instead of hardcoding the number of parts in sysinst (which gets
out of sync easily). The fdlast field of the distinfo struct has been
removed.
This solution is a bit simplistic but... anybody using the floppy
installation method will have to split sets himself (as we don't provide
them), so he will know which is the last one. Also, he will be able to
use whatever chunk size he wants.
Closes PR install/5050. Ok'ed by fvdl.
Use /var/db/obsolete instead of /etc/obsolete
etc/Makefile:
Create separate target "install-obsolete-files" to populate
/var/db/obsolete, instead of using "install-etc-files".
Makefile:
Add do-obsolete target, to run "cd etc && make install-obsolete-files",
and add this to BUILDTARGETS.
This moves the "obsolete files" creation from "distribution" to "build".
Per discussion with Andrew Brown.
- filenames in obsolete sets start with "./" not "/" (i changed that a
while ago, and forgot to update this)
- only call target_prefix() once, not for each filename parsed...
- look for obsolete lists in /etc/obsolete/%s instead of /dist/%s_obsolete
- md_set_no_x() was turning off the "misc" and "text" sets and
not turning off the "xcomp" and "xmisc" sets.
- now that a kernel is installed as "/netbsd" by default, do not
try to symlink (!) from /netbsd-GENERIC (which does not exist)
to /netbsd.
also:
- instead of printing the 3 kernel sets all as "Kernel : ",
now use "Kernel : ", "Kernel(SCSI3): " and "Kernel(SUN4U): "
- add a note to md.c and the menus.md.* files to keep these lists
in sync (so that the first problem above does not occur again.)
missing:
- a way to force that one and only one of the 3 kernel sets are
selected. at least the default install works now.
-e arg to abort after first error.
This means the extract process doesn't spew seemingly-endless
"No space left on device" if the destination partition fills.
Handle the "use existing" option for partitions (but keep d as the
boot partition).
While I'm there use get_real_geom() instead of custom code to get the
existing disklabel.