diff --git a/docs/cconfig/cconfig.pdf b/docs/cconfig/cconfig.pdf new file mode 100644 index 00000000..a087a0be Binary files /dev/null and b/docs/cconfig/cconfig.pdf differ diff --git a/docs/cconfig/cconfig.tex b/docs/cconfig/cconfig.tex new file mode 100644 index 00000000..aee9d5d3 --- /dev/null +++ b/docs/cconfig/cconfig.tex @@ -0,0 +1,245 @@ +% ---------------------------------------------------------------------------- +% cconfig +% ---------------------------------------------------------------------------- +\documentclass[11pt,a4paper]{article} +\usepackage[latin1]{inputenc} % Ascii-Format dieses Dokuments +\usepackage{longtable} % lange Tabellen +\usepackage[dvips]{epsfig} +\usepackage{fancyhdr} +\pagestyle{fancy} +\fancyhead[R]{Nico Schottelius} +\fancyhead[L]{cconfig} +\renewcommand{\headrulewidth}{0.4pt} +% ---------------------------------------------------------------------------- +\newcommand{\cemail}{nico-linux-cconfig ((at)) schottelius.org} +% ---------------------------------------------------------------------------- +\begin{document} +\title{cconfig 0.1} +\date{2005-08-28} +\author{Nico Schottelius (\cemail)} +% ---------------------------------------------------------------------------- +% Title +% ---------------------------------------------------------------------------- +\maketitle +\newpage +% ---------------------------------------------------------------------------- +% Inhaltsverzeichnis +% ---------------------------------------------------------------------------- +\tableofcontents +\newpage +% ---------------------------------------------------------------------------- +\section{Introduction} +cconfig is a proposal for configurations on Unix-alike +systems\footnote{In fact it can be used on any system, which +fits the requirements. See \ref{requirements}, \pageref{requirements} for more +information}. This includes, but is not limited to services, packages, +user settings or the system configuration. cconfig main idea is +\begin{itemize} +\item to simplify the layout of configurations +\item to make it easier to configure +\item to allow smooth editing from automatically running programs, +\item thus to avoid parsing where possible, +\item to use the available resources (libraries, functions, ...) +\item and to prevent doubled implementations. +\end{itemize} +% ---------------------------------------------------------------------------- +\section{Layout} +Every cconfig starts below a given directory. This directory +should be named after the process using the configuration +(auth, cinit, mini-lpd, yourutils) and be put under the +appropriate configuration directory (/etc, /usr/packages/yourutil/etc, ...). +A cconfig consists of objects and attributes. +% ---------------------------------------------------------------------------- +\subsection{Objects} +An object is a subdirectory below your configuration directory. +An object can also be a subobject, means a subdirectory of a +directory (this may be continued as deep as you +need\footnote{Have a look at the portability issue, \ref{port-dir}, +page \pageref{port-dir}.}. +% ---------------------------------------------------------------------------- +\subsection{Attributes} +Attributes describe a specific configuration option. +They may exist directly below the configuration directory or below objects. +% ---------------------------------------------------------------------------- +\subsection{Links} +With links you can reuse attributes or objects under a different name +or at a different location\footnote{Have a look at the portability issue, +\ref{port-links}, page \pageref{port-links}.}. +% ---------------------------------------------------------------------------- +\section{Portability} +\label{requirements} +cconfig should in general be portable between Unix-systems, still +there \textit{can} be problems exchanging cconfig data. To prevent +them, take care of the following sections. +% ---------------------------------------------------------------------------- +\subsection{Exchanging} +Transferring a cconfig should be done encapsulated in a tar\cite{tar} archive. +Tar saves the most important information (date, rights, names, ...) +and is available on every Unix-system\footnote{As of the current date +tar seems \textbf{not} to be able to save ACLs (access control lists).}. +If the configuration is very big, consider compressing it with bzip2\cite{bzip2}. +% ---------------------------------------------------------------------------- +\subsection{File names} +The file- and directory names and the content of the files should either be +\begin{itemize} +\item plain ASCII +\item or UTF-8\cite{utf8} +\end{itemize} +Currently there is no specification, that specifies that a filesystem +must support UTF-8, but practically most modern systems do have +UTF-8 support\footnote{Reiserfs, ext2, ext3, xfs should work fine, jfs +is reported to had problems with some characters.}. +% ---------------------------------------------------------------------------- +\subsection{File contents} +The same rules as in "`File names"' apply. +% ---------------------------------------------------------------------------- +\subsection{Using (symbolic) links (absolute and relative)} +\label{port-links} +Hard links are not a problem, because when transferring the data they look +as different files, tar will not see the difference between a totally +different file and a hard link. + +When using symbolic links one has to distinguish between absolute +and relative links. Using a symbolic link can be a problem in general, if +you link outside of the configuration directory. If you link to other +files or directories in the configuration directory you should prefer +relative links. When using absolute links the linked files +may be non-existent, when using relative links to files outside +the files may be unreachable, because the cconfig is extracted +below a different hierarchy position. + +Some operating system implement links differently, you need +to have a tool, which converts standard links (as used on POSIX +systems) to those used on other system and the other way +round\footnote{Those systems are most likely \textbf{not} Unix-alike and +have a general different design with complex and broken registries.}. +% ---------------------------------------------------------------------------- +\subsection{Quantity of objects} +\label{port-dir} +Some filesystems limit the count of directories (how deep directories +may be nested). For normal configurations you'll never reach this +limit\footnote{Please report if you ever reach this limit on a filesystem, +I would be interested in how deep the limit is. Currently one person +reported that after 125 subdirectories the limit is reached in the +operating system with the blue screen.}. +% ---------------------------------------------------------------------------- +\section{Examples} +So far said, let us see some examples after the theoretic part. +% ---------------------------------------------------------------------------- +\subsection{printer daemon (mini-lpd)} +mini-lpd is a small, non-queueing lpd implementation. It uses +\verb=/etc/mini-lpd= as its configuration directory. Every directory +below is the name of a queue: +\begin{verbatim} +[15:09] hydrogenium:~# ls -l /etc/mini-lpd +total 0 +drwx------ 2 root root 6 Aug 28 15:09 lp0 +drwx------ 2 root root 6 Aug 28 15:09 lp1 +\end{verbatim} +Those "`objects"' (directories) contain an attribute "`device"', which +is where the mini-lpd writes the incoming data to: + +\begin{verbatim} +[15:10] hydrogenium:~# ls -l /etc/mini-lpd/lp* +/etc/mini-lpd/lp0: +total 0 +lrwxrwxrwx 1 root root 9 Aug 28 15:10 device -> /dev/null + +/etc/mini-lpd/lp1: +total 0 +lrwxrwxrwx 1 root root 8 Aug 28 15:10 device -> /dev/lp0 +\end{verbatim} + +You could add other attributes like "`filter"' (unsupported currently), which +could be a link to a program filtering the input before mini-lpd +would write it to the device. +% ---------------------------------------------------------------------------- +\subsection{Samba} +Samba\cite{samba} is the well-known Unix SMB server. It exists and +does \textbf{not} use cconfig for its configuration, but this describes +how it could: +"`/etc/samba"' is currently the configuration directory. Instead of +the smb.conf you would have the object "`config"'. Bool +variables\footnote{Those which can either be TRUE or FALSE.} could simply +be represented by "`file exists"' (true) or "`file does not exist"'. +Variables with text could be realised with writing the text into the file: +"`/etc/samba/config/workgroup"' could contain "`cworkgroup"'. +Shares could be objects below "`/etc/samba/shares"': +"`/etc/samba/shares/cdrom"' could contain a file name "`path"' which links +to the real path, a file "`groups"' which would contain a \verb=\n= seperated +list of groups which may access this share. +% ---------------------------------------------------------------------------- +\subsection{init system (cinit)} +Cinit\cite{cinit} is a fast init system, which uses cconfig. +"`/etc/cinit"' is its basic configuration directory. Below that directory +exist the basic configuration: +\begin{verbatim} +wasserstoff# ls -l /etc/cinit +total 8 +drwxr-xr-x 10 root root 4096 Aug 20 20:55 getty +drwxr-xr-x 3 root root 56 Aug 24 22:04 init +drwxr-xr-x 2 root root 1 Aug 20 20:38 local-services +drwxr-xr-x 5 root root 32 Aug 24 22:14 local-tuning +drwxr-xr-x 10 root root 72 Aug 24 06:40 mount +drwxr-xr-x 7 root root 48 Aug 28 13:57 network +drwxr-xr-x 4 root root 16 Aug 20 20:51 remote-services +drwxr-xr-t 2 root root 60 Aug 28 14:00 tmp +\end{verbatim} +"`/etc/cinit/init"' is the first service cinit normally boots, +from there it has dependencies to other services: +\begin{verbatim} +wasserstoff# ls -l /etc/cinit/init/* +lrwxrwxrwx 1 root root 9 Aug 20 20:43 /etc/cinit/init/on -> /bin/echo +-rw-r--r-- 1 root root 22 Aug 20 20:43 /etc/cinit/init/on.params + +/etc/cinit/init/wants: +total 0 +lrwxrwxrwx 1 root root 12 Aug 20 20:43 getty -> ../../getty/ +lrwxrwxrwx 1 root root 21 Aug 20 20:51 local-services -> ../../local-services/ +lrwxrwxrwx 1 root root 19 Aug 20 20:42 local-tuning -> ../../local-tuning/ +lrwxrwxrwx 1 root root 12 Aug 20 20:51 mount -> ../../mount/ +lrwxrwxrwx 1 root root 14 Aug 20 20:51 network -> ../../network/ +lrwxrwxrwx 1 root root 22 Aug 20 20:51 remote-services -> ../../remote-services/ +\end{verbatim} +The "`wants"' describe soft-dependencies, "`on"' specifies what to start +and "`on.params"' are the parameters to pass. +% ---------------------------------------------------------------------------- +\section{Problems} +cconfig is not a standard currently. +No tools exists to convert to other formats like XML. +There is no description language (like DTD or XSLT for XML). +The portability is ensured between most Unices, but Win32 will +most likely be broken as long as nobody writes a "`cconfigtar2win32fs"' +convert tool. +% ---------------------------------------------------------------------------- +\section{Personal statement} +I wrote this because I think configuring things this way is very logic +and helps to intuitively use your system. Furthermore it is really +easy to see what is configured (\verb=find /the/cconfig/dir=). I implemented +variants of cconfig in cinit\cite{cinit} and mini-lpd\cite{mini-lpd}. +Many people I know, who use xml\cite{xml} and have problems, because +the parser is too slow, were very happy when I told them about cconfig. +I hope you can also benefit from it. I would really like to hear some +feedback from you at \cemail. +% ---------------------------------------------------------------------------- +\appendix +\begin{thebibliography}{666} +\bibitem{posix} Posix and SUS;\\ +\verb=http://www.opengroup.org/platform/single_unix_specification/= +\bibitem{cinit} cinit;\\ +\verb=http://linux.schottelius.org/cinit/= +\bibitem{utf8} UTF-8;\\ +\verb=http://www.utf-8.com/=;\\ +\verb=http://www.cl.cam.ac.uk/~mgk25/unicode.html= +\bibitem{mini-lpd} mini-lpd;\\ +\verb=http://linux.schottelius.org/mini-lpd/= +\bibitem{tar} tar;\\ +\verb=http%3A//www.gnu.org/software/tar/tar.html= +\bibitem{bzip2} bzip2;\\ +\verb=http://www.bzip.org/= +\bibitem{samba} Samba;\\ +\verb=http://www.samba.org/= +\bibitem{xml} XML;\\ +\verb=http://www.w3.org/XML/= +\end{thebibliography} +\end{document} diff --git a/docs/cconfig/cconfig/WARNINGS b/docs/cconfig/cconfig/WARNINGS new file mode 100755 index 00000000..2cecb6be --- /dev/null +++ b/docs/cconfig/cconfig/WARNINGS @@ -0,0 +1 @@ +No implementation found for style `fancyhdr' diff --git a/docs/cconfig/cconfig/cconfig.css b/docs/cconfig/cconfig/cconfig.css new file mode 100755 index 00000000..3b8acf62 --- /dev/null +++ b/docs/cconfig/cconfig/cconfig.css @@ -0,0 +1,35 @@ +/* Century Schoolbook font is very similar to Computer Modern Math: cmmi */ +.MATH { font-family: "Century Schoolbook", serif; } +.MATH I { font-family: "Century Schoolbook", serif; font-style: italic } +.BOLDMATH { font-family: "Century Schoolbook", serif; font-weight: bold } + +/* implement both fixed-size and relative sizes */ +SMALL.XTINY { font-size : xx-small } +SMALL.TINY { font-size : x-small } +SMALL.SCRIPTSIZE { font-size : smaller } +SMALL.FOOTNOTESIZE { font-size : small } +SMALL.SMALL { } +BIG.LARGE { } +BIG.XLARGE { font-size : large } +BIG.XXLARGE { font-size : x-large } +BIG.HUGE { font-size : larger } +BIG.XHUGE { font-size : xx-large } + +/* heading styles */ +H1 { } +H2 { } +H3 { } +H4 { } +H5 { } + +/* mathematics styles */ +DIV.displaymath { } /* math displays */ +TD.eqno { } /* equation-number cells */ + + +/* document-specific styles come next */ +DIV.navigation { } +PRE.preform { } +SPAN.textbf { font-weight: bold } +SPAN.arabic { } +SPAN.textit { font-style: italic } diff --git a/docs/cconfig/cconfig/cconfig.html b/docs/cconfig/cconfig/cconfig.html new file mode 100755 index 00000000..24ad30cf --- /dev/null +++ b/docs/cconfig/cconfig/cconfig.html @@ -0,0 +1,114 @@ + + + + +
+. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. ++
. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. ++
. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. ++
. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. ++
. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. ++
. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. ++
. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. ++
. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. +. ++
+When using symbolic links one has to distinguish between absolute +and relative links. Using a symbolic link can be a problem in general, if +you link outside of the configuration directory. If you link to other +files or directories in the configuration directory you should prefer +relative links. When using absolute links the linked files +may be non-existent, when using relative links to files outside +the files may be unreachable, because the cconfig is extracted +below a different hierarchy position. + +
+Some operating system implement links differently, you need
+to have a tool, which converts standard links (as used on POSIX
+systems) to those used on other system and the other way
+round6.
+
/etc/mini-lpd
as its configuration directory. Every directory
+below is the name of a queue:
++[15:09] hydrogenium:~# ls -l /etc/mini-lpd +total 0 +drwx------ 2 root root 6 Aug 28 15:09 lp0 +drwx------ 2 root root 6 Aug 28 15:09 lp1 ++Those "`objects"' (directories) contain an attribute "`device"', which +is where the mini-lpd writes the incoming data to: + +
+
+[15:10] hydrogenium:~# ls -l /etc/mini-lpd/lp* +/etc/mini-lpd/lp0: +total 0 +lrwxrwxrwx 1 root root 9 Aug 28 15:10 device -> /dev/null + +/etc/mini-lpd/lp1: +total 0 +lrwxrwxrwx 1 root root 8 Aug 28 15:10 device -> /dev/lp0 ++ +
+You could add other attributes like "`filter"' (unsupported currently), which
+could be a link to a program filtering the input before mini-lpd
+would write it to the device.
+
\n
seperated
+list of groups which may access this share.
++wasserstoff# ls -l /etc/cinit +total 8 +drwxr-xr-x 10 root root 4096 Aug 20 20:55 getty +drwxr-xr-x 3 root root 56 Aug 24 22:04 init +drwxr-xr-x 2 root root 1 Aug 20 20:38 local-services +drwxr-xr-x 5 root root 32 Aug 24 22:14 local-tuning +drwxr-xr-x 10 root root 72 Aug 24 06:40 mount +drwxr-xr-x 7 root root 48 Aug 28 13:57 network +drwxr-xr-x 4 root root 16 Aug 20 20:51 remote-services +drwxr-xr-t 2 root root 60 Aug 28 14:00 tmp ++"`/etc/cinit/init"' is the first service cinit normally boots, +from there it has dependencies to other services: +
+wasserstoff# ls -l /etc/cinit/init/* +lrwxrwxrwx 1 root root 9 Aug 20 20:43 /etc/cinit/init/on -> /bin/echo +-rw-r--r-- 1 root root 22 Aug 20 20:43 /etc/cinit/init/on.params + +/etc/cinit/init/wants: +total 0 +lrwxrwxrwx 1 root root 12 Aug 20 20:43 getty -> ../../getty/ +lrwxrwxrwx 1 root root 21 Aug 20 20:51 local-services -> ../../local-services/ +lrwxrwxrwx 1 root root 19 Aug 20 20:42 local-tuning -> ../../local-tuning/ +lrwxrwxrwx 1 root root 12 Aug 20 20:51 mount -> ../../mount/ +lrwxrwxrwx 1 root root 14 Aug 20 20:51 network -> ../../network/ +lrwxrwxrwx 1 root root 22 Aug 20 20:51 remote-services -> ../../remote-services/ ++The "`wants"' describe soft-dependencies, "`on"' specifies what to start +and "`on.params"' are the parameters to pass. +
find /the/cconfig/dir
). I implemented
+variants of cconfig in cinit[2] and mini-lpd[4].
+Many people I know, who use xml[8] and have problems, because
+the parser is too slow, were very happy when I told them about cconfig.
+I hope you can also benefit from it. I would really like to hear some
+feedback from you at nico-linux-cconfig ((at)) schottelius.org.
+
+http://www.opengroup.org/platform/single_unix_specification/
+http://linux.schottelius.org/cinit/
+http://www.utf-8.com/
;
+http://www.cl.cam.ac.uk/~mgk25/unicode.html
+http://linux.schottelius.org/mini-lpd/
+http%3A//www.gnu.org/software/tar/tar.html
+http://www.bzip.org/
+http://www.samba.org/
+http://www.w3.org/XML/
++This document was generated using the +LaTeX2HTML translator Version 2002-2-1 (1.71) +
+Copyright © 1993, 1994, 1995, 1996,
+Nikos Drakos,
+Computer Based Learning Unit, University of Leeds.
+
+Copyright © 1997, 1998, 1999,
+Ross Moore,
+Mathematics Department, Macquarie University, Sydney.
+
+The command line arguments were:
+ latex2html -local_icons cconfig.tex
+
+The translation was initiated by Nico on 2005-08-28
+