[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

cfgtool - new prototype with booleans, locking, language support



I think I mentioned a prototype for cfgtool here recently.
If you remember the /etc/default discussions, this is a
continuation of them. The idea is to have a program as the
interface to the configurable variables, instead of files in
/etc/default. A program is better, because then the location,
syntax, and other details can be more easily changed.

For newcomers, this is a proposal for centralizing configuration
of certain "system variables" into one place. For instance,
how long files in /tmp are kept. The current method is to have
the variables at the top of the script that uses them, and then
marking the script as a configuration file. This is bad, because
when the package maintainer fixes a problem in the code part of
the script, the system administrator needs to re-configure the
new script by editing it by hand. If the variables are moved
out of the script, the script can be updated automatically,
and the admin doesn't need to do anything special.

An earlier proposal was to have a directory /etc/default,
where all the variables were in files that could be `sourced'
by /bin/sh. This is slightly awkward, but it would work.

Some other systems (SGI?) have a program called chkconfig(sp?),
which supports only booleans. My cfgtool prototype supports
arbitrary values for variables. This version has special support
for booleans: it's easier to test them than with the old version.

Intended usage would be like this (using the /tmp-cleaning
example):

	1. When the package is first installed, the package's postinst
	   script executes the following command:
	   
	   	cfgtool --create tmptime 0

	   This creates a new "system variable" tmptime, and sets its
	   value to 0.

	2. /etc/init.d/boot, which is run automatically during boot
	   and removes files that are at least as old as tmptime days
	   from /tmp, executes the following:
	   
	   	TMPTIME=`cfgtool --get tmptime`
	
	   This sets the shell internal variable TMPTIME to the value
	   of the cfgtool variable tmptime. This replaces the following
	   line in the current /etc/init.d/boot:
	   
	   	TMPTIME=0
		
	   The code part of the script stays as it is; no change.
	
	3. If a sysadmin wants to change the value of tmptime, he
	   gives the following command:
	   
	   	cfgtime --set tmptime 365
		
	   After this, only files at least one year old would be
	   deleted at boot time.
	   
	4. When the Harriet Hacker decides to make Debian really
	   easy to administrate, she writes a dialog interface
	   to cfgtool, which displays all the variables,
	   their current values, their help texts, and lets
	   the administrator easily look at and change them.
	   cfgtool already has almost everything that is needed
	   for this (listing the available variables is not yet
	   implemented). Once the dialog interface is done, she
	   goes on and writes a Tcl/Tk interface, so that things
	   can be done using a point, click, and drool interface.
	   
	5. Debian takes over the world, and everyone lives happy
	   forever after (even Bill Gates, since he now has time
	   to play with his $300M house ;-).

I append the manual page for cfgtool.

NAME
       cfgtool - manipulate system configuration variables

SYNOPSIS
       cfgtool	[--create  variable  value]  [--destroy variable]
       [--get variable] [--set variable value] [--get-help  vari­
       able]  [--set-help  variable helpfile language] [--is-true
       variable]  [--is-false	variable]   [--lock]   [--unlock]
       [--locked]

DESCRIPTION
       cfgtool	manages	a database of system configuration vari­
       ables.

OPTIONS
       --get variable
	      Print value of variable to stdout.

       --set variable value
	      Set value of variable to value  The  variable  must
	      exist.

       --create variable value
	      Create a new variable and set its initial value.

       --destroy variable
	      Destroy a variable.

       --set-help variable helpfile language
	      Set description of variable in some given language.
	      English is "en".	Note that LANG is not obeyed  for
	      this option.

       --get-help variable
	      Output  description of variable to stdout.  LANG is
	      obeyed.

       --is-true variable
	      Check whether  variable  exists  and  contains  the
	      value  "yes".   Don't output anything, just set the
	      exit code.

       --is-false variable
	      Opposite of --is-false: condition is true, if vari­
	      able  exists and contains the value "no" (actually,
	      any value but "yes").

       --lock Lock variable repository.

       --unlock
	      Unlock variable repository.

       --locked
	      The variable repository was locked  by  an  earlier
	      process,	but  we own the lock.  This is useful for
	      cases when you want to do many updates,  and  can't
	      do  them	with  one  invocation.	This must be the
	      first option, if it used at all.

ENVIRONMENT
       LANG   Language	for  help  files,  when	reading   them.
	      Default is "en" for English.


-- 
Please read <http://www.iki.fi/liw/mail-to-lasu.html> before mailing me.
Please don't Cc: me when replying to my message on a mailing list.


Attachment: pgpl6ptk86Kok.pgp
Description: PGP signature


Reply to: