fmII
Fri, Jul 18th home | browse | articles | contact | chat | submit | faq | newsletter | about | stats | scoop 22:38 UTC
in
Section
login «
register «
recover password «
[Article] add comment [Article]

 A Solution to the Problem of Configuration in Linux
 by Jason Long, in Editorials - Sat, Sep 28th 2002 00:00 UTC

What is configuration in Linux? What do experienced system administrators do when they need to, for example, modify the access rights to a Web site or change the network settings for their server? Invariably, they're going to login into the machine and edit a text file using a Unix editor such as vi or Emacs. That by itself isn't that bad, but depending on which application you want to configure and which Linux distribution you happen to be using, the location of the file you need to edit (and maybe even the format of the file) could be completely unknown.


Copyright notice: All reader-contributed material on freshmeat.net is the property and responsibility of its author; for reprint rights, please contact the author directly.

This is the current state of configuration in Linux. It is a bad state. Configuration of system-level properties, such as network interfaces and hostname, varies widely from one distribution to the next. System-level applications, such as Apache and Samba, each have a different method of configuration. Some tools and distributions provide applications to ease configuration, while some only provide a man page for the configuration file and leave it up to the user to edit. Nearly the only positive thing about Linux configuration is that it almost exclusively uses human-readable, human-editable text files.

This article is not going to talk about the existing state of configuration, however. This topic has been well discussed already. Instead, it will describe what it could be. It is a kick-off to a 9-month, 2-person project to address configuration in Linux. Hopefully, it won't be limited to 9 months or 2 persons, though. We invite your feedback and participation as we go.

Goals/Requirements

In order to develop a system that people will use and give direction to the project, some goals need to be defined. The primary goal is to set up a clear architecture in which various components of the system are clearly defined and separated. This is what this document will attempt to do. The following are some more specific goals, categorized into user requirements, data requirements, process requirements, and interface requirements.

User Requirements

  • The system should be easy enough to use and provide enough help that new Linux users can use it.
  • The system should be flexible and powerful enough that even advanced users will use it.
  • Administrators should be able to delegate access to various components of system configuration to other users (i.e., you should not need to give out the "root" password to give someone access).
  • Application developers who want to make their software configurable by this system should not need to modify their existing applications or make their applications dependent on it.
  • The system should be uniform across distributions. For example, a script written to update network configuration on Red Hat should work properly if run on Debian, because the interface is the same.
  • Internationalization and localization should be stressed throughout the project, so users from anywhere in the world can use their own languages to configure their systems.

Data Requirements

  • Configuration data should be stored in the native configuration files for the applications they configure. This will allow the system to work with existing configuration applications, as well as allowing the users to hand-edit the files if necessary.
  • Other data used by the system should be stored in human-readable, human-editable files.
  • Mechanisms should exist to keep secure data secure and to backup/restore data.

Process Requirements

  • The most obvious processes that should be available are methods to "get" and "set" configuration data.
  • Some configuration systems may need additional user-defined actions, such as an "activate" action which tells the appropriate application to reload itself so the new configuration info is used.

Interface Requirements

  • The system should support the ability for many different type of applications to access the configuration data. Interfaces should include a commandline program, a GUI using GNOME or KDE, a Web interface, and perhaps even an LDAP interface.
  • Programming interfaces between components should allow the different components to be written in any programming language.
  • User interface elements for configuration (e.g., the forms and wizards described below) should be defined at a level below the frontend, so multiple interfaces can use the same elements.

A Three-Tier Architecture

