Hope my first post doesn't create too much of a stir.. My goal is to
share ideas between a small project I've been building on the side and
the goals of the Belenix developers. I think there's possibly overlap
between a common problem with the state of the building of software and
binary package distribution..
To start.. I think after talking with Moinakg on #belenix irc he has
some good points about using the smart package manager and upon
exploring the idea it seems to make technical sense as well. I'll
highlight a few additional points below which are commonly overlooked.
Building software in a reliable, reproducible way is just as important
as dependency resolution, being able to reliably acquire source and
patch them in a least hassle way can save a lot of time, increase
automation, the quality assurance process and testing.
(High level overview of problem)
Currently most of the BSD and similar world seems to rather inelegantly
solve this by putting everything in a WOS. You can see examples of this
by looking at the size of cvsdude, onnv gate, and most of the BSD
communities afaik. The argument for this is very clear and sound, but
the technology used to solve this problem is rather old. Portage which
inherited parts of the ports system extended the idea into distributing
smaller script like files which can reliable build the software and has
a bulit-in mirroring system. While solving the problem of acquiring
sources, patching, and maintaining a package it also introduced
regressions in the QA process either by increased flexibility or lack of
policy as a result. Part of my goal is a 3rd evolution to this process
by reducing the flexibility which is contained in build instructions,
providing a process to work cleanly with upstream and also have the
reliable built-in mirroring system so your nightly build doesn't fail.
Some key considerations [1]
* /Storage management/ includes packing and unpacking packages,
checking their integrity, setting up configuration files.
* /Distribution/ is the network transfer of package files.
* /Dependency management/ orchestrates the previous two tasks in
order to install, remove or upgrade software packages while
maintaining the health of the system.
Some less considered, but still equally valid points to consider...
* Reproducibility of build
* Long term package maintenance
* Integrates with upstream
* Quality of existing tools. (Both CLI and GUI)
* Speed/perceived performance (network and calculating dependencies)
* Build package inheritance (easily creating derived works.. eg
enabling more/less ./configure flags)
* Separation of concern (Between the source and building the source)
* Mirroring capability of binary packages
* Documentation of all interfaces and technical implementations details
* Community agnostic / "friendly"
* Widespread usage and testing
* Policy or flexible update process
* Mirrored source repo
* Reinventing the wheel
I had started a big chart comparing the existing tools between ips,
svr4, apt, zypp, portage, pkgcore, ports, sqlports, and conary, but then
realized it would quickly turn from a technical to religious or
opinionated argument than serve as a tool in deciding.
*Bottom line*
Problem:
The community needs a way to build source reliably and deliver
binary packages.
Proposed solution:
1) Port the smart package manager to solaris
2) Modify pkgcore to build rpm files compatible with the zypp and smart
3) Port http://createrepo.baseurl.org/ so we can host binaries
4) Modify pkgcore to share/update the same installed package
database as smart/zypp
5) Implement other developer friendly features in pkgcore*
6) Implement the equivalent of BE (boot environments) into both
smart and pkgcore
feedback/suggestions/patches/technical details/profanities.. all welcome
:) (Please no religion and non-technical opinion)
Cheers,
./Christopher
[1] http://www.mancoosi.org/edos/manager.html