The IPP "config system" is a few adhoc scripts that have evolved over time out of necessity. The basics theory of the system is that there are lots of configuration files that are "common" between various different "groups" of nodes. Where a "group" may be a complete subset or superset of another group. For example, there are some configuration that are global to all IPP nodes, some that are site specific (Manoa, MHPCC, etc.), and yet others that are restricted to a smaller group of machines, like the database nodes at MHPCC.

The current tree heiracry looks like this (defined in .mountunionrc).

- common
    - manoa
        - common
            - nodes
    - mops
        - common
            - nodes
    - mhpcc
        - common
            - common-db
                - nodes-db
            - nodes

As an example of ipp022, everything in the directory common{/etc} is part of union of common{/etc} & manoa/common{/etc} & manoa/nodes/ipp022{/etc} directories. This gets mounted as a unionfs mount under the directory union/ipp022. If a duplicate file exists in any of the directories "lower" down in the union order, the lowest version will overide the parrent. For example; the file maona/nodes/ipp022/etc/hosts will override the file common/etc/hosts in the composite union mount.

The basic commands are:

  • mountunion : mount all possible unions under the dir union
  • mountunion -u : unmount all unions
  • push <bsd glob> : push the configs out to these hosts, for example ./push ippdb??
  • addmountchain : UNFINISHED - updates .mountunionrc file but the structure pushed into this file currently lives inline in the code -- edit the code and run the util to update the .rc file

There is also a Makefile with a number of useful targets in it, such as:

  • ssh_known_hosts : collect the ssh keys from all known hosts (defined in ssh_key_hosts.txt) and dup the results into the common dir
  • wave1 / wave2 / wave 3 : groups of hosts at MHPCC to push too
  • mhpcc : calls wave1, wave2, wave3

New hosts can be added to the system with the fetch.* scripts which need to be updated for each major grouping of machines as the host specific files are kept in different dirs for each site.

An example of editing the common /etc/mysql/my.cnf for the ippdbXX machines at MHPCC.

Setup ssh-agent,

Load your ssh "root" keys:

jhoblitt@rma ~/.ssh $ ssh-add id_dsa_root_poi
Enter passphrase for id_dsa_root_poi: 
Identity added: id_dsa_root_poi (id_dsa_root_poi)

Login to po35.

jhoblitt@rma ~ $ ssh -A root@po35
Last login: Tue Aug 11 11:11:21 2009 from
po35 ~ #

cd to the config system root dir.

po35 ~ # cd config
po35 config #

Edit the /etc/mysql/my.cnf common to all db nodes:

po35 config # vi mhpcc/common-db/etc/mysql/my.cnf

po35 config # ./mountunion
po35 config # ./push ippdb0[12]
po35 config # ./mountunion -u