pseudo-devices. This is done by explicitly listing the driver names
(e.g. "lo") to ignore in an array in this file. Right now, "eon", "gre",
"ipip", "lo", "nsip", "ppp", "sl", "strip", and "tun" are ignored.
use stdscr's maxx and maxy to set up the message window rather than hard
coding 78 and 22, respectively. The latter, combined with large messages
and a relatively small screen (and perhaps badly-placed menus), would seem
to cause the SEGVs reported in PR#7806. (For certain window sizes, the
menu system would reject the menus as too small, but for others sysinst
would just crash.)
password, offer defaults. When displaying the current values, note
that a password has been set and is hidden, rather than displaying
the number of characters entered for the password. (Thanks to wrstuden
for the translation of "hidden"...)
start of the URL so that the request will start from / (rather than
relative to the login directory; makes things work better for
non-anonymous FTP). To make it clearer what's going on, make the
default path (used to get distribution bits) relative. (according
to the 1.4 LAST_MINUTE file, this is OK.)
* Also, %-encode passwords in FTP URLs (doesn't help actual security, but
makes it slightly harder to figure out a password by reading over
somebody's shoulder).
be called. it'd cleanup() then exit(). however, cleanup() is scheduled
to run at exit via atexit(). This means that it gets run twice, and
this causes confusion for things like endwin(). The end result is
that rather than actually exiting and printing the "sysinst terminated"
message, after one control-c it looks like it's still sitting at the
last screen you were viewing even though it's actually at a shell prompt.
squelch the cleanup() in the SIGINTR handler to avoid this problem.
* while here, nuke the annoying space before the "sysinst terminated."
message. it looks bad, and serves no purpose.
read/write that much. Previously, too much was written back to
disk (although it didn't do any harm because of the sequence
of execution).
Also, upgrade the MBR type from 386bsd -> NetBSD if needed during
an upgrade operation.
Check if there's no active partition after MBR editing.
Ask for own MBR to be installed if we're booting from out of CHS range.
Ask for bootselector to be installed if > 1 OS, and configure it.
tables being written on disk:
- when counting non-BSD partitions, use part[i], not part[0]
- when using full disk for NetBSD, initialise all the fileds of the
mbr entries (especially flags)
- When converting to on-disk format, if start and size = 0, initialise
c/h/s to 0 for both start and end. convert_mbr_chs() would make an entry
0/0/0, 0/0/1 which is not bogus, but not what we really want either.
cleanups before extracting a set. Should'nt do anything for an install,
as the filesystem shouldn't contain files that need to be removed.
cleanup_dist() is called before extract_file() for each set (the set name
is passed as parameter). It will open a file /dist/<set name>_obsolete
if it exists. This file should contain a list of files (absolutes
pathnames) that needs to be removed. cleanup_dist() will lstat() each file
to determine if it's there and if it's a directory or not.
It will then unlink() entries that are not directories and then rmdir()
directories. If a directory is not empty (it should now if the list of files
is correct) it will be renamed to <directory.old> and the user will be warned.
Other changes:
- move prototype of target_prefix() in defs.h, don't maintain a copy
of it in each file.
- in install.c, after MSG_disksetupdone, do a wclear(stdscr) (display was
clobbered after it).
- kill MSG_openmsgbuf, it's not used anywhere
- after MSG_disksetupdone in upgrade, don't call MENU_ok, do it the
same way as in install.
- add wclear(stdscr);/wrefresh(stdscr); before calling MENU_distset (another
display problem ...)
- While I'm there, move ask_verbose_dist() before MENU_distmedium. This way,
if all go well the user can go away one ftp starts and come back once
sets are extracted.
- in run_prog(), do an explicit wclear(stdscr); wrefresh(stdscr);
before launching subwindows. This seems to solve all the display
problems associated with run_prog().
enter partitions offet and size. The user can chose unit independantly of
the unit used for display ('M'/'c'/'s'). These functions do the proper
bound checks and alignement/roudups. Used in the edfspart menu and
i386 md_make_bsd_partitions() (other ports should do the change as
well).
- now that getpartsize() does the rigth thing, kill the swapadj hack (which was
buggy anyway).
- in i386 md_make_bsd_partitions(), don't propose defaults that don't fit on
the disk. If the disk is too small, fallback to custom instead.
- fix a bug in mbr.c, where the partition flags would not have always been
reset. sysinst created me a MBR with 2 active partition. The boot code
doesn't like it :)
- added a message for eventual mount failures.
- killed donewfs and extracting messages, as we run the commands in a
subwindow these messages just flashed on the screen.
- Changes a few exit(1) to return(1), to give the user a second chance.
- added msg_clear() or wclear(stdscr) in a place or two, to make
display a bit nicer.
- in run_cmd(), if the command succeeded, don't wait for the user to
press enter.
- Make all the functions called from do_install() return an error code,
so that we can abort install if something went wrong.
- Add a 'errstr' argument to run_prog(), which if not NULL is displayed
with msg_printf() and followed by process_menu(MENU_ok) if the command fail.
Used to warn the user that the current action is aborted.
- in a few places use msg_display() or msg_printf() rather than printf.
It seems that stdout/stderr are not always pointing to the active curses
window.
- garbage-collecd unused messages, add a few new one (error handling).
XXX only tested on i386. Other md parts should be tested as well.
* Use structures, not 2-dimensional arrays..
* Use the DIOCGDEFLABEL ioctl to get the disk information,
to avoid confusion with (older) labels.
* Don't ever call fdisk for partitioning. This was the
source of much confusion.
* For the i386, use the BIOS geometry information passed by
the bootblocks.
Lots of things left to do, but it's a start.
encoded. This means certain passwords, usernames, etc., will not work
with "ftp ftp://...."
This code, submitted by Alan Barrett <apb@iafrica.com>, fixes this by
hex encoding unsafe strings in a clean fashion. This should close a
couple of outstanding PRs. Thanks Alan!
commandlines for all tar operations. (work supplied by Matt Green)
2) Update arch/*/md.c to deal with new sysinst/run.c. Special case
anything that needs to do a redirect or a pipe.
3) #if 0 some unused code in target.c. This code will need to be updated,
or special cased with do_system.
Big thank you to Matt for all his work on this.
Scripting and logging functionality for sysinst.
Child programs are run in a "display window" so you can actually see what
they did before the screen flashes back and you loose it all.
Lots of curses fixups. Removed nasty endwins that mangled the tty upon
rentry.
Change the yes/no box to accept Y or N, and not require cursor motion to
decide one or the other.
Perform curses redraws when doing things that could cause the kernel to
spew printfs onto your screen.
non-soft-settable media. Treat that as if there was no media output.
Use a supplied media-string of "<null>" or "<default>" or synonyms to
avoid passing explicit media flags onto ifconfig.
just what the hell sysinst is asking for. (Why do we include the
`dangerously dedicated at all?)
Fix dangerous UI botch: make `normal' install the default, not `whole disk'.
i386) so that the partition menu items match the selector letters).
XXX: All the .fr files need checking - look for the comment
/* XXX: ENGLISH -> FRENCH */
Replace with MAX_DISKS (size of the array of disk info).
Fixes a problem where sysinst cannot install onto disks rz5 or greater
on pmaxes (which use old SCSI with wired-down scsi devices, even for
GENERIC kernels).
- ensure hostname from gethostname() is nul-terminated in all cases
- minor KNF
- use MAXHOSTNAMELEN over various other values/defines
- be safe will buffers that hold hostnames
Only implemented for the i386; behaviour for other ports is
unchanged. For the i386, make this function remove some extraneous
files in /, and frob rc.conf to have rc_configured=YES. The defaults
are reasonable, and it saves the user having to set TERM and mount
filesystems by hand in order to be able to edit /etc/rc.conf
(XXX not very clean, but it's a workaround to be more user-friendly
for 1.3.2)
Also adapt a few messages slightly so they apply to both situations.
* Split bios geometry and MBR partition editing code formerly in
arch/i386/{md,fdisk}.c to mbr.c in mi directory.
* Leave /sbin/fdisk parsing/handling code in separate file,
we may want to change it later. move to mi directory.
* Create mbr.h with declarations for MBR/BIOS-geomotry code.
#include "mbr.h" in i386 md.h.
* Use symbolic names for 386bsd and new NetBSD partition IDs.
Handle MBRs with both 386bsd and NetBSD partitions less stupidly.
in menus.md.{eng,fr}, lifted verbatim from Alpha and pmax.
Give last split-floppy for each X11 set, for 1.3.
FIXME: if the number of floppies in any split set changes for 1.3.1,
syinst is hosed for 1.3.1. Same is true for any release: we can't
install from split sets if the count of floppies doesn't match
the precompiled version.
The number of floppies in a split set should be computed dynamically
from a directory listing, or read from a config file in the split
directory.
* Add cp_to_target() to copy a file from current root, to an absolute
path relative to target root.
* Clean up alpha, arm32, i386, pmax MD code: use cp_to_target()
NB: Alpha uses target_expand() when calling installboot.
* Add tests for target == current root. Intended to support
`upgrade/reinstall' to current root, either for testing or easier
minor-release upgrades. Only tested on pmax.
same for floppies (from Christoph Badura)
* allow user to run 'Configure network' multiple times, to correct errors
for example.
* deal with network interfaces that need explicit media type selection
(i.e. ask for it when it is needed, also store it in the generated
/etc/ifconfig.blah file on the destination disk)
(like upgrade but without trying to save etc.
* Add option to setls0urce menu to look in an already-mounted (local)
directory. Change `local fs' option to say umounted local fs.
* Change extract_file() to check that a tarball actually exists
and give an explicit non-curses warning if it doesn't. (see above.)
* GNU tar returns a successful status if its gunzip child dies.
Add short sleep() after tar commands in case of undetected errors.
* Change set-source selection code (except FTP, floppy) to check
that the mandatory set files (base.tgz, etc.tgz) exist
in the selected directory. If they don't, warn the user and
prompt the user to change the selected directory.
Give the user the option to explicitly continue even if
base.tgz or etc.tgz not found, just in case.
* Change extract_file() to keep count of set unpacks that succeeded
or failed. (Unreliable, given the broken return status of gnu tar.)
Warn the user if there are errors and abort the installation/upgrade
if we find any. Does at least catch Ctrl-C interrupts of unpacking.
* Make unwind_mounts() signal-safe.
* Sense of target_verify_* is broken. Replace with predicates that
return 1 iff the file or directory exists.
* Fix upgrade tests for existing etc.old (see above) before saving
target /etc as /etc.old.
* Other detail fixes.
* Add `partinfo' type, for description of a single partition,
so we can pass labels by reference..
* Add label.c with label initialization, naive overlap-check code,
and a UI entrypoint edit_and_check_label() which iterates through
checking a label for overlaps, and if any, giving the user the choice of
fixing them or punting back to the main menu.
* Change return type of md_make_bsd_partitions from void to int.
Return 0 if the partition has problems (or the user gave up on it)
and 1 if the partition is completed and looks OK.
* Change install() to check return value of md_make_bsd_partitions().
If it returns zero, print an `abort' message and return to main menu.
* Add label.c to all ports' Makefile.
MD code tested on pmax and cut-and-pasted to other ports.
* Add mount_with_unwind() that adds mountpoint to a LIFO queue
of mountpoints to undo on error. Use in target_mount().
* Add unwind_mounts() which traverses the LIFO queue and unmounts
filesystems, silently ignoring errors.
* create toplevel() function which displays banner message and
calls unwind_mounts().
* change toplevel menu to call toplevel() instead of inline banner.
Where to do unwinds needs more thought. Perhaps we should only unwind
if an upgrade or install appears unsuccessful, so after a successful
install, the target is mounted (e.g., for upgrading /etc/rc.conf).
at used partitions. fdisk may report the number of cylinders > 1024
correctly if no translation is used.
* Print out the end of the partition as well as the size when editing things.
* Enable the user to specify the BIOS geometry if he/she wishes.
* Fix 1023 / 1024 mixup. The reason BIOSs will return 1023 is an old IBM
convention to use the last cylinder as diagnostic cylinder. The user
can still skip the last ('real') cylinder if specified.
* Make some messages more verbose.
all pathname-on-server related definitions to MI code, since they are now
defined to be consistent across all platforms. Also, nuke the "rels" global,
since release numbers are now always specified in "long form", i.e. 1.3A
vs. 13A.
* Create target /kern after creating target /etc/fstab entry for /kern.
* Check for more files in target when done: /etc/{rc,rc.subr,conf}
* Clean up warning exerciser.
ext_dir that is absolute directory name of where files are located to
extract. All setup routines must set that directory name correctly.
Make target.c compile if DEBUG is set.
If installing from a pmax diskimage as both current root and target root,
the diskimage /usr/bin/tar is hidden underneath the target /usr mountpoint
when it's time to untar distribution files. From a comment in the change:
Make sure any binaries in a diskimage /usrbin get copied
into the current root's /usr/bin. (may be same as target /usr/bin.)
The rest of sysinst uses /usr/bin/{tar,ftp,chgrp}.
We cannot ship those in /usr/bin, because if we did
an install with target root == current root, they'd
be be hidden under the target's /usr filesystem.
Requires updated diskimage build script which populates /usrbin with
tar, gzip, gunzip, ftp, and chgrp (all statically linked.)
and current-root-is-target-root (pmax diskimage.
* Add code to check disk names (e.g., "sd0") against the current
kern.root_device sysctl (whic does *not* include a partition).
* Add new function must_mount_root():
check to see if it's the same device as the root. If not,
the current and target root partitions cannot overlap.
If they do, do statfs() on "/", and return 1 iff we get back
"root_device" as the mounted-on filesystem, otherwise zero.
* Call must_mount_root() right after the user specifies a disk as
install/upgrade target, and if it returns 1, print a message asking
them to mount root, and abort.
* Use statfs("/") mounted_from string to check if a disk partition
(e.g., "sd0a") matches the current root.
as last step of upgrade, so /etc/fstab exists after reboot.
* util.c: correct sense of test in sanity-check helper check_for().
Change variable name to `found' for readability.
still needs an option to specify the distribution sets from a filesystem
present in fstab.
Add "ados" to the list file recognized filesystems.
Increase label information table size to 16 to allow for 16 partitions.
* Change find_disks: after mouting target root, check for
/etc/fstab in target, and abort upgrade if not found.
* Change upgrade to check if the target root has /etc.old
before renaming the target /etc -> /etc.old. If found, abort.
(may indicates a failed upgrade.)
* Add save_etc(). saves target /etc as /etc.old, then copies back
config files we might want during upgrade, in case target is current root.
* Fix logic that fscks and mounts disks. Use subroutines to
fsck with a warning message and ok() on continue. Same for doing mounts.
* Fix bug in extract_dist(). Do NOT do target prefixing on the dist_dir,
since we didn't do target prefixing when mounting it.
(At least, NFS does't.)
* Add function to sanity-check target root.
Call after upgrade/install is done.
* Change MSG_realdir to print the strerror() of any errors.
Change target_chdir() to check if chdir() returns -1 and return errno.
* Make sure /dev exists before cd'ing there and running MAKEDEV.
* Use target_fopen() and fprintf() to write network state to disk,
to avoid inadvertent shell escapes.
* Fix silly typo in append_to_target_file. (maybe add shell quotes?)
- Added -r rel flag to change the release tag on the tar files.
- Added Usage
- Fixed a menu bug (missing exit)
- Made target_expand available to all functions to produce correct
file names.
Add more #ifdef DEBUG to target-prefixing.
* Fix niggle in creating a new resolv.conf: ctime()'s result ends in '\n',
so don't include one after the %s for the timestamp.
* Change upgrade: add the same ``disk stuff done'' message used in install,
so the user knows what's going to happen.
(is a more tailored message useful?)
* Correct arg typo in mv_within_target_or_die().
* Add new path-prefixing entrypoints to fopen(), collect(), and do mounts.
* Use the above. MI code is now clean of explicit references to /mnt.
* Lint: add `const' to collect()'s pathname arg.
include <stdio.h> in factor.c, now that defs.h uses FILE*.
* Put newfs-and-mount code into a separate function, in case
we want to support non-ffs filesystems.
* Check for the currently-mounted root, and don't newfs or mount it.
Assumes md code will also avoid changing that partition.
* renames of files from one pathname within the target to another
(e.g., mv_within_target_or_die("/etc", "/etc.old");
* check to see if a partition name like "sd0a" is the current root
* Duplicate a file from the current root into the target root
(for copying /netbsd from RAMdisk into the target).
A no-op if the root is the install target).
Start using these where appropriate.
Change net.c to avoid losing any information when updating network
config files: where possible, do appends to files that might have more
info than we got from the user (e.g., /etc/hosts.)
Where possible, add comment saying file was created/modified by sysinst.
Add target.c to Makefiles.
* Minor fixes:
* Fix buglet in disks.c: make sure the target /etc exists before
touching the target's /etc/fstab. (Could be even cleaner.)
* If the target root is on /, don't copy our temporary /etc/resolv.conf
to the target /etc/resolv.conf. (Could be even cleaner.)
* Don't write the DNS hostname into /etc/defaultdomain.
DNS search paths are often not the same as YP group names.
run_prog_or_die() -- aborts if system() returns an error.
run_prog_or_continue() -- prints a warning that installation may
have failed but lets the user continue. Suitable for running mkdir.
RAW_PART for new labels, instead of just the latter.
Avoids shrinking RAW_PART label with pmax kernel-supplied default
labels or with already-labelled disks.
XXX Get real incore label, instead of default label instead (or as well)?
to 4.3BSD-style (BSD uses whole disk, 8 partitions, c=RAW_PART, d=/usr).
Initialize variables appropriately.
May be a good starting template for sparc, vax, others?
Use symbolic defines to allow changing the partition used for /usr (to
add a /var partition, or for consistency with i386).
* Use md_make_bsd_partitions() code lifted from the i386 version,
modified to set D partition size.
* Add the MD messages used by the above to sysisnt/arch/pmax/msg.md.eng.
* Add X11 sets xbase, xserver, xcomp to arch/pmax/md.h.
parallel development. i386 version about 90% complete. pc532 version
just started, other architectures later in coordination with portmasters.
This is a curses based, menu driven installation program.
Better error checking is needed.