netinstall script is one way of downloading, compiling and installing
edelib as well as their prerequisites (
FLTK); some readers will find
it very similar to the Gentoo
ebuild system or
Jhbuild. It was created to automate
the downloading and compiling procedure with a single command, making it
a suitable procedure especially for novice users.
netinstall version requires the following packages to be installed on your system:
Python 3.x versions are not supported, yet.
If there is an
edelib release that requires patching,
will require the patch tool; however if this is the case it will be reported in console before installation begins.
netinstall versions can always be found at http://equinox-project.org/netinstall.
Since netinstall strives to be as simple to use as possible, the same applies for installation: you simply download the script and execute it.
wget http://equinox-project.org/netinstall python netinstall
netinstall will install all content using the /usr/local
prefix, but you can override this path with the –prefix option, as described below.
When you start netinstall for the first time, it will complain about yourself not being superuser (you don't run your default desktop session as root, right?). This is because netinstall needs to compile and install EDE prerequisites first, putting them in their default installation directories.
Never download netinstall (or similar scripts that advertise themself as EDE netinstall-like installers) from any other location than given in above Download section! In case you are not sure even about EDE's netinstall script, feel free to look at the source code or contact developer in case you are not familiar with python language.
After you start it as root and netinstall successfully checked the
prerequisites, it will connect to
EDE's server and download the build
metadata (see Details). This is the description from
where to download the needed packages and how to compile and install them.
netinstall is not a build system (unlike e.g.
rather a build script, it doesn't know what exactly each package requires. For example,
will fail to compile if FLTK or DBus are not found and
netinstall will not be able
to detect this without complicating the whole matter.
Netinstall relies on build scripts for each package it compiles,
and if one of them fails,
netinstall will quit reporting a shell
error. This is a very flexible approach, allowing a package to use its own
methods to detect the proper prerequisites (e.g. autoconf); also the same methods
are used when that package is manually compiled.
These are the options you get when running the script with the –help parameter:
Usage: netinstall [OPTIONS] Download, compile and install EDE with a single command Options: --help this help --version show script version --prefix [PATH] set where all modules will be installed (e.g. /usr or /opt; default is /usr/local) --module-info [NAME] display information about [NAME] module --show-modules list modules that will be compiled --build-dir [NAME] directory where modules will be downloaded and compiled (default is 'build') --config [NAME] use [NAME] as main config file (default is 'netinstall.cfg') --config-local [NAME] use local config (only for debugging) --no-root-check do not check if script was started as root (only for debugging) --list-configs lists known config files with their description Report bugs at <http://bugs.equinox-project.org>
Most of the parameters (with their descriptions) are self-explainatory. Default usage is without any parameters at all, so:
will do the main job. In case you would like to see what will be built, executing:
will show the order of the packages to be build. The output may look like this:
efltk (efltk-2.0.7.tar.gz) ede (ede-1.2.tar.gz)
The first intem in each line is the module name, followed by the name of the package that will be downloaded. If you would like to see some more information about specific module (e.g. ede here), typing:
./netinstall --module-info ede
will show details like package name, package checksum and compile commands.
Described here are the details and given examples of the script's advanced usage.
Netinstall introduces two concepts:
Configs are nothing but configuration files where the build metadata are stored. I know how the term metadata my be a little bit confusing, but this metadata is nothing more than a description for
netinstall from where to download packages, in which order to build them and how to do it.
Here is what the file can look like:
[General] requires = 1.0 patches = http://equinox-project.org/patches mirrors = http://heanet.dl.sourceforge.net/sourceforge/ede http://superb-east.dl.sourceforge.net/sourceforge http://mesh.dl.sourceforge.net/sourceforge/ede modules = efltk, ede [ede] package = "ede-1.2.tar.gz checksum = "7bffdd825c6a32f3c99e081f2e3a4c73" [efltk] package = "efltk-2.0.7.tar.gz" checksum = "f0300fd2fec47d4b05823297032ddb9f" configure_flags = " --disable-unixODBC --disable-mysql"
This example is simply netinstall.cfg, the default file the
netinstall script will use to build EDE 1.2. Some keys are mandatory and some not; this should not worry you since developers will alter and modify these files when new
EDE version (or
EDE package) is released.
One of the greatest benefits of this rewritten
netinstall version is the ability to build
EDE in different ways (or different
EDE versions) with one command and few parameters. This is achieved by using different config files.
For example, if you would like to compile and install
EDE 2.0 alpha, you would use this command:
./netinstall --config ede-2.0a.cfg
In this case,
netinstall will go on downloading ede-2.0a.cfg, read it and compile as given there.
These configs are always stored at http://www.equinox-project.org/netinstall-configs where you can manually view each of them. This is the location from where
netinstall will fetch all config files when the –config parameter was given.
On other hand, if you would like to see which configs are available, just using:
will list them all, with the given description.
netinstall is dumb and simple, this config files listing is nothing more than downloading the netinstall-config-list.txt file and displaying it in terminal. You would see the same if you visit http://www.equinox-project.org/netinstall-configs.
As you could already tell from the config samples, a module is the description for package building with some name (or package building metadata). The include enough information for
netinstall like from where to download the package (by default it will use the mirrors value from the General section), check if the package is valid (by checking MD5 sum) and how to run the configure, compile and install commands.
Netinstall provides rudimentary checking for some tools, and e.g. giving skip_if_found = jam will, skip building this module if the jam executable was found on the system.
Netinstall can also patch the source if needed. It will use the patch command with the -p0 parameter. Using patch like this requires
netinstall to use specially prepared patches, but it also makes the script much simpler and smaller.
If some module includes the patch key with a value,
netinstall will use the value of patches in the General section as the URL and try to download the patch from there. For example if given:
[General] patches = http://equinox-project.org/patches mirrors = http://heanet.dl.sourceforge.net/sourceforge/ede http://superb-east.dl.sourceforge.net/sourceforge http://mesh.dl.sourceforge.net/sourceforge/ede modules = efltk [efltk] package = "efltk-2.0.7.tar.gz" patch = gcc432.patch checksum = "f0300fd2fec47d4b05823297032ddb9f" configure_flags = " --disable-unixODBC --disable-mysql"
netinstall will try to download gcc432.patch from 'http://equinox-project.org/patches' and apply it on the extracted
efltk source directory. From here, the whole patching logic is on the patch command, meaning if patch fails, nothing will be changed, but
netinstall will continue with compiling, probably resulting in a failed build. You need not worry about this; patch is smart enough and if patches are prepared as prescribed, everything will be ok.
netinstall uses patch with the -p0 option (see manual for detailed description), patches must be created diffing the whole tree. For example, if a bug was found in ede-calc (ede-calc main function is in Main.cpp) and ede source tree looks like this:
ede/ ede-calc/ Jamfile Main.cpp ...
you must create similar, fixed structure, like this:
ede.fixed/ ede-calc/ Main.cpp
There is no need to copy whole tree; it will be enough to just create the same depth where the file needed to patch existed before. Then, using diff like:
diff -uNr ede/ede-calc/Main.cpp ede.fixed/ede-calc/Main.cpp > ede-calc-2.0alpha.patch
will yield a correct patch.
This probably isn't very intuitive and seems more suitable for creating patches against multiple changes in the tree, but it is a unified way how
netinstall will patch the source; patches against one program or multiple ones will be applied successfully without much of tinkering.
Anthing smarter than that will make
netinstall more complex and defeat it's goal of providing a simple and fast way for the installation of