Be simple !
Run on popular Unixes, including FreeBSD, Linux and MacOSX. And in a second time, why not port him to other OSs.
Have a simple and robust dependency system.
Integrates other build systems
Fetch from several methods: main are svn, http, ftp, Mercurial, Git and Bzr
Provide some system which allow us search for packages in alternate locations.
Install each part independently to the others. Follow the http rule (DO NOT SHARE):
Independently is not a synonym of not using another dependency. It s just to say that you can not install in the same /dependencies/foo for 2 different dependencies at the same time. You must install each dependency separatly from the others and then reference in other packages. Be warned that there is not sandbox mecanism for checks and it is not goiong to appear, minitage must be simple.
- A minilay is a directory containing minibuilds.
- The name come from gentoo overlays system. See http://www.gentoo.org/proj/en/overlays/userguide.xml
Minilays are parsed during the dependencies calculation done by minimerge. minimerge searches for minibuilds in all its minilays, in alphabetical order.
That ‘s why when you do that:
minilays/ a_override_dependencies/ minibuild1 dependencies/ minibuild1And try to:
minimerge minibuild1
minimerge will install a_override_dependencies/minibuild1 instead of dependencies/minibuild1.
This mechanism is very useful to override things for special needs !
You can give minilays to minimerge by placing them in:
minitage/minilaysYou can put paths in the MINILAYS environment variable (space separated paths), but be aware, they are read first in the dependencies calculation!:
export MINILAYS="path1 path2"
They are the minitage packages.
A minibuild is similar to a gentoo ebuild (i recommend you to read http://en.wikipedia.org/wiki/Ebuild) or a FreeBSD Port Makefile (http://en.wikipedia.org/wiki/Ports_collection) or a macport.
The forms is a ‘Config.ini’ like file.
- In a short, it is just a metadata file which contains all the necessary to describe the install process of a dependency:
Dependencies for the package ? ( eg: python-2.4 )
Where to get it ? ( the url )
How fetch it ? (svn, git, hg, http, ftp)
How will it be installed ? ( buildout )
Metadatas:
- License
- Project homepage
A minibuild is a config.ini file which is read by minimerge and has a bunch of metadata :
a src_uri variable: where to fetch the package if not present on the file system
a src_type variable: how to fetch it. Available fetch methods are:
- svn
- hg
- bzr
- git
- static (for http, file, local and ftp)
a dependencies variable: list of other minibuilds which this one depends on
a install_method variable : how to install it
Available install methods are:
- buildout (use the buildout maker)
a category variable : controls the category of the minibuilds. [[br]] Categories are top level directories in your minitage directory. [[br]] Possible categories may be:
- dependencies
- eggs
- misc
- django
- tg
- pylons
- zope
You can use of course your own categories but be aware to name them with only letters and digits.
minitage installs a minibuild called MINIBUILDNAME to your minitage/CATEGORY/MINIBUILDNAME.
The steps ran are:
Fetch:
- in online mode only: Try to fetch the src_uri to minitage/CATEGORY/MINIBUILDNAME
- in offline mode: The files must be present !
Run the install method
Exemple : the minibuilds/cyrus-sasl-2.1 minibuild:
[minibuild]
# depends on the freetype-2.1 minibuild
dependencies=freetype-2.1
# must be fetched from svn
src_type=svn
# where it is !
src_uri=https://subversion.makina-corpus.net/zopina/buildouts/buildout-meta/trunk/lib/cyrus-sasl-2.1.22/
# this is a "buildout" minibuild which will install itself via buildout
install_method="buildout"
# will be installed in minitage/dependencies/packagename
category=dependencies
homepage=http://chuknorris.is.a.good/guy
license=GPL
You must place your minibuild in a minilay.
They are rules, not just conventions, follow them or be killed. If you want a full review, just take a look to minitage.core/minitage/core/objects/minibuild.py` regular expressions ;). Please not that your project name cannot contain “-” as it is used to generate eggs names.
Valid names:
- meta-toto
- double-toto
- toto
- test-1.0
- test-test-1.0
- test-1.0.3
- test-1.0_beta444
- test-1.0_py2.4
- test-1.0_py2.5
- test-1.0_beta444_pre20071024
- test-1.0_alpha44
- test-1.0_alpha44_pre20071024
- test-1.0_pre20071024
- test-1.0_branchBRANCHNAME
- test-1.0_branchHEADDIGIT
- test-1.0_tagHEADDIGIT
- test-1.0_r1
- test-1.0_rHEAD
- test-1.0_rTIP
Please set the version to MAJOR:MINOR without the revision for compiled dependencies ! This will prevent from recompiling everything on security updates for example
Multiple maker specific metadata
It will run a buildout somewhere
Specific options:
- buildout_config:
configuration file to run
etc/
minimerge.cfg
bin/
minimerge
python
lib/
python-ver/
site-packages/
minitage.core
dependencies/
dep1/
buildout.cfg
hooks/
patches/::
parts/
part/
bin/
lib/
include/
eggs/
cache/
projectn/
buildout.cfg
hooks/
patches/
parts/
site-packages-2.4
site-packages-2.5
django/
project1/
...
projectn/
zope/
project1/
...
projectn/
anotherCategory/
anotherProject/
minilays/
eggs/
dependencies/
instances/
meta/
samples/
anExternalMinilay/
Libraries and applications like libpng, python-2.4 or readline.
One dependency per directory.
The installation prefix for each dependency is:
dependencies/dependency-name/parts/part
They is two possibilities there:
In a particular eggs/directory:
Traditional distutilized python modules
Python modules shipped is a non pythonish way (like libxml2)
They must install a sub site-packages for each python version supported:
eggs/egg/ site-packages-2.4/ module/__init__.py site-packages-2.5/ module/__init__.py site-packages-2.6/ module/__init__.py site-packages-3.0/ module/__init__.py
eggs in release mode:
eggs/cache
Those are MINILAYS. Minilays are similar to gentoo ‘s OVERLAYS. Or, be reference, to entries in your source.list on Debian/Ubuntu. They contains minibuilds. Those are the packages that our package manager deals with. You can add search Directories which are not in minilays/ by setting the “MINILAYS” environment variable. ex:
export MINILAYS="~/otherminibuildsdirectory"