Shortly after joining a new team at work, I learned that team supports quite a number of machines running Solaris. While talking to the team about how the maintenance is done, the following question came up:
“How do I install packages?”
“You go to the server that keeps packages, you use ssh to copy the package in the directory format to the target machine, then you log into the target machine, and you run pkgadd.”
“No no, that’s not what I was asking. If I need to install a package on our servers, what do I do?”
“You use ssh to copy the package in directory format…”
“No no, not just one package on one server, I meant installing many packages on many servers.”
“You take the directory format package…”
It looked like I had an idea for a project: create a workable package management solution. I ended up completing that project, which resulted in me being involved in the OpenCSW community. The general idea was like this:
- There’s an internal mirror of the OpenCSW package archive.
- An internal staging is implemented: we don’t install directly from the mirrored directory. Instead, copies called ‘unstable’, ‘testing’ and ‘stable’, are made. Servers pull packages from ‘stable’ by default. A chosen subset pulls packages from ‘unstable’ and ‘testing’.
- There is an internal package overlay, containing additional, in-house built packages. A wrapper around bldcat is used to create this repository. The same staging approach is used.
- puppet is used to deploy packages. pkgutil provider is responsible for interacting with pkgutil, which in turn is responsible for interacting with the Solaris pkgadd utility. pkgutil is able to download packages from multiple package repositories.
If you want to know more or talk to project members, visit #opencsw on Freenode.