mio - Manage Installed Options
NEEDS UPDATING!!!
A small utility for handling what options should be installed on various machines. As we all know, rpm is a great way to package software, yum is a great way to handle interpackage relationships, but for the last finishing touch on the diverse configuration files of a Linux system, mio might be useful.
Mio relies on yum for installing rpms, and only adds handling of files, directories and symlinks.
Installing a Fedora package group
Assuming that you are running FedoraCore-2, and feels a sudden urge to add swedish language support to your machine, you only need to run:
mio --fedora http://download.fedora.redhat.com/pub/fedora/linux/core/2/i386/os/ --install @swedish-support
To find out what package groups are available, you can run:
mio --fedora http://download.fedora.redhat.com/pub/fedora/linux/core/2/i386/os/ --list
Customizing your systems
Just installing package groups is of course not much simpler than running the ordinary GUI's for updating, but suppose that you have a number of machines that should run smartd (Self-Monitoring, Analysis and Reporting Technology) , but your machines have different number of disks. If you use mio, you need to create the following files:
smart.mio | Mio rules for smartd configuration |
<?xml version="1.0" encoding="UTF-8"?> <mio name="smart" files="."> <group name="tools"> <rpm name="kernel-utils"/> </group> <group name="hd_a"> <dependency name="tools"/> <file name="/etc/smartd.conf" source="smartd.conf_a"/> </group> <group name="hd_ab"> <dependency name="tools"/> <file name="/etc/smartd.conf" source="smartd.conf_ab"/> </group> </mio> |
|
smartd.conf_a | smartd configuration for machines with hda disk |
# Send an email if SMART health status check fails /dev/hda -H -m root@localhost.localdomain |
|
smartd.conf_ab | smartd configuration for machines with both hda and hdb disks |
# Send an email if SMART health status check fails /dev/hda -H -m root@localhost.localdomain /dev/hdb -H -m root@localhost.localdomain |
To install smartd for a Fedora-2 system with both hda and hdb disks, you just have to type:
mio --fedora http://download.fedora.redhat.com/pub/fedora/linux/core/2/i386/os/ --mio http://www.control.lth.se/user/andersb/software/mio/smart.mio /smartd/hd_ab
Running this command will make sure that the rpm kernel-utils (which contains smartd on Fedora-2 systems) is installed, and it will will copy the smartd.conf_ab to /etc/smartd.conf.
Managing many machines
The above seems to add a lot of complexity to an obviously simple task, and mio is intended for handling configurations for many machines in a centralized way. So a reasonable scenario would be that your site has a host.mio file that describes the setup for all your machines, and then run mio at regular intervals to keep configuration up to date.
host.mio | Host specific rules |
<?xml version="1.0" encoding="UTF-8"?> <mio name="host" files="."> <group name="single_disk"> <dependency name="/smart/hd_a"/> </group> <group name="dual_disk"> <dependency name="/smart/hd_ab"/> </group> <group name="host1"> <dependency name="dual_disk"/> </group> <group name="host2"> <dependency name="dual_disk"/> </group> <group name="host3"> <dependency name="single_disk"/> </group> </mio> |
Assuming that your host is one of host1 - host3, you can run the following command to update them:
mio --fedora http://download.fedora.redhat.com/pub/fedora/linux/core/2/i386/os/ --mio http://www.control.lth.se/user/andersb/software/mio/smart.mio /host/`hostname`
MIO file elements
mio | Top level entity | |
dirmode | Protection for directories | |
files | Location of configuration files | |
group | File and directory group owner | |
mode | Protection for files | |
name | Root name for groups in this file | |
owner | File and directory owner | |
rpms | Location of RPMs | |
scripts | Location of scripts | |
group* | ||
group | Group entity | |
name | Name of group (will be combined with mio name) | |
description dependency* dir* file* post* pre* rpm* symlink* | ||
description | Textual description of group contents | |
dependency | Things that group depends on | |
name | Full or relative name of dependency | |
exclude* | ||
exclude | Things to exclude from dependency | |
file | File to exclude | |
rpm | RPM to exclude | |
symlink | Symlink to exclude | |
precommand | Pre-command to exclude | |
postcommand | Post-command to exclude | |
prescript | Pre-scriptto exclude | |
postscript | Post-script to exclude | |
rpm | RPM neded by group | |
name | Name of RPM | |
dir | Directory neded by group | |
group | Directory group owner | |
mode | Directory protection | |
name | Directory name | |
owner | Directory owner | |
file | File needed by group | |
group | File group owner | |
mode | File protection | |
name | File name | |
owner | File owner | |
symlink | Symlink needed by group | |
group | Symlink group owner | |
name | Symlink name | |
owner | Symlink owner | |
post | Actions to perform after installing group | |
command | Commands to execute | |
script | Name of script to execute | |
pre | Actions to perform before installing group | |
command | Commands to execute | |
script | Name of script to execute |