The architecture will be divided into many frontends, a middle layer, and many backends. The frontends will provide the user interface. This will allow commandline utilities that can be used in scripts, GUI interfaces for machines that have X installed, and remote interfaces such as Web and LDAP. The middle layer will provide shared functionality between the frontend interface and the backends. It could also be given capabilities like logging changes, controlling access, and caching configuration information. Finally, the backends will be the programs that actually read and manipulate the native configuration files. There may be backends for reading XML files and Windows INI-style files, as well as specialized backends for reading more complex configuration files (such as Apache's).

The Three-Tier Architecture
Frontends
Commandline Utilities GUI Web LDAP Specialized Tools (e.g., a "go back" utility)
Middle layer
Access control, logging, caching, and any other shared functionality, as appropriate.
Backends
Simple text files INI-style configuration XML configuration Specialized configuration (e.g., Apache, Sendmail)

How the layers communicate is something to be decided in the design phase, but it should allow each frontend and each backend to be written in any particular programming language that is best suited for the task. Perl, for instance, would probably be best suited for most of the backends, since it can easily parse and modify text files.

Modeling the Configuration Data as a Directory

One major feature of this three-tier design is that frontends are designed to handle configuring anything. In other words, the frontends know nothing about the programs and distributions they are configuring; they only provide an easy-to-use and consistent view of the configuration. How can you tell which frontend you want to modify, such as the list of users that are allowed to access one of your Samba shares? This is where the directory approach comes in.

Configuration will be modeled as a directory (or hierarchy), in a way similar to how GConf and the Windows registry handle configuration. Applications and system settings will be put into logical groups. Backends will be responsible for handling configuration "underneath" a particular branch of the directory.

A proposed hierarchy
Path Description
/ All configuration for the local machine is done under the "root". This root could be placed into another directory, which would be important for remote administration.
/apps This contains configuration defining how some system applications run. These are not daemons; they don't run all the time. Examples might include sudo and Debian's apt-get.
/daemons This contains system applications, such as Apache, Sendmail, and Samba. These are applications that normally run in the background, and are equivalent to "services" in MS Windows.
/daemons/samba This is where the backend of Samba would exist. Anything under this path would be handled by the Samba backend, which would be responsible for mapping the configuration of smb.conf into a directory.
/hardware This contains properties to configure hardware (e.g., sound card modules and network card IO addresses and IRQ numbers).
/network This configures network interfaces (e.g., the IP address and default gateway).
/system This contains system-level settings, such as hostname, default runlevel, and boot-loader settings.
/users This manages the addition/modification/deletion of system users and their properties.

Particular configuration locations are not fixed. Users should be allowed to rename, move around, or group system applications if they choose. As applications are installed, they will be placed in a suitable default location. Localization should be considered as well, so applications can be grouped using words from a user's native language. Users should also be able to create second copies of some applications, in case they want to run more than one version of the same application and they have more than one configuration file to edit.

Forms, Wizards, and Metadata

The system described so far does not present an interface much different from the registry in Windows. If you want to make a modification, you must navigate through a hierarchy and know the name of the attribute you want to add or modify. This is probably worse than editing the configuration files; with configuration files, you at least have the comments that were built in. This is where forms, wizards, and metadata come in.

Forms

Forms will give users a window in which they can see the important information and edit it using text boxes, list boxes, buttons, and other common controls. The information will be presented in an organized way and may be split into multiple tabs or pages if there is a lot of data to present. Forms can probably be best thought of as providing an interface like Webmin in order to modify configuration.

Forms will be defined using an implementation-independent language, such as XML Forms. The same form definition files could be used to create dialog boxes and Web pages. Forms will be distributed with a program that supports the configuration system, or they may be provided by a third party. As new versions of a particular distribution or system application are released, the forms may need to be updated to support new features.

Here is a screenshot of a prototype of how a Samba share form might look. Notice how the properties for this share are organized into four tabs, one of which is a generic "Other" tab which is capable of showing all properties. On the "General", "Permissions", and "Users" tabs, the application will show a form based on an XML form definition file that describes a layout of controls and bounds the data on the form to certain attributes of the Samba share.

Prototype screenshot

Wizards

While forms allow users to manipulate existing configuration data, wizards will give them opportunities to add things to the configuration. Take for example, adding a Samba share. It requires not just changing an attribute, but rather adding a whole section to the configuration file. Wizards will ask the user all the information needed to create something, then perform the steps necessary to do it. Wizards overlap somewhat with forms, because they will probably ask for the same information that the forms manipulate. Wizards, like forms, can probably be defined using XML Forms.

Wizards could also be created to install entire services. If integrated into a particular distribution, you might be able to use a wizard to add Samba to your computer. The wizard would use the facilities provided by the distribution to download and install Samba onto your computer, then create an appropriate default configuration file.

Metadata

Finally, metadata is information about the configuration data. Metadata could include the following items:

  • Descriptions of configuration items (e.g., excerpts from the application's manpages).
  • Data types and constraints (e.g., this attribute must be a filename; another attribute can be any string). XML Schema may provide a language for this.
  • Default values.
  • Comments in the configuration files as parsed by the backend.
  • Access Control Lists, for defining who has what type of access to the configuration.
  • A History Log, for keeping track of what changes were made and who made them.

Of course, metadata will be available to the frontends. The frontends with a higher level of user interaction may wish to display descriptions of the items and the comments associated with them.

Access Control

Access control defines who has access to read and/or change particular parts of the configuration. It will allow the root user to delegate control of the configuration to other users. This is important if more than one person is to administer a system, because a person who only needs to manipulate user accounts may not want access to the whole system.

Access control could potentially be quite flexible. In the traditional Unix filesystem, files and directories have three types of permissions which can be applied to the owner of the file, a group, and everyone. While pretty flexible, this has certain limitations, such as difficulty in giving two groups different levels of access while still denying access to everyone else. An access control language for Unix configuration could be much more flexible, allowing access to any number of users and groups and allowing very detailed types of access.

Access control is also useful when you start talking about logging, because it allows users to make changes as themselves instead of as root.

Logging

As users make changes to the configuration, they should be logged. The log could contain a date, the change that was made, and the user that made the change. If a remote access method is used, the IP address of the connecting machine could also be recorded.

A rich logging system would allow the creation of utilities that can "go back" to previous states of configuration. If someone made some changes that messed up the system, a "go back" utility could be used to revert the configuration to the state it was in just before those changes were made.

This "go back" utility would exist as a frontend, just like the commandline interface and the GUI interface. It wouldn't know anything about how to manipulate the configuration files; it would only know how to access the list of changes that were made and revert them.

Remote Administration

In the world of Unix, managing a computer remotely is easy, thanks to the wonders of SSH and remote X. For many users, these methods may be enough, but for administrators who manage a lot of servers, we may be able to provide better solutions.

Imagine a single program that you could use to browse multiple machines and edit their configurations, one which could handle connecting to the appropriate servers and providing the proper credentials to access the configuration.

Furthermore, imagine that when there's a new exploit for BIND, you do a search for all BIND programs (on all the servers in your organization), disable them all in one keystroke, apply the patch, and re-enable them.

Configuration Data Distribution

Remote administration could be taken to the next step by storing multiple copies of a computer's configuration on different servers. The primary source of the data would remain the computer that the configuration data is for, but secondary copies could automatically be kept on "peer" servers. This provides the unique ability to access configuration data when the server in question is down.

Furthermore, what if you were allowed to modify the configuration data when the computer is down? The modified data would be kept on the "peer" computer, and when the original computer came up, it would have to synchronize. The synchronization could lead to critical changes, so it might be best to synchronize before any daemons started.

These ideas about remote administration and data distribution are quite idealistic (and outside the initial scope of this project), but will give the project something to aim for.

Where to Start

At this point, we'd like to get feedback from the Linux and Open Source community. We'd like to answer questions like:

  • Is this something worth striving for?
  • Is it necessary to start from scratch, or can one of the existing configuration programs (e.g., LinuxConf and WebMin) incorporate some of these ideas?

Addressing details like what programming languages should be used and how to interface the various components is not necessary right now. These things will be decided later, during the design phase.

We'd also like you to visit our project site at SourceForge, http://config4gnu.sf.net/.


Author's bio:

Jason Long is a senior at Messiah College, Grantham, PA, majoring in Computer Science and Business Information Systems. He is a Linux enthusiast and participates in the on-campus Linux User's Group. He is also an avid programmer, and competed in the International round of the ACM Programming Competition last Spring.


T-Shirts and Fame!

We're eager to find people interested in writing articles on software-related topics. We're flexible on length, style, and topic, so long as you know what you're talking about and back up your opinions with facts. Anyone who writes an article gets a t-shirt from ThinkGeek in addition to 15 minutes of fame. If you think you'd like to try your hand at it, let jeff.covey@freshmeat.net know what you'd like to write about.

[Comments are disabled]

 Referenced categories

Topic :: System :: Installation/Setup
Topic :: System :: Systems Administration
Topic :: Text Processing :: Markup :: XML

 Referenced projects

GConf - A configuration storage library.
Linuxconf - A sophisticated administrative tool.
Webmin - A Web-based interface for Unix system administration.

 Comments

[»] PLEASE! READ THIS BEFORE POSTING
by Justin Yackoski - Apr 11th 2003 08:21:21

As one of the developers of the project, I'd like to clarify a few things that, judging by the comments so far, some people still seem to be grossly misunderstanding what our project is.

First off, our system is in an alpha stage at this point and we have proof-of-concept applications working very well with it, you should check them out at http://config4gnu.sf.net to get a better idea of what we've got.


Now to clear up some misconceptions:

Our system is an abstraction layer, *just like other config tools*. It is not a replacement for native config files, it does not require apps to use it, and it certainly does not intend to force a single way of doing things. It is just a tool that people can use to edit existing, plain text files one day, and the next day to edit them by hand if you wish. The system will provide an XML-based cache of configuration which you can use for various purposes. This XML cache will be kept up to date with the native config files, and NOT the other way aound. The beauty of our system is that you get an XML-based, structured interface to the native config files. Its just an interface, not necessarily a replacement.


Our system currently allows application developers to read their configuration easily using our API, though it does not require it. It is not a registry, it is an interface. If you want to write your own parser or your own file format, go ahead. We'll try to handle your special formats, but we'd like to keep the number of config file formats to a minimum if possible.


We intend the system to be for people who more or less know what they're doing. Someone made a good point that even if you have been a sysadmin for 20 years, there are just some apps that you don't configure often enough to remember all the details needed to hand edit a config file without consulting a fair amount of documentation.


Of course there are reasons why someone who doesn't know squat about unix should not be able to configure an important server in a production environment. Thats up to the boss. If they want to depend on someone being able to use our tool for their business to stay alive, they've got bigger problems.

*More importantly*, what if someone wants to mess with configuration on a *testing* machine? Why should it be so hard for them to learn?


Finally, here is a working example of how you could edit your Samba configuration with a perl script:


#!/usr/bin/perl use config4gnu;

my $samba = config4gnu::get_configuration_root->resolve_path("/Daemons/Samba Configuration");

my $global_section = $samba->resolve_path(".samba-global");

my $wins_setting = $global_section->resolve_path(".wins_server");

print "Your samba's wins server is " . $wins_setting->get_string_value;


This example script asks the config4gnu library to load the samba configuration file (i.e., /etc/samba/smb.conf) into XML, locate specific nodes in it, and retrieve the output. Modifying it is just as easy, and the change is saved back in the native config file without changing ANYTHING else (whitespace, comments, blank lines, etc.).

[reply] [top]


[»] The best idea for Linux since the inception of the Kernel
by arschlesinger - Feb 14th 2003 22:04:10

If this framework is implemented so that only open standards are used, particularly XML, then the project should grow fast. If people can distribute their programs for Linux, instead of for the Red Hat distros and for Slack(which almost never happens) and for Debian, then the Linux community can still be as diverse as it is now, but a VERY important standard will exist, also. The ability to easlily install software on Linux and configure services, just like on Windows is probably the most important issue and problem for Linux, and the largest drawback for users to move from Windows to Linux.
The reason Windows is so successful is that people can use the GUI programs(all in the "control panel") to configure everything that they probably will ever need to. If they do need to do something that they can't in the control panel, then they can go into the Registry and do it. The problem with Windows(that myself, as well as every Linux user hates) is that if, while you are configuring something in the control panel, you make a mistake, you had better have made a backup because Windows will crash. Basically Windows is easy but not reliable. I think that I can safely say that even the average user wants both these days(especially because he/she is sick of crashes, restarts, and the blus screen.)
The proposal here is to create a registry for Linux, which I think should be a standard filestructure for all Linux Distros. The difference between the Windows Registry and Linux one is that nothing could be done to this "registry" to crash the system because in Linux, everything is modular. This goes back to the reason why it is so hard to use.

summary:
the reason Linux is hard to use is because it is highly modular; so much so that it differs across any distro. The modularity scares many users because their newly installed program could be anywhere in the huge, hard to understand filesystem of /usr and /etc. What average user is going to know what is in the /etc folder? This project will effectively bring the modularity(which is a 100% benefit to linux and in no way a drawback to it) and inherent stability of Linux under a much needed and (hopefully) open standard. This standard will bring consistency across every linux, and will help win (hopefully lots of) converts over from Windows.

Basically, a user can do everything on Linux that they can on Windows (except play some awesome games, but that's why we all have PS2!) if not better than they can on Windows...but how are they gonna get these dream programs, and better yet, how are they gonna figure out how they work?

The only thing that linux is missing today is a reliable and standard control panel. From there, people will start to appreciate the uniqueness of every distro of Linux.

-Aaron

[reply] [top]


[»] Standardized Configuration. Since when is Linux supposed to be standard?
by shinwise - Jan 21st 2003 04:45:26

I remember once (it would seem not long ago) reading a very good article by Gual Duval of Mandrake about the cons of standardizing one GUI for Linux, like deja-vu reading this article brought me right back to that day like it was yesterday. Since it's infancy over a decade ago GNU/Linux has always been about 2 things Freedom and Flexibility. With a past being as such, it's no wonder any discussion of having a standard would be such a hot topic. The problem is in the several pages of Technical Jargon nowhere does it mention the wants of the user. The fact of the matter is the typical Linux user wants just about as much "Standardization" as old Bill wants to open up to the wonderful world of GNU soft. Big or small Linux will be what it always has been, mainly a community of disgruntled Windoze users who are tierd of being told how to do it. So Why, Oh Why after all of these years would we turn back the clock and sell out to a standard? To attract a few more of Bill's gurus that barely know the difference between the terms 'point' and 'click'? Anyone that thinks standardization is the secret to Windoze success has spent the last about 5 years looking through a one sided pane of glass, but for those of us that have actually followed the world of software know it is a sheer combination of unfair domination and clever marketing. With Linux (intentionally) missing these concepts it is hard to see how standardization will do little more than upset allready dedicated users. Where are we to ensure freedom in Linux if we don't do it right at the source?? Ask yourself this question, How does one sail freely down a river once it's source has been capped by a huge dam? This is essentially the same thing, is it not?
As for a standard in programming let us take a look at DirectX, a fine example of standardization if there ever was one. Once upon a time there were three ways to do things when it came to Windoze game programming, the right way, the wrong way and the ingenious way. Nowdays it's hard to find a game that doesn't make use of this handy little tool. While on the surface, this may seem like a easy convenient way to do things, this half-hazard way of marching all our young ambitious programmers down this same narrow worn path is dangerous. It is not only a matter of freedom, but this tunnelvision way of buisness stunts advancement and development of other potentially better ideas. Is this the path we really wish to set Linux down???
If anyone wants to devote their time and skill to a program to simplify Linux development or tools to help the new enthusiastic Linux user this would certainly be a worthwhile if not welcome project, but do me and my Linux box a favor, Let's leave the "Standardization" for the Windoze gurus.

[reply] [top]


[»] Making an app work in the config framework is the app developers problem.
by Charles McCabe - Jan 1st 2003 17:54:34

Many of these comments seem to revolve around the difficulty of making the config framework fit k's of different file formats or what happens when the formats change between versions, etc. The developer of the application needs to give their app the ability to be managed by the framework. So, Apache says, "Our config can be managed by your-config-app." You open your-config-app and point to Apache's config file, which is self-defining, and the hierarchy of Apache options opens in your-config-app. No need for standard config file locations and the "leakage" is the responsibility of the developer.

Just one thing to which I can't help but respond specifically: The specifications of this project explicitly called for the retainment of native config file formats. None of the beauty of *nix's configurability is lost; it's simply exposed.

--
Thanks, Chaz

[reply] [top]


[»] Remote vs. local
by Peter T. Breuer - Dec 30th 2002 04:40:56

Remote configuration is a different problem from local configuration. I suggest you tackle the two separately. If a remote configuration tool has access to your remote middle-layers it may eventually be able to help the admin out, but first put the middle layers in place on the boxes, then worry about accessing them remotely.

--
Peter T. Breuer MA CASM PhD (Ing.), Prof. Asoc. Area de Ingenieria Telematica E-mail: ptb@inv.it.uc3m.es Dpto. Ingenieria Tel: +34 (9)1 624 91 80 Universidad Carlos III de Madrid Fax: +34 (9)1 624 8749/9430 Butarque 15, Leganes/Madrid, E-28911 Spain

[reply] [top]


[»] it's just a BAD idea.
by rune - Dec 16th 2002 09:54:52



I hope i'm not paraphrasing other people's
comments too
much, as a lot of valid points that I agree with
have been made but this is purely and simply a
bad idea.

As has already been mentioned the current system
allows greatest flexibility and configurations
that are actually well suited to the application
they partner with. If you want a
pointy-clicky-dont-have-to-use-my-brain
environment the try Windoze (or maybe MacOS?) and
you'll be happy for ever.

Three of the best things about the UNIX/Linux
philosophy are:

1) There is more than one way to do it - AKA the
perl motto. We don't want standarisation - why do
you think a lot of us chose linux in the first
place - because we can do what WE not someone
else wants. Which brings me to point 2:

2) UNIX/Linux allows us not just to customise
WHAT we do but how we do it. By unifiying
configuration and having configurations modified
by a software layer we are potentialy removing
our freedom and control over our systems and the
way they behave.

3) Linux always has been about learning. If you
don't know how to configure something LEARN. The
information is out there, it may be hard at first
but the end result will be a better, more stable
system that fits your needs exactly. We have been
forced by Microsoft and others for years to
accept the way they want things done as "The
Standard". Instead, we should be encouraging
freedom of information, freedom of configuration,
freedom of choice. This is one of the only true
preventive measures to avoid monopolisation of
our software and systems - insist on being able
to do it HOW YOU WANT TO. It's your right.

