====== EDE Netinstall ====== ===== Introduction ===== The ''netinstall'' script is one way of downloading, compiling and installing ''EDE'' and ''edelib'' as well as their prerequisites (''JAM'' and ''FLTK''); some readers will find it very similar to the [[http://gentoo.org | Gentoo]] ''ebuild'' system or [[http://live.gnome.org/Jhbuild | Jhbuild]]. It was created to automate the downloading and compiling procedure with a single command, making it a suitable procedure especially for novice users. ===== Prerequisites ===== Current ''netinstall'' version requires the following packages to be installed on your system: * python >= 2.4, but should work on older versions, too. * patch (optional) :!: Python 3.x versions are not supported, yet. If there is an ''EDE'' or ''edelib'' release that requires patching, ''netinstall'' will require the //patch// tool; however if this is the case it will be reported in console before installation begins. ===== Download ===== Latest ''netinstall'' versions can always be found at http://equinox-project.org/netinstall. ===== Installation ===== 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 By default, ''netinstall'' will install all content using the ///usr/local// prefix, but you can override this path with the //--prefix// option, as described below. ===== Usage ===== 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. \\ :!: **Security alert** :!: 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 | Details]]). This is the description from where to download the needed packages and how to compile and install them. Because ''netinstall'' is not a build system (unlike e.g. ''Gentoo'''s ''ebuilds'') but rather a build script, it doesn't know what exactly each package requires. For example, ''edelib'' 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 Most of the parameters (with their descriptions) are self-explainatory. Default usage is without any parameters at all, so: ./netinstall will do the main job. In case you would like to see what will be built, executing: ./netinstall --show-modules 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. ===== Details ===== Described here are the details and given examples of the script's advanced usage. ''Netinstall'' introduces two concepts: * configs * modules ====== Configs ====== 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: ./netinstall --list-configs will list them all, with the given description. Because ''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. ====== Modules ====== 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. ===== Patching ===== ''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. ===== Correct patches ===== Because ''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 ''EDE''.