<chapter id="sec_install">
<title>Installation</title>
+ <para>
+ &appname; is a quite complex piece of software, we thus recommend
+ you to either install al precompiled version or use the LiveCD.
+ If you are running Debian GNU/Linux (or one of its derivatives
+ like Ubuntu), you can install matita typing
+ <programlisting><![CDATA[ aptitude install matita matita-standard-library ]]></programlisting>
+ If you are running MacOSX or Windows, give the LiveCD a try before
+ trying to compile &appname; from its sources.
+ </para>
+
+ <sect1 id="inst_livecd">
+ <title>Using the LiveCD</title>
+
+ <para>
+ In the following, we will assume you have installed
+ <ulink type="http" url="http://www.virtualbox.org">virtualbox</ulink>
+ for your platform and downloaded the .iso image of the LiveCD
+ </para>
+
+ <sect2 id="make_vmachine">
+ <title>Creating the virtual machine</title>
+ <para>
+ Click on the New button, a wizard will popup, you should ask to
+ its questions as follows
+ <orderedlist>
+ <listitem><para>
+ The name should be something like &appname;, but can
+ be any meaningful string.
+ </para></listitem>
+ <listitem><para>
+ The OS type should be Debian
+ </para></listitem>
+ <listitem><para>
+ The base memory size can be 256 mega bytes, but you may
+ want to increase it if you are going to work with huge
+ formalizations.
+ </para></listitem>
+ <listitem><para>
+ The boot hard disk should be no hard disk. It may complain
+ that this choice is not common, but it is right, since you
+ will run a LiveCD you do not need to emulate an hard drive.
+ </para></listitem>
+ </orderedlist>
+ Now that you are done with the creation of the virtual machine,
+ you need to insert the LiveCD in the virtual cd reader unit.
+ </para>
+ <figure><title>The brand new virtual machine</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/vbox1.png" format="PNG" srccredit="Enrico Tassi"/>
+ </imageobject>
+ <textobject><phrase>The breand new virtual machine</phrase></textobject>
+ </mediaobject>
+ </figure>
+ <para>
+ Click on CD/DVD-ROM (that should display something like: Not mouted).
+ Then click on mount CD/DVD drive and select the ISO image
+ option. The combo-box should display no available image, you need to
+ add the ISO image you downloaded from the &appname; website clicking on
+ the button near the combo-box.
+ to start the virtual machine.
+ </para>
+ <figure><title>Mounting an ISO image</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/vbox2.png" format="PNG" srccredit="Enrico Tassi"/>
+ </imageobject>
+ <textobject><phrase>Mounting an ISO image</phrase></textobject>
+ </mediaobject>
+ </figure>
+ <para>
+ In the newely opened window click
+ the Add button
+ </para>
+ <figure><title>Choosing the ISO image</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/vbox3.png" format="PNG" srccredit="Enrico Tassi"/>
+ </imageobject>
+ <textobject><phrase>Choosing the ISO image</phrase></textobject>
+ </mediaobject>
+ </figure>
+ <para>
+ A new windows will pop-up: choose the file you downloaded
+ (usually matita-version.iso) and click open.
+ </para>
+ <figure><title>Choosing the ISO image</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/vbox35.png" format="PNG" srccredit="Enrico Tassi"/>
+ </imageobject>
+ <textobject><phrase>Choosing the ISO image</phrase></textobject>
+ </mediaobject>
+ </figure>
+ <para>
+ Now select the new entry you just added as the CD image
+ you want to insert in the virtual CD drive.
+ You are now ready to start the virtual machine.
+ </para>
+ </sect2>
+ <sect2>
+ <title>Sharing files with the real PC</title>
+ <para>
+ The virtual machine &appname; will run on, has its own file
+ system, that is completely separated from the one of your
+ real PC (thus your files are not available in the
+ emulated environment) and moreover it is a non-presistem
+ file system (thus you data is lost every time yuo
+ turn off the virtual machine).
+ </para>
+ <para>
+ Virtualbox allows you to share a real folder (beloging
+ to your real PC) with the emulated computer. Since this
+ folder is persistent, you are encouraged to put
+ your work there, so that it is not lost when the virtual
+ machine is powered off.
+ </para>
+ <para>
+ The first step to set up a shared folder is to click
+ on the shared folder configuration entry
+ of the virtual machine.
+ </para>
+ <figure><title>Set up a shared folder</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/vbox4.png"
+ format="PNG" srccredit="Enrico Tassi"/>
+ </imageobject>
+ <textobject><phrase>Shared folder</phrase></textobject>
+ </mediaobject>
+ </figure>
+ <para>
+ The you shuld add a shared folder clicking on the
+ plus icon on the right
+ </para>
+ <figure><title>Choosing the folder to share</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/vbox5.png"
+ format="PNG" srccredit="Enrico Tassi"/>
+ </imageobject>
+ <textobject><phrase>Shared folder</phrase></textobject>
+ </mediaobject>
+ </figure>
+ <para>
+ The you have to specify the real PC folder you want to share
+ and name it. A reasonable folder to share is /home on
+ a standard Unix system, while /Users on MaxOSX.
+ The name you give to the share is important, you should
+ remember it.
+ </para>
+ <figure><title>Naming the shared folder</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/vbox6.png"
+ format="PNG" srccredit="Enrico Tassi"/>
+ </imageobject>
+ <textobject><phrase>Shared folder</phrase></textobject>
+ </mediaobject>
+ </figure>
+ <para>
+ Once your virtual machine is up and running, you can
+ mount (that meand have access to) the shared folder
+ by clicking on the Mount VirtualBox share icon, and typing
+ the name of the share.
+ </para>
+ <figure><title>Using it from the virtual machine</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/vbox7.png"
+ format="PNG" srccredit="Enrico Tassi"/>
+ </imageobject>
+ <textobject><phrase>Shared folder at work</phrase></textobject>
+ </mediaobject>
+ </figure>
+ <para>
+ A window will then pop-up, and its content will be the
+ the content of the real PC folder.
+ </para>
+ </sect2>
+
+ </sect1>
+
<sect1 id="inst_from_src">
<title>Installing from sources</title>
- <para>Currently, the only intended way to install &appname; is starting
- from its source code. </para>
+ <para>Install &appname; from the sources is hard, you have been warned!
+ </para>
<sect2 id="get_source_code">
<title>Getting the source code</title>
tools and libraries. They are listed below.
<note>
- <title>Note for Debian users</title>
-
- <para>If you are running a <ulink type="http"
- url="http://www.debian.org">Debian GNU/Linux</ulink> distribution
- you can have APT install all the required tools and libraries by
- adding the following repository to your
- <filename>/etc/apt/sources.list</filename>: <programlisting>
- deb <ulink type="http"
- url="http://people.debian.org/~zack">http://people.debian.org/~zack</ulink> unstable helm
- </programlisting> and installing the
- <application>helm-matita-deps</application> package.</para>
+ <title>Note for Debian (and derivatives) users</title>
+
+ <para>If you are running a
+ <ulink type="http"
+ url="http://www.debian.org">Debian GNU/Linux</ulink>
+ distribution,
+ or any of its derivative like <ulink type="http"
+ url="http://ubuntu.com">Ubuntu</ulink>,
+ you can use APT to install all the required tools and
+ libraries since they are all part of the Debian archive.
+ </para>
+ <para>
+ apt-get install ocaml ocaml-findlib libgdome2-ocaml-dev liblablgtk2-ocaml-dev liblablgtkmathview-ocaml-dev liblablgtksourceview-ocaml-dev libsqlite3-ocaml-dev libocamlnet-ocaml-dev libzip-ocaml-dev libhttp-ocaml-dev ocaml-ulex08 libexpat-ocaml-dev libmysql-ocaml-dev camlp5
+ </para>
+ <para>
+ An official debian package is going to be added to the
+ archive too.
+ </para>
</note>
<para> SQL database and OCaml bindings for its client-side library
</para>
<para> The SQL database itself is not strictly needed to run
- &appname;, but we stronly encourage its use since a lot of
- features are disabled without it. Still, the OCaml bindings of
- the library are needed at compile time.</para>
+ &appname;, but the client libraries are.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term> &Sqlite; </term>
+ <term>
+ <application>
+ <ulink type="http"
+ url="http://ocaml.info/home/ocaml_sources.html">
+ OCaml Sqlite3
+ </ulink> </application>
+ </term>
+ <listitem>
+ <para> Sqlite database and OCaml bindings
+ </para>
</listitem>
</varlistentry>
</sect2>
<sect2 id="database_setup">
- <title>Database setup</title>
+ <title>(optional) &MYSQL; setup</title>
- <para> To fully exploit &appname; indexing and search capabilities you
- will need a working &MYSQL; database. Detalied instructions on how to do
+ <para> To fully exploit &appname; indexing and search capabilities
+ on a huge metadata set you may
+ need a working &MYSQL; database. Detalied instructions on how to do
it can be found in the <ulink type="http"
url="http://dev.mysql.com/doc/">MySQL documentation</ulink>. Here you
can find a quick howto. </para>
<para> Quite a few (optional) arguments may be passed to the
<application>configure</application> command line to change build time
- parameters. They are listed in the table below, together with their
- default values.
+ parameters. They are listed below, together with their
+ default values: </para>
- <table frame="all">
+ <variablelist>
<title> <application>configure</application> command line
arguments</title>
- <tgroup cols="3" align="left" colsep="1" rowsep="1">
- <thead>
- <row>
- <entry align="center">Argument</entry>
- <entry align="center">Default</entry>
- <entry align="center">Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <userinput>--with-runtime-dir=<replaceable>dir</replaceable></userinput>
- </entry>
- <entry> <filename>/usr/local/matita/</filename> </entry>
- <entry> <para> Runtime base directory where all &appname; stuff
- (executables, configuration files, standard
- library, ...) will be installed </para> </entry>
- </row>
- <row>
- <entry>
- <userinput>--with-dbhost=<replaceable>host</replaceable></userinput>
- </entry>
- <entry> localhost </entry>
- <entry> <para>Default SQL server hostname. Will be used while
- building the standard library during the installation and to
- create the default &appname; configuration. May be changed
- later in configuration file.</para></entry>
- </row>
- <row>
- <entry> <userinput>--enable-debug</userinput></entry>
- <entry> disabled </entry>
- <entry> <para> Enable debugging code. Not for the casual user.
- </para> </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </para>
+ <varlistentry>
+ <term>
+ <userinput>--with-runtime-dir=<replaceable>dir</replaceable></userinput>
+ </term>
+ <listitem>
+ <para>
+ (<emphasis>Default:</emphasis>
+ <filename>/usr/local/matita</filename>) Runtime base directory
+ where all &appname; stuff (executables, configuration files,
+ standard library, ...) will be installed
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <userinput>--with-dbhost=<replaceable>host</replaceable></userinput>
+ </term>
+ <listitem>
+ <para>
+ (<emphasis>Default:</emphasis> localhost) Default SQL server
+ hostname. Will be used while building the standard library
+ during the installation and to create the default &appname;
+ configuration. May be changed later in configuration file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <userinput>--enable-debug</userinput>
+ </term>
+ <listitem>
+ <para>
+ (<emphasis>Default:</emphasis> disabled) Enable debugging code.
+ Not for the casual user.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
<para> Then you will manage the build and install process using
<application><ulink type="http"
url="http://www.gnu.org/software/make/">make</ulink></application>
as usual. Below are reported the targets you have to invoke in sequence
- to build and install.
+ to build and install:
+ </para>
<variablelist>
<title><application>make</application> targets</title>
</varlistentry>
</variablelist>
-
- </para>
</sect2>
</sect1>
+
+ <sect1 id="matita.conf.xml">
+ <title>Configuring &appname;</title>
+ <para>
+ The configuration file is divided in four sections. The user and
+ matita ones are self explicative and does not need user
+ intervention. Here we report a sample snippet for these two
+ sections. The remaining db and getter sections will be explained in
+ details later.
+ <programlisting>
+<![CDATA[
+ <section name="user">
+ <key name="home">$(HOME)</key>
+ <key name="name">$(USER)</key>
+ </section>
+ <section name="matita">
+ <key name="basedir">$(user.home)/.matita</key>
+ <key name="rt_base_dir">/usr/share/matita/</key>
+ <key name="owner">$(user.name)</key>
+ </section>
+]]></programlisting>
+ </para>
+ <para>
+ &appname; needs to store/fetch data and metadata. Data is essentially
+ composed of XML files, metadata is a set of tuples for a relational
+ model. Data and metadata can produced by the user or be already
+ available. Both kind of data/metadata can be local and/or remote.
+ </para>
+ <para>
+ The db section tells &appname; where to store and retrieve metadata,
+ while the getter section describes where XML files have to be
+ found. The following picture describes the suggested configuration.
+ Dashed arrows are determined by the configuration file.
+ </para>
+ <figure><title>Configuring the Databases</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/database.png" format="PNG" srccredit="Enrico Tassi"/>
+ </imageobject>
+ <textobject><phrase>How to configure the databases.</phrase></textobject>
+ </mediaobject>
+ </figure>
+ <para>The getter</para>
+ <para>
+ Consider the following snippet and the URI
+ <userinput>cic:/matita/foo/bar.con</userinput>. If &appname;
+ is asked to read that object it will resolve the object trough
+ the getter. Since the first two entries are equally specific
+ (longest match rule applies) first the path
+ <userinput>file://$(matita.rt_base_dir)/xml/standard-library/foo/bar.con</userinput>
+ and then <userinput>file://$(user.home)/.matita/xml/matita/foo/bar.con</userinput>
+ are inspected.
+ <programlisting>
+<![CDATA[
+ <section name="getter">
+ <key name="cache_dir">$(user.home)/.matita/getter/cache</key>
+ <key name="prefix">
+ cic:/matita/
+ file://$(matita.rt_base_dir)/xml/standard-library/
+ ro
+ </key>
+ <key name="prefix">
+ cic:/matita/
+ file://$(user.home)/.matita/xml/matita/
+ </key>
+ <key name="prefix">
+ cic:/Coq/
+ http://mowgli.cs.unibo.it/xml/
+ legacy
+ </key>
+ </section>
+]]>
+ </programlisting>
+ if the same URI has to be written, the former prefix is skipped
+ since it is marked as readonly (<userinput>ro</userinput>).
+ Objects resolved using the third prefix are readonly too, and are
+ retrieved using the network. There is no limit to the number of
+ prefixes the user can define. The distinction between prefixes marked
+ as readonly and legacy is that, legacy ones are really read only, while
+ the ones marked with <userinput>ro</userinput> are considered for
+ writing when &appname; is started in system mode (used to publish user
+ developments in the library space).
+ </para>
+ <para>The db</para>
+ <para>
+ The database subsystem has three fron ends: library, user and
+ legacy. The latter is the only optional one. Every query is done on
+ every frontend, making the duplicate free union of the results.
+ The user front end kepps metadata produced by the user, and is thus
+ heavily accessed in read/write mode, while the library and legacy
+ fron ends are read only. Every front end can be connected to
+ backend, the storage actually.
+ Consider the following snippet.
+ <programlisting>
+<![CDATA[
+ <section name="db">
+ <key name="metadata">mysql://mowgli.cs.unibo.it matita helm none legacy</key>
+ <key name="metadata">file://$(matita.rt_base_dir) metadata.db helm helm library</key>
+ <key name="metadata">file://$(matita.basedir) user.db helm helm user</key>
+ </section>
+]]>
+ </programlisting>
+ Here the usr database is a file (thus locally accessed trough the
+ Sqlite library) placed in the user's home directory. The library one is
+ placed in the &appname; runtime directory. The legacy fron end is
+ connected to a remote &MYSQL; based storage. Every metadata key
+ takes a path to the storage, the name of the database, the user name,
+ a password (or <userinput>none</userinput>) and the name of the front
+ end to which it is attached.
+ </para>
+ </sect1>
+
</chapter>