History log of /freebsd-current/usr.sbin/bsdconfig/bsdconfig
Revision Date Author Comments
# d0b2dbfa 16-Aug-2023 Warner Losh <imp@FreeBSD.org>

Remove $FreeBSD$: one-line sh pattern

Remove /^\s*#[#!]?\s*\$FreeBSD\$.*$\n/


# 1c64959b 08-Oct-2021 Devin Teske <dteske@FreeBSD.org>

bsdconfig: Comments

My current style is to copy C for "/* NOTREACHED */" instead of spelling
out "Not reached". Make this one nominal change in this one file and the
others later.

While here, word-smith "Preload" into "Pre-load" as I believe that to
be more grammatically correct in this instance.

Also while here, fix a comment capitalization error.

Lastly, bump copyright for above changes.


# d356ca0c 31-Jan-2016 Devin Teske <dteske@FreeBSD.org>

Utilize new `-v var_to_set' of f_snprintf()


# 463a577b 20-Oct-2015 Eitan Adler <eadler@FreeBSD.org>

Fix a ton of speelling errors

arc lint is helpful

Reviewed By: allanjude, wblock, #manpages, chris@bsdjunk.com
Differential Revision: https://reviews.freebsd.org/D3337


# 4328ca3e 13-Mar-2014 Devin Teske <dteske@FreeBSD.org>

Update copyright.


# c4364d01 13-Mar-2014 Devin Teske <dteske@FreeBSD.org>

Add debug statement just before attempting to exec a module.


# 83e449a3 13-Mar-2014 Devin Teske <dteske@FreeBSD.org>

Remove indexfile from debug statement as it is already logged by
f_index_menusel_command() used just-prior to this debug statement.
Also, log the arguments being passed to the resword.


# e5cb2e69 07-Mar-2014 Devin Teske <dteske@FreeBSD.org>

Allow dispatched reswords to carry arguments. Fix a comment while here.


# 9e2c4ab6 07-Nov-2013 Devin Teske <dteske@FreeBSD.org>

Whitespace.


# f677a9e2 09-Oct-2013 Devin Teske <dteske@FreeBSD.org>

Introduce centralized [X]dialog(1) exit codes to `dialog.subr' and make-use
throughout the bsdconfig(8) code. While we're here, add an explicit argument
to lvalue-seeking invocations of "return" that previously had no argument.
Also, consolidate a single instance of double-newline and remove some
comments that are no longer required (given increased readability with new
exit codes).

Approved by: re (glebius)


# 636621d9 05-Jul-2013 Devin Teske <dteske@FreeBSD.org>

Check for INDEX file first before anything else when processing modules.


# 4b97e14f 05-Jul-2013 Devin Teske <dteske@FreeBSD.org>

Check menuitem before calculating tag.


# 1da51566 05-Jul-2013 Devin Teske <dteske@FreeBSD.org>

Add support for processing add-on modules from /usr/local/libexec/bsdconfig
(this is designed to allow new modules to be installed via ports/packages).

