Welcome to the home of Machine Configuration Manager (MCM)!
MCM manages the content of files and directories. Its tools are simple, fast and transparent. Its declarative language is simple and easy on the eye yet very powerful. One or more of the managed files is normally a script, which when executed lets MCM manage anything.
MCM is as clear and transparent and auditable as can be. The changes that MCM will perform are clear and transparent:
Additionally:
> mcm --help
Usage: mcm [OPTION..] [STARTINGPOINT..] [OPTION..]
Configure the specified files and directories
(both file/directory contents and permissions).
Changes to be made (if any) are displayed before they are enacted.
STARTINGPOINT starting point (default = "Go.<lowercase_hostname>").
FIXTYPE no|prompt|ifnew|yes|promptunlessonlyadditions
-V --version show version and exit
-P PATH --config-path=PATH colon-separated list of directories holding configs (default = ".")
-r DIRECTORY --root=DIRECTORY path to manage (default = "./build")
--error-on-leftover-fragments complain if there are fragments without corresponding files
-f FIXTYPE --fix=FIXTYPE whether to enact the changes (default="prompt")
-d --diff display differences (requires 'diff')
--diff-command=COMMANDLINE command to use when displaying differences (default="diff ORIGPATH -")
--parse-only parse configuration only
-c DIRECTORY --compile-to=DIRECTORY compile to a single MCM file
--stdin read (initial) config from stdin
-h --help show this help and exit
More usage detail can be found in the mcm manpage. See also the manpages for the other mcm tools: mcmtags, mcm2html and commands2html.
MCM can be used in all sorts of places, for all sorts of things. For example:
See the articles for more.
The more important the system, the more important it is that configuration control be used. But more than that, the written configurations need to be really easy to review, to read, to understand and to refactor. MCM has been designed for this.
MCM is written for Debian and friends, though should install and work on most Linux, Windows and OS X systems.
There are several ways to install MCM:
wget http://interfaces.org.uk/apt-key.pub apt-key add apt-key.pub
deb http://apt.interfaces.org.uk/debian jessie main deb-src http://apt.interfaces.org.uk/debian jessie mainor
deb http://apt.interfaces.org.uk/raspbian jessie main deb-src http://apt.interfaces.org.uk/raspbian jessie mainThere are some stretch packages too, so you can swap out "jessie" for "stretch" in the above.
apt-get update apt-get install mcm
> dpkg -L mcm | sort | sed 's/\(buildinfo_\)[a-z0-9]\+/\1/g'
/.
/usr
/usr/bin
/usr/bin/commands2html
/usr/bin/mcm
/usr/bin/mcm2html
/usr/bin/mcmtags
/usr/share
/usr/share/doc
/usr/share/doc/mcm
/usr/share/doc/mcm/buildinfo_.gz
/usr/share/doc/mcm/changelog.Debian.gz
/usr/share/doc/mcm/changelog.gz
/usr/share/doc/mcm/copyright
/usr/share/doc/mcm/mcm.vim.gz
/usr/share/doc/mcm/README.txt
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/commands2html.1.gz
/usr/share/man/man1/mcm.1.gz
/usr/share/man/man1/mcm2html.1.gz
/usr/share/man/man1/mcmtags.1.gz
apt-get build-dep mcm apt-get source --build mcm sudo dpkg -i mcm*.deb
apt-get build-dep mcmor by downloading and installing the Haskell Platform from https://www.haskell.org/downloads
cabal build cabal install
If you use vim, I heartily recommend using mcm.vim (distributed along with MCM) as its syntax highlighting gives instant feedback to prevent simple syntax errors. And it is nice to edit in colour too.
The articles are a good source of commented examples, the MCM texts for which are available for download. The MCM tests that are distributed with the MCM sources are illustrative too (mcmtestfiles.tgz).
Some tools/systems that can be used for similar purposes:
MCM is a creation of Anthony Doggett. Suggestions and encouragement (to mcm@interfaces.org.uk) are most welcome!