I also agree with the theories on Leakage, which
effectively make this project almost redundant.

If any of you have tried to use Linuxconf et.al.
you will soon realise they are of little
practical use and make it difficult to recover
your configuration by hand should the program
screw up. In fact, if you edit a file by hand
in-between admin sessions, you can get into no
end of trouble. In fact, it can generate a lot of
hassle and wasted time just because of the fact
that the user, especially the inexperienced one,
will blindly believe that their configuration
interface is handling everything for them when in
many cases it may well not be doing this
effectively.

Also, this can pose a major security risk.
Despite secuirty measures in place, it is REALLY
unwise to offer effectively root level access via
a web page, an open network port or any type of
front end. I would say this does not fit with
good practice and is not conducive to knowing
what your box is doing all the time - which is
actually a legal requirement in a lot of
countries as you are responsible for your
systems' actions.

Another point that is worth noting is this:
Storing all of your configuration in one place is
bad. If you kill your configuration interface or
your config database, you kill your machine, at
least partially. One of the great things about
unix systems is that software is seperate. Apache
can die without taking out your mailserver.
Joining appplications together in any way is a
bad idea as it causes a single point of failure.
You only have to take a look at the Windows
Registry system and how easily registry and
profile information can get corrupted to prove
this.


Anyway, these are my opinions, for what they are
worth ;).

rune

Webfish Linux Project
http://webfish-linux.sourceforge.net

[reply] [top]


    [»] Re: it's just a BAD idea.
    by Yoda - Dec 23rd 2002 16:10:22

    it's not horrible in concept, but i think we should concentrate on something that is both easier to impliment (excuse the spelling), and easier for the smaller machines out there with no room for individual config tools to use. We should concentrate on creating a unified place for ALL configuration to go, and a unified format for All config files. that way, a unified system configurator would be easy to create that could expand for everything that has configuration simply by look ing in the directory. this seems impossible, but look at this:
    you have a format, say
    [variable name] = [set number/option] -- [special extension or whatever]
    hint = [whatever you want a configurator to say about the input]
    then you could easily make a simple graphical configurator that gives you a variable, a box to set it, and notes on what to set it to.it would be simple, universal, and easy to manipulate from text, not to mention liteweight.
    just my opinion, but hey. -The BubbbleMeister

    --
    --The BubbleMeister

    [reply] [top]


    [»] Re: it's just a BAD idea.
    by adem - Jan 17th 2003 07:44:55


    > I hope i'm not paraphrasing other people's comments too much, as a lot of
    > valid points that I agree with have been made but this is purely and simply
    > a bad idea.

    Is it, really?


    > As has already been mentioned the current system allows greatest flexibility
    > and configurations that are actually well suited to the application they
    > partner with. If you want a pointy-clicky-dont-have-to-use-my-brain

    This is the kind of mindless bigotry that drives me up the wall..
    If you think you have all the time to *learn* (as if the knowledge you
    gain from someone's half-baked config solution can be called that),
    go ahead; learn all that essentially useless stuff. But, please don't
    even attempt to tell us that it is anything but a never-ending workaround.

    A config file is a config file is a config file. It is supposed to be
    something passive and comprehensible. Not a compilable script (if you
    need a script, put it in the compiled code for gods sake), or a symbol
    soup.

    If you want to hold on to your freedom, be my guest: Do it in the
    source code.

    And, what leakage are you talking about?

    If you are not supposed to edit config file in between admin sessions
    you will not, that's it. Either the config software will not let you do
    it, or it will at least warn you. What have better than that at the
    moment?

    About root level access? I believe you can Telnet over SSH etc (as secure
    as that is), why can't you think of a similar solution?

    And, finally, about storing your config files in one location... I see,
    I have finally found someone who mirrors his/her every single byte at
    a remote location --not just RAID50 :-)


    > Anyway, these are my opinions, for what they are worth ;).

    You are definitely not part of the solution ;-)

    Cheers,
    Adem

    [reply] [top]


      [»] Re: it's just a BAD idea.
      by KDan - Feb 2nd 2003 16:27:34

      Re: Leakage, I believe he's talking about Leaky Abstractions, a very useful concept to understand why a config adminsitration layers won't solve all your headaches (though it might ease some of them).

      Daniel

      [reply] [top]


[»] your solution
by albert fuller - Dec 4th 2002 10:37:36

you have a great idea and I like much of what you have to say.

I would just like to add my thoughts on the design level: I feel you need to confront the variability of Linux distros and file layout. The question is how you can add an app and a definition of its configuration elements (even with choice lists if possible) in a straight forward way to this system; and at the same time your system could support multiple states based on machine.

It's no good for the user to effectively endup using your tool as a blank scheme where user has to add in new objects (eg., mySpiffProg), in need of configuration, and the definition specifics to get some configuration interface; and then configure the object. At this point, just go straight to configuring the object arbitrarily.