To prevent conflict with itself (sysutils/bsdconfig) as a port (which
installs its base modules to the above directory, it was long-ago decided
that so-called `base' modules would look different than now-defined `add-on'
modules. The structure of the contents for each is the same, but the naming
convention for the module directory must be different.

Base modules are named `[0-9][0-9][0-9].*' to allow SysV-style organization
while add-on modules must avoid this naming style and are simply listed in
alphabetical order by their module directory.

For example, a hypothetical port named `bsdconfig-jails' could install
/usr/local/libexec/bsdconfig/jails and provide `bsdconfig jails' as well as
a new menu entry in the main-menu.

Add-on modules are listed in the main-menu (when bsdconfig is executed with-
out arguments) below a separator after the last base-module.

In `bsdconfig -h' output, add-on modules are listed right alongside base
modules (sorted alphabetically in columnar fashion; left-to-right).

If a base module declares a keyword used by an add-on module, the base
module will always win when given `bsdconfig keyword' syntax.

Add-on modules should avoid declaring any keyword found in `script.subr' as
a reserved-word (`Resword') since bsdconfig also supports `bsdconfig resword'
as a fall-back if no keyword is found to be declared by any module.


# e363bf2b 05-Jul-2013 Devin Teske <dteske@FreeBSD.org>

Don't calculate the tag until we know that we're going to make a new menu
item entry. Also join simple NULL assignments into a single line.


# c9c67103 24-Jun-2013 Devin Teske <dteske@FreeBSD.org>

More whitespace.


# b19b2019 24-Jun-2013 Devin Teske <dteske@FreeBSD.org>

Whitespace.


# fd3d4fec 19-Jun-2013 Devin Teske <dteske@FreeBSD.org>

When the fall-back of a case-statement is the last thing executed in a
while-loop _and_ all prior matches in the same case-statement either break
or continue, we can safely break the fall-back out of the case-statement.
This should improve readability and allow for longer-lines by reducing the
level of indentation by-one for the fall-back case.


# f4a3220c 19-Jun-2013 Devin Teske <dteske@FreeBSD.org>

Whitespace and comments.


# 65c7c087 15-Jun-2013 Devin Teske <dteske@FreeBSD.org>

Style/comments.


# 44392705 03-Jun-2013 Devin Teske <dteske@FreeBSD.org>

Use f_shell_escape() instead of forking to awk. In this case, the
replacement comes with a great performance increase (as f_shell_escape()
uses the built-in based f_replaceall() which out-performs forking to
awk(1)). This should also improve readability slightly.


# c01472c1 02-Jun-2013 Devin Teske <dteske@FreeBSD.org>

Make some obvious consolidations in local declaration for readability.


# f4844f65 02-Jun-2013 Devin Teske <dteske@FreeBSD.org>

Improvements to whitespace and comments.


# 5b4765c3 02-Jun-2013 Devin Teske <dteske@FreeBSD.org>

Fix option processing from the library layer to address unexpected
behavior(s); e.g., `-Xd' versus `-dX' did not produce the same results.

The libraries common.subr and dialog.subr automatically process the
arguments passed to the program and enable/disable functionality without the
need to process the arguments within your program. For example, if "$@"
contains `-d', common.subr will see this and enable debugging regardless of
whether you process "$@" yourself or not (this automatic processing can
easily be disabled for custom scripts that don't want it; see the afore-
mentioned scripts for additional details).

NOTE: common.subr stores a copy of "$@" in $ARGV for convenient (and
repeated) processing by libraries such as dialog.subr which provide such
transparent functionality for the consuming script(s).

However, the libraries don't know if a program wants to accept `extra'
options. Flags are not really a problem, because the library can be
programmed to silently ignore unknown flags. The trouble comes into play
when the program wants to define an option that takes an argument.

For example:

bsdconfig -D logfile -X

In the above example, the library uses getopts to process $ARGV and if it
doesn't know that `-D' takes an argument, the option processing will
prematurely terminate on `logfile' (this is standard/correct behavior for
getopts but is undesired in our situation where we have partially off-loaded
main argument processing).

The problem is solved by allowing the program to define an extra set of
options to be included in each library's handling of $ARGV. Only options
that require arguments are truly necessary to be pre-specified in this new
manner.


# 052f8969 02-Jun-2013 Devin Teske <dteske@FreeBSD.org>

Standardize the way functions build their arguments leading up to a dialog
invocation. Specifically, "top-load" your arguments and in the order in-
which they will be displayed. For example, many [if not all] widgets display
information in the following order, top-to-bottom (visually):

+ backtitle (displayed behind the widget at top-left)
+ title (at the top of the `window')
+ prompt text (just below the title and above whatever widget you choose)
+ Depending on widget, _one_ of the following:
- menu list
- radio list
- check list
- text input box with initial text
- [Xdialog(1)] 2x or 3x text input boxes
- [dialog(1)] a multi-part form
- progress bar
- etc. (many more widget choices)
+ buttons (right below the selected widget)
+ [dialog(1)] the hline (displayed at bottom of `window')

NOTE: Xdialog(1) accepts and silently ignores --hline

When building local arguments for your dialog invocation, if the value can't
be cleanly loaded into a local, add "# Calculated below" to the end of the
local declaration while retaining the block order of argument declarations.

Move other local declarations that are not associated with this top-loading
the dialog arguments to right-above where they are first-used.

Also, standardize on the names of the arguments. For example, always use
$prompt (instead of sometimes $msg and sometimes $prompt); use $menu_list
or $shell_list or $radio_list for those respective widgets; ad nauseum.

While we're doing this, flush-out full arguments for many invocations that
were passing NULL strings (making it unapparent if you were staring at this
one invocation what argument that NULL string was supposed to represent).

Last, while we're in startup/rcconf let's remove the unnecessary use of a
GLOBAL (RCCONF_MENU_LIST) for the menu_list.


# 77599778 02-Jun-2013 Devin Teske <dteske@FreeBSD.org>

Improve the dialog(1) API in dialog.subr by adding f_dialog_default_store()
and f_dialog_default_fetch(). Operating similar to functions introduced by
SVN r251236 and r251242, these functions operate as a pair for helping track
the default-item data (for the --menu, --checklist, and --radiolist
widgets).

This replaces the direct usage of a global to store the data with an
abstract method for readability and to centralize the code.


# fd962ac6 01-Jun-2013 Devin Teske <dteske@FreeBSD.org>

Improve portion of the dialog(1) API in dialog.subr responsible for
retrieving stored data (for the --menu, --calendar, --timebox, --checklist,
and --radiolist widgets).

When we (Ron McDowell and I) developed the first version of bsdconfig, it
used temporary files to store responses from dialog(1). That hasn't been
true for some very long time, so the need to always store the return status
of dialog(1) and then call some function to clean-up is long-deprecated. The
function that used to do the clean-up was f_dialog_menutag().

We really don't need f_dialog_menutag() for its originally designed purpose,
as all dialog invocations (even when in a sub-shell) do not use temporary
files anymore.

However, we do need to keep f_dialog_menutag() around because it still fills
the need of being able to abstract the procedure for fetching stored data
provided by functions that display the aforementioned widgets.

In re-designing f_dialog_menutag(), four important changes are made:

1. Rename f_dialog_menutag() to f_dialog_menutag_fetch()
2. Introduce the new first-argument of $var_to_set to reduce number of forks
3. Create a corresponding f_dialog_menutag_store() to abstract the storage
4. Offload the sanitization to a new function, f_dialog_data_sanitize()

NOTE: That last one is important. Not all functions need to store their data
for later fetching, meanwhile every invocation of dialog should be sanitized
(as we learned early-on in the i18n-effort -- underlying libraries will spit
warnings to stderr for bad values of $LANG and since dialog outputs its
responses to stderr, we need to sanitize every response of these warnings).

These changes greatly improve readbaility and also improve performance by
reducing unnecessary forking.


# 74036c4d 31-May-2013 Devin Teske <dteske@FreeBSD.org>

Improve portion of the dialog(1) API in dialog.subr responsible for
calculating widget sizes. Instead of forking a sub-shell to calculate the
optimum size for a widget, use a byRef style call-out to set variables in
the parent namespace. For example, instead of:

size=$( f_dialog_buttonbox_size title btitle msg )
$DIALOG --title title --backtitle btitle --msgbox msg $size

The new API replaces the above with the following:

f_dialog_buttonbox_size height width title btitle msg
$DIALOG --title title --backtitle btitle --msgbox msg $height $width

This reduces the number of forks, improves performance, and makes the code
more readable by revealing the argument-order for widget sizing. It also
makes performing minor adjustments to the calculated values easier as
you no longer have to split-out the response (which required knowledge of
ordering so was counter-intuitive).


# c3755aa3 13-May-2013 Devin Teske <dteske@FreeBSD.org>

Centralize standard getopts arguments, both for convenience and to correct
a bug in which certain combinations of arguments produced unexpected results
such as `-dX' (now properly produces debugging and X11), `-XS' (now properly
produces X11 in secure mode), `-df-' (enables debugging when reading a
script from standard-input, etc. Multi-word variations such as `-d -X',
`-X -S', `-d -f-', `-d -f -', etc. also work as expected. Also tested were
variations in argument order, which are now working as expected.


# d3a0f918 21-Apr-2013 Devin Teske <dteske@FreeBSD.org>

UI improvements. First, implement --default-item whenever and wherever
possible to save keystrokes. Second, overhaul startup/rcdelete for much
improved performance. Last, but not least, kill-off useage of --clear
and implement --keep-tite in harmony to minimize jarring transitions.
Also, fix local variable names where necessary while we're here with
other minor comment-enhancements/typo-corrections.


# 5421f6b1 21-Apr-2013 Devin Teske <dteske@FreeBSD.org>

Use new f_getvar for clarity and general code follow-up to r249746.


# e14ddd1f 21-Apr-2013 Devin Teske <dteske@FreeBSD.org>

Add new flags `-d' (sets debug=1) and `-D file' (sets debugFile) and
improve debugging initialization. Also fixup USAGE statements while we're
here. Also, change initialization of main program to _not_ change working
directory, allowing the debugFile to be relative without confusion.


# 3c91c65a 13-Jan-2013 Devin Teske <dteske@FreeBSD.org>

Add missing dialog(1) arguments to internationalize "Help"-button label.


# 31a41563 06-Jan-2013 Devin Teske <dteske@FreeBSD.org>

Update copyrights and dates following last commit.


# 99bc932e 04-Jan-2013 Devin Teske <dteske@FreeBSD.org>

Add support for scripting (sysinstall style).

Reviewed by: jilles


# 56961fd7 25-Dec-2012 Devin Teske <dteske@FreeBSD.org>

Add more debugging to help with diagnosis of program-flow when needed.


# 12f110aa 25-Dec-2012 Devin Teske <dteske@FreeBSD.org>

Remove unnecessary duplicate initialization of the dialog(1) API (automatically
bootstrapped on-include unless DIALOG_SELF_INITIALIZE is set to NO before-hand)


# 526e1dc1 21-Dec-2012 Devin Teske <dteske@FreeBSD.org>

Improve the debugging abilities and clean up debug messages. In most cases,
all one has to do is set the environment variable DEBUGGING to get the debug
messages to appear on the console.


# 48c5129f 15-Nov-2012 Devin Teske <dteske@FreeBSD.org>

Replicate a feature from sysinstall documented in
stable/9/usr.sbin/sysinstall/help/shortcuts.hlp (reproduced below):

If /usr/sbin/sysinstall is linked to another filename, say
`/usr/local/bin/configPackages', then the basename will be used
as an implicit command name.

To get a list of modules you can link to, see `bsdconfig -h' output.

Approved by: adrian (co-mentor) (implicit)


# 40dfc82d 25-Oct-2012 Devin Teske <dteske@FreeBSD.org>

Switch from using a msgbox to display help files to a textbox instead. The
problem with using a msgbox was one of truncation in the case of Xdialog(1)
and lack of screen real-estate (since the msgbox is not scrollable in X11
while a textbox is).

The textbox renders the text much better and is more appropriate for this
type of data display.

Approved by: adrian (co-mentor) (implicit)


# 9c6cbb8a 25-Oct-2012 Devin Teske <dteske@FreeBSD.org>

When Xdialog(1) is passed a NULL argument to its `--help' option, Xdialog(1)
acts like dialog(1) in that it returns exit status 2 when the help button is
chosen.

Approved by: adri (co-mentor) (implicit)


# 14599250 22-Oct-2012 Devin Teske <dteske@FreeBSD.org>

Resurrect usage.hlp and securelevel.hlp from sysinstall(8) and integrate them
into bsdconfig(8).

Approved by: adrian (co-mentor) (implicit)


# 6e0adcda 18-Oct-2012 Devin Teske <dteske@FreeBSD.org>

More-accurately replicate the help system from sysinstall(8). However, also
improve upon the system by giving the user a "Help" button instead of requiring
the user to press F1.

NOTE: In FreeBSD-9 and higher, dialog(1) does not support the F1 hook, so the
mechanism for providing help to the user had to be changed to a button.

This now means we can resurrect *.hlp files from usr.sbin/sysinstall/help/ as-
is and reusing them as-needed in bsdconfig (holding to the goal of losing as
little functionality from sysinstall as possible).

Reviewed by: adrian (co-mentor)
Approved by: adrian (co-mentor)


# fb7d723e 21-Sep-2012 Devin Teske <dteske@FreeBSD.org>

Reverse SVN r240770 -- jilles@ made a suggestion that allowed us to redesign
our embedded rescue environment to support /dev/null making r240770 obsolete.

Reviewed by: jilles, adrian (co-mentor)
Approved by: jilles, adrian (co-mentor)


# 104a7f3e 20-Sep-2012 Devin Teske <dteske@FreeBSD.org>

Replace redirections to /dev/null with "close file-descriptor" syntax (>&-).

Reviewed by: adrian (co-mentor)
Approved by: adrian (co-mentor)


# 89498fdf 20-Sep-2012 Devin Teske <dteske@FreeBSD.org>

Change all invocations of dialog(1) to no-longer require temporary files.
This allows bsdconfig to -- like bsdinstall -- operate from read-only media.

Reviewed by: adrian (co-mentor)
Approved by: adrian (co-mentor)


# ab2043b8 18-Sep-2012 Devin Teske <dteske@FreeBSD.org>

Move major includes into /usr/share/bsdconfig for easy external access.

Reviewed by: adrian (co-mentor)
Approved by: adrian (co-mentor)


# 641a6cfb 13-Jul-2012 Devin Teske <dteske@FreeBSD.org>

Import bsdconfig(8) as a replacement for the post-install abilities of
deprecated sysinstall(8). NOTE: WITH_BSDCONFIG is currently required.

Submitted by: Devin Teske (dteske), Ron McDowell <rcm@fuzzwad.org>
Reviewed by: Ron McDowell <rcm@fuzzwad.org>
Approved by: Ed Maste (emaste)