The issue I feel is one of developing a model of distributed knowledge (that's essentially what a Linux-universal config tool would be) where your tool is the implementation of that model.

Now this model must do 2 things: (1) seperate knowledge requirements from utilization and (2) seperate knowledge requirements from knowledge need.

This model can exist as a public online database of configurations, and your tool if it could get/create/poll the current environment to determine all available objects and then query your public db to download the required configurations. Any requests for configurations that the public db did not have would be logged for later resolution.

Possibly users who had a configuration to submit to the public db, could do so through your tool which would then accept item to be validated before going into distribution.

example stop:
I have just installed your-config-tool; it polls my system and determines there are 3000 configurable objects (ok I run SuSE Linux) -- your-config-tool would need to determine which configurable objects are already properly configured and which are not -- then I could download those configs I had selected from the picklist of objects in need of configuration. I would then get those selected configurations loaded in my machine and what was not available in the db was logged by the db for future acquisition. I even get a chance to have you guys poll my system for configs that you are in need of (as in thousands of thousands of people want my my freeware program mySpiffProg dispite its tricky config setup) and/or one I directly submit.

Now, I jsut got me a reved-up bash or emacs configuration along with a nice config for wine, apache and squid (all version relevant of course). Your db uploaded 3 configs (to by polling my system and one by user submission - I just want to get mySpiffProg out there!)

********

Ok, you see the point I am trying to make. I see the issue essentially one of information distribution in a distributed community where users can add to the pool of configurations as well as get configurations a la carte... This is what I think addresses your idea of "universal configuration." "IT'S NOT JUST A TOOL, BUT A WAY TO linux-BLISS)

I have posed my take on the issue at the widest level, to see what the basic interaction could be like given your "universalization" on the config theme

have fun
and good luck

[reply] [top]


[»] API, API, API!
by AstroMan - Nov 22nd 2002 20:07:37

This system sounds great. As a developer, the only way I see this "catching on" is if there is a simple api. The system <b>needs</b> to be applicaiton oriented and not system oriented. I am not fond of the windows registry, however, I do like the fact that it is applicatioin oriented. One application can go in and save it's configuration data without affecting any other program. Most importantly, there is no need for a user to know it is there. If a "power user" wants to get in and tweak, well then let them get in an tweak. There should be no reason for a "normal" home user to have to edit config files, registries, xml files, etc to use a program. When I write software for Linux or windows, I try to make them need no user intervention to setup. Linux needs to take this approach as well. One good selling point for your project will be if you can come up with a simple api, that will be a breeze for a programmer to store their settings in. If a certain apps needs more complicated settings, then allow that to be possible through an api, but don't make it the only api. If I have an app that only needs to store a string, then I want a simple call like<br>
save_string_setting("MyApp", MYVERSION, "key name", "some value");

Then at program startup it should be something as simple as<br>

char *myValue;
myValue = get_string_setting("MyApp", MYVERSION, "key name");

Notice that memory allocation would best be handled by the API and at program termination a call to cleanup() would free any memory. I could live with managing my own memory thou.

Best of luck.

[reply] [top]


[»] Why this can't work.
by David J. Sankel - Nov 22nd 2002 10:33:29

The Law of Leaky Abstractions applies here. Unix will always be fundamentally limited by its complexity. A system like the one presented is bound to break. The current unix way of doing things is every program has a different kind of configuration file and the format of the file may change between versions. The maintainters of this system must update the versions of their sofware every time one of the things it configures for changes.

In turn, this project would not really help any sysadmin. Anyone who runs djbdns better know the configuration format, anyone who runs qmail better understand the /var/qmail heirchy. The system presented is bound to be leaky so an understanding of the underlying configuration files is required.

When K&R and friends invented UNIX, they invented a language for it called C. Neither C nor the UNIX libraries had special facilities for configuration files, just files in general. If someone was to change this paradigm, the system would no longer be UNIX and it wouldn't be, in any decent way, compatible with UNIX.

So, yes, I think this idea couldn't work in any practicle way. What it does show is a fundamental limitation to UNIX that new operating system designers should take into account.

[reply] [top]


    [»] Re: Why this can't work.
    by smithdev - Dec 5th 2002 16:55:00

    I agree with what you say. I was going to take a more database-ish stance, and point out that what we need to do here is protect the information from the administrator and the administrator from the information.
    It might be fun to write a Postgres database that knows how to register applications, their configuration file locations, and abstracts their formats to the point you could hit them with SQL (!?!)
    Such a hypothetical implementation/maintenance nightmare, while instructive as an exercise, would fail the admin-panic test: you very likely couldn't boot from a floppy in an emergency and get anything useful out of it.
    There just aren't any silver bullets. Have we considered the LSB? Perhaps this project could be included in the LSB so that the community will be more likely to migrate towards it.

    --
    gentoo is all that

    [reply] [top]


    [»] Re: Why this can't work.
    by submissions - Dec 27th 2002 23:18:45


    > The Law of Leaky Abstractions applies
    > here. Unix will always be fundamentally
    > limited by its complexity. A system
    > like the one presented is bound to
    > break. The current unix way of doing
    > things is every program has a different
    > kind of configuration file and the
    > format of the file may change between
    > versions. The maintainters of this
    > system must update the versions of their
    > sofware every time one of the things it
    > configures for changes.
    >

    I read the URL and I can't see any connection between the examples of Leaky Abstractions. Except "the world is not as perfect as you thought, oh well...". Anyway, I have to point that runlevels and init scripts are optional. They are the good way for a sysadmin will manage his server, but on the other hand linux can be as simple as AUTOEXEC.BAT CONFIG.SYS. And even simpler.

    There is no complexity in UNIX. Again: UNIX is terribly simple. The current configuration systems are hacks by sysadmins.

    [reply] [top]


[»] Scope of project
by venomx - Nov 14th 2002 19:14:21

while I have to agree that standard configuration is needed in linux, I think that the scope of the project is too broad. IMHO a much better approach is to attempt to create a standard set of tools (library) that handles parameters and values indexed by key. While there are certainly complex configuration formats in applications, I believe that they are the exception rather than the rule.

If a sufficient library were created that offered 80-90% of the needs of programmers it would simplify the configuration of all of those applications that don't require advanced configuration formats. I also believe that a simple key, parameter, value format can be adapted to more advanced files albiet with a little work. This should be the job of the application to handle the various complexities that arise such as parameter contexts and overrides, etc.

The simpler the better. I believe that once a good toolset is in place people will want to use it. Key, parameter, values models data structures accurately. A key item that offers flexibility is the muli-valued parameter using a delimiter. Quoted strings should be used to enable delimiters to be used in a config:

[ KEY ]
param1 = something, "something else, blah,blah", another

Hierarchies can be created using dot notation:

[Global]
param1 = something
param2 = something, "something else, something else,", one more thing

[ Some local key ]
param1 = foo
param2 = bar
param3 = baz

[ Some local key.overrides ]
param1 = something different

Etc. So contexts are created using dot notation rather than braces. Each level in the heirarchy that is associated with a given key is up to the application to handle. After all the config file should just store parameters and values. If we need to handle default values, we can add another section:

[ Some key.defaults ]
param1 = default foo
param2 = default bar
param3 = default baz

Comments can be stored easily and associated with either some key or parameter. This way the documentation is in the config file. If for instance a GUI were to be made, it can simply pull the comments out of the config file and display them.
For similar generic items you can create a key that using numeric increments like for modelines in a xconfig file.

[ Modelines ]
total modes = 4
mode1= ...
mode2= ...
mode3= ...
mode4= ...

The toolset should not need to be aware of this situation, the application should interpret each modeline by
I just don't think the problem requires massive amounts of engineering. This solution is simple, it works and can be adapted. If we find out for some reason that a particular requires some complex format that can't be adapted (I refuse to believe that with enough creativity a config format can't be adapted somehow), then extend the format in an intuitive way to allow more advanced configuration. This way you can get 80-90% coverage for the simple config files and still allow advanced functionality using the same library.

I believe that this is the key to a uniform config system. Once everyone is using the same library, then you can create a generic framework to localize configuration of all these various config files by extending the toolset to include a simple registration system allowing a single app to version configurations, save, backup, alter, use ACL's etc. But the first step is to "market" this flexible toolset to developers.

Start small, why spend massive amounts of time engineering something when this solution is so trivially simple it's possible in such a shorter time frame. Once this phase is accomplished, you can create another toolset (library) that will parse the config files and build a GUI automatically by reading all keys, creating the menu hierarchy from the dot notation, reading all parameters and putthing them into a GUI list control, extracting the comments, and anything with a *.default can be plugged in. Heck you could even create an *.option if you needed in order to dynamically generate all of the possible values for a specific parameter. This can all be done in various languages with ease. A C API could be created, a set of simple C++ classes, perl modules, python modules. Porting something like this is far easier than some 3 tier system with XML and all that jazz.

I personally would rather spend my time on something like this rather than some massive engineering effort to try to unify already existing config files. This is just much simpler than a 3 tier approach. Just my $1.50 here :)

[reply] [top]


[»] a GUI using GNOME or KDE ???????
by Kloss Korban - Nov 13th 2002 15:44:40

Or a better idea might be to create the gui in a toolkit like qt or gtk, and not a "desktop enviroment/application suite" like Gnome and KDE.
An even better idea would be to staticly compile a fltk gui.
But if you did that, you would never expirience the fun of not being able to configure your system because of gnome-scrollkeeper errors. Yah, I know if that happens you can still just edit the text file, YUP! thats right. But thats not fair, The Newbie, WinIdiots can't handle that, they might have to read a manual instead of clicking on things until it works.
oh, if you need a gui config. Webmin rocks!

[reply] [top]


[»] Some Suggestions: Precursors & Parentheses
by Richard Russo - Nov 4th 2002 08:28:23

I'm coming to this discussion late, sorry if I restate someone else's opinions.

I'd like to point out that there are a lot of other systems with similar goals, some very successful. Take webmin (www.webmin.com), for example. It has a wide range of plugins which add to the list of programs that webmin can configure. Its UI is a webpage, served over https by an internal server. HTML is nice for developing the kinds of UIs needed by this program (forms), so new forms are developed quickly.

Where webmin is practical, the next example is theoretically nice: Emacs M-x customize. Emacs customization groups provide a general, form-based way to configure Emacs extensions. The documentation, including samples, is right there in front of you. I'd say that if a new Emacs user could figure out how to get into the customization groups, there'd be no problem configuring the favorite extensions. This system has some things that you aren't assuming, however, like some standard ways in which all programs read in their configuration (through emacs-lisp variables).

I really respect this project, I think it's a great idea. Check out these systems so that you could possibly incorporate their good points.

btw, I saw in the author info that you were at the Honolulu ICPC? I think I remember seeing Messiah on the roster. I competed with the team from UCF there.

--
Watashi wa tamago no uchi de gyuunyuu o nomimasu.

[reply] [top]


[»] importance of a standardised data structure
by Hans.v.Buitenen - Nov 3rd 2002 16:07:08

Introduction

This doc is a reply on http://freshmeat.net/articles/view/565/. Please note that i recognize and agree on the concerns that you have on the linux way of configuration.

In short i would like to express the importance of a standardised data structure. Also i think it is very impotant to contantly remind program devellopers to avoid unneeded complexity.

I hope you understand my point below and find it a positive contribution.

General

In my percetion a configuration consists of three things:

- A data structue
- and a user interface
- A application interface
The data structure The structure

About the data structure: We've seen two way's of not doing things, the windows registry and the linux way. Why are these a screw-up? Because the lack of a standardised structure. If you have a standardised data structure then your'e halfway, and, it doesn't seem that hard to do. Also it is not really importand how you do it, as long as it is standardised everybody can find whatever they need.

Let me explain this. First you design a structure. The data has to be seperated into levels. f.i.

Root, Vendor, Application, Data Group, Data Item, Value.

By defining all elements of the data structure, app designers don't need to "invent" or interpret standards for them selves.

The implementation

As soon as the data structure is clear you can start thinking about the implementation of the data structure. (Design and implementation are relativily independend). The data structure can be implemented using several techniques:

- Structured Text (Linux conf, Windows ini)
- XML
- Database

The internal structure should be standised as detailed as possible and have freely available access tools.

The database implementation f.i. could be mysql, a lichtweight, reliable and fast database. Discourage the use of "a different kind of database for each app", this really sucks. Even if mysql is to big for you, it will not be to big if you add-up a few apps. Other databases may be just as good. Important is that all apps use the same one whenever possible.

Mixing implementation techniques

It is very well possible to mix these techniques, however, a few things must be kept in mind:

- The data structure may not be violated
- The mapping from one implementation method to another must be standardised (Documentend)
- Mixing implementation methods may make things more complex.
- If data exists on multiple locations there must be a standardised way to keep data consistant
Examples

An example: A vendor called "AVendor" creates a program called "XApp". He could choose to do the following:

/etc/AVendor/XApp/XApp.conf

/etc/AVendor/shared/X.conf

/home/bob/.etc/AVendor/XApp/XApp.sav

or

/etc/AVendor/XApp.xml

/etc/AVendor/shared.xml

/home/bob/.etc/AVendor/XApp.xml

Suppose a certain vendor has a complex suite of applications and wishes to use a database. Then you could get:

/etc/AVendor.database

/home/bob/.etc/AVendor/XApp.xml

Vendor?

Vendor is used to be able to group certain applications. Examples of vendors are:

- redhat
- linux (or system)
- mandrake
- gnu
- myapps

A pitfall in choosing a vendor name is that f.i. redhad would put every app of his distribution in /etc/redhat. If someone later on dowloads an app then it would go in /etc/gnu. So i think that the data location should be determined by the app writer and not changed by a certain distribution.

Only proper standardisation and documentation can prevent misinterpretation of the data structure design.

OS dependent data

What to do with os dependent settings. It might be usefull to give guidelines for this. Maybe keep the data separate, use standardised notation and translation.

The user interface

The user interface is a complex topic. Normally i would not say that the userinterface should be a representation of the data structure. In this case i think we should try to let the two resemble as much a possible.

The configuration file datastructure should be a logical one that is easily understood. Not just a bunch of names and values in random order. In fact, these files are a (simple) user interface, otherwise they would be binary.

What has been said about the data structure is also valid for the user interface. It is not important how you implement it, it is important that the way of using it is standardised. So if you see the data files themselve as the simpelest user interface it is logical that all "higher" user interfaces sould have the same structure but are easyer to use.

The API

Ehh... I don't have anything to say about this so I won't.

Comment on "A Solution to the Problem of Configuration in Linux"

I note that you are clearly focussing on a certain app while my focus is more to standardising the data and way of working. This is an important difference. I think a good app to manage the settings is a good thing but then again you may be overtaken left and right by others such as linuxconf etc. I think it is more important right now to get the basis right. The app you have in mind could be serving as a test to see if the data structure is choosen right.

Also you are focussing on the use of text based config files. This is not in conflict with what i write, I even think this is good whenever this solves the problem, but my view goes further. If someone decdes he needs xml or a database then you've lost him. My proposal encourages to keep following the standard and use the same logics whithin those techniques and makes sure everyone can access this data.

The three tier architecure.

I think it is good to keep this topic in mind but having a widely accepted, standardized data structure is the first thing to worry about.

You directory structure is flatter than what i propose. I think my structure has an advantage towards commercial software vendors. I think these should also enbrace our proposals.

Further, you directory structure uses "deamons". I have learned that unix has only files and processes. A deamon is nothing more than a proces running in the background. Many of them can be executed as a normal app. I would try to match closely to the Unix philosophy and not try to determine a border between programs and deamons like windows does. You might get burned if you do.

Configuration locations are not fixed: Arrrrrrrggh.... Of course they should be. The app should be able to read from other locations but there is a standard location that all Linux distrubutions use. If you deviate from that you sould better have a clear reason for it.

Forms, Wizards

No, I don't agree, the Windows registry is a complete mess that has partially been deliberately been made unreadable. This database has been written with comercial motives. I repeat, this is a screwup because of the lack of clearity towards its users. Of course, remarks in files are a big advantage but you can do that in a database too (the forms you mention) so there is no real point in discussing the implementation technique other than complexity and performance.

Wizards

To me the main task of a wizzard is

- To give comment on each option
- To hide advanced options
- To prevent entering unrealistic values
- To prevent conflics

Please evaluate each wizzard on these rules. After using a wizzard you should get a working situation.

Metadata

The data should be based on standards. Be ware of the microsoft effect. Every dummy is going to add metadata to his setup. Look at what they do with the registry, every stupid program that needs 5 lines of data to init has reg entries and needs to reboot.

We have 5 lines of defence against complexity

Rule 1: Keep everyting as simple as possible, but not simpeler. (That quote's not mine)

Rule 2: Clear data structures

Rule 3: Logical configuration

Rule 4: Documentation

Rule 5: Documentation (Also document the setup data)

You have to have a real complex program to need to use metadata. Use it only when this kind of complexity is needed. Many things can be done with straight forward configuration and documentation.

Access Control

Access Control should be clear. The current linux system puts user accessable data in the home dir and system data in /etc. This is straightforward and simple.

Doing access control within one configuration area or even in one file wil cause more complexity so avoid making it fancy. If you need to go away from the linux file access rights then you end up with a database solution with rule based access. This confilcs with "Everybody should be able to use it" There's no such thing with rule based access controll.

The bottom line

Yes, redo the linux config but start at the basis. Standardise the data, then go to the app layer. Keep in mind that the data usually lives longer than an app.

Be ware of inviting complexity. People tend to use what you offer them. I think there should be a clear statement about avoiding unneeded complexity and a few samples of how to configure simple and less simple programs.

Greetings, Hans van Buitenen

[reply] [top]


[»] COAS
by N.M. Holtz - Oct 29th 2002 06:21:55

Caldera made a start at something like this several years ago with COAS (www.coas.org). I think the last time anything was done on this was late 1999. Might be worth looking at, as there are some technical notes (and code) there. Also might be useful to find out why it didn't fly (I suspect it was the competition from linuxconf and webmin as much as anything).

Interested me as Python was to be the source language, which sounds like a good idea.

[reply] [top]


[»] Has anyone looked at NetMAX?
by burple6 - Oct 24th 2002 08:58:09

Hi, I wanted to mention that there is a commercial product that does a pretty good job at most of the things discussed in this article.
The product is called NetMAX and is a web-based administration frontend to a Red Hat-based distro.
Though some of the things on the list are not currently implemented, I am sure it would be a trivial thing to add them if there was an interest.
Anyway, thought I would mention it.

[reply] [top]


[»] Looking forward to this - My 2 cents worth
by Andrew Fowler - Oct 22nd 2002 13:41:35

Anybody still reading this ?? Anyway.

To answer your first question:
Is this something worth striving for? In my opinion, most definitely yes.

A few comments on the spec so far: As is already obvious from some of the feedback, not everybody thinks newbies should be allowed to use Linux. Some appear to suggest the XFree is a complete waste of time .... I'm definatly not one of them.
From my point of view, as a developer, there are some apps which I toy arround with and reconfigure weekly. I know the config files for these inside out. Then there are those apps and daemons which get configured once a year when I feel I need to change something. I definatly need all the help I can get with these. What I mean is: there is no such thing as new user/advanced user. There are just the apps you know, and there are those you don't. Maybe rewording the spec to this effect may help avoid some of the flaming that's been going on (and undoubtedly will carry on). no suggestion at the moment.

As far as features I'd like to see:
- on the GUI end (or for that matter from the command line), built in documentation for all fields.
- on the back end: ability to specify validation info. Ideally this would allow not only simple field validation but also relational validation (a=1 therefore b > 6) !!! That's going to be fun
- ability to export/import subtrees (purpose: to take the config info over to another machine, to be able to play around with certain elements and then restore them to previous state - without afecting any other changes made in the mean time, or even to allow the config section to be posted on a mailing list when asking for help)
- the ability for user to configure their own application preferences (i.e. the dot files which are in the user's home directory) - not sure if this is explicitly included in the draft.

[reply] [top]


[»] API/Library
by Grahame Jordan - Oct 20th 2002 01:33:58

I believe that for this project to succeed a well defined configuration API/Library needs to be created for as many languages as possible. For a start we would target:
C
C++
bash and other shells
perl
php
java
KDE
Gnome
tk
and any other languages we can think of. Then one by one in cooperation with each project bring them over to the config libraries. I admit that this may be asking a lot from some projects to cooperate but I believe most will. Maybe a translation API for to cater for the odd project that does not wish to use the new API.

It may be necessary to have dual formatted conf files in the interim. One that the legacy program reads and one that uses the API with a config parser to write it out as the legacy config file. This is not desirable but until the config library is ported to that particular program it wiull suffice as an interim measure.

Today when writing a program it is required to write an entire parser to read and verify config files. With the library already built it then becomes a few simple calls to it. Required paramers, dependancies, options etc,etc are all handled easily and consistantly with the new libraries.

The exact format of the configuration files is yet to be decided. Some cry XML here and others RDP there. This must be decided first on the merits and carry on from there. Personally it does not matter to me what is used, but that it is agreed upon soon. I would hope that once a discussion specifically for deciding the file format is completed that we can all move to the next stage. (It really does not matter what we use as long as it will do the job). Anyone follow the unixconfig mailing list. That is where it died. Come on if we can agree on this quicker we can progress quicker.

Once the file format is decided a clear and precise definition for types, dependancies, requirements, etc. needs to be formally documented and agreed upon.

OK, now write the Libraries for each of the languages that wish to be supported. The API should be the same for each language (as it can be). Write reference code and examples for each language with good documentation (Now there's another ....), and testing etc.

We then can target certain projects and cooperate in the rewrite of the configuration sections of code to use the standard libraries that we have provided.

Then dependacies between programs, global variables such as (HOSTNAME) can be accessed by all programs. etc, etc.

This can extend to enterprise management systems.

The GUI bit should then be the easy part. But it is important that the GUI parts are developed along the way in several reference languages so that on release date we have a product.

It would be great to have the configuration system define the GUI components and layout without having to write the code to do it. The easier this is the better. The configuration can define the checkboxes, textfields, comboboxes, tables, help, dependancies, requires, ordering tabs, wizards, etc, etc. There should be little need on the GUI end to write a great deal of code. We should also include a cursor driven configuration system or even a purely text based configurator. It is all in the API for each situation.

This project will need the cooperation and support from many areas of the community. It will require acceptance of decisions that are made on merit. There is definately more than one way to do this. More important is that we use a standard. Maybe in the future some will wonder why we did it this way or that but as long as the standard is adhered to there is no big deal in changing it.

It would be great if members of other projects joined this one and shared there wealth of knowledge. This project is necessary for unix to go ahead.

Lets do it!

[reply] [top]


[»] Plugins
by kop - Oct 16th 2002 15:06:55

The definition of what a certain config-file format looks like (referred to in the article as metadata) should (naturally) be stored in separate files for each, so that people could create and distribute these format definitions in a simple way.

I'd say that for a system like this to ever grow popular, it needs to be heavily based on the "plugin view" in general. Creating new plugs/defs should require no awkward object file compilation etc.

On projects like this, BLOAT is alway waiting just around the corner; A good design would enable features such as "History Log" thorough a simple RCS-plugin.

[reply] [top]


[»] Worthy Project, but for whom?
by Spin - Oct 2nd 2002 11:44:36

Configuring anything (computer, car, bookshelf, etc) can be a difficult and time consuming and may require expertise in the applicable field. However, how often do you reconfigure you Linux box? Obviously this answer varies enourmously.

For the home hobbist, it may be hourly and the convience of remote GUI is a godsend. For others, the inconvience of once a week/month/year going and logging on directly to administer a change is a small price to pay for the lack of daily security headaches.

The issues of configuration and ongoing maintenance should already be solved long before a system is implemented into a "production" environment, in most cases it probably boils down to 'change this line in this file here' as the only modification ever done on an ongoing basis, despite the fact that the machine itself may have several hundred customised/standard configuration files.

I'm lucky enough to use Linux for work and play, but my approach to configuring it for work and play is completely different.

[reply] [top]


[»] The Dotfile Generator
by Jacob Sparre Andersen - Oct 2nd 2002 10:19:58

Have you looked at how the Dotfile Generator attempts to solve the same problems?

Have you considered how to handle configuration file formats that are close to complete programming languages?

[reply] [top]


[»] Data
by Robert Trebula - Oct 1st 2002 10:04:23

Though I'm still quite skeptical about a real need for such a system, I'm going to add a few points to the discussion. And maybe once the succcess of the project will beat my skepticism :)

The functional and architectual model (here and on the project website) look good to me. I just miss a data-design.

What will be the structure of data flowing through the system? You only speak about text fields, integers and such non-structured entities. But in real life and in real configuration schemes, the information in configuration files is more structured.

Look at apache for example. The configuration options like DocumentRoot or ErrorLog can be specified for the whole server, for one virtual server, for one directory etc. Parameters in subdirectories are inherited from their parent directories. Some configuretion options are not allowed or have no meaning for directories and can only be specified globally. Values of some configuration options include other configuration options... I guess you see the point.

Another look at the data: I propose the low-level data entity should be a chunk of a diff file to the orignal configuration file. This approach has proved to fit for the need of editing files by various players - the user editing the configuration file directly, your system or maybe even some other configuration system used on the machine. The main pros - consistency (it's harder to damage a file with a diff than by rewriting it from scratch), auditing (when you log a diff-file, then you can easily see who did what and why).

And by precisely defining data-structure, you can precisely define interfaces. A great pro for a modular system like yours.

Luckily, XML is very flexible for use with structured data, so there should be no problem with the implementation.

Hope this brings something for you,

R.

[reply] [top]


    [»] Re: Data
    by Justin Yackoski - Oct 1st 2002 15:51:51

    The actual XML data is organized by nested <section> tags, which accomplishes the necessary grouping. The individual parameter/value pairs are inside one or more levels of <section> tags. Currently, we don't have a parser for apache style config files, but this would be a goal. Even with INI style files (like samba), the same issues rear their head. For example the guest ok directive can be used to globally allow guest access to samba shares, and any sections inherit this default value unless it is explicitly over-ridden. From my experience, apache works in the same way (more or less).

    At the very least, we will need to provide a way for the system to be aware of default values, which will be inherited by all sections including the highest or global section. If carefully written, this inheritance could easily be extended & handled as the XML is processed (either to or from the top-level) by the middle layer. It is going to be a tough problem to tackle, but as you mentioned, I think the nature of XML will help make it easier. Properly handling defaults & inheritance will be very important for the project's success since otherwise it won't be very useful for a lot of situations.

    As far as using only diffs of the new and current config files, we can currently completely reconstruct the config file *exactly* (byte for byte identical) as it was from our XML representation of the data. If we can do this, and we checked to make sure the file hadn't been changed by one user as another was editing it by hand, we should be ok. Either way, since we can re-create the exact (or slightly modified) config file, producing a diff of the two wouldn't be difficult either, and may be a good option (among others) for logging. Thanks for your input!

    [reply] [top]


[»] You gotta laugh!
by Ged - Sep 30th 2002 17:02:41

Some people say it is impossible; some say it already exists.

I'll just say this, the article gives the goals:
The system should be easy enough [for] new Linux users.
The system should be flexible and powerful enough [for] advanced users.

I don't think there is any existing solution that meets just those two goals. I don't think meeting them should be impossible (though it will be hard). And I do think doing this would be fantastic for the GNU/Linux community. Best of luck!

Ged

[reply] [top]


[»] GConf
by Nils O. Selåsdal - Sep 30th 2002 10:15:48

Seems like this article describe GConf. Widely used in Gnome, but not gnome dependant.

[reply] [top]


    [»] Re: GConf
    by Justin Yackoski - Sep 30th 2002 23:45:11

    We did look at GConf among other projects, hoping that we could build on some existing code. One of GConf's main flaws is that the method for adding support for a new thing to configure involves writing a lot of C code and various other things, which we felt was too cumbersome.

    We want to make things simpler, and the architecture for GConf and most of the other tools wasn't flexible enough to accomplish what we're looking to do. Unfortunately (depending on how you look at it), it looks like we'll end up writing lots of new code in order to accomplish this. The upside is that since we're putting tons of effort into planning, soliciting comments, and really thinking this through, the initial release should turn out pretty close to what we're going for.

    [reply] [top]


[»] Add support for integrity checkers + script generation
by Fremar - Sep 30th 2002 05:42:35

I certainly hope you will pull it off to devellop such a project.

And even though you have already burried yourself under an enourmous workload I want to add a request: build in some form of support for integrity checkers (e.g. tripwire). One thing which has kept my from using any of the existing tools like linuxconf or webmin is that I always get some tripwire error messages about changed files. Of course, checking the logs will usually give a clue as to why some configuration file has been altered, but clues are not enough where system integrety and security is concerned, I want an exact listing of the files that have been altered.
This might even be implemented in the form of an additional backend which takes the list of modified files and feeds it to the tool that recalculated the checksums and updates the database; all with proper authentication of course.

Now that I think of it, I can add a 2nd request right now: might it be possible to have gui or web frontends generate a list of commands to have the command-line tools re-create the same change? This would be ideal to automate configuration changes for clusters or groups of similar workstations: configure a service like samba on one of them through the gui and have a script to make the same changes on all the other machines. In my optinion this will be more powerful than a centralized configuration solution since the same script can also be applied to new installations (e.g.a post-install script for a kickstart installation).

[reply] [top]


    [»] Re: Add support for integrity checkers + script generation
    by Justin Yackoski - Oct 1st 2002 00:19:32

    Integration with tripwire/aide/etc is certainly not a pressing goal, but it is a great idea. We're planning to have the middle layer log changes in some way(including what files were changed) and there are a lot of good reasons to make optional components available which do other things with config changes (modification detection, copying to multiple boxes, creating a script to get from state A to state B, etc.). To do things like managing users, changing hard drive settings, etc. it may turn out that this type of change to set of commands translation is necessary.

    You have some good ideas, and we will try to make it so that even if we aren't able to implement and stabilize all the requested features, it will be relatively easy for people to add them later since our system will be as modular as possible.

    [reply] [top]


[»] Make it easy for lazy people? Nahhh!
by Guillermo Sobalvarro - Sep 29th 2002 09:40:11

Use FreeBSD as an example and take it from there. This is for people who know the insides of their systems and not for superficial types who just wan't a slam-bang-thank-you-ma'm OS. FreeBSD requires a "relationship", a commitment, and not just a one night stand. This is not for lazy asses. The market wants people who know what they are doing, not people who know how to use a GUI. If you want dancing clips, Einstein and doggies, stick to XP! Guess that's what all the envy is about.

[reply] [top]


    [»] Re: Make it easy for lazy people? Nahhh!
    by Bryan Evege - Sep 29th 2002 22:52:51

    Attitudes like this is what is holding Linux & Unix back from the mainstream desktop. Most people (like me) don't have the time it takes to become a unix/linux guru. It's not about being lazy or dumb it's about getting a job done as quickly and efficiently as possible. This just isn't the case for most things in linux/Unix. I don't want a relationship with my computer. I want it to be easy to manage and work reliably. Preferably in hours and not days or weeks.

    I'm no Microsoft lover but programs like this (and some reasonable documentation) will only help Linux/Unix become more mainstream. For those of us who have better things to do than have relationships with our computers that is. Keep up the good work. And btw, please write some good documentation.

    Unix/Linux Newbie


    > Use FreeBSD as an example and take it
    > from there. This is for people who know
    > the insides of their systems and not for
    > superficial types who just wan't a
    > slam-bang-thank-you-ma'm OS. FreeBSD
    > requires a "relationship", a
    > commitment, and not just a one night
    > stand. This is not for lazy asses.
    > The market wants people who know what
    > they are doing, not people who know how
    > to use a GUI. If you want dancing
    > clips, Einstein and doggies, stick to
    > XP! Guess that's what all the envy is
    > about.

    [reply] [top]


      [»] Re: Make it easy for lazy people? Nahhh!
      by Juha-Mikko Ahonen - Oct 2nd 2002 01:16:31


      > Attitudes like this is what is holding
      > Linux & Unix back from the mainstream
      > desktop. Most people (like me) don't
      > have the time it takes to become a
      > unix/linux guru. It's not about being
      > lazy or dumb it's about getting a job
      > done as quickly and efficiently as
      > possible. This just isn't the case for
      > most things in linux/Unix. I don't want
      > a relationship with my computer. I want
      > it to be easy to manage and work
      > reliably. Preferably in hours and not
      > days or weeks.

      That's not the way to do it. Blaming others from "keeping Linux back" just because you don't want to commit to making an "easier" system possible. If you don't have time for Linux, quit using it. It is not for the weak of heart.

      And why should Linux be put to the mainstream desktop? Home users have difficulties with even Windows. Who will help them when they're trying to modify their Linux installation? Corporate desktop is another matter. Corporations have system administrators who will do the necessary configuration for you.

      But if you fear to throw yourself into a relationship, consider some alternative. Linux needs the commitment -- otherwise how would you manage when you screw up your system. Reinstall? And do all the configuration *again*. You're left to that if you don't know how the system works.

      [reply] [top]


      [»] Re: Make it easy for lazy people? Nahhh!
      by Guillermo Sobalvarro - Oct 12th 2002 10:40:50

      Stick to M$ products if they are not too hard for you. You seem to be an end-user so if these work for you don't delve into anything "hard". That way you won't have any commitment to anything. All you are interested in is getting your work done, right? Slam-bang.. et al. Most Linux and FreeBSD versions are easy to install and will give users something they can work with on a day to day basis from the start. If all you want are tools to get your job done they are there. I just don' see what is hard or difficult about it. Some people never get the hang of using a computer or an office suite. They should stick to pencil & paper and a calculator. Computers are not for everyone.

      [reply] [top]


    [»] Re: Make it easy for lazy people? Nahhh!
    by djnietzsch - Oct 4th 2002 15:00:08

    This is a really bizarre post. The poster seems to suggest that there is something noble about using unnecessarily difficult systems. Things should be exactly as difficult as they need to be and no more. For example, command line programs have a standardized (more or less) way of expressing parameters. You type the name of the command, some options, and some arguments. It's basically the same format for every program. And if you haven't memorized every option, you can just bring up a manpage that describes all of the options and details (again in a way that is fairly uniform from program to program). Some people would say this is not easy, and sometimes they're right. Some things get pretty cryptic. But it is straightforward. There's not much guesswork about format or what to expect in general. Configuration files seem to be a different matter. There are as many formats as services and there aren't a lot of universally applicable principles. This means that if you want to do some nontrivial configuration of something you've never configured before, you need to learn the format and syntax of the configuration files in question without much of a starting place. If there were a universal format/system for creating and editing these files you wouldn't have to start from scratch and things would be straightforward. That doesn't make them easy. Some matters of configuration will still require some care, subtlety, and knowledge. I would propose that one should only have to know what program does to use (use in a broad sense that includes configuration and whatever else might go into the program) it. Knowledge of how to use it should follow easily from universal principles that apply to all programs within the domain we're considering. Your relationship with your computer (yikes) should be a good one. To carry the analogy a step further, your computer should not be emotionally needy or enigmatic. It should be straightforward to deal with. You should not feel like you are a good person for putting up with it.

    [reply] [top]


    [»] Re: Make it easy for lazy people? Nahhh!
    by Kurt Olsen - Nov 5th 2002 19:51:04


    > Use FreeBSD as an example and take it
    > from there. This is for people who know
    > the insides of their systems and not for
    > superficial types who just wan't a
    > slam-bang-thank-you-ma'm OS. FreeBSD
    > requires a "relationship", a
    > commitment, and not just a one night
    > stand. This is not for lazy asses.
    > The market wants people who know what
    > they are doing, not people who know how
    > to use a GUI. If you want dancing
    > clips, Einstein and doggies, stick to
    > XP! Guess that's what all the envy is
    > about.

    I have to disagree, an operating system is a simple thing spawning a million options. As a longtime developer I must say that anything that makes the OS easy to install and configure is the way to go because the majority of folks want to run applications.

    [reply] [top]


    [»] Re: Make it easy for lazy people? Nahhh!
    by AstroMan - Nov 22nd 2002 19:42:20


    > Use FreeBSD as an example and take it
    > from there. This is for people who know
    > the insides of their systems and not for
    > superficial types who just wan't a
    > slam-bang-thank-you-ma'm OS. FreeBSD
    > requires a "relationship", a
    > commitment, and not just a one night
    > stand. This is not for lazy asses.
    > The market wants people who know what
    > they are doing, not people who know how
    > to use a GUI. If you want dancing
    > clips, Einstein and doggies, stick to
    > XP! Guess that's what all the envy is
    > about.

    This is just the wrong attitude. I am a developer and
    most of my day is spent working or thinking about
    computers. However, most of the world does not
    revolve around computers. We are the
    minority and they are the majority. A PC is meant to be
    a tool. And tools are meant to perform certain tasks.
    Let's look at an example of a mechanic. If a mechanic
    had two tools on his table and one was great but
    needed to have 32 switches turned on while pulling 5
    levers while the other tool was ready to go, which tool
    would he choose? Even if the one that was ready to go
    was less powerful and broke half the time, it still allows
    the mechanic to get his job done faster. This is what
    people want! Linux has come very far. I want to see it
    go all the way. There is no reason that Linux cannot
    take the desktop market with some more work.

    The Linux community needs to go for the ease of use
    features now. Until that happens, the average Joe Blow
    will be happy to use the closed source propriety garbage
    feed to them. Why, because it allows them to do what
    they want without needing to become a geek like you or
    me. Since Linux has come so far in such a short time, I
    think it is now time to finish it.

    Let Linux reign.

    [reply] [top]


[»] Webmin
by HandyCannon - Sep 28th 2002 19:22:52

http://www.webmin.com

Er, what's wrong with webmin? It's gui in the sense
it works in a browser, which also makes the front
end cross platform. It isn't just tied to Linux either,
and works across all Linux distros afaik.

Why re-invent the wheel....

[reply] [top]


    [»] Re: Webmin
    by Justin Yackoski - Sep 29th 2002 22:19:28

    There are some tools that are good at a lot of things. Webmin is one of them. Webmin has some flaws which detract from its usefulness to some extent. First, it is only web-based, which although that is probably the best interface to pick if you're going to focus on a single one, picking only one can also be bad.

    Second, webmin requires a module be written for each new software, and that this module be added by the user. Our system will (ideally) handle this automatically as version-appropriate files will be included with each software package.

    Third, webmin doesn't make it terribly easy to allow people to write new modules. There are some things built in, but not nearly enough. There's little reason why someone should have to write more than a basic text file to explain how a piece of software (or part of the system) is configured. We want our system to be easy and straightforward to use for everyone involved, without keeping people too far from the details. For example, we may want to display someplace in most of our interfaces a note explaining what actual config file the user is editing should they want to edit it by hand.

    Our system is specific to the task of configuration, but it will be general enough so that it won't need to be re-written to add support for new things. The process will be very simple, and may even be mostly automatic.

    [reply] [top]


      [»] Re: Webmin
      by Martijn - Oct 29th 2002 07:14:02


      > There are some tools that are good at a
      > lot of things. Webmin is one of them.
      > Webmin has some flaws which detract from
      > its usefulness to some extent. First,
      > it is only web-based, which although
      > that is probably the best interface to
      > pick if you're going to focus on a
      > single one, picking only one can also be
      > bad.
      >
      > Second, webmin requires a module be
      > written for each new software, and that
      > this module be added by the user. Our
      > system will (ideally) handle this
      > automatically as version-appropriate
      > files will be included with each
      > software package.
      >
      > Third, webmin doesn't make it terribly
      > easy to allow people to write new
      > modules. There are some things built
      > in, but not nearly enough. There's
      > little reason why someone should have to
      > write more than a basic text file to
      > explain how a piece of software (or part
      > of the system) is configured. We want
      > our system to be easy and
      > straightforward to use for everyone
      > involved, without keeping people too far
      > from the details. For example, we may
      > want to display someplace in most of our
      > interfaces a note explaining what actual
      > config file the user is editing should
      > they want to edit it by hand.
      >
      > Our system is specific to the task of
      > configuration, but it will be general
      > enough so that it won't need to be
      > re-written to add support for new
      > things. The process will be very
      > simple, and may even be mostly
      > automatic.

      Hi,

      I agree with what you say, mostly, but what I don't think there is anything within the webmin architecture that precludes you from implementing the stuff you miss.

      As I understand it, the webmin engine does most of what you need, and it would make a lot of sense for your considerable talents to be joined with the webmin krewe, rather then starting (yet another) configuration project.

      Another thing I missed is how this system can be used to manage large, distributed networks, and what facilities there are to make this work.

      [reply] [top]


[»] Sounds good
by Ritchie Young - Sep 28th 2002 18:17:06

Would you make the storage of the settings pluggable? Would you consider using LDAP as your store?

PCs and servers set up within a large (or small) organisation may be best served by keeping the configuration in an LDAP enabled directory (eg OpenLDAP). It's a standards based replicable directory. The administrator doesn't have to go to a machine or even connect to a machine to configure it.

It may also make sense to incorporate the possiblity of configuring other devices. Eg Unix servers, Windows servers and workstations, printers, etc) from the same console/store.

[reply] [top]


    [»] Re: Sounds good
    by Justin Yackoski - Sep 29th 2002 21:53:30

    LDAP should not be the actual store for the data. The config data will remain in its native format to allow hand-editing, backward compatibility, etc. We did think about using LDAP as one of the interfaces, which could work well since it is designed to be able to edit such data. The LDAP server would merely read auto-generated XML made by our system and pretend to be actually doing things, when in reality it is just sending the modified XML back to our system. LDAP would be a good choice to offer, although due to the additional requirements (an LDAP server and knowledge of LDAP), it is currently not one of the primary interfaces and so will be developed later (or if you want to help, go for it!)

    [reply] [top]


[»] Toybox
by Ariejan de Vroom - Sep 28th 2002 17:30:25

That's why, in my opinion, Linux is just a toy-O/S. Everyone builds his own Linux, and doesn't pay any attention to compatibility with other distributions, or any other standard there is.

I'm a fanatic FreeBSD user, and the best thing about FreeBSD is its purity. No code bloat, just a very fast and stable kernel, and everything is in places where it's logical to store them.

Maybe it's too late for Linux distro's to come clean, and produce some sane standards? I'll just keep to FreeBSD.

[reply] [top]


[»] Don't save state!!
by dentar - Sep 28th 2002 16:13:44

The problem with Linuxconf style configurators is that the configuration program attempts to "save state" elsewhere other than the configuration files themselves. This causes problems in a multi-administrator environment or in an instance where the admin wants to edit the file by hand. Next time the admin wants to go into Linuxconf (for example) to fix something not related, the Linuxconf program tries to sync up everything, thus throwing off what the administrator did with the file by hand.

[reply] [top]


    [»] Re: Don't save state!!
    by Justin Yackoski - Sep 29th 2002 22:11:30

    I should point out that Linuxconf says on its website (sorry, I can't find where at the moment) that for some time (a few years I believe) it hasn't done that. Pretty much everyone agrees that this is a bad idea. All of the XML files used by our system are automatically generated as needed and the native config files are always treated as the authoritative copy.

    Last I knew linuxconf did try to restart various services pretty much every time I used it for un-related things. I think that is a pain, and we'll be sure to avoid that except when necessary. For example, if someone changes a samba config directive, our system may restart samba automatically, remind the user to restart it, ask the user whether or not to restart it, or just shut up and assume the user knows that (this could depend on the user's preferences).

    [reply] [top]


[»] Config file as File System
by DataMoist - Sep 28th 2002 15:11:00

Turning configuration files into a whole filesystem could be an end in itself. Consider:

- Hans Reiser wants to make the filesystem intelligent so the an XML document could look like a directy of files. He will put the XML-to-directory-and-back translation into the filesystem. No code for you to write. (Poor Hans, doing our work. ;)

- Logging and archiving configurations would be a job for tar (or CVS). No new code to write. (ok, maybe a cron job and a nice 'restore configureation' GUI that calls untar.)

- Access control (ACLs) already exist, and will eventually become standard (just like journaling file systems have). Neither the application nor the C4G program will need any special permissions-checking code -- the filesystem will do it. GUIs may be needed to help the user delegate tasks, but the hardend sysadmin will just use chmod or chacl.

- Task automation (such as "delete the /tmp share from samba") don't need parse code anymore. These tasks can now be done with simple shell scripts.

- Remote administration would be a simple network mount. No new protocols, no new code. Accessing and changing data when the computer is down is alreay supported by file systems like coda and intermezzo. Until those become more robust and standardized, a file-sync program like unison can be used. (The advantage over normal config files: fine-grained sync reduces the conflicts).

--
-- DataMoist -- The revolution will be packetized

[reply] [top]


    [»] Re: Config file as File System
    by Justin Yackoski - Sep 29th 2002 22:01:59